function zumi_getAttributes(node){
var attStr="";
if(node&&node.attributes.length>0){
for(var a=0;a<node.attributes.length;a++){
attStr+=" "+node.attributes.item(a).nodeName+"=\"";
attStr+=node.attributes.item(a).nodeValue+"\"";
}
}
return attStr;
}
function zumi_setOuterHTML(element,str){
var iRange=document.createRange();
iRange.setStartBefore(element);
var strFragment=iRange.createContextualFragment(str);
var sRangeNode=iRange.startContainer;
iRange.insertNode(strFragment);
sRangeNode.removeChild(element);
}
function zumi_getOuterHTML(element){
var strOuter="";
var iEmpty=/^(img|embed|input|br|hr|bgsound)$/i;
switch(element.nodeType){
case 1:
strOuter+="<"+element.nodeName.toLowerCase();
strOuter+=zumi_getAttributes(element);
if(element.nodeName.match(iEmpty)){
strOuter+=" />";
}else{
strOuter+=">"+element.innerHTML;
strOuter+="</"+element.nodeName.toLowerCase()+">";
}
break;
case 3:
strOuter+=element.nodeValue;
break;
case 8:
cNodesStr+="<!--"+element.nodeValue+"-->";
break;
}
return strOuter;
}
function zumi_Log(priority,title,message)
{
if(priority<=zumi_LogPriority)
{
alert(title+"\r\n\r\n"+message);
}
}
function zumi_XmlStatusChange()
{
if(zumi_XmlHttp.readyState==4)
{
var text=zumi_XmlHttp.responseText;
var status=zumi_XmlHttp.status;
zumi_XmlHttp=null;
if(zumi_LogPriority>0&&window.clipboardData)
{
clipboardData.setData("Text",text);
}
if(status==12019)
{
zumi_Log(1,"Received XmlHttp response with error status: "+status,text);
}
else
{
zumi_Log(3,"Received XmlHttp response: "+text.length+" characters, status: "+status,text);
if(text=="keepalive")
{
zumi_Log(3,"Keep-alive timer request","");
zumi_UpdateKeepAliveTimer(zumi_SessionTimeOut);
}
else if(text=="refresh")
{
zumi_Log(2,"Refresh requested","");
zumi_Form.submit();
}
else if(text.indexOf("ASP_SMARTNAV_RDIR")!=-1)
{
var start=text.indexOf('"');
var end=text.indexOf('"',start+1);
var url=text.substring(start+1,end);
var span=document.createElement("SPAN");
span.innerHTML='<input type="hidden" value="'+url+'">';
url=span.childNodes[0].value;
zumi_Log(2,"Redirecting to url:",url);
window.location.href=url;
}
else if(text.indexOf("<!-- This page has been generated by zumiPage for ASP.NET -->")!=-1)
{
zumi_UpdateControls(text);
}
else
{
zumi_Log(1,"Server exception or invalid response","");
document.clear();
document.write(text);
document.close();
}
}
}
}
function zumi_InitXmlHttp()
{
var xmlHttp;
try
{
xmlHttp=new XMLHttpRequest();
}
catch(e)
{
try{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
catch(e){
zumi_Log(1,"Browser does not support XMLHttp. Switching to standard postback mode.","");
return null;
}
}
return xmlHttp;
}
function zumi_SendRequest(params)
{
if(zumi_XmlHttp==null)
{
zumi_XmlHttp=zumi_InitXmlHttp();
if(zumi_XmlHttp!=null)
{
zumi_XmlHttp.onreadystatechange=zumi_XmlStatusChange;
zumi_XmlHttp.open("POST",zumi_Form.action,true);
zumi_XmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
if(zumi_LogPriority>0&&window.clipboardData)
{
clipboardData.setData("Text",params);
}
zumi_Log(3,"Sending XmlHttp request: "+params.length+" characters",params);
try
{
zumi_XmlHttp.send(params);
return true;
}
catch(e)
{
zumi_Log(1,"Exception occured while sending XmlHttp request. Switching to standard postback.",e.message);
return false;
}
}
else
{
return false;
}
}
else
{
return false;
}
}
function zumi_DoPostBack()
{
zumi_RemoveHandleHistoryEvent();
if(zumi_AllowHiddenPostback)
{
if(zumi_XmlHttp!=null)
{
return true;
}
else if(zumi_IsExcludeControl(zumi_Form.__EVENTTARGET.value))
{
return false;
}
else if(zumi_SendRequest(zumi_GetFormParams()+"zumiPage_XmlRequest=true"+zumi_EventParam))
{
zumi_PostbackControlTarget=zumi_Form.__EVENTTARGET.value;
zumi_StartWait(zumi_PostbackControlTarget);
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}
function zumi_SetEvent(eventTarget,param)
{
zumi_Form.__EVENTTARGET.value=eventTarget.split("$").join(":");
zumi_Form.__EVENTARGUMENT.value="";
zumi_EventParam=param;
}
function zumi_SetEventPosition(eventTarget,evt)
{
var x=0;
var y=0;
if(typeof(evt.offsetX)=="number")
{
x=evt.offsetX;
y=evt.offsetY;
}
else if(evt.target!=null)
{
var Element=evt.target;
var CalculatedTotalOffsetTop=0;
var CalculatedTotalOffsetLeft=0;
while(Element.offsetParent)
{
CalculatedTotalOffsetLeft+=Element.offsetLeft;
CalculatedTotalOffsetTop+=Element.offsetTop;
Element=Element.offsetParent;
};
x=evt.pageX-CalculatedTotalOffsetLeft;
y=evt.pageY-CalculatedTotalOffsetTop;
}
zumi_SetEvent(eventTarget,"&"+eventTarget+".x="+x+"&"+eventTarget+".y="+y);
}
function __doPostBack(eventTarget,eventArgument){
zumi_Form.__EVENTTARGET.value=eventTarget.split("$").join(":");
zumi_Form.__EVENTARGUMENT.value=eventArgument;
zumi_EventParam="";
if(!(zumi_DoPostBack())){
zumi_Form.submit();
}
}
function zumi_UpdateUserTimer(interval)
{
if(zumi_UserTimerRef!=null)
{
clearTimeout(zumi_UserTimerRef);
}
if(interval!=null&&interval!=-1)
{
zumi_UserTimerRef=setTimeout(zumi_OnUserTimer,interval);
}
}
function zumi_UpdateKeepAliveTimer(interval)
{
if(zumi_KeepAliveTimerRef!=null)
{
clearTimeout(zumi_KeepAliveTimerRef);
}
if(interval!=null&&interval!=-1)
{
zumi_KeepAliveTimerRef=setTimeout(zumi_OnKeepAliveTimer,interval);
}
}
function zumi_OnUserTimer()
{
zumi_SetEvent("zumiPage_UserTimer","");
if(!zumi_DoPostBack())
{
zumi_Form.submit();
}
}
function zumi_OnKeepAliveTimer()
{
zumi_SendRequest("zumiPage_KeepAliveRequest=");
}
function zumi_IsExcludeControl(controlTarget)
{
if(zumiPage_ExcludeControls!=null)
{
for(var i=0;i<zumiPage_ExcludeControls.length;i++)
{
if(zumiPage_ExcludeControls[i]==controlTarget)
{
return true;
}
}
}
return false;
}
function zumi_StartWait(controlTarget)
{
document.body.style.cursor="wait";
if(zumiPage_WaitClientScriptControl!=null)
{
for(var i=0;i<zumiPage_WaitClientScriptControl.length;i++)
{
if(zumiPage_WaitClientScriptControl[i]==controlTarget)
{
eval(zumiPage_WaitClientScriptStart[i]);
break;
}
}
}
}
function zumi_EndWait(controlTarget)
{
document.body.style.cursor="";
if(zumiPage_WaitClientScriptControl!=null)
{
for(var i=0;i<zumiPage_WaitClientScriptControl.length;i++)
{
if(zumiPage_WaitClientScriptControl[i]==controlTarget)
{
eval(zumiPage_WaitClientScriptEnd[i]);
break;
}
}
}
}
function zumi_UpdateControlsInternal(newDoc,newForm,newScripts,toDoc,toForm,toScripts)
{
zumi_EndWait(zumi_PostbackControlTarget);
zumi_RemoveOldArrays();
for(var scriptI=0;scriptI<newScripts.length;scriptI++)
{
var oScript=newScripts[scriptI];
if(oScript.text.indexOf("var zumiPage_Members")!=-1)
{
zumi_Log(2,"Copy ARRAYS script:",oScript.src+oScript.text);
zumi_RemoveScriptByKeyword(toScripts,"var zumiPage_Members",false);
zumi_CopyScript(oScript,window.document);
break;
}
}
zumi_UpdateMembers();
zumi_MergeFormAttributes(newForm,toForm);
if(zumi_UpdateStyleSheets)
{
zumi_UpdateStyles(newDoc,document);
}
if(zumiPage_UpdateControlsArray!=null)
{
for(var controlI=0;controlI<zumiPage_UpdateControlsArray.length;controlI++)
{
var controlId=zumiPage_UpdateControlsArray[controlI];
var srcControl=newDoc.getElementById(controlId);
var toControl=document.getElementById(controlId);
if(srcControl!=null&&toControl!=null)
{
zumi_CopyControl(srcControl,toControl)
}
else if(toControl!=null)
{
if(toControl.style!=null)
{
zumi_Log(2,"Copy INVISIBLE html element: "+toControl.id,"");
toControl.style.display="none";
}
}
else
{
zumi_Log(0,"zumiPage: The ReturnControls collection contains an element that is not existing on the target document:",controlId+"\r\n\r\nPlease try to put the control inside a panel control, and return the panel instead of the control itself.");
}
}
}
zumi_UpdateHiddenFormInputs(newForm,toForm);
for(var scriptI=0;scriptI<newScripts.length;scriptI++)
{
var found=false;
var oScript=newScripts[scriptI];
if(oScript.text.indexOf("function __doPostBack")==-1)
{
if(zumiPage_ReturnScriptValidators!=null)
{
for(var validatorI=0;validatorI<zumiPage_ReturnScriptValidators.length;validatorI++)
{
var validator=zumiPage_ReturnScriptValidators[validatorI];
if(oScript.text.indexOf(validator)!=-1||oScript.src.indexOf(validator)!=-1)
{
zumi_Log(2,"Copy VALIDATED script:",oScript.src+oScript.text);
zumi_RemoveScriptByKeyword(toScripts,validator,oScript.src!="")
zumi_CopyScript(oScript,document);
found=true;
break;
}
}
}
if(!found)
{
for(var scriptX=0;scriptX<toScripts.length;scriptX++)
{
var toScript=toScripts[scriptX];
if((toScript.src!=""&&toScript.src.indexOf(oScript.src)>-1)
||(toScript.text!=""&&toScript.text==oScript.text)
||(toScript.src==""&&oScript.src!=""&&toScript.text.indexOf(oScript.src+":zumiSrc")>-1))
{
found=true;
break;
}
}
if(!found)
{
if(oScript.src!=""&&zumi_AutoUpdateNewStaticScripts)
{
zumi_Log(2,"Copy NEW STATIC script:",oScript.src+oScript.text);
zumi_CopyScript(oScript,window.document);
}
else if(oScript.text!=""&&zumi_AutoUpdateNewDynamicScripts)
{
zumi_Log(2,"Copy NEW DYNAMIC script:",oScript.src+oScript.text);
zumi_CopyScript(oScript,window.document);
}
}
}
}
}
newDoc.body.innerHTML="";
}
function zumi_UpdateControls(text)
{
if(zumi_MSBrowser)
{
var newDoc=window.document.createDocumentFragment();
var newBody=newDoc.createElement("BODY");
newDoc.appendChild(newBody);
newBody.innerHTML=text;
var newForm=newDoc.forms[zumi_Form.name];
zumi_UpdateControlsInternal(newDoc,newForm,newDoc.scripts,document,zumi_Form,document.scripts)
}
else
{
var newDoc=document.getElementById("zumi_Frame").contentWindow.document;
newDoc.body.innerHTML=text;
var newForm=newDoc.forms[zumi_Form.name];
var newScripts=newDoc.getElementsByTagName("SCRIPT");
var toScripts=document.getElementsByTagName("SCRIPT");
zumi_UpdateControlsInternal(newDoc,newForm,newScripts,document,zumi_Form,toScripts)
}
}
function zumi_MergeFormAttributes(newForm,toForm)
{
if(zumi_MSBrowser)
{
toForm.onsubmit=null;
toForm.mergeAttributes(newForm);
}
else
{
}
}
function zumi_CopyControl(oControl,toControl)
{
if(zumi_MSBrowser)
{
zumi_Log(2,"Copy html element: "+oControl.id,oControl.outerHTML);
var inScripts=oControl.getElementsByTagName("SCRIPT");
while(inScripts.length>0)
{
var script=inScripts[0];
script.parentNode.removeChild(script,true);
oControl.parentNode.insertBefore(script,oControl);
inScripts=oControl.getElementsByTagName("SCRIPT");
}
if(oControl.outerHTML!=toControl.outerHTML)
{
toControl.replaceNode(oControl);
}
}
else
{
newHtml=zumi_getOuterHTML(oControl);
zumi_Log(2,"Copy html element: "+oControl.id,newHtml);
if(newHtml!=zumi_getOuterHTML(toControl))
{
zumi_setOuterHTML(toControl,newHtml);
}
}
}
function zumi_UpdateHiddenFormInputs(oForm,toForm)
{
var formInputs=oForm.getElementsByTagName("INPUT");
for(var inputI=0;inputI<formInputs.length;inputI++)
{
var oInput=formInputs[inputI];
if(oInput.type=="hidden")
{
zumi_CopyFormInput(oInput,toForm);
}
}
}
function zumi_CopyFormInput(oInput,toForm)
{
if(toForm.elements[oInput.name]==null)
{
zumi_Log(3,"Copy new form input: "+oInput.name,oInput.value);
var newInput=document.createElement("INPUT");
newInput.type=oInput.type;
newInput.value=oInput.value;
newInput.name=oInput.name;
newInput.id=oInput.name;
toForm.appendChild(newInput);
}
else
{
zumi_Log(3,"Copy existing form input: "+oInput.name,oInput.value);
toForm.elements[oInput.name].value=oInput.value;
}
}
function zumi_CopyScript(oScript,toDoc)
{
var script=toDoc.createElement("SCRIPT");
script.language=oScript.language;
script.type=oScript.type;
if(oScript.src!="")
{
var xmlHttp=zumi_InitXmlHttp();
if(xmlHttp!=null)
{
var filename=oScript.src;
xmlHttp.open("GET",filename,false);
xmlHttp.send(null);
if(xmlHttp.readyState==4)
{
var newText="//"+oScript.src+":zumiSrc\r\n"+xmlHttp.responseText;
zumi_Log(2,"Got asynchronously static script response",newText);
script.text=newText;
}
}
else
{
zumi_Log(1,"Failed to load asynchronously static script using XmlHttp",oScript.src);
script.src=oScript.src;
}
}
else
{
script.text=oScript.text;
}
toDoc.body.appendChild(script);
}
function zumi_RemoveScriptByKeyword(oScripts,keyword,isSrc)
{
for(var scriptI=oScripts.length-1;scriptI>=0;scriptI--)
{
var oScript=oScripts[scriptI];
var thisSrc=oScript.text.indexOf(":zumiSrc")>-1;
if(isSrc)
{
if(thisSrc&&oScript.text.indexOf(keyword)>-1||oScript.src.indexOf(keyword)>-1)
oScript.parentNode.removeChild(oScript,true);
}
else
{
if(!thisSrc&&oScript.text.indexOf(keyword)>-1)
oScript.parentNode.removeChild(oScript,true);
}
}
}
function zumi_UpdateStylesIE(oDoc,toDoc)
{
zumi_Log(2,"Found "+oDoc.styleSheets.length+" style-sheet collections","");
for(var styleI=0;styleI<oDoc.styleSheets.length;styleI++)
{
var oStyle=oDoc.styleSheets[styleI];
var found=false;
for(var styleX=0;styleX<toDoc.styleSheets.length;styleX++)
{
var toStyle=toDoc.styleSheets[styleX];
if((oStyle.href!=""&&oStyle.href==toStyle.href)||(oStyle.href==""&&oStyle.cssText==toStyle.cssText))
{
found=true;
if(toStyle.disabled)
{
zumi_Log(3,"Add new style-sheet:",oStyle.href+oStyle.cssText);
toStyle.disabled=false;
}
break;
}
}
if(!(found))
{
zumi_CopyStyle(oStyle,toDoc);
}
}
return;
for(var styleI=0;styleI<toDoc.styleSheets.length;styleI++)
{
var toStyle=toDoc.styleSheets[styleI];
var found=false;
if(!(toStyle.disabled))
{
for(var styleX=0;styleX<oDoc.styleSheets.length;styleX++)
{
var oStyle=oDoc.styleSheets[styleX];
if((oStyle.href!=""&&oStyle.href==toStyle.href)||(oStyle.href==""&&oStyle.cssText==toStyle.cssText))
{
found=true;
break;
}
}
if(!(found))
{
zumi_Log(3,"Remove old style-sheet:",toStyle.href+toStyle.cssText);
toStyle.disabled=true;
}
}
}
}
function zumi_CopyStyle(oStyle,toDoc)
{
zumi_Log(3,"Add new style-sheet:",oStyle.href+oStyle.cssText);
if(oStyle.href!="")
{
toDoc.createStyleSheet(oStyle.href,0);
}
else
{
toDoc.createStyleSheet("",0);
toDoc.styleSheets[0].cssText=oStyle.cssText;
}
}
function zumi_UpdateStylesMozilla(oDoc,toDoc)
{
var styleStr="<style>";
var styleCol=oDoc.getElementsByTagName("style");
for(var styleI=0;styleI<styleCol.length;styleI++)
{
var style=styleCol[styleI];
styleStr+=style.innerHTML;
}
styleStr+="<\/style>";
styleCol=oDoc.getElementsByTagName("link");
for(var styleI=0;styleI<styleCol.length;styleI++)
{
var style=styleCol[styleI];
styleStr+="<link type='text/css' rel='stylesheet' href='"+style.href+"'/>";
}
zumi_Log(2,"Found "+oDoc.styleSheets.length+" style-sheet collections",styleStr);
var toControl=toDoc.getElementsByTagName("HEAD")[0];
toControl.innerHTML=styleStr;
}
function zumi_UpdateStyles(oDoc,toDoc)
{
if(zumi_MSBrowser)
{
zumi_UpdateStylesIE(oDoc,toDoc)
}
else
{
zumi_UpdateStylesMozilla(oDoc,toDoc)
}
}
function zumi_UpdateMembers()
{
zumi_SessionTimeOut=zumiPage_Members[0];
zumi_UserTimeOut=zumiPage_Members[1];
zumi_LogPriority=zumiPage_Members[2];
zumi_UpdateStyleSheets=zumiPage_Members[3];
zumi_AllowHiddenPostback=zumiPage_Members[4];
zumi_AutoUpdateNewStaticScripts=zumiPage_Members[5];
zumi_AutoUpdateNewDynamicScripts=zumiPage_Members[6];
zumi_UpdateUserTimer(zumi_UserTimeOut);
zumi_UpdateKeepAliveTimer(zumi_SessionTimeOut);
}
function zumi_RemoveOldArrays()
{
zumi_Form.elements["zumiPage_FirstRequest"].value="false";
zumi_EventParam="";
zumiPage_ReturnScriptValidators=null;
zumiPage_UpdateControlsArray=null;
zumiPage_WaitClientScriptControl=null;
zumiPage_WaitClientScriptStart=null;
zumiPage_WaitClientScriptEnd=null;
zumiPage_ExcludeControls=null;
Page_Validators=new Array();
}
function zumi_HandleHistory()
{
zumi_RemoveHandleHistoryEvent();
if(zumi_Form.elements["zumiPage_FirstRequest"].value=="false")
{
zumi_Log(2,"History browsing detected, resetting the form fields to the initial static state","");
if(zumi_MSBrowser)
{
zumi_Form.reset();
}
else
{
window.location.href=window.location.href;
}
}
}
function zumi_RemoveHandleHistoryEvent()
{
if(zumi_Form.elements["zumiPage_FirstRequest"]!=null)
{
if(zumi_MSBrowser)
{
window.detachEvent("onload",zumi_HandleHistory);
}
else
{
window.removeEventListener("load",zumi_HandleHistory,false);
}
}
}
function zumi_RegisterHandleHistoryEvent()
{
if(zumi_Form.elements["zumiPage_FirstRequest"]!=null)
{
if(zumi_MSBrowser)
{
window.attachEvent("onload",zumi_HandleHistory);
}
else
{
window.addEventListener("load",zumi_HandleHistory,false);
}
}
}
function zumi_GetFormParams(){
var zumi_FormParams="";
var count=zumi_Form.elements.length;
var element;
for(var i=0;i<count;i++){
element=zumi_Form.elements[i];
var tagName=element.tagName.toLowerCase();
if(tagName=="input"){
var type=element.type;
if((type=="text"||type=="hidden"||type=="password"||
((type=="checkbox"||type=="radio")&&element.checked))){
zumi_FormParams+=element.name+"="+zumi_EncodeCallback(element.value)+"&";
}
}
else if(tagName=="select"){
var selectCount=element.options.length;
for(var j=0;j<selectCount;j++){
var selectChild=element.options[j];
if(selectChild.selected==true){
zumi_FormParams+=element.name+"="+zumi_EncodeCallback(selectChild.value)+"&";
}
}
}
else if(tagName=="textarea"){
zumi_FormParams+=element.name+"="+zumi_EncodeCallback(element.value)+"&";
}
}
return zumi_FormParams;
}
function zumi_EncodeCallback(parameter){
if(encodeURIComponent){
return encodeURIComponent(parameter);
}
else{
return escape(parameter);
}
}
function zumi_FindForm()
{
for(var i=0;i<document.forms.length;i++)
{
var form=document.forms[i];
if(form.elements["__VIEWSTATE"]!=null)
{
return form;
}
}
zumi_Log(1,"ASP.NET Form not found!","");
return null;
}
var zumi_SessionTimeOut=-1;
var zumi_UserTimeOut=-1;
var zumi_XmlHttp;
var zumi_UserTimerRef=null;
var zumi_KeepAliveTimerRef=null;
var zumi_LogPriority=0;
var zumi_UpdateStyleSheets=false;
var zumi_AllowHiddenPostback=true;
var zumi_AutoUpdateNewStaticScripts=false;
var zumi_AutoUpdateNewDynamicScripts=false;
var zumi_MSBrowser=(window.navigator.appName.toLowerCase().indexOf('explorer')!=-1);
var zumi_Form=zumi_FindForm()
var zumi_PostbackControlTarget=null;
var zumi_EventParam="";
var zumiPage_ReturnScriptValidators;
var zumiPage_UpdateControlsArray;
var zumiPage_WaitClientScriptControl;
var zumiPage_WaitClientScriptStart;
var zumiPage_WaitClientScriptEnd;
var zumiPage_ExcludeControls;
zumi_RegisterHandleHistoryEvent();
