﻿//<!--
/*
 * GTAjax.js 
 * @abstract: General-Targeted Ajax 
 * @author: wadelau@gridtask.com,wadelau@gmail.com
 * @since: 2006-2-17 14:04
 * @update: 2006-7-7 11:36
 * @code: 1.72 // a.bc , funcs added b+, errs updated c+ 
 * @NOTICE: DO NOT USE THIS COMMERICALLY WITHOUT AUTHOR'S PAPER AUTHORIZATION
 */
var sReturn="";
var iTimer=0;
var sToid=0;
var sPstWin="myPOstWIn";
var sUrl="?";
var sMethod="GET";
var iInterval=1000;
var isWaitResponse=false;
var sForm="";
var sField="";
var sBackCont="";
var myBody=null;
var newElmt=null;
var withFile=false;
var chksArr=new Array();
var varsArr=new Array();
varsArr["subbtnval"]="Submit";
varsArr["maxuploadfiletime"]=3*60*1000;
varsArr["targetarea"]="";
varsArr["returnname"]=" Return ";
varsArr["isdebug"]=false;
varsArr["returndataonly"]=false;
varsArr["iscache"]=true;
varsArr["chkform"]="";
varsArr["forceframe"]=false;
function GTAjax(_1){
if(!isWaitResponse){
sForm=_1;
sReturn="";
var _2="";
var _3=false;
var _4=document.forms[sForm];
if(_4!=null&&typeof _4!="undefined"){
eval("document.getElementById(\""+sForm+"\").onsubmit="+function(){
return false;
});
try{
if(varsArr["targetarea"]==""){
if(typeof _4!="undefined"){
varsArr["targetarea"]=_4.parentNode.getAttribute("id");
}else{
var _5=new Object();
_5.name="targetarea";
_5.message="targetarea is empty.";
_5.location=65;
_errRpt("formElement",_5);
_5=null;
return _resetGTAjax();
}
if(typeof varsArr["targetarea"]=="undefined"||varsArr["targetarea"]==""||varsArr["targetarea"]==null){
var _5=new Object();
_5.name="targetarea";
_5.message="targetarea is empty.";
_5.location=75;
_errRpt("formElement-1",_5);
_5=null;
return _resetGTAjax();
}else{
_deBug(varsArr["isdebug"],"targetarea",varsArr["targetarea"]);
}
}
}
catch(e8){
_errRpt("parentArea",e8);
_sayPS(sField,varsArr["subbtnval"],true);
return _resetGTAjax();
}
try{
sUrl=_4.action;
sMethod=_4.method;
for(var i=_4.elements.length-1;i>=0;i--){
var el=_4.elements[i];
if(el.tagName.toLowerCase()=="select"){
for(var j=0;j<el.options.length;j++){
var op=el.options[j];
if(op.selected){
if(typeof chksArr[el.name]!="undefined"){
if(!_chkFrm(sForm,el.name,op.value,chksArr[el.name])){
return false;
}
}
_2+="&"+encodeURIComponent(el.name)+"="+encodeURIComponent(op.value);
}
}
}else{
if(el.tagName.toLowerCase()=="textarea"){
if(typeof chksArr[el.name]!="undefined"){
if(!_chkFrm(sForm,el.name,el.value,chksArr[el.name])){
return false;
}
}
_2+="&"+encodeURIComponent(el.name)+"="+encodeURIComponent(el.value);
}else{
if(el.tagName.toLowerCase()=="input"){
if(el.type.toLowerCase()=="checkbox"||el.type.toLowerCase()=="radio"){
if(el.checked){
_2+="&"+encodeURIComponent(el.name)+"="+encodeURIComponent(el.value);
}
if(typeof chksArr[el.name]!="undefined"){
if(!_chkFrm(sForm,el.name,el.value,chksArr[el.name])){
return false;
}
}
}else{
if(el.type.toLowerCase()=="file"){
if(typeof chksArr[el.name]!="undefined"){
if(!_chkFrm(sForm,el.name,el.value,chksArr[el.name])){
return false;
}
}
if(el.value!=""&&el.value!=null){
withFile=true;
_deBug(varsArr["isdebug"],"FileUpload",withFile);
if(eval(chksArr.length)==0){
break;
}
}
}else{
if(el.type.toLowerCase()!="button"&&el.type.toLowerCase()!="submit"){
if(typeof chksArr[el.name]!="undefined"){
if(!_chkFrm(sForm,el.name,el.value,chksArr[el.name])){
return false;
}
}
_2+="&"+encodeURIComponent(el.name)+"="+encodeURIComponent(el.value);
}else{
if(el.type.toLowerCase()=="submit"){
sField=el.name;
varsArr["subbtnval"]=el.value;
eval("document.getElementById('"+sField+"').disabled =true");
eval("document.getElementsByName('"+sField+"').disabled =true");
_sayPS(sField,"Data Collecting",false);
}
}
}
}
}
}
}
}
}
catch(e2){
_errRpt("formElement",e2);
_sayPS(sField,varsArr["subbtnval"],true);
return _resetGTAjax();
}
}else{
try{
if(varsArr["targetarea"]==""){
var _a=document.links;
var _b="";
for(var i=0;i<_a.length;i++){
_b=_a[i].href;
if(_b.indexOf(sForm)>-1){
_deBug(varsArr["isdebug"],"sLinkHref",_b+", and sForm:"+sForm+".");
_4=_a[i];
sUrl=sForm;
break;
}
}
if(typeof _4!="undefined"){
varsArr["targetarea"]=_4.parentNode.getAttribute("id");
}else{
var _5=new Object();
_5.name="targetarea";
_5.message="targetarea is empty.";
_5.location=226;
_errRpt("formElement-0",_5);
_5=null;
return _resetGTAjax();
}
if(typeof varsArr["targetarea"]=="undefined"||varsArr["targetarea"]==""||varsArr["targetarea"]==null){
var _5=new Object();
_5.name="targetarea";
_5.message="targetarea is empty.";
_5.location=236;
_errRpt("formElement-1",_5);
_5=null;
return _resetGTAjax();
}else{
_deBug(varsArr["isdebug"],"targetarea",varsArr["targetarea"]);
}
_a=null;
_4=null;
}
if(sUrl=="?"){
sUrl=sForm;
}
sBackCont=document.getElementById(varsArr["targetarea"]).innerHTML;
}
catch(e9){
_errRpt("parentElement",e9);
_sayPS(sField,varsArr["subbtnval"],true);
return _resetGTAjax();
}
}
if(withFile||varsArr["forceframe"]){
try{
_sayPS(sField,"Uploading data, please wait patiently",false);
var _c=(new Date).getMilliseconds();
sPstWin=sPstWin+_c;
var _d="<iframe name=\""+sPstWin+"\" id=\""+sPstWin+"\"  "+"style=\"border:0px;width:0px;height:0px\"></iframe>";
myBody=document.body;
newElmt=document.createElement("div");
newElmt.setAttribute("id","icld"+sPstWin);
myBody.appendChild(newElmt);
document.getElementById("icld"+sPstWin).innerHTML=_d;
var _e="<html><body></body></html>";
var _f=null;
eval("_f=window.frames."+sPstWin);
_f.src="about:blank";
_goSub(sForm,sUrl,sPstWin,varsArr["isdebug"]);
isWaitResponse=true;
varsArr["forceframe"]=false;
sToid=setTimeout("_inLoop()",iInterval);
_d=null;
_c=null;
_deBug(varsArr["isdebug"],"iframeListen","starting");
}
catch(e4){
_errRpt("fileUpload",e4);
_sayPS(sField,varsArr["subbtnval"],true);
return _resetGTAjax();
}
}else{
var _10=null;
var _11=false;
_sayPS(sField,"Initiating",false);
if(window.XMLHttpRequest){
_10=new XMLHttpRequest();
_deBug(varsArr["isdebug"],"xmlhttp1",_10);
}else{
if(window.ActiveXObject){
try{
_10=new ActiveXObject("Msxml2.XMLHTTP");
_deBug(varsArr["isdebug"],"xmlhttp2",_10);
}
catch(e){
try{
_10=new ActiveXObject("Microsoft.XMLHTTP");
_deBug(varsArr["isdebug"],"xmlhttp3",_10);
}
catch(e1){
_errRpt("xmlhttpInit",e1);
_sayPS(sField,varsArr["subbtnval"],true);
return _resetGTAjax();
}
}
}
}
_sayPS(sField,"Communicating",false);
sMethod=sMethod.toUpperCase();
if(_10!=null&&typeof _10!="undefined"){
_sayPS(sField,"Transacting",false);
try{
if(sMethod=="GET"){
if(!varsArr["iscache"]){
var _12=Math.random();
_2+="&iscachei="+_12;
_12=null;
}
sUrl+=(sUrl.indexOf("?")>0)?"&":"?";
sUrl+=_2;
_10.open(sMethod,sUrl,_11);
if(!varsArr["iscache"]){
_10.setRequestHeader("If-Modified-Since","Sat, 1 Jan 2000 00:00:00 GMT");
}
_2=null;
}else{
_10.open(sMethod,sUrl,_11);
_10.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
_10.setRequestHeader("Accept","text/*");
}
_deBug(varsArr["isdebug"],"sMethod",sMethod+",sUrl: "+sUrl+", sPara:"+_2);
_10.onreadystatechange=function(){
if(_10.readyState==4&&!_3){
_3=true;
sReturn=_10.responseText;
}else{
_sayPS(sField,"Loading",false);
}
};
_10.send(_2);
if(sReturn==""){
sReturn=_10.responseText;
}
}
catch(e3){
e3.message+="maybe xmlhttp init fail or access outside url";
_errRpt("xmlhttpOpen",e3);
_sayPS(sField,varsArr["subbtnval"],true);
return _resetGTAjax();
}
}
_10=null;
}
if(_3){
_sayPS(sField,"Loaded Successfully",false);
}
}else{
if(sField!=""){
try{
eval("_f=window.frames."+sPstWin);
sReturn=_f.document.body.innerHTML;
sReturn=sReturn.replace(/\n{3,}/,"");
_deBug(varsArr["isdebug"],"sReturn",sReturn);
if(sReturn==""){
if(iTimer<varsArr["maxuploadfiletime"]){
iTimer+=iInterval;
sToid=setTimeout("_inLoop()",iInterval);
}else{
_deBug(varsArr["isdebug"],"connTimeOut"," Connection server timeout");
}
}else{
window.clearTimeout(sToid);
_f=null;
}
}
catch(e7){
if(varsArr["isdebug"]){
e7.message+="\n\nmsg ready but cannot be accessed now, keep waiting on....\n";
_errRpt("accessReturn",e7);
}
sToid=setTimeout("_inLoop()",iInterval);
}
}
}
if(sReturn!=""){
_sayPS(sField,varsArr["subbtnval"],true);
try{
if(sField!=""){
sBackCont=document.getElementById(varsArr["targetarea"]).innerHTML;
sReturn+="&nbsp;&nbsp;<a href=\"javascript:goGTAjaxBack('"+varsArr["targetarea"]+"');\"><font face=\"Wingdings 3\">@</font>"+varsArr["returnname"]+"</a><br/>&nbsp;";
}
if(withFile||varsArr["forceframe"]||(!withFile&&!varsArr["returndataonly"])){
document.getElementById(varsArr["targetarea"]).innerHTML=sReturn;
}
if(myBody!=null&&typeof myBody!="undefined"){
myBody.removeChild(newElmt);
}
_resetGTAjax();
return sReturn;
}
catch(e5){
_errRpt("finishJob",e5);
return _resetGTAjax();
}
_deBug(varsArr["isdebug"],"timeElapsed",iTimer);
iTimer=0;
}else{
if(!isWaitResponse){
_deBug(varsArr["isdebug"],"serverResponse"," emptyValue");
}
}
return sReturn;
}
function _inLoop(){
GTAjax(sForm);
}
function _deBug(_13,_14,_15){
if(_13){
//window.alert("the "+_14+" is: "+_15);
}
}
function _errRpt(_16,_17){
try{
var _18=navigator.appName;
var _19="err@GTAjax: "+_16+"\n name:"+_17.name+"\n message:"+_17.message;
if(_18.indexOf("Explorer")>0){
_19+="\n location:"+_17.location;
}
_19+="\n description:"+_17.description;
//window.alert(_19);
}
catch(rpte){
//window.alert("_errRpt:"+rpte+", sObj:"+(typeof _17));
_sayPS(sField,varsArr["subbtnval"],true);
return _resetGTAjax();
}
}
function _sayPS(_1a,_1b,_1c){
if(_1a!=null&&typeof _1a!="undefined"&&_1a!=""){
var _1d="....";
if(_1c){
eval("document.getElementById('"+_1a+"').disabled =false");
eval("document.getElementsByName('"+_1a+"').disabled = false");
}
if(_1b!=varsArr["subbtnval"]){
_1b+=_1d;
}
eval("document.getElementById('"+_1a+"').value ='"+_1b+"'");
eval("document.getElementsByName('"+_1a+"').value='"+_1b+"'");
}else{
if(_1a==""){
document.getElementById(varsArr["targetarea"]).innerHTML=_1b;
}else{
_errRpt(varsArr["isdebug"],_1a);
}
}
}
function _goSub(_1e,_1f,_20,_21){
var _22=document.getElementById(_1e);
if(withFile){
_22.encoding="multipart/form-data";
}else{
_22.encoding="application/x-www-form-urlencoded";
}
_22.target=_20;
_22.method="POST";
_22.action=_1f;
_22.submit();
_deBug(varsArr["isdebug"],"_goSub",_1e+":"+_22.method+":"+_1f+":"+_20);
_22=null;
}
function _resetGTAjax(){
iTimer=0;
sToid=0;
sUrl="?";
sMethod="GET";
isWaitResponse=false;
sForm="";
sField="";
myBody=null;
newElmt=null;
withFile=false;
chksArr=new Array();
varsArr=new Array();
varsArr["subbtnval"]="Submit";
varsArr["maxuploadfiletime"]=3*60*1000;
varsArr["targetarea"]="";
varsArr["returnname"]=" Return ";
varsArr["isdebug"]=false;
varsArr["returndataonly"]=false;
varsArr["iscache"]=true;
varsArr["chkform"]="";
varsArr["forceframe"]=false;
return false;
}
function goGTAjaxBack(_23){
document.getElementById(_23).innerHTML=sBackCont;
}
function setGTAjax(_24,_25){
try{
if(_24=="chkform"){
if(_25!=null&&_25!=""){
var _26=_25.split(":",3);
if(_26[0]!=null&&_26[0]!=""){
if(_26[1]==null||_26[1]==""){
_26[1]="notvalue=";
}
if(_26[2]==null||_26[2]==""){
_26[2]=" has not expected value.";
}
chksArr[_26[0]]=_26[1]+","+_26[2];
}
if(chksArr.length==0){
chksArr[100]="1";
}
}
}else{
varsArr[_24]=_25;
}
}
catch(e6){
_errRpt("setGTAjax",e6);
_sayPS(sField,varsArr["subbtnval"],true);
return _resetGTAjax();
}
}
function _chkFrm(_27,_28,_29,_2a){
try{
var _2b=_2a.split(",",2);
var _2c=_2b[0];
var _2d=_2b[1];
var _2e=0;
var _2f=true;
if(_2c.indexOf("+")>-1){
_2c=_2c.replace("+","");
if(eval(_29.length)==_2e){
_2f=false;
}
}
if(_2f){
if(_2c.indexOf("=")>-1){
var _30=_2c.split("=");
_2c=_30[0];
if(_30[0]==null||_30==""){
_30[1]=0;
}
_2e=_30[1];
}
switch(_2c){
case "req":
case "required":
case "notvalue":
if(eval(_29.length)==_2e){
_2f=false;
}
break;
case "maxlength":
case "maxlen":
if(eval(_29.length)>_2e){
_2f=false;
}
break;
case "minlength":
case "minlen":
if(eval(_29.length)<_2e){
_2f=false;
}
break;
case "alnum":
case "alphanumeric":
var _31=_29.search(/[^A-Za-z0-9]/);
if(_29.length>0&&_31>=0){
_2f=false;
}
break;
case "num":
case "numeric":
var _31=_29.search(/[^0-9]/);
if(_29.length>0&&_31>=0){
_2f=false;
}
break;
case "alphabetic":
case "alpha":
var _31=_29.search(/[^A-Za-z]/);
if(_29.length>0&&_31>=0){
_2f=false;
}
break;
case "alnumhyphen":
var _31=_29.search(/[^A-Za-z0-9\-_]/);
if(_29.length>0&&_31>=0){
_2f=false;
}
break;
case "email":
if(_29==""||_29.match(/^[\w-\.]+\@[\w\.-]+\.[a-z]{2,4}$/)==null){
_2f=false;
}
break;
case "lt":
case "lessthan":
if(isNaN(_29)||(eval(_29)>=_2e)){
_2f=false;
}
break;
case "gt":
case "greaterthan":
if(isNaN(_29)||(eval(_29)<=_2e)){
_2f=false;
}
break;
case "regexp":
if(_29.length>0){
if(!_29.match(_2e)){
_2f=false;
}
}
break;
default:
_2d="Unpredefined form validate type: "+_2c;
_2f=false;
}
}
if(!_2f){
//window.alert("Attention: "+_2d);
eval("document."+_27+"."+_28+".style.background='#FFFF99'");
eval("document."+_27+"."+_28+".focus()");
_sayPS(sField,varsArr["subbtnval"],true);
return _resetGTAjax();
}
return _2f;
}
catch(echk){
_errRpt("formValidate",echk);
_sayPS(sField,varsArr["subbtnval"],true);
return _resetGTAjax();
}
}
