var Tool={isObject:function(param){return(param&&typeof param=='object')||Tool.isFunction(param)},isBoolean:function(param){return typeof param=='boolean'},isArray:function(param){return Tool.isObject(param)&&param.constructor==Array},isFunction:function(param){return typeof param=='function'},isNull:function(param){return typeof param=='object'&&!param},isDefined:function(param){return typeof param!='undefined';},isNumeric:function(param){return typeof param=='number'&&isFinite(param)},isString:function(param){return typeof param=='string'},inArray:function(ar,val){for(var i=0;i<arr.length;i++){if(arr[i]==val){return true;break;}}
return false;},objectKeyExists:function(obj,key){if(Tool.isArray(obj)||Tool.isObject(obj)){return Tool.isDefined(obj[key]);}
else{throw('Method objectKeyExists of object of type Tool requires an Array or Object as its first argument.');}},loadFile:function(filePath,fileType,onLoadRequire){var filePath=filePath||'';var fileType=Tool.isDefined(fileType)?Tool.isString(fileType)?(fileType.toLowerCase()=='css'||fileType.toLowerCase()=='js')?fileType:null:null:null
if(null==fileType){throw('loadFile method of Object of type Tool requires a fileType attribute of type string with a value of css or js in its object parameter');}
var onloadRequire=(Tool.isDefined(onLoadRequire)&&Tool.isBoolean(onLoadRequire)&&0==document.getElementsByTagName('head'));if(fileType=='js'){if(onloadRequire)document.write('<script type="text/javascript" src="'+libraryName+'"></script>');else{document.getElementsByTagName('head')[0].appendChild(Builder.node('script',{type:'text/javascript',src:filePath}));}}
else{if(onloadRequire)document.write('<link rel="stylesheet" type="text/css" media="screen" href="'+filePath+'" />');else{document.getElementsByTagName('head')[0].appendChild(Builder.node('link',{rel:'stylesheet',type:'text/css',media:'screen',href:filePath}));}}}};Array.prototype.______array='______array';var JSON={org:'http://www.JSON.org',copyright:'(c)2005 JSON.org',license:'http://www.crockford.com/JSON/license.html',stringify:function(arg){var c,i,l,s='',v;switch(typeof arg){case'object':if(arg){if(arg.______array=='______array'){for(i=0;i<arg.length;++i){v=this.stringify(arg[i]);if(s){s+=',';}
s+=v;}
return'['+s+']';}else if(typeof arg.toString!='undefined'){for(i in arg){v=arg[i];if(typeof v!='undefined'&&typeof v!='function'){v=this.stringify(v);if(s){s+=',';}
s+=this.stringify(i)+':'+v;}}
return'{'+s+'}';}}
return'null';case'number':return isFinite(arg)?String(arg):'null';case'string':l=arg.length;s='"';for(i=0;i<l;i+=1){c=arg.charAt(i);if(c>=' '){if(c=='\\'||c=='"'){s+='\\';}
s+=c;}else{switch(c){case'\b':s+='\\b';break;case'\f':s+='\\f';break;case'\n':s+='\\n';break;case'\r':s+='\\r';break;case'\t':s+='\\t';break;default:c=c.charCodeAt();s+='\\u00'+Math.floor(c/16).toString(16)+
(c%16).toString(16);}}}
return s+'"';case'boolean':return String(arg);default:return'null';}},parse:function(text){var at=0;var ch=' ';function error(m){throw{name:'JSONError',message:m,at:at-1,text:text};}
function next(){ch=text.charAt(at);at+=1;return ch;}
function white(){while(ch!=''&&ch<=' '){next();}}
function str(){var i,s='',t,u;if(ch=='"'){outer:while(next()){if(ch=='"'){next();return s;}else if(ch=='\\'){switch(next()){case'b':s+='\b';break;case'f':s+='\f';break;case'n':s+='\n';break;case'r':s+='\r';break;case't':s+='\t';break;case'u':u=0;for(i=0;i<4;i+=1){t=parseInt(next(),16);if(!isFinite(t)){break outer;}
u=u*16+t;}
s+=String.fromCharCode(u);break;default:s+=ch;}}else{s+=ch;}}}
error("Bad string");}
function arr(){var a=[];if(ch=='['){next();white();if(ch==']'){next();return a;}
while(ch){a.push(val());white();if(ch==']'){next();return a;}else if(ch!=','){break;}
next();white();}}
error("Bad array");}
function obj(){var k,o={};if(ch=='{'){next();white();if(ch=='}'){next();return o;}
while(ch){k=str();white();if(ch!=':'){break;}
next();o[k]=val();white();if(ch=='}'){next();return o;}else if(ch!=','){break;}
next();white();}}
error("Bad object");}
function num(){var n='',v;if(ch=='-'){n='-';next();}
while(ch>='0'&&ch<='9'){n+=ch;next();}
if(ch=='.'){n+='.';while(next()&&ch>='0'&&ch<='9'){n+=ch;}}
if(ch=='e'||ch=='E'){n+='e';next();if(ch=='-'||ch=='+'){n+=ch;next();}
while(ch>='0'&&ch<='9'){n+=ch;next();}}
v=+n;if(!isFinite(v)){error("Bad number");}else{return v;}}
function word(){switch(ch){case't':if(next()=='r'&&next()=='u'&&next()=='e'){next();return true;}
break;case'f':if(next()=='a'&&next()=='l'&&next()=='s'&&next()=='e'){next();return false;}
break;case'n':if(next()=='u'&&next()=='l'&&next()=='l'){next();return null;}
break;}
error("Syntax error");}
function val(){white();switch(ch){case'{':return obj();case'[':return arr();case'"':return str();case'-':return num();default:return ch>='0'&&ch<='9'?num():word();}}
return val();}};;var GaCaptcha=Class.create();GaCaptcha.prototype={attributes:{},initialize:function(params){this.attributes['imageTagID']=(Tool.objectKeyExists(params,'imageTagID'))?params['imageTagID']:'',this.attributes['handler']=(Tool.objectKeyExists(params,'handler'))?params['handler']:''},load:function(){var stamp=new Date();$(this.attributes['imageTagID']).src=this.attributes['handler']+'?dt='+stamp.getTime();return false;}};
