JAVASCRIPT   19

aboutdialog

Guest on 6th August 2022 01:11:45 AM

  1. //    Licensed Materials - Property of IBM
  2. //
  3. //    IBM Cognos Products: ps
  4. //
  5. //    (C) Copyright IBM Corp.
  6. //
  7. //    US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
  8. // Copyright (C)  Cognos Incorporated. All rights reserved.
  9. // Cognos and the Cognos logo are trademarks of Cognos Incorporated.
  10.  
  11. function addEvent(obj, evType, fn) {
  12.         if (obj.addEventListener) {
  13.                 obj.addEventListener(evType, fn, false);
  14.                 return true;
  15.         } else if (obj.attachEvent) {
  16.                 var r = obj.attachEvent("on" + evType, fn);
  17.                 return r;
  18.         } else {
  19.                 return false;
  20.         }
  21. }
  22.  
  23. function removeEvent(obj, type, fn) {
  24.         if (obj.removeEventListener) {
  25.                 return obj.removeEventListener(type, fn, false);
  26.         } else if (obj.detachEvent) {
  27.                 return obj.detachEvent('on' + type, fn);
  28.         } else {
  29.                 return false;
  30.         }
  31. }
  32.  
  33. var aboutBox = null;
  34.  
  35.  
  36. function updateAboutBoxTitleAttribute(){
  37.         try{
  38.                 if (aboutBox.currentMessageRequest.readyState == 4)
  39.                 {
  40.                         if (aboutBox.currentMessageRequest.status == 404){
  41.                                 //in this case we failed to load the real message file....lets load the default
  42.                                 aboutBox.messageLoadErrorCount++;
  43.                                 if (aboutBox.messageLoadErrorCount < 2) {
  44.                                         aboutBox.loadMessageFile(aboutBox.JSMessageFileDefault);       
  45.                                 }
  46.                         }
  47.                         if (aboutBox.currentMessageRequest.status >= 200 && aboutBox.currentMessageRequest.status < 300)
  48.                                 {
  49.                                         var messageFile = eval("(" + aboutBox.currentMessageRequest.responseText + ")");
  50.                                         //Set the ALT text for the aboutbox image
  51.                                         var text = messageFile.ABT.IDS_ABT_PRODUCT + "\n" + messageFile.ABT.IDS_ABT_VERSION + "\n" + messageFile.ABT.IDS_ABT_LEGAL;
  52.                                         aboutBox.imageEl.alt = text;
  53.                                         aboutBox.imageEl.title = text;
  54.                                         text = messageFile.ABT.IDS_ABT_OK;
  55.                                         if (typeof messageFile.ABT.IDS_ABT_OK === "undefined"){
  56.                                            //if it can't find the ok string in the passed in message file then lets go with a hard coded ok....
  57.                                            text = "OK";
  58.                                         }
  59.                                         aboutBox.okButtonText = text;
  60.                                 }
  61.                                 aboutBox.completeShow();
  62.                         }
  63.                 }
  64.                 catch (e){aboutBox.completeShow();}
  65. }
  66.  
  67.  
  68. function about_dialog(aboutImage, defaultImage, JSMessageFile, JSMessageFileDefault) {
  69.         this.xmlHttpVersions = [
  70.                                         "Msxml2.XMLHTTP.6.0",
  71.                                         "Msxml2.XMLHTTP.3.0",
  72.                                         "Msxml2.XMLHTTP",
  73.                                         "Microsoft.XMLHTTP"
  74.                                         ];
  75.         this.xmlHttpDefault=this.findXMLHttpActiveXVersion();
  76.         this.mainDiv = null;
  77.         this.aboutImage = aboutImage;
  78.         this.imageHeight = 452;
  79.         this.imageWidth = 652;
  80.         this.lockingFrame = null;
  81.         this.defaultImage = defaultImage;
  82.         this.JSMessageFile = JSMessageFile;
  83.         this.JSMessageFileDefault = JSMessageFileDefault;
  84.         aboutBox = this;
  85.         this.currentMessageRequest = null;
  86.         this.messageLoadErrorCount = 0;
  87.         this.idToFocusOnClose = null;
  88.         this.okButtonText = null;
  89.        
  90. }
  91.  
  92.  
  93. about_dialog.prototype = {
  94.         create: function() {
  95.                 this.errorCount = 0;
  96.                 this.mainDiv = document.createElement("div");
  97.                 this.mainDiv.tabIndex = "-1";
  98.                 this.mainDiv.style.width = this.imageWidth;
  99.                 this.mainDiv.style.position = "absolute";
  100.                 this.lockingFrame = document.createElement("div");
  101.                 this.lockingFrame.style.filter = "alpha(opacity=50)";
  102.                 this.lockingFrame.style.opacity = "0.5";
  103.                 this.lockingFrame.style.MozOpacity = "0.5";
  104.                 this.lockingFrame.style.height = "100%";
  105.                 this.lockingFrame.style.width = "100%";
  106.                 this.lockingFrame.style.position = "absolute";
  107.                 this.lockingFrame.style.left = "0px";
  108.                 this.lockingFrame.style.top = "0px";
  109.                 this.lockingFrame.style.backgroundColor = "rgb(221, 221, 221)";
  110.                 this.lockingFrame.style.zIndex = "100";
  111.                 this.mainDiv.style.zIndex = "200";
  112.                 this.hide();
  113.                 document.body.appendChild(this.mainDiv);
  114.                 document.body.appendChild(this.lockingFrame);  
  115.                 this.imageEl = document.createElement("img");
  116.                 this.imageEl.tabIndex = "0";
  117.                 if (typeof this.defaultImage !== 'undefined'){
  118.                         this.imageEl.style.visibility = "hidden";
  119.                         addEvent(this.imageEl, "error", this.loadDefaultImage);
  120.                         addEvent(this.imageEl, "load", this.loadImageLoadComplete);
  121.                 }
  122.                 this.imageEl.src = this.aboutImage;
  123.                 this.mainDiv.appendChild(this.imageEl);
  124.                 addEvent(this.mainDiv, "click", this.aboutClicked);
  125.         },
  126.         loadMessageFile: function(messageFile){
  127.                 aboutBox.currentMessageRequest = aboutBox.getXMLHttpRequest();
  128.                 aboutBox.currentMessageRequest.open("GET",messageFile,true);
  129.                 aboutBox.currentMessageRequest.onreadystatechange = updateAboutBoxTitleAttribute;
  130.                 aboutBox.currentMessageRequest.send(null);
  131.         },
  132.  
  133.  
  134.         loadImageLoadComplete: function(){
  135.                 aboutBox.loadMessageFile(aboutBox.JSMessageFile);
  136.                 aboutBox.imageEl.style.visibility = "visible";
  137.         },
  138.  
  139.         loadDefaultImage: function(){
  140.                 aboutBox.errorCount++;
  141.                 if (aboutBox.errorCount < 2){
  142.                         aboutBox.imageEl.src = aboutBox.defaultImage;
  143.                 }
  144.         },
  145.     createOKButton: function() {
  146.                 var aboutDivEl = document.createElement("div");
  147.                 aboutDivEl.style.border = "1px solid #999999";
  148.                 aboutDivEl.style.fontSize = "90%";
  149.         aboutDivEl.style.fontWeight = "normal";
  150.                 aboutDivEl.style.padding = "2px 10px 3px";
  151.                 aboutDivEl.style.position = "absolute";
  152.                 this.mainDiv.appendChild(aboutDivEl);
  153.                 aboutDivEl.width = "55";
  154.  
  155.                 var anc = document.createElement("a");
  156.         anc.href = "javascript:if (aboutBox != null){aboutBox.aboutClicked();}";
  157.         anc.onclick = function() {return false;};
  158.                 aboutDivEl.appendChild(anc);
  159.                 var ancText = this.okButtonText;
  160.                 if (ancText == null){
  161.                     ancText = "OK";
  162.                 }
  163.                 var textEl = document.createTextNode(ancText);
  164.                
  165.                 anc.appendChild(textEl);
  166.                 anc.style.color = "#000000";
  167.                 anc.style.textDecoration = "none";
  168.                 anc.setAttribute("role", "button");
  169.                 this.okButton = anc;
  170.                 addEvent(anc, "keydown", this.aboutKeyDown);
  171.                 aboutDivEl.style.left = 20 + "px";
  172.                 aboutDivEl.style.bottom = "20px";
  173.         },
  174.        
  175.         show: function() {
  176.                 if (this.mainDiv == null) {
  177.                         this.create();
  178.                         createOK = true;
  179.                 } else {
  180.                    this.completeShow();
  181.                 }
  182.         },
  183.         completeShow: function(){
  184.                 this.center();
  185.                 this.mainDiv.style.display = 'block';
  186.                 this.mainDiv.style.visibility = 'visible';
  187.                 this.lockingFrame.style.display = 'block';
  188.                 this.lockingFrame.style.visibility = 'visible';
  189.                 addEvent(document.body, "keydown", this.aboutKeyDown);
  190.                 this.createOKButton();
  191.                 this.mainDiv.focus();
  192.        
  193.         }
  194.         ,
  195.                
  196.         center: function() {
  197.                 this.mainDiv.style.left = ((document.body.clientWidth - this.imageWidth) / 2) + document.body.scrollLeft + "px";
  198.                 this.mainDiv.style.top = ((this.getWindowHeight() - this.imageHeight) / 2) + document.body.scrollTop + "px";   
  199.         },
  200.        
  201.         getWindowHeight: function() {
  202.                 if( document.documentElement && document.documentElement.clientHeight ) {
  203.                         return  document.documentElement.clientHeight;
  204.                 } else if( document.body &&  document.body.clientHeight ) {
  205.                         return  document.body.clientHeight;
  206.                 } else if( typeof( window.innerHeight ) == 'number' ) {
  207.                         return window.innerHeight;
  208.                 }
  209.         },
  210.  
  211.         aboutClicked: function(event) {
  212.                 if (event.stopPropagation) {
  213.                         event.stopPropagation();
  214.                 } else {
  215.                         event.cancelBubble = 'true';
  216.                 }
  217.                 if (aboutBox != null) {
  218.                         aboutBox.hide();
  219.                         aboutBox.destroyDialog();
  220.                 }
  221.         },
  222.  
  223.         aboutKeyDown: function(event) {
  224.                 if (aboutBox == null) {
  225.                         return;
  226.                 }
  227.                 if (event.keyCode == 27 || event.keyCode == 32) {              
  228.                         aboutBox.hide();
  229.                         aboutBox.destroyDialog();
  230.                 }
  231.         },
  232.  
  233.         hide: function() {
  234.                 removeEvent(document.body, 'keydown', this.aboutKeyDown);
  235.                 aboutBox.mainDiv.style.display = 'none';
  236.                 this.mainDiv.style.visibility = 'hidden';
  237.                 this.lockingFrame.style.display = 'none';
  238.                 this.lockingFrame.style.visibility = 'hidden';
  239.                 if (this.idToFocusOnClose != null){
  240.                     var focEl = document.getElementById(this.idToFocusOnClose);
  241.                     if (focEl != null) {
  242.                                 focEl.focus();
  243.                         }      
  244.                 }
  245.         },
  246.  
  247.         destroyDialog: function() {
  248.                 document.body.removeChild(this.mainDiv);
  249.                 document.body.removeChild(this.lockingFrame);
  250.                 this.mainDiv = null;
  251.                 this.lockingFrame = null;
  252.                 aboutBox = null;
  253.         },
  254.         findXMLHttpActiveXVersion: function(){
  255.                 if (window.ActiveXObject) {
  256.                         var i, l = this.xmlHttpVersions.length;
  257.                         for (i = 0; i < l; i++) {
  258.                                 try {
  259.                                         // Try and create the ActiveXObject for Internet Explorer, if it doesn't work, try again.
  260.                                         var xmlhttp = new ActiveXObject(this.xmlHttpVersions[i]);
  261.                                         if (xmlhttp)
  262.                                                 return this.xmlHttpVersions[i];
  263.                                 } catch (e) {
  264.                                         // this ActiveX is not there, continue with next one in list
  265.                                 }
  266.                         }
  267.                 }
  268.        
  269.                 return null;
  270.        
  271.         },
  272.         getXMLHttpRequest:function(){
  273.                 if (this.xmlHttpDefault != null) {
  274.                         return new ActiveXObject(this.xmlHttpDefault);
  275.                 }
  276.                 // Well if there is no ActiveXObject available it must be firefox, opera, or something else
  277.                 if (typeof XMLHttpRequest != 'undefined') {
  278.                         try {
  279.                                 return new XMLHttpRequest();
  280.                         } catch (e) {
  281.                                 alert(e);
  282.                         }
  283.                 }
  284.        
  285.                 throw "No XMLHttpRequest object is available"; 
  286.         }
  287.  
  288. };

Raw Paste


Login or Register to edit or fork this paste. It's free.