function FDCPClient() { this.cpHost = "cache-01.cleanprint.net"; this.divid="2117"; this.refid="2361"; this.rt = "i"; this.cpstatus = false; this.ptstatus = "y"; this.printSpecId = 0; this.outputFormat = "text/html"; this.action = "print"; this.args = null; this.fdDebug = false; this.cpc = null; this.blkwidth=0; this.xpathLib = ""; this.shost = "formatdynamics.com"; this.hosted = "customer"; this.blockThreshold = 500; this.trackerHost = "cleanprint.net"; this.loadDelayed = true; this.modes = {unset:0, printLink:1, filePrint:2, printerFriendlyViewer:3}; this.mode = 0;//modes.unset this.resetMode = function(){this.mode = this.modes.unset;}; this.cookie_flags = "pv"; this.category = "UNKNOWN"; this.site = "UNKNOWN"; // moved from the printtracker FormatDynamicsPT object this.pthosts = "formatdynamics.com,cleanprint.net,formatdyn.hs.llnwd.net"; this.autoRefreshCSS = "true"; this.autoRefreshTime = "30000"; // quantcast tracking: n => turn off qc tracking, anything else leaves it on this.enableQC = "y"; // templatetest var to pull templates from a directory this.templateTest = true; // 's' for standalone and 'c' for combined. A standalone install turns off registration for // PrintTracker events this.insType = "c"; this.colre = new RegExp(":", "g"); this.comre = new RegExp(",", "g"); this.isPtCss=function(content) { var phosts = this.pthosts.split(','); for(var i = 0; i < phosts.length; i++) { if(content.indexOf(phosts[i]) != -1) return true; } return false; } // templatetest var to pull templates from a directory this.templateTest = false; // 's' for standalone and 'c' for combined. A standalone install turns off registration for // PrintTracker events this.insType = "c"; this.escCom = function(st) { st = new st.constructor(st); st = st.replace(this.colre, "::"); st = st.replace(this.comre, ":,"); return st; } this.getSegment=function () { var seg1 = "Other"; try { var path = window.location.pathname; if (path.indexOf("/") == 0) { path = path.substring(1); } var segs = path.split("/"); if (segs != null && segs.length > 0 && segs[0].length > 0) { seg1 = segs[0]; } } catch (e) { } if(seg1.indexOf("ci_") == 0){ return "news"; } return seg1; } this.getCPViewerId=function(){ } this.getPFF = function() { return "0"; } this.getVR = function() { var ct = ""; var ti = ""; var sec=""; var dom=""; try{ if(typeof content_type_list != "undefined" && content_type_list.length > 0){ ct = content_type_list[0]; } if(yld_mgr.content_topic_id_list.length > 0){ ti = yld_mgr.content_topic_id_list[0]; } try{ if(typeof cpObject != 'undefined'){ sec = cpObject.adPath; dom = cpObject.adDomain; } else{ var cpd = yld_mgr.site_name; var r = new RegExp("[^.]*[.]([^.]*)[.].*"); dom = cpd.match(r)[1]; } }catch(e2){} return { pubId:yld_mgr.pub_id, domain:yld_mgr.site_name, requesttype:yld_mgr.request_type, contenttype:ct, topicid:ti, section : sec, domain : dom }; }catch(e){} return { section : sec, domain : dom }; } this.onPrint = function(cpdata) { var divmap = { advocateweekly:'2115', alamogordonews:'2116', ktva:'2225', sentinelandenterprise:'2364', greenwichtime:'2368', stamfordadvocate:'2371', denverpost:'2021', advocatenews:'2117', benningtonbanner:'2118', dailybulletin:'2127', dailynews:'2128', dailybreeze:'2129', gazettes:'2130', greatescapes:'2131', impactousa:'2132', pasadenastarnews:'2133', presstelegram:'2134', redlandsdailyfacts:'2135', sbsun:'2136', sgvtribune:'2137', valleynews:'2138', whittierdailynews:'2139', contracostatimes:'2140', insidebayarea:'2141', marinij:'2142', mercurynews:'2143', montereyherald:'2144', siliconvalley:'2145', santacruzsentinel:'2146', berkshireeagle:'2147', connpost:'2148', dariennewsreview:'2149', eveningsun:'2150', fairfieldcitizennews:'2151', flipsidepa:'2152', greenwichcitizen:'2153', inyork:'2154', ldnews:'2155', lowellsun:'2156', manchesterjournal:'2157', newcanaannewsreview:'2158', nhbroadcaster:'2159', norwalkcitizennews:'2160', publicopiniononline:'2161', reformer:'2162', thetranscript:'2163', thevalleydispatch:'2164', westportnews:'2165', ydr:'2166', yorkdispatch:'2167', yorksundaynews:'2168', newstimes:'2169', currentargus:'2170', dailytimes:'2171', demingheadlight:'2172', elpasotimes:'2173', lcsunnews:'2174', ruidosonews:'2175', scsunnews:'2176', sltribune:'2177', twincities:'2178', chicoer:'2179', clearlakeobserver:'2180', dailydemocrat:'2181', fremontbulletin:'2182', humboldtbeacon:'2183', mendocinobeacon:'2184', mynorthstate:'2185', orovillemr:'2186', pacificatribune:'2187', paradisepost:'2188', recordbee:'2189', redbluffdailynews:'2190', redwoodtimes:'2191', themilpitaspost:'2192', thereporter:'2193', timesheraldonline:'2194', timesstandard:'2195', ukiahdailyjournal:'2196', willitsnews:'2197' } try{ var domain = document.domain; domain = domain.substring(domain.indexOf(".") + 1); domain = domain.substring(0, domain.indexOf(".com")); domain = domain.replace(/-/, ""); if(typeof divmap[domain] != "undefined" && divmap[domain] != null){ cpdata.d = divmap[domain]; } else{ //cpdata.d = 2687; } cpdata.pc = cpdata.pc.replace(/&#9;/g, ""); cpdata.pc = cpdata.pc.replace(/&#10;/g, ""); cpdata.pc = cpdata.pc.replace(/]*>[ ]*<[/text][^>]*><[/paragraph][^>]*>/g, ""); }catch(e){} } this.getBlockThreshold = function() { return this.getCfg('blockThreshold', this.blockThreshold); } this.getCfg=function(ckey, cdef) { if(this.cpc != null && typeof this.cpc[ckey] != 'undefined') return this.cpc[ckey]; return cdef; } this.getTHost=function() { if(this.shost.length > 0 && document.location.protocol == "https:") return this.shost; else return this.cpHost; } this.getTrackerHost=function() { return this.trackerHost; } this.getcpStat=function() { return this.getCfg('cpStatus', this.cpstatus); } this.getptStat=function() { return this.getCfg('ptStatus', this.ptstatus); } this.getDiv=function() { return this.getCfg('divisionId', this.divid); } this.getOutputFormat=function() { return this.getCfg('mimeType', this.outputFormat); } this.getTmpl=function() { return this.getCfg('templateId', null); } this.getRfmt = function() { return this.getCfg('templateId', this.refid); } this.getTPath = function() { return this.getCfg('tPath', null); } this.getLPath = function() { return this.getCfg('lPath', null); } this.getTO = function() { return this.getCfg('timeout', 10000); } this.getTemplateTest = function() { return this.getCfg('templateTest', this.templateTest); } this.getXpathLib = function() { return this.getCfg('xpathLib', this.xpathLib); } this.getAutoRefreshCSS = function() { return this.getCfg('autoRefreshCSS', this.autoRefreshCSS); } this.getAutoRefreshTime = function() { return this.getCfg('autoRefreshTime', this.autoRefreshTime); } this.getPtHosts = function() { return this.getCfg('pthosts', this.pthosts); } this.getFDDebug = function() { return this.getCfg('fdDebug', this.fdDebug); } this.getRType= function() { return this.rt; } this.getIframeUrls=function(){ } this.onCpLoad = function(){ //if (window.location.href.indexOf("fd_test") > 0) { try { var imgs = document.getElementsByTagName("img"); var fdstr; for ( var i = 0; i < imgs.length; i++) { if (imgs[i].src.indexOf("icon-email") > 0) { fdstr = imgs[i].parentNode.href; break; } } var fdregex = new RegExp(".*siteId=([^&]*).*"); var fdres = fdstr.match(fdregex); var fdsid = fdres[1]; var aid = window.location.href.substring(window.location.href.lastIndexOf("/")+1); aid = aid.substring(aid.indexOf("_")+1); var fdval = "http://" + document.domain + "/portlet/article/html/fragments/print_article.jsp?articleId=" + aid + "&siteId=" + fdsid; var anchors = document.getElementsByTagName("a"); var fdnodes = new Array(); for ( var i = 0; i < anchors.length; i++) { if (typeof anchors[i].className != "undefined" && anchors[i].className != null && anchors[i].className == "articleOptions") { fdnodes.push(anchors[i]); } } if (fdnodes != null) { for ( var i = 0; i < fdnodes.length; i++) { if (fdnodes[i].innerHTML == "Print") { fdnodes[i].onclick = function() { FDCPUrl(fdval, true); var s = s_gi(s_account); s.linkTrackVars = "prop46"; s.prop46 = domainName + " / Print Article / " + ArticleTitle + " / " + s.eVar26; s.tl(this, "o", "Print Article"); return false; }; } else { var chld = fdnodes[i].childNodes; for ( var j = 0; j < chld.length; j++) { if (chld[j].nodeName.toLowerCase() == "img") { if (chld[j].src.indexOf("icon-print") > 0) { fdnodes[i].onclick = function() { FDCPUrl(fdval, true); var s = s_gi(s_account); s.linkTrackVars = "prop46"; s.prop46 = domainName + " / Print Article / " + ArticleTitle + " / " + s.eVar26; s.tl(this, "o", "Print Article"); return false; }; break; } } } } } } } catch (e) {} //} } this.cpServletPath=(document.location.protocol == "https:" ? "https://" : "http://") + this.getTHost() + "/cp/psj"; this.logUrl =(document.location.protocol == "https:" ? "https://" : "http://") + this.getTHost() + "/cp/l"; this.getCalculatedPrintSpecId = function(){ return "578"; } this.onBeforeContentSerialization = function(){ } this.onAfterContentSerialization = function(){ } this.onPrintSpecLoad = function(){ } this.onBeforeCleanPrint = function(data){ return data; } this.calculateCacheKey = function(){ return cacheKey; } this.onAfterCleanPrint = function(){ // standard behavior if(this.enableQC == 'y') this.appendQC(); // customizations } this.appendQC = function() { } this.getRequestObject = function(){ var act = "Unknown"; if (this.mode == this.modes.filePrint) { act = "Chrome"; } else if (this.mode == this.modes.printLink || this.mode == this.modes.printerFriendlyViewer) { act = "Link"; } var logdata = { d : this.getDiv(), a : navigator.appName + " " + navigator.userAgent, s : this.getSegment(), u : window.location.href, p : this.getPFF(), r : this.getRfmt(), q : "1.0", template : this.getTmpl(), act : act }; return logdata; } } function FormatDynamicsPT(client) { this.clnt = client; this.pcol = document.location.protocol + "//"; this.cstr = client.getTrackerHost() + "/pt/t/"; this.div = "d="+this.clnt.getDiv(); this.ua = "&a=" + escape(navigator.appName + " " + navigator.userAgent); this.seg = "&s="+escape(this.clnt.getSegment()); this.ustr = "&u="+escape(window.location.href); this.pf = "&p="+this.clnt.getPFF(); this.version = "&q=1.1"; this.rtype = "&rt="+this.clnt.getRType(); this.qstr = this.div+this.ua+this.seg+this.ustr+this.pf+this.version; this.pthosts = this.clnt.getPtHosts(); this.autoRefreshCSS = this.clnt.getAutoRefreshCSS(); this.autoRefreshTime = this.clnt.getAutoRefreshTime(); this.cssRefreshInterval = null; this.rcount = 0; this.ptssfound = false; this.getTURL = function() { return this.pcol + this.cstr + (new Date()).getTime() + '?' + this.qstr; } this.isPtCss=function(content) { var phosts = this.pthosts.split(','); for(var i = 0; i < phosts.length; i++) { if(content.indexOf(phosts[i]) != -1) return true; } return false; } this.changePrintStyleSheet=function() { this.rcount++; // Change fdprint stylesheet if found for(i=0;i 0) { h = hs[0]; var script = document.createElement("script"); script.type = 'text/javascript'; script.src = this.getTURL() + '&rnd=' + Math.random(); } } else { var fdloader = new Image(); fdloader.src = this.getTURL(); } } this.initIE = function() { try { if (navigator.appName.indexOf("Microsoft")!=-1 && parseInt(navigator.appVersion)>=4 && navigator.userAgent.indexOf("Windows") != -1) window.attachEvent("onbeforeprint", function() { formatDynamicsPT.getFDImage(); } ); } catch(e) {} } this.initX = function() { try { if(navigator.appName.indexOf("Konqueror") != -1) { formatDynamicsPT.changePrintStyleSheet(); } else if (navigator.appName.indexOf("Microsoft") == -1) { formatDynamicsPT.changePrintStyleSheet(); formatDynamicsPT.cssRefreshInterval = setInterval("formatDynamicsPT.refreshCSS()", formatDynamicsPT.autoRefreshTime); } } catch(e) {} } this.initAll = function() { try { this.initIE(); this.initX(); } catch(e) {} } this.refreshCSS = function() { if (formatDynamicsPT.autoRefreshCSS == "true") formatDynamicsPT.changePrintStyleSheet(); else clearInterval(formatDynamicsPT.cssRefreshInterval); } } // TODO: add 'script' mode back. also add 'auto' mode to load everything without waiting // TODO: run through rhino // TODO: in the print spec js, we use '1' and '0', 'y' and 'n' and true and false for boolean values. clean this up. var FDCPLoader = { count: 0, tint: 500, tmax: 10000, tagg: 0, incyc: false, loaded: false, // TODO: rename to printSpecLoaded? divId: 0, // TODO: redundant printSpecId: 0, // TODO: have a PrintSpec class? In any case, isn't needed as an instance var cpDef:{}, // TODO: can print spec come back as a JSON object? FDCPClient:new FDCPClient(), printPreviewWindow: null, // TODO: remove printPreviewWindowOpen: false, // TODO: remove tester: false, // TODO: still used? slre: new RegExp("[^/]*$"), // TODO: this should go away getCfg: function(ckey, cdef) { if(FDCPLoader.FDCPClient.cpc != null && typeof FDCPLoader.FDCPClient.cpc[ckey] != 'undefined') return FDCPLoader.FDCPClient.cpc[ckey]; return cdef; }, loadcp: function() { if(typeof FDCPLoader.FDCPClient.onPrintSpecLoad != "undefined"){ FDCPLoader.FDCPClient.onPrintSpecLoad(); } // TODO: this is stupid this.cpc = FDCPLoader.FDCPClient.cpc; if(FDCPLoader.FDCPClient.cpc.cpStatus == 'n'){ FDCPLoader.tagg = FDCPLoader.tmax + 1; return; } jsloc = (document.location.protocol == "https:" ? "https://" : "http://") + FDCPLoader.FDCPClient.getTHost() + "/cp/cpjs" + "?d=" + FDCPLoader.FDCPClient.divid + "&bn=" + FDCPLoader.browserDetect.browser + "&bv=" + FDCPLoader.browserDetect.version + "&fs=" + (FDCPLoader.hasFlash() ? "true" : "false") + "&rp=" + FDCPLoader.FDCPClient.cpc.rpOk; if(FDCPLoader.FDCPClient.cpc.templateTest == true){ jsloc += "&tt=true"; } if(typeof FDCPLoader.FDCPClient.cpc.forceProxyless != "undefined"){ if(FDCPLoader.FDCPClient.cpc.forceProxyless == true){ jsloc += "&fp=true"; } else{ jsloc += "&fp=false"; } } else{ jsloc += "&fp=false"; } if(typeof FDCPLoader.FDCPClient.cpc.compressJS != "undefined"){ if(FDCPLoader.FDCPClient.cpc.compressJS == true){ jsloc += "&cj=true"; } else{ jsloc += "&cj=false"; } } var e = document.createElement('script'); e.src = jsloc; e.type = 'text/javascript'; document.getElementsByTagName("head")[0].appendChild(e); }, getPDScriptUrl: function(){ var snodes = document.getElementsByName('cleanprintloader'); var url = ""; if(snodes.length > 0) { url = snodes[0].src; } else { snodes = document.getElementsByTagName('SCRIPT'); for(var i = 0; i < snodes.length; i++) { if(snodes[i].name == 'cleanprintloader') { url = snodes[i].src; break; } } } return url; }, loadPrintSpec: function(){ try { formatDynamicsPT = new FormatDynamicsPT(new FDCPClient()); formatDynamicsPT.initX(); var psfailed = false; if(!this.loaded) { this.loaded = true; // TODO: shouldn't we set this after a successful load? var pdSrc = this.getPDScriptUrl(); // TODO: is this still necessary? if (this.FDCPClient.hosted == "fd" && pdSrc.length > 0) this.divId = this.getDivisionId(pdSrc); else this.divId = this.FDCPClient.divid; // TODO: get this from the client now this.printSpecId = this.getPrintSpecId(pdSrc); var url = this.FDCPClient.cpServletPath; url += "?useCache=false"; url += "&divId=" + this.divId; var psid = null; // TODO: this function is now required. clean up this logic accordingly if(typeof this.FDCPClient.getCalculatedPrintSpecId != "undefined" && this.tester == false) { try { psid = this.FDCPClient.getCalculatedPrintSpecId(); if(typeof psid == 'undefined' || psid == null || psid == false || isNaN(psid)) { psid = this.printSpecId; } if(typeof psid == 'undefined' || psid == null || psid == false || isNaN(psid)) { psfailed = true; } } catch(err) { psfailed = true; // Shouldn't we try to use the ccg supplied value? } } if(psfailed) { // TODO: can we always register the PT handler, and disable by setting a flag on fdcp or something? then we don't need to mess with this logic on all cp load failures formatDynamicsPT.initIE(); } else { url += "&printSpecId=" + psid; var cpDefScript = document.createElement('script'); cpDefScript.src = url; cpDefScript.type = 'text/javascript'; document.getElementsByTagName("head")[0].appendChild(cpDefScript); } } } catch(e) { // TODO: something. anything. } }, // TODO: get rid of this validatePath: function(path , jsFile) { if (path.indexOf(jsFile) > 1) return path; else { if (path.charAt(path.length -1) == "/") return path + jsFile; else return path + "/" + jsFile; } }, // TODO: get rid of this? getPrintSpecId: function(pdSrc) { var pdre = new RegExp("^[^?]+\\??"); var queryString = pdSrc.replace(pdre,''); var params = this.parseQuery( queryString ); return params['ps']; }, // TODO: get rid of this getDivisionId: function(pdSrc) { var tmpUrl = pdSrc.replace(this.slre, ""); var lastSlashIndex = tmpUrl.search(this.slre); var divId = tmpUrl.substr(0, lastSlashIndex -1); lastSlashIndex = divId.search(this.slre); divId = divId.substr(lastSlashIndex, divId.length); return divId; }, // TODO: get rid of this if you get rid of getPrintSpecId parseQuery: function( query ) { var Params = new Object (); if ( ! query ) return Params; // return empty object var pre = new RegExp("[;&]"); var plusre = new RegExp("\\+", "g"); var Pairs = query.split(pre); for ( var i = 0; i < Pairs.length; i++ ) { var KeyVal = Pairs[i].split('='); if ( ! KeyVal || KeyVal.length != 2 ) continue; var key = unescape( KeyVal[0] ); var val = unescape( KeyVal[1] ); val = val.replace(plusre, ' '); Params[key] = val; } return Params; }, cpJsLoaded:false, xpathJsLoaded:navigator.appName != "Microsoft Internet Explorer", registerModuleLoaded: function(moduleName){ if(moduleName == "cp.js"){ this.cpJsLoaded = true; } else if(moduleName == "xpath.js"){ this.xpathJsLoaded = true; } if(this.xpathJsLoaded && this.cpJsLoaded){ fdcp.replacePrintLinks(); } }, fdPrintWrapper: function(theContext){ if(this.browserDetect.browser == "Explorer"){ if(theContext && this.browserDetect.version >= 7){ theContext.focus(); theContext.document.execCommand('print', false, null); } else if(theContext) { theContext.print(); } else{ window.print(); } } else{ theContext = typeof theContext == "undefined" ? window : theContext; theContext.print(); } fdcp.bridge.printElement = null; }, // TODO: still used? ptFailover: function() { formatDynamicsPT = new FormatDynamicsPT(new FDCPClient()); formatDynamicsPT.initAll(); }, getFlashVersion : function(desc){ var matches = desc.match(/[\d]+/g); matches.length = 1; // To standardize IE vs FF return matches.join('.'); }, hasFlash : function() { // Flash Player Version Detection - Rev 1.6 // Detect Client Browser type // Copyright(c) 2005-2006 Adobe Macromedia Software, LLC. All rights reserved. var nn = navigator; var np = nn.plugins; var isIE = (nn.appVersion.indexOf("MSIE") != -1) ? true : false; var isWin = (nn.appVersion.toLowerCase().indexOf("win") != -1) ? true : false; var isOpera = (nn.userAgent.indexOf("Opera") != -1) ? true : false; // NS/Opera version >= 3 check for Flash plugin in plugin array var flashVer; if (nn.plugins != null && np.length > 0) { if (np["Shockwave Flash 2.0"] || np["Shockwave Flash"]) { var swVer2 = np["Shockwave Flash 2.0"] ? " 2.0" : ""; var descArray = np["Shockwave Flash" + swVer2].description.split(" "); var tempArrayMajor = descArray[2].split("."); flashVer = tempArrayMajor[0] > 5 ? tempArrayMajor[0] : -1; } } else if ( isIE && isWin && !isOpera ) { var axo; var e; // NOTE : new ActiveXObject(strFoo) throws an exception if strFoo isn't in the registry try { // version will be set for 7.X or greater players axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7"); flashVer = axo.GetVariable("$version"); } catch (e) { } if (!flashVer) { try { // version will be set for 6.X players only axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6"); flashVer = "6"; } catch (e) { } } } flashVer = this.getFlashVersion(flashVer); return flashVer && flashVer > 0; }, browserDetect : { 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 FDCPLoader.tmax) { FDCPLoader.incyc = false; FDCPLoader.fdPrintWrapper(); FDCPLoader.tagg = 0; } else { FDCPLoader.tagg += FDCPLoader.tint; setTimeout("FDCPUrl('" + pfLink + "'," + isViewer +",'" + mimeType + "','" + action + "','" + args +"')", FDCPLoader.tint); } //FDCPLoader.tagg += FDCPLoader.tint; //setTimeout("FDCPUrl('" + pfLink + "', " + isViewer + ")", FDCPLoader.tint); return false; } FDCPLoader.incyc = false; if(isViewer || (mimeType == "email/html" || mimeType == "application/pdf")) { var continueCp = FDCPLoader.browserDetect.browser == "Firefox" || FDCPLoader.browserDetect.browser == "Explorer" || FDCPLoader.browserDetect.browser == "Chrome" || (FDCPLoader.browserDetect.browser == "Safari" && FDCPLoader.browserDetect.OS == "Mac"); if(!continueCp) { window.open(pfLink, "pf", ""); return false; } } if((typeof FDCPLoader.FDCPClient.cpc.rpOk != "undefined" && FDCPLoader.FDCPClient.cpc.rpOk==false) && (isViewer || mimeType == "email/html") && (!fdcp.bridge.printElement || fdcp.bridge.printElement.closed)) { fdcp.bridge.printElement = window.open("about:blank", "test", "copyhistory=yes,width=1024,height=768,left=50, top=50,screenX=50,screenY=50"); } fdcp.clt.mode = isViewer ? fdcp.clt.modes.printerFriendlyViewer : fdcp.clt.modes.printLink; fdcp.clt.outputFormat = mimeType; fdcp.clt.action = action; fdcp.clt.args = args; fdcp.linkPrintHandler(pfLink); if(FDCPLoader.browserDetect.browser == "Explorer") { fdcp.clt.resetMode(); } // Force it do everything again 'cause we need to re-eval everything if its a different button fdcp.linkClicked = false; fdcp.getCpPostDataValue = null; } catch(e) { // alert(e); } return false; } // a simple ajax object getter function fdGetAjaxObj() { if(window.XMLHttpRequest){ return new XMLHttpRequest(); //Not IE }else if(window.ActiveXObject){ return new ActiveXObject("Microsoft.XMLHTTP"); //IE }else{ // TODO: check to see if there are others we need to support return null; } } if (window.addEventListener) { window.addEventListener("load", function() { FDCPLoader.loadPrintSpec(); }, true); } else if (window.attachEvent) { window.attachEvent("onload", function() { FDCPLoader.loadPrintSpec(); }); } else FDCPLoader.loadPrintSpec();