var AjaxFW={HTTP_POST:"POST",HTTP_GET:"GET",RESPONSE_XML:"text/xml",RESPONSE_TEXT:"text/plain",RESPONSE_JSON:"application/json",getXMLHttpRequest:function(){return window.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()
},call:function(callParam){try{var http=this.getXMLHttpRequest();
var url=(callParam.url!==undefined?callParam.url:"/");
var asynchronous=(callParam.asynchronous!==undefined?callParam.asynchronous:true);
var parameters=(callParam.parameters!==undefined?callParam.parameters:{});
var method=(callParam.method!==undefined?callParam.method:AjaxFW.HTTP_GET);
var responseType=(callParam.responseType!==undefined?callParam.responseType:AjaxFW.RESPONSE_XML);
var contentType=(callParam.contentType!==undefined?callParam.contentType:"application/x-www-form-urlencoded");
var encoding=(callParam.encoding!==undefined?callParam.encoding:"UTF-8");
var onALoading=(callParam.onLoading!==undefined?callParam.onLoading:function(obj){});
var onAComplete=(callParam.onComplete!==undefined?callParam.onComplete:function(obj){});
var onAFailure=(callParam.onFailure!==undefined?callParam.onFailure:function(obj){});
var getResponseContent=function(){switch(responseType){case AjaxFW.RESPONSE_XML:return http.responseXML;
case AjaxFW.RESPONSE_JSON:return eval("("+http.responseText+")");
default:return http.responseText
}};
if(asynchronous){http.onreadystatechange=function(){switch(http.readyState){case 1:onALoading();
break;
case 4:if(http.status==200){onAComplete(getResponseContent())
}else{onAFailure()
}break
}}
}if(method===this.HTTP_GET){http.open(this.HTTP_GET,(url+"?"+this.toQueryString(parameters,true)+"&r="+parseInt((Math.random()*99999999),10)),asynchronous);
http.send(null)
}else{http.open(this.HTTP_POST,url,asynchronous);
http.setRequestHeader("Content-Type",contentType+(encoding?"; charset="+encoding:""));
http.send(this.toQueryString(parameters,false))
}if(!asynchronous){return getResponseContent()
}}catch(e){alert("Error in AjaxFW.call()")
}},toQueryString:function(F,A){var G="";
var C=function(I,H){if(A){H=escape(H);
I=escape(I)
}if(!H){return I+"&"
}else{return I+"="+H+"&"
}};
for(var E in F){if(typeof F[E]!="function"){var D=F[E];
if(typeof D=="object"&&D.constructor==Array){for(var B=0;
B<D.length;
B++){G+=C(E,D[B])
}}else{if(D!==undefined){G+=C(E,D)
}}}}return G.substring(0,G.length-1)
}};
var DOMFW={getFirstChildByName:function(B,A){if(B===null||A===null){return 
}var C=B.getElementsByTagName(A);
if(C!==null&&C.length>0){return C[0]
}return null
},getAttribute:function(B,A){if(B===null||A===null){return null
}return B.getAttribute(A)
},getText:function(A){if(A===null){return""
}var B;
if(A.firstChild){B=A.firstChild.nodeValue
}else{B=A.textContent
}return((B===null||B===undefined)?"":TextFW.trim(B))
}};
var CookieFW={set:function(C,D,E){var A="";
if(E){var B=new Date();
B.setTime(B.getTime()+(E*24*60*60*1000));
A="; expires="+B.toGMTString()
}document.cookie=C+"="+D+A+"; path=/"
},get:function(A){var D=A+"=";
var C=document.cookie.split(";");
for(var B=0;
B<C.length;
B++){var E=C[B];
while(E.charAt(0)==" "){E=E.substring(1,E.length);
if(E.indexOf(D)===0){return TextFW.replaceAll(E.substring(D.length,E.length),'"',"")
}}}return null
},remove:function(A){this.set(A,"",-1)
}};
var ValidateFW={hasIllegalCharsPattern:"[/\\\\|:*?<>\"']",hasEmailPattern:"[\\w-]+(\\.[\\w-]+)*@([\\w-]+\\.)+[a-zA-Z]{2,7}",isDatePattern:"^(?:(?:(?:(?:1[6-9]|[2-9]\\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00)))(\\/|-|\\.)(?:0?2\\1(?:29))$)|(?:(?:1[6-9]|[2-9]\\d)?\\d{2})(\\/|-|\\.)(?:(?:(?:0?[13578]|1[02])\\2(?:31))|(?:(?:0?[1,3-9]|1[0-2])\\2(29|30))|(?:(?:0?[1-9])|(?:1[0-2]))\\2(?:0?[1-9]|1\\d|2[0-8]))$",isEmailPattern:"^[\\w-]+(\\.[\\w-]+)*@([\\w-]+\\.)+[a-zA-Z]{2,7}$",isPasswordPattern:"^[a-zA-Z0-9]+$",isHostPattern:"^[a-zA-Z0-9]+([a-zA-Z0-9\\-\\.]+)?\\.([a-zA-Z]{2,7})$",isUrlPattern:"^((news|(ht|f)tp(s?))\\://([\\w-\\.])+(/[\\w-./?%&=:,;#~]*)?)$",isNumberPattern:"^(-?)[0-9]+$",hasIllegalChars:function(B,A){if(A){return this.callServerValidate("hasIllegalChars",B,A)
}return this.runRegExp(B,this.hasIllegalCharsPattern)
},hasEmail:function(B,A){if(A){return this.callServerValidate("hasEmail",B,A)
}return this.runRegExp(B,this.hasEmailPattern)
},isDate:function(B,A){if(A){return this.callServerValidate("isDate",B,A)
}return this.runRegExp(B,this.isDatePattern)
},isEmail:function(B,A){if(A){return this.callServerValidate("isEmail",B,A)
}return this.runRegExp(B,this.isEmailPattern)
},isPassword:function(B,A){if(A){return this.callServerValidate("isPassword",B,A)
}return this.runRegExp(B,this.isPasswordPattern)
},isHostName:function(B,A){if(A){return this.callServerValidate("isHostName",B,A)
}return this.runRegExp(B,this.isHostPattern)
},isUrl:function(B,A){if(A){return this.callServerValidate("isUrl",B,A)
}return this.runRegExp(B,this.isUrlPattern)
},isNumber:function(B,A){if(A){return this.callServerValidate("isNumber",B,A)
}return this.runRegExp(B,this.isNumberPattern)
},runRegExp:function(B,A){return new RegExp(A).test(B)
},callServerValidate:function(B,D,E){var C=AjaxFW.call({url:E,asynchronous:false,parameters:{operationName:B,value:D}});
var A=C.documentElement;
return(DOMFW.getText(DOMFW.getFirstChildByName(A,"result")).toLowerCase()=="true")
}};
var TextFW={trim:function(A){return A.replace(/^\s+/,"").replace(/\s+$/,"")
},replaceAll:function(A,C,B){return A.replace(new RegExp(C,"g"),B)
},populateTemplate:function(B,D){if(B===null||D===null){return B
}var C=unescape(B);
for(var A in D){C=TextFW.replaceAll(C,"{+?("+D[A].key+")}",D[A].value)
}return C
}};