// http://drc.tucows.com

var wcCurrentView=Array();var wcComponentData=Array();var wcHttp=false;var wcComponentHttp=false;var wcINIValues=Array();var wcOptionFile=Array();var wcReceiver=false;var wcPostingOut=Array();Object.prototype.isArray=function(){return false;}
Array.prototype.isArray=function(){return true;}
function trimString(sInString){sInString=sInString.replace(/^\s+/g,"");return sInString.replace(/\s+$/g,"");}
function isArray(testObject){return(testObject&&(typeof testObject==='object')&&testObject.isArray());}
function getAssocArrayLength(assocArray){var itemCount=0;for(var item in assocArray){if(item!='isArray')
itemCount++;}
return itemCount;}
function getChildNode(node,index){var retval;if(window.ActiveXObject)
retval=node.childNodes.item(index);else
retval=node.childNodes[index];return retval;}
function hasChildNodes(node){if(node.hasChildNodes){for(var i=1;i<node.childNodes.length;i++){if(getChildNode(node,i).nodeType==1)
return true;}}
return false;}
function getDOMDocFromHttp(xmlhttp){var retval;if(!xmlhttp.responseXML)
return false;if(window.ActiveXObject)
retval=xmlhttp.responseXML.documentElement;else if(navigator.appName=="Opera"){for(var i=1;i<xmlhttp.responseXML.childNodes.length;i++){if(getChildNode(xmlhttp.responseXML,i).nodeType==1){retval=getChildNode(xmlhttp.responseXML,i);break;}}}else
retval=xmlhttp.responseXML.childNodes[0];return retval;}
function getXMLHTTPRequest(){var xRequest=null;if(window.ActiveXObject){xRequest=new ActiveXObject("Microsoft.XMLHTTP");}else{xRequest=new XMLHttpRequest();}
return xRequest;}
function errorOut(divID,errMsg){var currentComponent=document.getElementById(divID);currentComponent.innerHTML='<div class="errorText">'+parseLanguageTokens(divID,errMsg)+'</div>';}
function replaceTag(textBody,tagName,value){while(textBody.indexOf(tagName)>-1){textBody=textBody.replace(tagName,value);}
return textBody;}
function parseLanguageTokens(divID,stringData){var retval=new String(stringData);var currentIndex=0;currentIndex=0;var langTokens=new Array();if(retval.indexOf('<%')==0)langTokens.push(retval.substring(retval.indexOf('<%')+2,retval.indexOf('%>')));while(currentIndex>=0){currentIndex=retval.indexOf('<%',currentIndex+1);if(currentIndex>0){langTokens.push(retval.substring(currentIndex+2,retval.indexOf('%>',currentIndex)));}}
langTokens=langbankCall(divID,langTokens,wcINIValues[divID]['defaultLanguage']);for(var token in langTokens)
while(retval.indexOf('<%'+token+'%>')!=-1)
retval=retval.replace('<%'+token+'%>',langTokens[token]);return retval;}
function getCurrentBack(divID,currentView){var currentBack=null;var rollBack=null;var highestIndex=-1;syncObject(divID);if(wcComponentData[divID]['wcLastViewStack']){for(var element in wcComponentData[divID]['wcLastViewStack']){if(element!="isArray"){if(wcComponentData[divID]['wcLastViewStack'][element]>highestIndex){highestIndex=wcComponentData[divID]['wcLastViewStack'][element];currentBack=element;}}}}
if(currentBack==currentView){if(wcReceiver){wcHttp=getXMLHTTPRequest();wcHttp.open("POST",wcReceiver,false);wcHttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');wcHttp.send("wcAction=POPSTACK&wcDivID="+divID);}
for(var element in wcComponentData[divID]['wcLastViewStack']){if(wcComponentData[divID]['wcLastViewStack'][element]==highestIndex-1){rollBack=element;}}
currentBack=rollBack;}
return currentBack;}
function parseTemplate(divID,templateData){var retval=new String(templateData);var divIndex=0;var formIndex=0;var formToken=false;var currentIndex=0;var currentToken=false;var backIndex=0;var backToken=false;var backElse=false;if(!wcPostingOut[divID])
wcPostingOut[divID]=Array();while(divIndex>=0){divIndex=retval.indexOf('<<##DIVID##>>');if(divIndex>0){retval=replaceTag(retval,"<<##DIVID##>>",divID);}}
while(formIndex>=0){formIndex=retval.indexOf('<<##ACTION-');if(formIndex>0){formToken=retval.substring(formIndex+11,retval.indexOf('##>>',formIndex));if(wcINIValues[divID]['interface-flow']['Post-'+formToken]){retval=replaceTag(retval,"<<##ACTION-"+formToken+"##>>",wcINIValues[divID]['interface-flow']['Post-'+formToken]);retval=replaceTag(retval,"<<##SUBMIT-"+formToken+"##>>","");wcPostingOut[divID][divID+"-"+formToken]=true;}else{wcPostingOut[divID][divID+"-"+formToken]=false;retval=replaceTag(retval,"<<##ACTION-"+formToken+"##>>","");retval=replaceTag(retval,"<<##SUBMIT-"+formToken+"##>>","return false;");}}}
while(backIndex>=0){backIndex=retval.indexOf('<<##BACK-');if(backIndex>0){backToken=retval.substring(backIndex+9,retval.indexOf('-',backIndex+10));backElse=retval.substring(backIndex+10+backToken.length,retval.indexOf('##>>',backIndex));retval=replaceTag(retval,"<<##BACK-"+backToken+"-"+backElse+"##>>",getCurrentBack(divID,wcCurrentView[divID]));}}
while(currentIndex>=0){currentIndex=retval.indexOf('<#');if(currentIndex>0){currentToken=retval.substring(currentIndex+2,retval.indexOf('#>',currentIndex));retval=retval.replace('<#'+currentToken+'#>',eval(currentToken));}}
retval=parseLanguageTokens(divID,retval);return retval;}
function XMLToArray(element){var retval=Array();var currentIndex=0;for(var i=0;i<element.childNodes.length;i++){if(getChildNode(element,i).nodeType==1){if((getChildNode(element,i).nodeName==element.nodeName)||(currentIndex>0)){retval[currentIndex++]=XMLToArray(getChildNode(element,i));}else{retval[getChildNode(element,i).nodeName]=XMLToArray(getChildNode(element,i));}}else if(!hasChildNodes(element)){for(var k=0;k<element.childNodes.length;k++)
if(getChildNode(element,k).nodeType==3)
retval=getChildNode(element,k).nodeValue;}}
return retval;}
function syncObject(divID){wcHttp=getXMLHTTPRequest();wcHttp.open("POST",wcReceiver,false);wcHttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');wcHttp.send("wcAction=GETSYNCDATA&wcDivID="+divID);if(wcHttp.status==200){var root=getDOMDocFromHttp(wcHttp);if(root==null){errorOut(wcHttp.responseText);}else{wcComponentData[divID]=XMLToArray(root);if(wcComponentData[divID]['wcCurrentView'])
wcCurrentView[divID]=wcComponentData[divID]['wcCurrentView'];}}}
function loadCurrentView(divID){var currentComponent=null;wcHttp=getXMLHTTPRequest();wcHttp.open("POST",wcReceiver,false);wcHttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');wcHttp.send("wcAction=GETTEMPLATE&wcDivID="+divID+"&wcTemplate="+wcCurrentView[divID]+"&wcTemplatesDir="+wcINIValues[divID]['templatesDir']+"&wcCompileDir="+wcINIValues[divID]['compileDir']);if(wcHttp.readyState==4){if(wcHttp.status==200){currentComponent=document.getElementById(divID);currentComponent.innerHTML=parseTemplate(divID,wcHttp.responseText);}else{errorOut(divID,"<%errorprocessingrequest%> ("+wcCurrentView[divID]+") <%withstatus%> "+wcHttp.status+":"+wcHttp.responseText);}}}
function flushSession(divID){wcHttp=getXMLHTTPRequest();wcHttp.open("GET",wcReceiver+"?NEWSESSION=true&wcDivID="+divID,false);wcHttp.setRequestHeader("If-Modified-Since",new Date(0));wcHttp.send("");wcCurrentView[divID]=false;wc_init(divID);}
function displayError(divID,errorMsg){var errorBlock=document.getElementById(divID+"-errorBlock");if(!errorBlock)
alert(errorMsg);else
errorBlock.innerHTML="<div class='errorText'>"+parseLanguageTokens(divID,errorMsg)+"</div>";}
function resetComponent(divID){if(wcINIValues[divID]['startTemplate']){wcCurrentView[divID]=trimString(wcINIValues[divID]['startTemplate']);loadCurrentView(divID);}else
errorOut(divID,"<%nostarttemplate%>");}
function wc_init(divID,optionFile){var currentComponent=document.getElementById(divID);if(optionFile)
wcOptionFile[divID]=optionFile;else
optionFile=wcOptionFile[divID];if(currentComponent){if(loadOptions(divID,optionFile)){syncObject(divID);if(!wcCurrentView[divID])
resetComponent(divID);else
loadCurrentView(divID);}}else
alert("Failed to find element: "+divID);}
function loadOptions(divID,optionFile){var retval=true;var postData="wcAction=LOADOPTIONS&wcDivID="+divID+"&wcOptionFile="+optionFile;wcHttp=getXMLHTTPRequest();wcHttp.open("POST",wcReceiver,false);wcHttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');wcHttp.send(postData);if(wcHttp.status==200){var root=getDOMDocFromHttp(wcHttp);if(root&&(root.tagName!="parsererror"))
wcINIValues[divID]=XMLToArray(root);else{errorOut(divID,"Can not load configuration file: "+optionFile);retval=false;}}else{errorOut(divID,"<%loadoptionserror%> <%withstatus%> "+wcHttp.status+":"+wcHttp.responseText);retval=false;}
return retval;}
function componentCall(divID,callName,formName,nextScreen,movingForward){var form=document.forms[formName];var divs=document.getElementsByTagName("div");if(form){var postData="wcAction=COMPONENTCALL&wcDivID="+divID+"&wcMethodName="+callName;for(var i=0;i<form.elements.length;i++){postData=postData+"&"+form.elements[i].name+"="+form.elements[i].value;}
if(wcReceiver){makeBusy(divID);wcComponentHttp=getXMLHTTPRequest();wcComponentHttp.onreadystatechange=function(){if(wcComponentHttp.readyState==4){makeUnBusy(divID);if(wcComponentHttp.status==200){var root=getDOMDocFromHttp(wcComponentHttp);var componentCallStatus=XMLToArray(root);if(componentCallStatus['code']&&componentCallStatus['code']>399){displayError(divID,componentCallStatus['text']);}else{processForm(divID,formName,nextScreen,movingForward);}}else{displayError(divID,"<%componentcallerror%> "+callName);}}}
wcComponentHttp.open("POST",wcReceiver,true);wcComponentHttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');wcComponentHttp.send(postData);}else{alert('wc_receiver is not set in the web component INI file.  This component may not function properly.');}}}
function langbankCall(divID,langTokens,language){var postData="wcAction=GETLANGTOKEN&wcDivID="+divID;var transLangTokens=new Array();if(langTokens.length==0)
return transLangTokens;for(var i=0;i<langTokens.length;i++){postData=postData+"&token["+i+"]="+langTokens[i].toLowerCase();}
postData=postData+"&lang="+language;wcHttp=getXMLHTTPRequest();wcHttp.open("POST",wcReceiver,false);wcHttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');wcHttp.send(postData);if(wcHttp.status==200){var root=getDOMDocFromHttp(wcHttp);if(root)
transLangTokens=XMLToArray(root);}
return transLangTokens;}
function prepForView(divID,nextScreen){var retval=false;wcHttp=getXMLHTTPRequest();wcHttp.open("POST",wcReceiver,false);wcHttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');wcHttp.send("wcAction=PREPFORVIEW&wcDivID="+divID+"&wcNextScreen="+nextScreen);if(wcHttp.status==200){var root=getDOMDocFromHttp(wcHttp);if(root){retArray=XMLToArray(root);if(retArray['needsRefresh']=='true'){retval=true;}}else{retval=false;}}
return retval;}
function processForm(divID,formName,nextScreen,movingForward){var currentComponent=document.getElementById(divID);if(nextScreen==wcINIValues[divID]['startTemplate']){flushSession(divID);return false;}
syncObject(divID);if(wcComponentData[divID]['status[code]']){if(wcComponentData[divID]['status[code]']>399){displayError(divID,"<%errorcode%>: "+wcComponentData[divID]['status[code]']+"<br>"+wcComponentData[divID]['status[text]']);return false;}}
var form=document.forms[formName];if(form){if(movingForward){var pushStackCommand="wcAction=PUSHSTACK&wcDivID="+divID+"&stackItem="+wcCurrentView[divID];if(wcReceiver){wcHttp=getXMLHTTPRequest();wcHttp.open("POST",wcReceiver,false);wcHttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');wcHttp.send(pushStackCommand);}else
alert('wc_receiver is not set in the web component INI file.  This component may not function properly.');}
while(wcINIValues[divID]['interface-flow']['Skip-'+nextScreen]){nextScreen=wcINIValues[divID]['interface-flow']['Skip-'+nextScreen];}
if(!(wcPostingOut[divID][formName]&&!movingForward)){wcCurrentView[divID]=nextScreen;}
var postData="wcAction=PUTSYNCDATA&wcDivID="+divID+"&wcCurrentView="+wcCurrentView[divID];for(var i=0;i<form.elements.length;i++){wcComponentData[divID][form.elements[i].name]=form.elements[i].value;if((form.elements[i].type!="checkbox")||((form.elements[i].type=="checkbox")&&form.elements[i].checked))
postData=postData+"&"+form.elements[i].name+"="+encodeURIComponent(form.elements[i].value);}
if(wcReceiver){wcHttp=getXMLHTTPRequest();wcHttp.open("POST",wcReceiver,false);wcHttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');wcHttp.send(postData);}else
alert('wc_receiver is not set in the web component INI file.  This component may not function properly.');if(!wcPostingOut[divID][formName]){if(prepForView(divID,wcCurrentView[divID])){syncObject(divID);}
loadCurrentView(divID);window.scrollTo(currentComponent.offsetLeft,currentComponent.offsetTop);}}else
errorOut(divID,"<%formdoesnotexist%>: "+formName);}
function processCancel(divID){wcCurrentView[divID]="cancel";loadCurrentView(divID);}
function makeBusy(divID){var currentComponent=document.getElementById(divID);var busyBlock=document.createElement('DIV');busyBlock.id=divID+"-wcBusyBlock";busyBlock.className="busyBlock";var objectTop=0;var objectLeft=0;var currentObject=currentComponent;while(currentObject.offsetParent){currentObject=currentObject.offsetParent;objectTop=objectTop+currentObject.offsetTop;objectLeft=objectLeft+currentObject.offsetLeft;}
busyBlock.style.top=currentComponent.offsetTop+objectTop;busyBlock.style.left=currentComponent.offsetLeft+objectLeft;busyBlock.style.width=currentComponent.offsetWidth;busyBlock.style.height=currentComponent.offsetHeight;currentComponent.appendChild(busyBlock);busyBlock.focus();}
function makeUnBusy(divID){var currentComponent=document.getElementById(divID);var busyBlock=document.getElementById(divID+'-wcBusyBlock');if(busyBlock){currentComponent.removeChild(busyBlock);}}