// JavaScript Refactoring for safer, faster, better AJAX. // // Copyright 2005, Pavel Simakov, // http://www.softwaresecretweapons.com // // function oyXMLRPCProvider () { var status = null; var url = null; var req = null; var msgCount = 0; var inProgress = false; var isComplete = false; var oThis = this; // checks to see if we have too many messages in log var internalCanMsg = function(){ msgCount++; return msgCount < 100; } // adds message to internal log var internalOnLog = function(msg){ if(oThis.onLog && internalCanMsg()) { oThis.onLog(msg); } } // adds message to internal error handler var internalOnError = function(msg){ if(oThis.onError && internalCanMsg()) { oThis.onError(msg); } } // tells us whether we are busy waiting for the response to another requst var internalIsBusy = function(){ return inProgress && !isComplete; } // internal callback function for the browser; it is called when a state of a request object changes var internalRequestComplete = function() { var STATE_COMPLETED = 4; var STATUS_200 = 200; if (!internalIsBusy()) { internalOnError("internalRequestComplete: error - no request submitted"); } internalOnLog("internalRequestComplete: readyState " + req.readyState); if (req.readyState == STATE_COMPLETED) { status = req.status; inProgress = false; isComplete = true; internalOnLog("internalRequestComplete: status " + status); if (status == STATUS_200) { internalOnLog("internalRequestComplete: calling callback on content with length " + req.responseText.length + " chars"); if(oThis.onComplete) { oThis.onComplete(req.responseText, req.responseXML); } internalOnLog("internalRequestComplete: complete on " + new Date()); } else { internalOnError("internalRequestComplete: error - bad status while fetching " + url); } } else { // we need to review other state codes for XMLRPC provider } } // call this function to figure out version of this class this.getVersion = function(){ return "1.0.0"; } // call this function to figure out if current browser supports XML HTTP Requests this.isSupported = function(){ var nonEI = window.XMLHttpRequest; var onIE = window.ActiveXObject; if (onIE) { onIE = new ActiveXObject("Microsoft.XMLHTTP") != null; } return window.XMLHttpRequest || onIE; } // call this function to find out if more calls are possible and if request has been completely received this.isBusy = function(){ return internalIsBusy(); } // call this function to submit new request this.submit = function(_url){ if (internalIsBusy()) { internalOnError("submit: error - busy processing another request " + _url); } msgCount = 0; internalOnLog("submit: started on " + new Date() + " for " + _url); url = _url; status = null; inProgress = true; isComplete = false; if (window.XMLHttpRequest) { // branch for native XMLHttpRequest object internalOnLog("submit: using XMLHttpRequest()"); req = new XMLHttpRequest(); req.onreadystatechange = internalRequestComplete; req.open("GET", url, true); req.send(null); } else { // branch for IE/Windows ActiveX version if (window.ActiveXObject) { req = new ActiveXObject("Microsoft.XMLHTTP"); if (req) { internalOnLog("submit: using Microsoft.XMLHTTP"); req.onreadystatechange = internalRequestComplete; req.open("GET", url, true); req.setrequestheader("Pragma","no-cache"); req.setrequestheader("Cache-control","no-cache"); req.send(); } else { internalOnError("submit: error - unable to create Microsoft.XMLHTTP"); } } else { internalOnError("submit: error - browser does not support XML HTTP Request"); } } internalOnLog("submit: complete"); } // call this function to abort current request this.abort = function(){ internalOnLog("abort: " + url); if (!internalIsBusy()) { internalOnError("abort: error - no request submitted"); } onComplete = null; req.abort(); } // call this function to find out current url this.getUrl = function(){ return url; } // call this function to find out HTTP status code after response completes this.getStatus = function(){ return status; } // please can override this; this is function called when fatal error occurs this.onError = function(msg){ } // user can override this; this function is called when log message is created this.onLog = function(msg) { } // user can override this; this function is called when response is received without errors this.onComplete = function(responseText, responseXML){ } } function demo(){ // clear log document.getElementById('output').value = ""; // create logging function var myOnLog = function(msg){ document.getElementById('output').value += msg + "\n"; } // create completion function var myOnComplete = function(responseText, responseXML){ document.getElementById('outputText').value = responseText; alert("Done!"); } // create provider instance; wire events var provider = new oyXMLRPCProvider(); provider.onComplete = myOnComplete; provider.onLog = myOnLog; provider.onError = myOnLog; provider.submit("../data/data.xml"); } //output methods var myOnComplete = function(responseText, responseXML){ document.getElementById("outputText").value = responseText; alert("Done!"); } var myOnComplete1 = function(responseText, responseXML){ document.getElementById("outputText1").value = responseText; alert("Done1!"); } var myOnComplete2 = function(responseText, responseXML){ document.getElementById("output").value = responseText; alert("Done2!"); } var isEncoded = new RegExp('%\\d+'); //url establishment methods function getURL() { return "data3.xml"; } function runner(u,logID,errID,myOC){ // clear log if(document.getElementById(logID)!=null) { document.getElementById(logID).value = ""; } // create logging function var myOnLog = function(msg){ if(document.getElementById(logID)!=null) { document.getElementById(logID).value += msg + "\n"; } } // create error function var myOnError = function(msg){ if(document.getElementById(errID)!=undefined) { document.getElementById(errID).innerHTML = msg; } } // create provider instance; wire events var provider = new oyXMLRPCProvider(); //provider.onComplete = myOnComplete; provider.onComplete = myOC; provider.onLog = myOnLog; provider.onError = myOnError; provider.submit(u); } /* xmlhttp stuff starts here */ //http://intranet.foe.co.uk:81/app/ldapcontrol?f_1_match_nsuniqueid=a9ada884-0a7611da-80c4fc68-aeea7eb5&f_1_action=search&template_url=/templates/add_new/lg_activity.html&context=f_1&f_1_handler=foe.ldap.Document&f_1_return=*&f_1_return=nsuniqueid var STATIC_URL= '', TARGET_SELECT = ''; var NOSUB= false; var member= '',txt = '', br= ''; var elements,elementsLSD,elementsRLSD,elementsDID,elementsT,elementsN; var colodd = '#ffffff'; var coleven = '#efe'; var rowodd = ''; var roweven = ''; var req; var responseObj; function setTargetSelect(v) { TARGET_SELECT = v; } function clearElements(list) { var el; for(i=0;i6) { DRETURNS = new Array(); for(i=6,j=0;i1) { //alert('OR '+arr.length+' F'+FILTERS[i]); ORS = new Array(); ORSX = new Array(); for(j=0;j0) { FILTERS[FILTERS.length] = "standard exclusions"; } numexclusions = EXCLUSIONS.length; //check that activity period is not selected in type list if(ALLVALS.indexOf('activity period')!=-1) { for(k=0;k 1) { ALL[ALL.length] = "(!(|"+EXCLUSIONS.join('')+"))"; } //add some text for the exclusions //finally put the ALL elements together //if only 1 no and needed if(FILTERS.length == 1) { FF = ALL.join(''); FFX = ALLX.join(' AND '); FFXP = ALLXP.join(', '); FFS = ALL.join("\n"); } else { FF = '(&'+ALL.join('')+')'; FFS = "(&\n"+ALL.join("\n")+"\n)"; FFX = ALLX.join(' AND '); FFXP = ALLXP.join(', '); } FFXP //add some text for the exclusions var excltexts = new Array(); for(k=0;k0) { FFX += ' [Excludes: '+excltexts.join(', ')+ ']'; } } function getFilterComponent (n,op,v) { var fi = 's'; //alert('gF n '+n+' op'+op+' v'+v+' OPNUMS[op]'+OPNUMS[op]); switch(OPNUMS[op]) { case(1): { fi = '('+n+'='+v+')'; break; } case(2): { fi = '('+n+'=*'+v+'*)'; break; } case(3): { fi = '('+n+'>='+v+')'; break; } case(4): { fi = '('+n+'<='+v+')'; break; } case(5): { fi = '('+n+'='+v+'*)'; break; } case(6): { fi = '(!('+n+'='+v+'))'; break; } case(7): { fi = '(!('+n+'=*'+v+'*))'; break; } default: fi = '('+n+'=*)'; } return fi; } function getFilterComponentExp (n,op,v,t) { if(v.indexOf('=')!=-1) { v = get_name_from_dn(v); } if(n.indexOf('date')!=-1) { v = genTime(v); } if(t==undefined) { t = v; } t = t.toLowerCase(); if(t.indexOf('campaign network')!=-1) { n = 'campaign network'; // v += ' campaign network'; } else if(t.indexOf('wheel')!=-1) { n = 'wheel audience'; //v += ' (wheel)'; } if(SEXP[n]) { n = SEXP[n] } if(SEXP[op]) { op = SEXP[op] } return n +' ' +op+ ' '+v; } // function getFilterComponent (n,op,v) { var fi = 's'; if(n.indexOf('date')!=-1 && op.indexOf('eq')!=-1 && v.indexOf('*')==-1 && v.length<14) { //alert('op:'+OPNUMS[op]); v = v + '*'; } //alert('gF n '+n+' op'+op+' v'+v+' OPNUMS[op]'+OPNUMS[op]); switch(OPNUMS[op]) { case(1): { fi = '('+n+'='+v+')'; break; } case(2): { fi = '('+n+'=*'+v+'*)'; break; } case(3): { fi = '('+n+'>='+v+')'; break; } case(4): { fi = '('+n+'<='+v+')'; break; } case(5): { fi = '('+n+'='+v+'*)'; break; } case(6): { fi = '(!('+n+'='+v+'))'; break; } case(7): { fi = '(!('+n+'=*'+v+'*))'; break; } default: fi = '('+n+'=*)'; } return fi; } function getFilterComponentExp (n,op,v,t) { if(v.indexOf('=')!=-1) { v = get_name_from_dn(v); } if(n.indexOf('date')!=-1) { v = genTime(v); } if(t==undefined) { t = v; } t = t.toLowerCase(); if(t.indexOf('campaign network')!=-1) { n = 'campaign network'; // v += ' campaign network'; } else if(t.indexOf('wheel')!=-1) { n = 'wheel audience'; //v += ' (wheel)'; } if(SEXP[n]) { n = SEXP[n] } if(SEXP[op]) { op = SEXP[op] } return n +' ' +op+ ' '+v; } function assignFilter (n,v,t,p) { //if we put activity periods in, turn off the exclusion if(p==undefined) { } else { PRIVATEFILTERNAMES[n] = "1"; } ALLVALS += v; if(FILTEREDNAMES[n]) { arr = FILTEREDNAMES[n]; arr[arr.length] = v; } else { FILTERS[FILTERS.length] = n; FILTEREDNAMES[n] = new Array(v); } //put text in here in case we want to differentiate between say campaign network and wheel audience if(t==undefined) { t = v; } FILTEREDVALS[v] = t; } function addExclusion (v) { EXCLUSIONS[EXCLUSIONS.length] = v; } /* new */ var els=new Array(),elsT=new Array(),elsD=new Array(),elsF=new Array(),elsS=new Array(),elsU=new Array(),elsRD=new Array(); var CURSOR= 0, Q = 20, MAXQ = 20, MAX = 6, LIBAREA = '',SHOWALL=false; function getDbycampaign (c,d) { getD2('','','',"getDrows","","releasedate","desc","libtitle","libarea","f_1_filter_campaignpubliclabellink_eq",c,"","f_1_filter_createtimestamp_gt",d,"private") } function getDby (xtval,u,elname,c,d,el) { if(d!=undefined && d!='') { if(d == '-1Y') { //one year ago d = getGenTimeDay('-1Y'); getD2(', published in last 12 months',u,'',"getDrows","","releasedate","desc","libtitle","libarea",elname,c,"","f_1_filter_createtimestamp_gt",d,"private"); } else if(d == '-3M') { d = getGenTimeDay('-3M'); getD2(', published in last 3 months',u,'',"getDrows","","releasedate","desc","libtitle","libarea",elname,c,"","f_1_filter_createtimestamp_gt",d,"private"); } else if(d == '-1M') { d = getGenTimeDay('-1M'); getD2(', published in the last month',u,'',"getDrows","","releasedate","desc","libtitle","libarea",elname,c,"","f_1_filter_createtimestamp_gt",d,"private"); } else if(d == 'popular') { getD2(', most popular',u,'',"getDrows","","releasedate","desc","libtitle","libarea",elname,c,""); } } else { getD2('',u,'',"getDrows","","releasedate","desc","libtitle","libarea",elname,c,"") } if(el!=undefined) { selector(el,c); } } function printE(tID,titleID,titleVal,noValText,method) { myOCZ = function (responseText, responseXML) { if(titleVal.indexOf('popular')!=-1) { var elements = responseXML.documentElement.getElementsByTagName('resourceitem'); var ei = 0; els = new Array(); for(ei=0;ei'); } var e; var numrec = els.length; if((e = document.getElementById('numrec'))!=null) { e.innerHTML = numrec; } if(numrec==2 && els[0].indexOf('