
var A=function(){}
A.check=function(sVar,sDft){return sVar!=undefined?sVar:sDft;}
A.isArray=function(aArr){return typeof(aArr)=="object"||typeof(aArr)=="array";}
A.inArray=function(aArr,sVal){for(sK in aArr){if(aArr[sK]==sVal){return true;}}
return false;}
A.count=function(aArr){if(typeof(aArr)=="object"){var iCnt=0;for(sKey in aArr){iCnt++;}return iCnt;}
if(typeof(aArr)=="array"){return aArr.length;}
return 0;}
A.empty=function(aArr){return A.count(aArr)<=0;}
A.clone=function(aArr){var oCln={};for(var sK in aArr){if(typeof aArr[sK]=="object"){oCln[sK]=A.clone(aArr[sK]);}else{oCln[sK]=aArr[sK];}}
return oCln;}
A.get=function(aArr,sKey,sDef){sDef=A.check(sDef,"");var aKey=new Array();if(!A.isArray(aArr)){return sDef;}
if(A.empty(aArr)){return sDef;}
if(S.like(sKey,"[\/]")){aKey=(""+sKey).split("/");}
else if(S.like(sKey,"[>]")){aKey=(""+sKey).split(">");}
if(!A.empty(aKey)){var sVal=aArr;for(var i=0;i<A.count(aKey);i++){sVal=A.get(sVal,aKey[i],sDef);}
return sVal;}
return(sKey in aArr)?aArr[sKey]:sDef;}
A.cycle=function(aArr,sKey,sDef){sDef=A.check(sDef,"");if(!A.isArray(aArr)){return sDef;}
if(A.empty(aArr)){return sDef;}
sKey=!isNaN(sKey)?sKey:0;return A.get(aArr,sKey%A.count(aArr));}
A.descendant=function(aArr,sKey,sQuo){sQuo=A.check(sQuo,"");var sVal=A.get(aArr,sKey);var sDsc=sVal?(sQuo+sVal+sQuo):"";for(var sK in aArr){var aV=aArr[sK];if(A.isArray(aV)){var sTmp=A.descendant(aV,sKey,sQuo);if(sTmp!=""){sDsc+=(sDsc==""?"":", ")+sTmp;}}}
return sDsc;}
A.filter=function(aArr,sFlt,iLmt){iLmt=A.check(iLmt,0);if(!A.isArray(aArr)){return sDef;}
if(A.empty(aArr)){return sDef;}
var aFlt=A.toFilter(sFlt);var aRst=new Array();for(var sK in aArr){var sV=aArr[sK];var bMat=true;var iCnt=0;for(var sF in aFlt){var sU=aFlt[sF];var bFlt=true;var sGlu=A.get(aFlt,sF+">glue");var sKey=A.get(aFlt,sF+">key");var sOpr=A.get(aFlt,sF+">operator");var sVal=A.get(aFlt,sF+">value");if(sKey!==""){var sCmp=A.get(aArr,sK+"/"+sKey);var iCmp=!isNaN(sCmp)?(sCmp*1):0;var iVal=!isNaN(sVal)?(sVal*1):0;switch(sOpr){case"==":bFlt=sCmp==sVal;break;case"<>":bFlt=sCmp!=sVal;break;case"!=":bFlt=sCmp!=sVal;break;case"!~":bFlt=!S.like(sCmp,"("+sVal+")");break;case"~=":bFlt=S.like(sCmp,"("+sVal+")");break;case"<":bFlt=iCmp<iVal;break;case">":bFlt=iCmp>iVal;break;case"<=":bFlt=iCmp<=iVal;break;case">=":bFlt=iCmp>=iVal;break;}}else{bFlt=(sV in sVal);}
bMat=(sGlu=="||")?(bMat||bFlt):(bMat&&bFlt);}
if(bMat){aRst[sK]=sV;iCnt++;}
if(iLmt==1&&iCnt>=1){return sV;}
if(iLmt>0&&iCnt>=iLmt){return aRst;}}
return aRst;}
A.distinct=function(aArr,sKey){var aVal=new Array();for(var sK in aArr){var sV=aArr[sK];var sVal=A.get(aArr,sK+(sKey?(">"+sKey):""));if(!A.inArray(aVal,sVal)){aVal.push(sVal);}}
return aVal;}
A.reverseKey=function(aArr){var aVal=new Array();for(var sK in aArr){aVal[aArr[sK]]=sK;}
return aVal;}
A.sum=function(aArr,sKey){var iSum=0;for(var sK in aArr){var sV=aArr[sK];var iVal=A.get(aArr,sK+(sKey?(">"+sKey):""));iSum+=!isNaN(iVal)?parseFloat(iVal):0;}
return iSum;}
A.avg=function(aArr,sKey){if(A.count(aArr)<=0){return 0;}
return A.sum(aArr,sKey)/A.count(aArr);}
A.minValue=function(aArr,sKey){var iCnt=0;var iVal=0;for(var sK in aArr){var sV=aArr[sK];var iV=A.get(aArr,sK+(sKey?(">"+sKey):""));if(iCnt<=0){iVal=iV;}else{iVal=Math.min(iV,iVal);}
iCnt++;}
return iVal;}
A.maxValue=function(aArr,sKey){var iCnt=0;var iVal=0;for(var sK in aArr){var sV=aArr[sK];var iV=A.get(aArr,sK+(sKey?(">"+sKey):""));if(iCnt<=0){iVal=iV;}else{iVal=Math.max(iV,iVal);}
iCnt++;}
return iVal;}
A.evaluateType=function(sExp){var sType="unknown";if(S.like(sExp,"^[<].+[>]$")){sType="xml";}
else if(S.like(sExp,"^array[(].*=>.*(,.*=>.*)?[)]$")){sType="php";}
else if(S.like(sExp,"^[{](.*[:].*)([,].*[:].*)?[}]$")){sType="json";}
else if(S.like(sExp,"^[[].*([,].*)?[]]$")){sType="json";}
else if(S.like(sExp,"^(.*[=].*)([&].*[=].*)?$")){sType="query";}
else if(S.like(sExp,"^(.*[:].*)([;].*[:].*)?$")){sType="pair";}
else if(S.like(sExp,"^([^,]+)([,][^,]+)+$")){sType="enum";}
else if(S.like(sExp,"^([^|]+)([|][^|]+)+$")){sType="pipe";}
return sType;}
A.toQuery=function(sExp,sEql,sGlu){sEql=A.check(sEql,"=");sGlu=A.check(sGlu,"&");var aRst=new Array();var aStr=(""+sExp).split(sGlu);for(var i=0;i<A.count(aStr);i++){var aTmp=(""+aStr[i]).split(sEql);var sKey=(0 in aTmp)?aTmp[0]:"";var sVal=(1 in aTmp)?aTmp[1]:"";var sVal=decodeURIComponent(sVal);var sType=A.evaluateType(sVal);if(S.like(sType,"^(php|json|query)$")){aRst[sKey]=A.parse(sVal,sType);}else{aRst[sKey]=sVal;}}
return aRst;}
A.toPhp=function(sExp){sExp=S.replace(sExp,"array[(][\"]","{\"");sExp=S.replace(sExp,"[)][)]","}}");sExp=S.replace(sExp,"[\"][)]","\"}");sExp=S.replace(sExp,"[\"][=][>]","\":");return A.toJson(sExp);}
A.toEnum=function(sExp,sSep){sSep=A.check(sSep,",");sExp=(""+sExp).replace("\"","");var aTmp=(""+sExp).split(sSep);var aArr=new Array();for(var sKey in aTmp){var sVal=aTmp[sKey];aArr[sVal]=sVal;}
return aArr;}
A.toJson=function(sExp){try{eval("var aArr = "+sExp+";");return aArr;}catch(e){}
return(new Array());}
A.toXML=function(sExp,sTag){sTag=A.check(sTag,"item");if(sExp==""){return(new Array());}
var oXML=null;if(window.DOMParser){oXML=(new DOMParser()).parseFromString(sExp,"text/xml");}else{var oXML=new ActiveXObject("Microsoft.XMLDOM");oXML.async="false";oXML.loadXML(sExp);}
var aArr=A.toXMLNode(oXML.documentElement,sTag);return A.isArray(aArr)?aArr:(new Array());}
A.toXMLNode=function(oNode,sTag){sTag=A.check(sTag,"item");switch(oNode.nodeType){case 1:var aDat={};if(oNode.attributes.length>0){for(var i=0;i<oNode.attributes.length;i++){var oN=oNode.attributes.item(i);aDat[oN.name]=oN.value;}}
if(oNode.childNodes.length>0){aTmp=new Array();for(var i=0;i<oNode.childNodes.length;i++){var oN=oNode.childNodes.item(i);var aN=A.toXMLNode(oN);if(oN.nodeType==1&&oN.nodeName!=sTag){aDat[oN.nodeName]=aN;}else{aTmp.push(aN);}}
if(A.count(aTmp)>0){if(A.count(aTmp)<=1&&A.isArray(aTmp[0])){return aTmp[0];}
return aTmp;}}
return aDat;case 2:break;case 3:return oNode.nodeValue;break;case 4:return oNode.nodeValue;break;case 5:break;case 6:break;case 7:break;case 8:break;case 9:break;case 10:break;case 11:break;case 12:break;}
return"";}
A.toFilter=function(sExp){sExp=S.replace(sExp,"[&][&]","&A:");sExp=S.replace(sExp,"[|][|]","&O:");var aOpr=("|","==|~=|<=|>=|<|>|<>|!=|!~").split("|");var aStr=(""+sExp).split("&");var aRst=new Array();for(var sKey in aStr){var sVal=aStr[sKey];for(var sK in aOpr){var sV=aOpr[sK];if(S.like(sVal,sV)){var aFlt=(""+sVal).split(sV);var sGlu=S.like(A.get(aFlt,0),"^(O:)")?"||":"&&";sKey=S.replace(A.get(aFlt,0),"^(O:|A:)","");sVal=A.get(aFlt,1);aRst.push({"glue":sGlu,"key":sKey,"operator":sV,"value":sVal});break;}}}
return aRst;}
A.parse=function(sExp,sType){if(A.isArray(sExp)){return sExp;}
if(!sType){sType=A.evaluateType(sExp);}
switch(sType.toLowerCase()){case"json":return A.toJson(sExp);case"query":return A.toQuery(sExp);case"pair":return A.toQuery(sExp,":",";");case"enum":return A.toEnum(sExp);case"pipe":return A.toEnum(sExp,"|");case"xml":return A.toXML(sExp,"item");default:return A.toPhp(sExp);}
return(new Array());}
A.rearrange=function(aArr,iA,iB){iA=A.check(iA,2);iB=A.check(iB,2);if(!A.isArray(aArr)){return array();}
var aTmp=new Array();var iLen=A.count(aArr);var iRow=Math.ceil(iLen/iA/iB);for(var i=0;i<iRow;i++){for(var j=0;j<iA;j++){var iX=(i+iRow*j)*iB;for(var k=0;k<iB;k++){var iY=iX+k;aTmp.push(A.get(aArr,""+iY,"&nbsp;"));}}}
return aTmp;}
var D=function(sExp,sT){this.type=A.check(sT,D.evaluateType(sExp));this.data=D.parse(sExp,this.type);this.getValue=function(){return D.timeValue(this.data);}
this.getString=function(sType){if(!sType){sType=this.type;}
return D.encode(this.data,sType);}
this.add=function(sExp,sType,bMinus){var iSgn=(bMinus?-1:1);var aTmp=D.parse(sExp,sType,true);this.data["y"]=this.data["y"]+iSgn*aTmp["y"];this.data["m"]=this.data["m"]+iSgn*aTmp["m"];this.data["d"]=this.data["d"]+iSgn*aTmp["d"];this.data["h"]=this.data["h"]+iSgn*aTmp["h"];this.data["i"]=this.data["i"]+iSgn*aTmp["i"];this.data["s"]=this.data["s"]+iSgn*aTmp["s"];this.data=D.fixTime(this.data);return this.getString();}
this.sub=function(sExp,sType){return this.add(sExp,sType,true);}}
D.getDays=function(iY,iM){return(new RegExp("^1|3|5|7|8|10|12$")).test(""+iM)?31:((new RegExp("^4|6|9|11$")).test(""+iM)?30:(iY%4==0?29:28));}
D.getDayInMonth=function(sExp,sType){return D.encode(D.parse(sExp,sType),"total");}
D.getWeekday=function(sExp,sType){return D.encode(D.parse(sExp,sType),"week");}
D.diff=function(sTA,sTB,sType){var iTA=!isNaN(sTA)?sTA:D.timeValue(D.parse(sTA,sType));var iTB=!isNaN(sTB)?sTB:D.timeValue(D.parse(sTB,sType));return iTA-iTB;}
D.evaluateType=function(sExp){var sType="unknown";var sDate='[0-9]+[-\/][0-9]+[-\/][0-9]+';var sTime='[0-9]+[:][0-9]+([:][0-9]+)?';if((new RegExp('^'+sDate+'[ ]+'+sTime+'$','gi')).test(sExp)){sType="datetime";}
else if((new RegExp('^'+sDate+'$','gi')).test(sExp)){sType="date";}
else if((new RegExp('^'+sTime+'$','gi')).test(sExp)){sType="time";}
return sType;}
D.fixTime=function(aExp){var iTim=D.mktime(aExp["h"],aExp["i"],aExp["s"],aExp["m"],aExp["d"],aExp["y"]);var sDat=D.mkdate("Y,m,d,H,i,s",iTim);var aDat=(""+sDat).split(",");var aRst={};aRst["y"]=parseInt(aDat[0],10);aRst["h"]=parseInt(aDat[3],10);aRst["m"]=parseInt(aDat[1],10);aRst["i"]=parseInt(aDat[4],10);aRst["d"]=parseInt(aDat[2],10);aRst["s"]=parseInt(aDat[5],10);return aRst;}
D.parse=function(sExp,sType,bNoFix){if(A.isArray(sExp)){return sExp;}
if(typeof(sType)=="undefined"){sType=D.evaluateType(sExp);}
switch(sType){case"time":sExp="x-x-x "+sExp;break;case"date":sExp=sExp+" 00:00:00";break;case"unknown":sExp="x-x-x x:x:x";break;}
sExp=(""+sExp).replace(new RegExp('[\/\\-: ]','gi'),',');var aExp=(""+sExp).split(",");var iY=!isNaN(aExp[0])?parseInt(aExp[0],10):(new Date().getFullYear());var iM=!isNaN(aExp[1])?parseInt(aExp[1],10):(new Date().getMonth()+1);var iD=!isNaN(aExp[2])?parseInt(aExp[2],10):(new Date().getDate());var iH=!isNaN(aExp[3])?parseInt(aExp[3],10):(new Date().getHours());var iI=!isNaN(aExp[4])?parseInt(aExp[4],10):(new Date().getMinutes());var iS=!isNaN(aExp[5])?parseInt(aExp[5],10):(new Date().getSeconds());var aRst={"y":iY,"m":iM,"d":iD,"h":iH,"i":iI,"s":iS};if(!bNoFix){return D.fixTime(aRst);}
return aRst;}
D.encode=function(aDat,sType){var iTim=D.mktime(aDat["h"],aDat["i"],aDat["s"],aDat["m"],aDat["d"],aDat["y"]);switch((""+sType).toLowerCase()){case"time":return D.mkdate("H:i:s",iTim);case"date":return D.mkdate("Y-m-d",iTim);case"w":case"week":return D.mkdate("w",iTim);case"t":case"total":return D.mkdate("t",iTim);case"y":case"year":return D.mkdate("Y",iTim);case"m":case"month":return D.mkdate("m",iTim);case"d":case"day":return D.mkdate("d",iTim);case"h":case"hour":return D.mkdate("H",iTim);case"i":case"min":return D.mkdate("i",iTim);case"s":case"sec":return D.mkdate("s",iTim);}
return D.mkdate("Y-m-d H:i:s",iTim);}
D.timeValue=function(aDat){return D.mktime(aDat["h"],aDat["i"],aDat["s"],aDat["m"],aDat["d"],aDat["y"]);}
D.mktime=function(iH,iI,iS,iM,iD,iY){iH=(iH===""||isNaN(iH))?(new Date().getHours()):iH;iI=(iI===""||isNaN(iI))?(new Date().getMinutes()):iI;iS=(iS===""||isNaN(iS))?(new Date().getSeconds()):iS;iM=(iM===""||isNaN(iM))?(new Date().getMonth()+1):iM;iD=(iD===""||isNaN(iD))?(new Date().getDate()):iD;iY=(iY===""||isNaN(iY))?(new Date().getFullYear()):iY;var oDate=new Date();oDate.setFullYear(iY,iM-1,iD);oDate.setHours(iH,iI,iS);return Math.floor(oDate.getTime()/1000);}
D.mkdate=function(sStr,iTim){var oDate=new Date();oDate.setTime(iTim*1000);var iY=oDate.getFullYear();var iM=oDate.getMonth()+1;var iD=oDate.getDate();var iH=oDate.getHours();var iI=oDate.getMinutes();var iS=oDate.getSeconds();var iW=oDate.getDay();var iT=D.getDays(iY,iM);sStr=sStr.replace("Y",iY);sStr=sStr.replace("m",iM<10?("0"+iM):iM);sStr=sStr.replace("d",iD<10?("0"+iD):iD);sStr=sStr.replace("H",iH<10?("0"+iH):iH);sStr=sStr.replace("i",iI<10?("0"+iI):iI);sStr=sStr.replace("s",iS<10?("0"+iS):iS);sStr=sStr.replace("w",iW);sStr=sStr.replace("t",iT);return sStr;}
D.today=function(){var oTdy=new Date();var sY=oTdy.getFullYear();var sM=S.pad(oTdy.getMonth()+1,2,"0","l");var sD=S.pad(oTdy.getDate(),2,"0","l");return sY+"-"+sM+"-"+sD;}
var N=function(){}
N.limit=function(iVal,iMin,iMax){iVal=(N.isNumeric(iMin)&&iVal<iMin)?iMin:iVal;iVal=(N.isNumeric(iMax)&&iVal>iMax)?iMax:iVal;return iVal;}
N.parse=function(sExp,iMin,iMax,iBase){if(N.isNumeric(sExp)||typeof(sExp)=="string"){if(!N.isNumeric(iBase)||iBase<=1){iBase=(new RegExp("^0x","gi")).test(sExp)?16:10;}
sExp=(""+sExp).replace(new RegExp(iBase==16?"[^-0-9a-fA-F]":"[^-0-9.]","g"),"");sExp=iBase==10?sExp:parseInt(parseInt(sExp,iBase),10);if(new RegExp("[.]").test(sExp)){return N.limit(parseFloat(sExp),iMin,iMax);}else{return N.limit(parseInt(sExp),iMin,iMax);}}
return N.limit(sExp?1:0,iMin,iMax);}
N.getIE6Width=function(iCL){return(Math.round(100/iCL*100)/100)-0.01;}
N.isNumeric=function(sExp){return!isNaN(parseInt(sExp));}
var S=function(){}
S.REG_HTML_SELFCLOSE="^(area|base|br|hr|img|input|link|meta|param)$";S.REG_XML_SAFECHAR="[^a-zA-Z0-9 ,.!?@$#*()+-_=]";S.regexp=function(sExp,sPos,bCase){switch((""+sPos).toLowerCase()){case"r":case"right":sExp="("+sExp+")$";break;case"l":case"left":sExp="^("+sExp+")";break;case"b":case"both":sExp="^("+sExp+")$";break;}
return new RegExp(sExp,(bCase?"g":"gi"));}
S.like=function(sStr,sLike,sPos){return S.regexp(sLike,sPos).test(""+sStr);}
S.replace=function(sStr,sSeek,sRep,sPos){return(""+sStr).replace(S.regexp(sSeek,sPos),sRep);}
S.capitalize=function(sStr){return(""+sStr).substring(0,1).toUpperCase()+(""+sStr).substring(1).toLowerCase();}
S.pad=function(sStr,iLen,sPad,sPos){sPad=A.check(sPad,"0");if(isNaN(iLen)){return sStr;}
var iCnt=0;while(S.len(sStr)<iLen&&iCnt<1000){switch((""+sPos).toLowerCase()){case"l":case"left":sStr=sPad+sStr;break;case"r":case"right":sStr=sStr+sPad;break;default:sStr=iCnt%2==0?(sStr+sPad):(sPad+sStr);break;}
iCnt++;}
return sStr;}
S.isASCII=function(sStr){for(var i=0;i<(""+sStr).length;i++){var iASC=(""+sStr).charCodeAt(i);if(!(iASC>=32&&iASC<=126)){return false;}}
return true;}
S.sub=function(sStr,iS,iL){return(""+sStr).substr(iS,iL);}
S.len=function(sStr){return(""+sStr).length;}
S.shorten=function(sStr,iChr,bDot){var iChr=A.check(iChr,100);var bDot=A.check(bDot,true);if(S.len(sStr)<=iChr){return sStr;}
var sTrm=S.sub(sStr,0,iChr-(bDot?3:0));if(S.like(S.sub(sTrm,sTrm.length-1),"[a-zA-Z0-9]")){sTrm=(""+sTrm).replace(/[ ][^ ]*$/gi,"");}
if(S.like(S.sub(sTrm,sTrm.length-1),"[.]")){sTrm=(""+sTrm).replace(/[.]*$/gi,"");}
return sTrm+(bDot?"...":"");}
S.quote=function(sStr,sQ){sQ=A.check(sQ,"\"");if(!isNaN(sStr)){return sStr;}
return sQ+S.replace(sStr,sQ,"\\"+sQ)+sQ;}
S.htmlent=function(sStr){return S.encodeEntities(S.decodeEntities(sStr),"SINGLE");}
S.toString=function(aDat,sStr){for(var sKey in aDat){var sVal=aDat[sKey];sVal=A.isArray(sVal)?S.toQuery(sVal):sVal;sStr=(""+sStr).replace("["+sKey+"]",sVal);sStr=(""+sStr).replace("%5B"+sKey+"%5D",sVal);}
return sStr;}
S.toQuery=function(aDat,sEql,sGlu){sEql=A.check(sEql,"=");sGlu=A.check(sGlu,"&");var sStr="";for(var sKey in aDat){var sVal=aDat[sKey];sVal=A.isArray(sVal)?S.toQuery(sVal,sEql,sGlu):sVal;sStr+=(sStr==""?"":sGlu)+sKey+sEql+encodeURIComponent(sVal);}
return sStr;}
S.toPhp=function(aDat){var sStr="";for(var sKey in aDat){var sVal=aDat[sKey];sVal=A.isArray(sVal)?S.toPhp(sVal):S.quote(sVal);sStr+=(sStr==""?"":",")+S.quote(sKey)+"=>"+sVal;}
return"array("+sStr+")";}
S.toEnum=function(aDat,sSep){sSep=A.check(sSep,",");var sStr="";for(var sKey in aDat){var sVal=aDat[sKey];sVal=A.isArray(sVal)?S.toJson(sVal):S.quote(sVal,"'");sStr+=(sStr==""?"":sSep)+sVal;}
return sStr;}
S.toJson=function(aDat){var sCon=typeof(aDat);if(!S.like(sCon,"object|array")){return aDat;}
var sStr="";var sMod="";var sLBC="";var sRBC="";if(sCon=="array"){sMod="A";sLBC="[";sRBC="]";}
if(sCon=="object"){sMod="O";sLBC="{";sRBC="}";}
for(var sKey in aDat){var sVal=aDat[sKey];switch((""+typeof(sVal)).toLowerCase()){case"array":sVal=S.toJson(sVal);break;case"object":sVal=S.toJson(sVal);break;case"boolean":sVal=sVal?"true":"false";break;case"number":sVal=!isNaN(sVal)?sVal:"null";break;case"string":sVal=S.replace(sVal,"/","\\/");sVal=S.replace(sVal,'"','\\"');sVal=S.replace(sVal,"'","\\'");sVal='"'+sVal+'"';break;}
sStr+=(sStr==""?"":",");sStr+=sMod=="O"?('"'+sKey+'":'+sVal):sVal;}
return sStr!=""?(sLBC+sStr+sRBC):sStr;}
S.toHTML=function(aDat){if(!A.isArray(aDat)){return aDat;}
var sHTM="";var sTag="";var sAtr="";for(var sKey in aDat){var sVal=aDat[sKey];var sNam=(""+sKey).toLowerCase();if(A.isArray(sVal)||S.like(sKey,"body|html","both")){sHTM=sVal;}else if(S.like(sNam,"tag|element","both")){sTag=sVal;}else if(S.like(sNam,"style|class","both")){sAtr+=sVal==""?"":(" "+sNam+"=\""+sVal+"\"");}else if(S.like(sNam,"width|height","both")){sAtr+=S.like(sVal,"[0-9]+.*","both")?(" "+sNam+"=\""+sVal+"\""):"";}else if(S.like(sNam,"on.*","both")){sAtr+=" "+sNam+"=\""+sVal+"\"";}else{sAtr+=" "+sNam+"=\""+S.htmlent(sVal)+"\"";}}
if(sTag!=""){sHTM=A.isArray(sHTM)?S.toHTML(sHTM):sHTM;if(S.like(sTag,S.REG_HTML_SELFCLOSE)){return"<"+sTag+sAtr+"/>";}
return"<"+sTag+sAtr+">"+sHTM+"</"+sTag+">";}
sHTM="";for(var sKey in aDat){var sVal=aDat[sKey];sHTM+=A.isArray(sVal)?S.toHTML(sVal):sVal;}
return sHTM;}
S.toXML=function(aDat,sTag,bRoot,sVer,sChar){sTag=A.check(sTag,"item");bRoot=A.check(bRoot,true);sVer=A.check(sVer,"1.0");sChar=A.check(sChar,"utf-8");if(!A.isArray(aDat)){return aDat;}
if(!isNaN(sTag)){sTag="item";}
if(bRoot){sTag="root";}
var sTxt="";var sAtr="";for(var sKey in aDat){var sVal=aDat[sKey];if(A.isArray(sVal)){sTxt+=S.toXML(sVal,sKey,false);}else if(!isNaN(sKey)){sTxt+="<item>"+S.htmlent(sVal)+"</item>";}else{sAtr+=" "+sKey+"=\""+(S.htmlent(sVal))+"\"";}}
return(bRoot?("<?xml version=\""+sVer+"\" encoding=\""+sChar+"\"?>"):"")+("<"+sTag+sAtr+">"+sTxt+"</"+sTag+">");}
S.parse=function(sExp,sType){if(S.like(typeof(sExp),"object|array")){switch((""+sType).toLowerCase()){case"json":return S.toJson(sExp);case"query":return S.toQuery(sExp);case"pair":return S.toQuery(sExp,":",";");case"enum":return S.toEnum(sExp);case"pipe":return S.toEnum(sExp,"|");case"xml":return S.toXML(sExp,"item",true);case"html":return S.toHTML(sExp);default:return S.toPhp(sExp);}}
return sExp;}
S.toTable=function(aArr,iA,iB,aCol,aRow,aTbl){iA=A.check(iA,2);iB=A.check(iB,2);aCol=A.check(aCol,{});aRow=A.check(aRow,{});aTbl=A.check(aTbl,{});if(!A.isArray(aArr)){return aArr;}
var aDat=A.rearrange(aArr,iA,iB);var iRow=0;var sTR="";var iCol=0;var sTD="";for(sKey in aDat){var sVal=aDat[sKey];var aTmp=A.clone(A.cycle(aCol,iCol));if(!A.isArray(aTmp)){aTmp={};}
aTmp["tag"]="td";aTmp["html"]=sVal;sTD+=S.toHTML(aTmp);iCol++;if(iCol>=iA*iB){var aTmp=A.clone(A.cycle(aRow,iRow));if(!A.isArray(aTmp)){aTmp={};}
aTmp["tag"]="tr";aTmp["html"]=sTD;sTR+=S.toHTML(aTmp);iRow++;iCol=0;sTD="";}}
aTbl["tag"]="table";aTbl["html"]=sTR;return S.toHTML(aTbl);}
S.toHTable=function(aArr,aLbl,aCol,aRow,aTbl){aLbl=A.check(aLbl,{});aCol=A.check(aCol,{});aRow=A.check(aRow,{});aTbl=A.check(aTbl,{});if(!A.isArray(aArr)){return aArr;}
var sTR="";var iRow=0;for(var sKey in aArr){var aVal=aArr[sKey];var sTH="";var sTD="";var iCol=0;for(var sK in aVal){var sV=aVal[sK];if(iRow==0){var aTmp=A.clone(A.cycle(aCol,iCol));if(!A.isArray(aTmp)){aTmp={};}
aTmp["tag"]="th";aTmp["html"]=!isNaN(sK)?(sK+1):A.get(aLbl,sK,sK);sTH+=S.toHTML(aTmp);}
var aTmp=A.clone(A.cycle(aCol,iCol));if(!A.isArray(aTmp)){aTmp={};}
aTmp["tag"]="td";aTmp["html"]=A.toHTable(sV,aLbl,aCol,aRow,aTbl);sTD+=S.toHTML(aTmp);iCol++;}
if(sTH!=""){sTR+=S.toHTML({"tag":"tr","html":sTH});}
var aTmp=A.clone(A.cycle(aRow,iRow));if(!A.isArray(aTmp)){aTmp={};}
aTmp["tag"]="tr";aTmp["html"]=sTD;sTR+=S.toHTML(aTmp);iRow++;}
aTbl["tag"]="table";aTbl["html"]=sTR;return S.toHTML(aTbl);}
S.toVTable=function(aArr,aLbl,aCol,aRow,aTbl){aLbl=A.check(aLbl,{});aCol=A.check(aCol,{});aRow=A.check(aRow,{});aTbl=A.check(aTbl,{});if(!A.isArray(aArr)){return aArr;}
var sTR="";var iRow=0;for(var sKey in aArr){var sVal=aArr[sKey];var sTD="";var aTmp=A.clone(A.cycle(aCol,0));if(!A.isArray(aTmp)){aTmp={};}
aTmp["tag"]="th";aTmp["html"]=!isNaN(sKey)?(sKey+1):A.get(aLbl,sKey,sKey);sTD+=S.toHTML(aTmp);var aTmp=A.clone(A.cycle(aCol,1));if(!A.isArray(aTmp)){aTmp={};}
aTmp["tag"]="td";aTmp["html"]=A.toVTable(sVal,aLbl,aCol,aRow,aTbl);sTD+=S.toHTML(aTmp);var aTmp=A.clone(A.cycle(aRow,iRow));if(!A.isArray(aTmp)){aTmp={};}
aTmp["tag"]="tr";aTmp["html"]=sTD;sTR+=S.toHTML(aTmp);iRow++;}
aTbl["tag"]="table";aTbl["html"]=sTR;return S.toHTML(aTbl);}
S.htmlTable=function(sMod){sMod=sMod?sMod:"BOTH";var aTbl=new Array();var aEnt=new Array();if(S.like(sMod,"DOUBLE|BOTH")){aEnt["34"]="&quot;";aEnt["034"]="&quot;";}
if(S.like(sMod,"SINGLE|BOTH")){aEnt["39"]="&#39;";aEnt["039"]="&#039;";}
aEnt["38"]="&amp;";aEnt["038"]="&amp;";aEnt["60"]="&lt;";aEnt["060"]="&lt;";aEnt["62"]="&gt;";aEnt["062"]="&gt;";aEnt["160"]="&nbsp;";aEnt["161"]="&iexcl;";aEnt["162"]="&cent;";aEnt["163"]="&pound;";aEnt["164"]="&curren;";aEnt["165"]="&yen;";aEnt["166"]="&brvbar;";aEnt["167"]="&sect;";aEnt["168"]="&uml;";aEnt["169"]="&copy;";aEnt["170"]="&ordf;";aEnt["171"]="&laquo;";aEnt["172"]="&not;";aEnt["173"]="&shy;";aEnt["174"]="&reg;";aEnt["175"]="&macr;";aEnt["176"]="&deg;";aEnt["177"]="&plusmn;";aEnt["178"]="&sup2;";aEnt["179"]="&sup3;";aEnt["180"]="&acute;";aEnt["181"]="&micro;";aEnt["182"]="&para;";aEnt["183"]="&middot;";aEnt["184"]="&cedil;";aEnt["185"]="&sup1;";aEnt["186"]="&ordm;";aEnt["187"]="&raquo;";aEnt["188"]="&frac14;";aEnt["189"]="&frac12;";aEnt["190"]="&frac34;";aEnt["191"]="&iquest;";aEnt["192"]="&Agrave;";aEnt["193"]="&Aacute;";aEnt["194"]="&Acirc;";aEnt["195"]="&Atilde;";aEnt["196"]="&Auml;";aEnt["197"]="&Aring;";aEnt["198"]="&AElig;";aEnt["199"]="&Ccedil;";aEnt["200"]="&Egrave;";aEnt["201"]="&Eacute;";aEnt["202"]="&Ecirc;";aEnt["203"]="&Euml;";aEnt["204"]="&Igrave;";aEnt["205"]="&Iacute;";aEnt["206"]="&Icirc;";aEnt["207"]="&Iuml;";aEnt["208"]="&ETH;";aEnt["209"]="&Ntilde;";aEnt["210"]="&Ograve;";aEnt["211"]="&Oacute;";aEnt["212"]="&Ocirc;";aEnt["213"]="&Otilde;";aEnt["214"]="&Ouml;";aEnt["215"]="&times;";aEnt["216"]="&Oslash;";aEnt["217"]="&Ugrave;";aEnt["218"]="&Uacute;";aEnt["219"]="&Ucirc;";aEnt["220"]="&Uuml;";aEnt["221"]="&Yacute;";aEnt["222"]="&THORN;";aEnt["223"]="&szlig;";aEnt["224"]="&agrave;";aEnt["225"]="&aacute;";aEnt["226"]="&acirc;";aEnt["227"]="&atilde;";aEnt["228"]="&auml;";aEnt["229"]="&aring;";aEnt["230"]="&aelig;";aEnt["231"]="&ccedil;";aEnt["232"]="&egrave;";aEnt["233"]="&eacute;";aEnt["234"]="&ecirc;";aEnt["235"]="&euml;";aEnt["236"]="&igrave;";aEnt["237"]="&iacute;";aEnt["238"]="&icirc;";aEnt["239"]="&iuml;";aEnt["240"]="&eth;";aEnt["241"]="&ntilde;";aEnt["242"]="&ograve;";aEnt["243"]="&oacute;";aEnt["244"]="&ocirc;";aEnt["245"]="&otilde;";aEnt["246"]="&ouml;";aEnt["247"]="&divide;";aEnt["248"]="&oslash;";aEnt["249"]="&ugrave;";aEnt["250"]="&uacute;";aEnt["251"]="&ucirc;";aEnt["252"]="&uuml;";aEnt["253"]="&yacute;";aEnt["254"]="&thorn;";aEnt["255"]="&yuml;";for(var sK in aEnt){aTbl[String.fromCharCode(sK)]=aEnt[sK];}
return aTbl;}
S.encodeEntities=function(sStr,sMod){var aTbl=S.htmlTable(sMod);for(var sK in aTbl){sStr=(""+sStr).split(sK).join(aTbl[sK]);}
return sStr;}
S.decodeEntities=function(sStr,sMod){var aTbl=S.htmlTable(sMod);for(var sK in aTbl){sStr=(""+sStr).split(aTbl[sK]).join(sK);}
return sStr;}
