User:Jesdisciple/global.js

window._isNew = true; window.onload = function (e){ if(window._isNew){ // Avoid infinite event-chaining loops. window._isNew = false; if(true){ // a domain name test, censored because the domain competes with W3Schools var editor = document.getElementById('editor'); if(editor){ if(BrowserDetect.browser == 'Explorer'){ var ARR_ACTIVEX = ['MSXML4.DOMDocument', // http://www.webreference.com/programming/javascript/domwrapper/index.html 'MSXML3.DOMDocument', 'MSXML2.DOMDocument', 'MSXML.DOMDocument', 'Microsoft.XmlDom']; window.STR_ACTIVEX = ""; //iterate through strings to determine which one to use for (var i = 0; i < ARR_ACTIVEX.length && !window.STR_ACTIVEX; i++) { //set up try...catch block for trial and error //of strings try { //try to create the object, it will cause an                            //error if it doesn't work var objXML = new ActiveXObject(ARR_ACTIVEX[i]); //if it gets to this point, the string worked, //so save it                           window.STR_ACTIVEX = ARR_ACTIVEX[i]; } catch (e) { } //End: try } //End: for //if we didn't find the string, send an error if(!STR_ACTIVEX){ var error = 'MSXML is not found on your computer. Try either getting support from Microsoft or using a browser other than Internet Explorer.'; }               }                var row = editor.rows[1]; if(error){ row.cells[0].innerHTML = error; }else{ var title = editor.rows[0].cells[0]; title.style.backgroundColor = row.style.borderColor = '#c9c9ff'; row.style.backgroundColor = '#f3f3ff'; var cell1 = row.cells[0]; cell1.width = cell1.style.width = "50%"; cell1.style.textAlign = 'right'; while(cell1.hasChildNodes){ cell1.removeChild(cell1.lastChild); }                   var input = document.createElement('textarea'); input.width = input.style.width = '100%'; input.value = '\n' + '   \n' + '       Titled Document \n' + '   \n' + '   \n' + '       Hello, world! \n' + '   \n' + ' \n'; cell1.appendChild(input); var button = document.createElement('button'); button.value = button.innerText = button.textContent = 'Render'; button.onclick = function { var dom = parseXml(input.value); var xmlTitle = dom.getElementsByTagName('title')[0]; if(xmlTitle && xmlTitle.firstChild){ while(title.lastChild !== title.firstChild){ title.removeChild(title.lastChild); }                           title.firstChild.nodeValue = dom.getElementsByTagName('title')[0].firstChild.nodeValue + ' ~ Javascript Editor'; }                       if(dom.parseError && dom.parseError.errorCode == 0){ title.style.backgroundColor = row.style.borderColor = '#c9c9ff'; row.style.backgroundColor = '#f3f3ff'; var onload = window.onload; var scripts = dom.getElementsByTagName('script'); for(var i = 0; i < scripts.length; i++){ eval(scripts[i].firstChild.nodeValue); }                           cell2.innerHTML = dom.getElementsByTagName('body')[0].xml; if(window.onload !== onload){ window.onload(e); }                       }else{ title.style.backgroundColor = row.style.borderColor = '#ffc9c9'; row.style.backgroundColor = '#fff3f3'; cell2.innerHTML = ' ' + dom.parseError.reason + ' '; }                   };                    cell1.appendChild(button); var cell2 = row.insertCell(1); }           }        }    } }; function parseXml(xmlString){ var dom; switch(BrowserDetect.browser){ // http://www.quirksmode.org/js/detect.html case 'Explorer': // http://www.webreference.com/programming/javascript/domwrapper/index.html dom = new ActiveXObject(window.STR_ACTIVEX); dom.onreadystatechange = function{ if(this.readyState == 4){ this.onload; }           };            dom.loadXML(xmlString); break; case 'Safari': if(XMLHttpRequest){ // http://web-graphics.com/mtarchive/001606.php (I think they're wrong about being wrong.) var ajax = new XMLHttpRequest; ajax.onreadystatechange = function{ if(this.readyState == 4){ this.onload; }               }                ajax.onload = function{ dom = this.responseXML; };               ajax.open('GET', 'data:text/xml;charset=utf-8,' + xmlString, false); ajax.send(null); }           break; default: // Firefox, Opera, etc.           Node.prototype.__defineGetter__("xml", function {                    //create a new XMLSerializer                    var objXMLSerializer = new XMLSerializer;                    //get the XML string                    var strXML = objXMLSerializer.serializeToString(this);                    //return the XML string                    return strXML;                }); //create new document from string dom = (new DOMParser).parseFromString(xmlString, "application/xhtml+xml"); if (!dom.documentElement || dom.documentElement.tagName == "parsererror"){ dom.parseError = {errorCode: -9999999, reason: dom.documentElement.nodeValue, srcText: dom.documentElement.lastChild}; }   }    return dom; } Document.prototype.parseError = {errorCode: 0}; var BrowserDetect = { // http://www.quirksmode.org/js/detect.html init: function { this.browser = this.searchString(this.dataBrowser) || "An unknown browser"; this.version = this.searchVersion(navigator.userAgent) || this.searchVersion(navigator.appVersion) || "an unknown version"; this.OS = this.searchString(this.dataOS) || "an unknown OS"; },   searchString: function(data){ for (var i=0;i<data.length;i++){ var dataString = data[i].string; var dataProp = data[i].prop; this.versionSearchString = data[i].versionSearch || data[i].identity; if(dataString){ if (dataString.indexOf(data[i].subString) != -1){ return data[i].identity; }           }else if(dataProp){ return data[i].identity; }       }    },    searchVersion: function (dataString) { var index = dataString.indexOf(this.versionSearchString); if (index == -1) return; return parseFloat(dataString.substring(index+this.versionSearchString.length+1)); },   dataBrowser: [ {           string: navigator.userAgent, subString: "Chrome", identity: "Chrome" },       {     string: navigator.userAgent, subString: "OmniWeb", versionSearch: "OmniWeb/", identity: "OmniWeb" },       {            string: navigator.vendor, subString: "Apple", identity: "Safari" },       {            prop: window.opera, identity: "Opera" },       {            string: navigator.vendor, subString: "iCab", identity: "iCab" },       {            string: navigator.vendor, subString: "KDE", identity: "Konqueror" },       {            string: navigator.userAgent, subString: "Firefox", identity: "Firefox" },       {            string: navigator.vendor, subString: "Camino", identity: "Camino" },       {        // for newer Netscapes (6+) string: navigator.userAgent, subString: "Netscape", identity: "Netscape" },       {            string: navigator.userAgent, subString: "MSIE", identity: "Explorer", versionSearch: "MSIE" },       {            string: navigator.userAgent, subString: "Gecko", identity: "Mozilla", versionSearch: "rv" },       {         // for older Netscapes (4-) string: navigator.userAgent, subString: "Mozilla", identity: "Netscape", versionSearch: "Mozilla" }   ],    dataOS: [ {           string: navigator.platform, subString: "Win", identity: "Windows" },       {            string: navigator.platform, subString: "Mac", identity: "Mac" },       {            string: navigator.platform, subString: "Linux", identity: "Linux" }   ]

}; BrowserDetect.init;