var base2={name:"base2",version:"1.0 (beta 2)",exports:"Base,Package,Abstract,Module,Enumerable,Map,Collection,RegGrp,"+"assert,assertArity,assertType,assignID,copy,detect,extend,"+"forEach,format,global,instanceOf,match,rescape,slice,trim,typeOf,"+"I,K,Undefined,Null,True,False,bind,delegate,flip,not,unbind",global:this,detect:new function(_){var global=_;var jscript=NaN;var java=_.java?true:false;if(_.navigator){var MSIE=/MSIE[\d.]+/g;var element=document.createElement("span");var userAgent=navigator.userAgent.replace(/([a-z])[\s\/](\d)/gi,"$1$2");if(!jscript)userAgent=userAgent.replace(MSIE,"");if(MSIE.test(userAgent))userAgent=userAgent.match(MSIE)[0]+" "+userAgent.replace(MSIE,"");userAgent=navigator.platform+" "+userAgent;java&=navigator.javaEnabled();}
return function(expression){var r=false;var not=expression.charAt(0)=="!";if(not)expression=expression.slice(1);if(expression.charAt(0)=="("){try{eval("r=!!"+expression);}catch(e){}}else{r=new RegExp("("+expression+")","i").test(userAgent);}
return!!(not^r);};}(this)};new function(_){var _namespace="function base(o,a){return o.base.apply(o,a)};";eval(_namespace);var detect=base2.detect;var Undefined=K(),Null=K(null),True=K(true),False=K(false);var _FORMAT=/%([1-9])/g;var _LTRIM=/^\s\s*/;var _RTRIM=/\s\s*$/;var _RESCAPE=/([\/()[\]{}|*+-.,^$?\\])/g;var _BASE=/eval/.test(detect)?/\bbase\s*\(/:/.*/;var _HIDDEN=["constructor","toString","valueOf"];var _MSIE_NATIVE_FUNCTION=detect("(jscript)")?new RegExp("^"+rescape(isNaN).replace(/isNaN/,"\\w+")+"$"):{test:False};var _counter=1;var _slice=Array.prototype.slice;var slice=Array.slice||function(array){return _slice.apply(array,_slice.call(arguments,1));};_Function_forEach();var _subclass=function(_instance,_static){base2.__prototyping=this.prototype;var _prototype=new this;extend(_prototype,_instance);delete base2.__prototyping;var _constructor=_prototype.constructor;function _class(){if(!base2.__prototyping){if(this.constructor==arguments.callee||this.__constructing){this.__constructing=true;_constructor.apply(this,arguments);delete this.__constructing;}else{return extend(arguments[0],_prototype);}}
return this;};_prototype.constructor=_class;for(var i in Base)_class[i]=this[i];_class.ancestor=this;_class.base=Undefined;_class.init=Undefined;extend(_class,_static);_class.prototype=_prototype;_class.init();;;;_class.toString=K(String(_constructor));;;;_class["#implements"]=[];;;;_class["#implemented_by"]=[];return _class;};var Base=_subclass.call(Object,{constructor:function(){if(arguments.length>0){this.extend(arguments[0]);}},base:function(){},extend:delegate(extend)},Base={ancestorOf:delegate(_ancestorOf),extend:_subclass,forEach:delegate(_Function_forEach),implement:function(source){if(typeof source=="function"){if(_ancestorOf(Base,source)){source(this.prototype);;;;this["#implements"].push(source);;;;source["#implemented_by"].push(this);}}else{extend(this.prototype,source);}
return this;}});var Package=Base.extend({constructor:function(_private,_public){this.extend(_public);if(this.init)this.init();if(this.name!="base2"){if(!this.parent)this.parent=base2;this.parent.addName(this.name,this);this.namespace=format("var %1=%2;",this.name,String(this).slice(1,-1));}
var LIST=/[^\s,]+/g;if(_private){_private.imports=Array2.reduce(this.imports.match(LIST),function(namespace,name){eval("var ns=base2."+name);assert(ns,format("Package not found: '%1'.",name),ReferenceError);return namespace+=ns.namespace;},_namespace+base2.namespace+JavaScript.namespace);_private.exports=Array2.reduce(this.exports.match(LIST),function(namespace,name){var fullName=this.name+"."+name;this.namespace+="var "+name+"="+fullName+";";return namespace+="if(!"+fullName+")"+fullName+"="+name+";";},"",this);}},exports:"",imports:"",name:"",namespace:"",parent:null,addName:function(name,value){if(!this[name]){this[name]=value;this.exports+=","+name;this.namespace+=format("var %1=%2.%1;",name,this.name);}},addPackage:function(name){this.addName(name,new Package(null,{name:name,parent:this}));},toString:function(){return format("[%1]",this.parent?String(this.parent).slice(1,-1)+"."+this.name:this.name);}});var Abstract=Base.extend({constructor:function(){throw new TypeError("Class cannot be instantiated.");}});var Module=Abstract.extend(null,{extend:function(_interface,_static){var module=this.base();module.implement(this);module.implement(_interface);extend(module,_static);module.init();return module;},implement:function(_interface){var module=this;if(typeof _interface=="function"){if(!_ancestorOf(_interface,module)){this.base(_interface);}
if(_ancestorOf(Module,_interface)){forEach(_interface,function(property,name){if(!module[name]){if(typeof property=="function"&&property.call&&_interface.prototype[name]){property=function(){return _interface[name].apply(_interface,arguments);};}
module[name]=property;}});}}else{extend(module,_interface);_Function_forEach(Object,_interface,function(source,name){if(name.charAt(0)=="@"){if(detect(name.slice(1))){forEach(source,arguments.callee);}}else if(typeof source=="function"&&source.call){module.prototype[name]=function(){var args=_slice.call(arguments);args.unshift(this);return module[name].apply(module,args);};;;;module.prototype[name]._module=module;}});}
return module;}});var Enumerable=Module.extend({every:function(object,test,context){var result=true;try{this.forEach(object,function(value,key){result=test.call(context,value,key,object);if(!result)throw StopIteration;});}catch(error){if(error!=StopIteration)throw error;}
return!!result;},filter:function(object,test,context){var i=0;return this.reduce(object,function(result,value,key){if(test.call(context,value,key,object)){result[i++]=value;}
return result;},[]);},invoke:function(object,method){var args=_slice.call(arguments,2);return this.map(object,(typeof method=="function")?function(item){return(item==null)?undefined:method.apply(item,args);}:function(item){return(item==null)?undefined:item[method].apply(item,args);});},map:function(object,block,context){var result=[],i=0;this.forEach(object,function(value,key){result[i++]=block.call(context,value,key,object);});return result;},pluck:function(object,key){return this.map(object,function(item){return(item==null)?undefined:item[key];});},reduce:function(object,block,result,context){var initialised=arguments.length>2;this.forEach(object,function(value,key){if(initialised){result=block.call(context,result,value,key,object);}else{result=value;initialised=true;}});return result;},some:function(object,test,context){return!this.every(object,not(test),context);}},{forEach:forEach});var _HASH="#";var Map=Base.extend({constructor:function(values){this.merge(values);},copy:delegate(copy),forEach:function(block,context){for(var key in this)if(key.charAt(0)==_HASH){block.call(context,this[key],key.slice(1),this);}},get:function(key){return this[_HASH+key];},getKeys:function(){return this.map(flip(I));},getValues:function(){return this.map(I);},has:function(key){return _HASH+key in this;},merge:function(values){var put=flip(this.put);forEach(arguments,function(values){forEach(values,put,this);},this);return this;},remove:function(key){delete this[_HASH+key];},put:function(key,value){if(arguments.length==1)value=key;this[_HASH+key]=value;},size:function(){var size=0;for(var key in this)if(key.charAt(0)==_HASH)size++;return size;},union:function(values){return this.merge.apply(this.copy(),arguments);}});Map.implement(Enumerable);var _KEYS="~";var Collection=Map.extend({constructor:function(values){this[_KEYS]=new Array2;this.base(values);},add:function(key,item){assert(!this.has(key),"Duplicate key '"+key+"'.");this.put.apply(this,arguments);},copy:function(){var copy=this.base();copy[_KEYS]=this[_KEYS].copy();return copy;},forEach:function(block,context){var keys=this[_KEYS];var length=keys.length;for(var i=0;i<length;i++){block.call(context,this[_HASH+keys[i]],keys[i],this);}},getAt:function(index){if(index<0)index+=this[_KEYS].length;var key=this[_KEYS][index];return(key===undefined)?undefined:this[_HASH+key];},getKeys:function(){return this[_KEYS].concat();},indexOf:function(key){return this[_KEYS].indexOf(String(key));},insertAt:function(index,key,item){assert(Math.abs(index)<this[_KEYS].length,"Index out of bounds.");assert(!this.has(key),"Duplicate key '"+key+"'.");this[_KEYS].insertAt(index,String(key));this[_HASH+key]==null;this.put.apply(this,_slice.call(arguments,1));},item:function(keyOrIndex){return this[typeof keyOrIndex=="number"?"getAt":"get"](keyOrIndex);},put:function(key,item){if(arguments.length==1)item=key;if(!this.has(key)){this[_KEYS].push(String(key));}
var klass=this.constructor;if(klass.Item&&!instanceOf(item,klass.Item)){item=klass.create.apply(klass,arguments);}
this[_HASH+key]=item;},putAt:function(index,item){assert(Math.abs(index)<this[_KEYS].length,"Index out of bounds.");arguments[0]=this[_KEYS].item(index);this.put.apply(this,arguments);},remove:function(key){if(this.has(key)){this[_KEYS].remove(String(key));delete this[_HASH+key];}},removeAt:function(index){var key=this[_KEYS].removeAt(index);delete this[_HASH+key];},reverse:function(){this[_KEYS].reverse();return this;},size:function(){return this[_KEYS].length;},sort:function(compare){if(compare){var self=this;this[_KEYS].sort(function(key1,key2){return compare(self[_HASH+key1],self[_HASH+key2],key1,key2);});}else this[_KEYS].sort();return this;},toString:function(){return String(this[_KEYS]);}},{Item:null,create:function(key,item){return this.Item?new this.Item(key,item):item;},extend:function(_instance,_static){var klass=this.base(_instance);klass.create=this.create;extend(klass,_static);if(!klass.Item){klass.Item=this.Item;}else if(typeof klass.Item!="function"){klass.Item=(this.Item||Base).extend(klass.Item);}
klass.init();return klass;}});var _RG_BACK_REF=/\\(\d+)/g,_RG_ESCAPE_CHARS=/\\./g,_RG_ESCAPE_BRACKETS=/\(\?[:=!]|\[[^\]]+\]/g,_RG_BRACKETS=/\(/g,_RG_LOOKUP=/\$(\d+)/,_RG_LOOKUP_SIMPLE=/^\$\d+$/;var RegGrp=Collection.extend({constructor:function(values,flags){this.base(values);if(typeof flags=="string"){this.global=/g/.test(flags);this.ignoreCase=/i/.test(flags);}},global:true,ignoreCase:false,exec:function(string,replacement){var flags=(this.global?"g":"")+(this.ignoreCase?"i":"");string=String(string)+"";if(arguments.length==1){var self=this;var keys=this[_KEYS];replacement=function(match){if(match){var item,offset=1,i=0;while((item=self[_HASH+keys[i++]])){var next=offset+item.length+1;if(arguments[offset]){var replacement=item.replacement;switch(typeof replacement){case"function":return replacement.apply(self,_slice.call(arguments,offset,next));case"number":return arguments[offset+replacement];default:return replacement;}}
offset=next;}}
return"";};}
return string.replace(new RegExp(this,flags),replacement);},insertAt:function(index,expression,replacement){if(instanceOf(expression,RegExp)){arguments[1]=expression.source;}
return base(this,arguments);},test:function(string){return this.exec(string)!=string;},toString:function(){var length=0;return"("+this.map(function(item){var ref=String(item).replace(_RG_BACK_REF,function(match,index){return"\\"+(1+Number(index)+length);});length+=item.length+1;return ref;}).join(")|(")+")";}},{IGNORE:"$0",init:function(){forEach("add,get,has,put,remove".split(","),function(name){_override(this,name,function(expression){if(instanceOf(expression,RegExp)){arguments[0]=expression.source;}
return base(this,arguments);});},this.prototype);},Item:{constructor:function(expression,replacement){if(typeof replacement=="number")replacement=String(replacement);else if(replacement==null)replacement="";if(typeof replacement=="string"&&_RG_LOOKUP.test(replacement)){if(_RG_LOOKUP_SIMPLE.test(replacement)){replacement=parseInt(replacement.slice(1));}else{var Q=/'/.test(replacement.replace(/\\./g,""))?'"':"'";replacement=replacement.replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\$(\d+)/g,Q+"+(arguments[$1]||"+Q+Q+")+"+Q);replacement=new Function("return "+Q+replacement.replace(/(['"])\1\+(.*)\+\1\1$/,"$1")+Q);}}
this.length=RegGrp.count(expression);this.replacement=replacement;this.toString=K(String(expression));},length:0,replacement:""},count:function(expression){expression=String(expression).replace(_RG_ESCAPE_CHARS,"").replace(_RG_ESCAPE_BRACKETS,"");return match(expression,_RG_BRACKETS).length;}});var JavaScript={name:"JavaScript",version:base2.version,exports:"Array2,Date2,String2",namespace:"",bind:function(host){forEach(this.exports.match(/\w+/g),function(name2){var name=name2.slice(0,-1);extend(host[name],this[name2]);this[name2](host[name].prototype);},this);return this;}};if((new Date).getYear()>1900){Date.prototype.getYear=function(){return this.getFullYear()-1900;};Date.prototype.setYear=function(year){return this.setFullYear(year+1900);};}
Function.prototype.prototype={};if("".replace(/^/,K("$$"))=="$"){extend(String.prototype,"replace",function(expression,replacement){if(typeof replacement=="function"){var fn=replacement;replacement=function(){return String(fn.apply(null,arguments)).split("$").join("$$");};}
return this.base(expression,replacement);});}
var Array2=_createObject2(Array,Array,"concat,join,pop,push,reverse,shift,slice,sort,splice,unshift",[Enumerable,{combine:function(keys,values){if(!values)values=keys;return this.reduce(keys,function(hash,key,index){hash[key]=values[index];return hash;},{});},contains:function(array,item){return this.indexOf(array,item)!=-1;},copy:function(array){var copy=_slice.call(array);if(!copy.swap)this(copy);return copy;},flatten:function(array){var length=0;return this.reduce(array,function(result,item){if(this.like(item)){this.reduce(item,arguments.callee,result,this);}else{result[length++]=item;}
return result;},[],this);},forEach:_Array_forEach,indexOf:function(array,item,fromIndex){var length=array.length;if(fromIndex==null){fromIndex=0;}else if(fromIndex<0){fromIndex=Math.max(0,length+fromIndex);}
for(var i=fromIndex;i<length;i++){if(array[i]===item)return i;}
return-1;},insertAt:function(array,index,item){this.splice(array,index,0,item);return item;},item:function(array,index){if(index<0)index+=array.length;return array[index];},lastIndexOf:function(array,item,fromIndex){var length=array.length;if(fromIndex==null){fromIndex=length-1;}else if(fromIndex<0){fromIndex=Math.max(0,length+fromIndex);}
for(var i=fromIndex;i>=0;i--){if(array[i]===item)return i;}
return-1;},map:function(array,block,context){var result=[];this.forEach(array,function(item,index){result[index]=block.call(context,item,index,array);});return result;},remove:function(array,item){var index=this.indexOf(array,item);if(index!=-1)this.removeAt(array,index);return item;},removeAt:function(array,index){return this.splice(array,index,1);},swap:function(array,index1,index2){if(index1<0)index1+=array.length;if(index2<0)index2+=array.length;var temp=array[index1];array[index1]=array[index2];array[index2]=temp;return array;}}]);Array2.reduce=Enumerable.reduce;Array2.like=function(object){return!!(object&&typeof object=="object"&&typeof object.length=="number");};;;;Enumerable["#implemented_by"].pop();;;;Enumerable["#implemented_by"].push(Array2);var _DATE_PATTERN=/^((-\d+|\d{4,})(-(\d{2})(-(\d{2}))?)?)?T((\d{2})(:(\d{2})(:(\d{2})(\.(\d{1,3})(\d)?\d*)?)?)?)?(([+-])(\d{2})(:(\d{2}))?|Z)?$/;var _DATE_PARTS={FullYear:2,Month:4,Date:6,Hours:8,Minutes:10,Seconds:12,Milliseconds:14};var _TIMEZONE_PARTS={Hectomicroseconds:15,UTC:16,Sign:17,Hours:18,Minutes:20};var _TRIM_ZEROES=/(((00)?:0+)?:0+)?\.0+$/;var _TRIM_TIMEZONE=/(T[0-9:.]+)$/;var Date2=_createObject2(Date,function(yy,mm,dd,h,m,s,ms){switch(arguments.length){case 0:return new Date;case 1:return new Date(yy);default:return new Date(yy,mm,arguments.length==2?1:dd,h||0,m||0,s||0,ms||0);}},"",[{toISOString:function(date){var string="####-##-##T##:##:##.###";for(var part in _DATE_PARTS){string=string.replace(/#+/,function(digits){var value=date["getUTC"+part]();if(part=="Month")value++;return("000"+value).slice(-digits.length);});}
return string.replace(_TRIM_ZEROES,"").replace(_TRIM_TIMEZONE,"$1Z");}}]);Date2.now=function(){return(new Date).valueOf();};Date2.parse=function(string,defaultDate){if(arguments.length>1){assertType(defaultDate,"number","defaultDate should be of type 'number'.")}
var match=String(string).match(_DATE_PATTERN);if(match){if(match[_DATE_PARTS.Month])match[_DATE_PARTS.Month]--;if(match[_TIMEZONE_PARTS.Hectomicroseconds]>=5)match[_DATE_PARTS.Milliseconds]++;var date=new Date(defaultDate||0);var prefix=match[_TIMEZONE_PARTS.UTC]||match[_TIMEZONE_PARTS.Hours]?"UTC":"";for(var part in _DATE_PARTS){var value=match[_DATE_PARTS[part]];if(!value)continue;date["set"+prefix+part](value);if(date["get"+prefix+part]()!=match[_DATE_PARTS[part]]){return NaN;}}
if(match[_TIMEZONE_PARTS.Hours]){var Hours=Number(match[_TIMEZONE_PARTS.Sign]+match[_TIMEZONE_PARTS.Hours]);var Minutes=Number(match[_TIMEZONE_PARTS.Sign]+(match[_TIMEZONE_PARTS.Minutes]||0));date.setUTCMinutes(date.getUTCMinutes()+(Hours*60)+Minutes);}
return date.valueOf();}else{return Date.parse(string);}};var String2=_createObject2(String,function(string){return new String(arguments.length==0?"":string);},"charAt,charCodeAt,concat,indexOf,lastIndexOf,match,replace,search,slice,split,substr,substring,toLowerCase,toUpperCase",[{trim:trim}]);function _createObject2(Native,constructor,generics,extensions){var INative=Module.extend();forEach(generics.match(/\w+/g),function(name){INative[name]=unbind(Native.prototype[name]);});forEach(extensions,INative.implement,INative);var Native2=function(){return INative(this.constructor==INative?constructor.apply(null,arguments):arguments[0]);};Native2.prototype=INative.prototype;forEach(INative,function(method,name){if(Native[name]){INative[name]=Native[name];delete INative.prototype[name];}
Native2[name]=INative[name];});Native2.ancestor=Object;delete Native2.extend;if(Native!=Array)delete Native2.forEach;return Native2;};function extend(object,source){if(object&&source){if(arguments.length>2){var key=source;source={};source[key]=arguments[2];}
var proto=(typeof source=="function"?Function:Object).prototype;var i=_HIDDEN.length,key;if(base2.__prototyping){while(key=_HIDDEN[--i]){var value=source[key];if(value!=proto[key]){if(_BASE.test(value)){_override(object,key,value)}else{object[key]=value;}}}}
for(key in source){if(proto[key]===undefined){var value=source[key];if(key.charAt(0)=="@"){if(detect(key.slice(1)))arguments.callee(object,value);continue;}
var ancestor=object[key];if(ancestor&&typeof value=="function"){if(value!=ancestor&&(!ancestor.method||!_ancestorOf(value,ancestor))){if(_BASE.test(value)){_override(object,key,value);}else{value.ancestor=ancestor;object[key]=value;}}}else{object[key]=value;}}}}
return object;};function _ancestorOf(ancestor,fn){while(fn){if(!fn.ancestor)return false;fn=fn.ancestor;if(fn==ancestor)return true;}
return false;};function _override(object,name,method){var ancestor=object[name];var superObject=base2.__prototyping;if(superObject&&ancestor!=superObject[name])superObject=null;function _base(){var previous=this.base;this.base=superObject?superObject[name]:ancestor;var returnValue=method.apply(this,arguments);this.base=previous;return returnValue;};_base.ancestor=ancestor;object[name]=_base;;;;_base.toString=K(String(method));};if(typeof StopIteration=="undefined"){StopIteration=new Error("StopIteration");}
function forEach(object,block,context,fn){if(object==null)return;if(!fn){if(typeof object=="function"&&object.call){fn=Function;}else if(typeof object.forEach=="function"&&object.forEach!=arguments.callee){object.forEach(block,context);return;}else if(typeof object.length=="number"){_Array_forEach(object,block,context);return;}}
_Function_forEach(fn||Object,object,block,context);};function _Array_forEach(array,block,context){if(array==null)return;var length=array.length,i;if(typeof array=="string"){for(i=0;i<length;i++){block.call(context,array.charAt(i),i,array);}}else{for(i=0;i<length;i++){if(i in array)
block.call(context,array[i],i,array);}}};function _Function_forEach(fn,object,block,context){var Temp=function(){this.i=1};Temp.prototype={i:1};var count=0;for(var i in new Temp)count++;_Function_forEach=(count>1)?function(fn,object,block,context){var processed={};for(var key in object){if(!processed[key]&&fn.prototype[key]===undefined){processed[key]=true;block.call(context,object[key],key,object);}}}:function(fn,object,block,context){for(var key in object){if(fn.prototype[key]===undefined){block.call(context,object[key],key,object);}}};_Function_forEach(fn,object,block,context);};function typeOf(object){var type=typeof object;switch(type){case"object":return object===null?"null":typeof object.call=="function"||_MSIE_NATIVE_FUNCTION.test(object)?"function":type;case"function":return typeof object.call=="function"?type:"object";default:return type;}};function instanceOf(object,klass){if(typeof klass!="function"){throw new TypeError("Invalid 'instanceOf' operand.");}
if(object==null)return false;if(object instanceof klass)return true;if(Base.ancestorOf==klass.ancestorOf)return false;if(Base.ancestorOf==object.constructor.ancestorOf)return klass==Object;switch(klass){case Array:return!!(typeof object=="object"&&object.join&&object.splice);case Function:return typeOf(object)=="function";case RegExp:return typeof object.constructor.$1=="string";case Date:return!!object.getTimezoneOffset;case String:case Number:case Boolean:return typeof object==typeof klass.prototype.valueOf();case Object:return true;}
return false;};function assert(condition,message,ErrorClass){if(!condition){throw new(ErrorClass||Error)(message||"Assertion failed.");}};function assertArity(args,arity,message){if(arity==null)arity=args.callee.length;if(args.length<arity){throw new SyntaxError(message||"Not enough arguments.");}};function assertType(object,type,message){if(type&&(typeof type=="function"?!instanceOf(object,type):typeOf(object)!=type)){throw new TypeError(message||"Invalid type.");}};function assignID(object){if(!object.base2ID)object.base2ID="b2_"+_counter++;return object.base2ID;};function copy(object){var fn=function(){};fn.prototype=object;return new fn;};function format(string){var args=arguments;var pattern=new RegExp("%([1-"+arguments.length+"])","g");return String(string).replace(pattern,function(match,index){return args[index];});};function match(string,expression){return String(string).match(expression)||[];};function rescape(string){return String(string).replace(_RESCAPE,"\\$1");};function trim(string){return String(string).replace(_LTRIM,"").replace(_RTRIM,"");};function I(i){return i;};function K(k){return function(){return k;};};function bind(fn,context){var args=_slice.call(arguments,2);return args.length==0?function(){return fn.apply(context,arguments);}:function(){return fn.apply(context,args.concat.apply(args,arguments));};};function delegate(fn,context){return function(){var args=_slice.call(arguments);args.unshift(this);return fn.apply(context,args);};};function flip(fn){return function(){return fn.apply(this,Array2.swap(arguments,0,1));};};function not(fn){return function(){return!fn.apply(this,arguments);};};function unbind(fn){return function(context){return fn.apply(context,_slice.call(arguments,1));};};base2=new Package(this,base2);eval(this.exports);base2.extend=extend;forEach(Enumerable,function(method,name){if(!Module[name])base2.addName(name,bind(method,Enumerable));});JavaScript=new Package(this,JavaScript);eval(this.exports);};(function(){var sUserAgent=navigator.userAgent;var isKHTML=sUserAgent.indexOf("KHTML")>-1||sUserAgent.indexOf("Konqueror")>-1||sUserAgent.indexOf("AppleWebKit")>-1;var isMoz=sUserAgent.indexOf("Gecko")>-1&&!isKHTML;if(isMoz){Element.prototype.selectNodes=function(sXPath){var oEvaluator=new XPathEvaluator();var oResult=oEvaluator.evaluate(sXPath,this,null,XPathResult.ORDERED_NODE_ITERATOR_TYPE,null);var aNodes=new Array;if(oResult!=null){var oElement=oResult.iterateNext();while(oElement){aNodes.push(oElement);oElement=oResult.iterateNext();}}
return aNodes;};Element.prototype.selectSingleNode=function(sXPath){var oEvaluator=new XPathEvaluator();var oResult=oEvaluator.evaluate(sXPath,this,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null);if(oResult!=null){return oResult.singleNodeValue;}else{return null;}}}})();XmlDOM=function(xmlPath){var sUserAgent=navigator.userAgent;var isKHTML=sUserAgent.indexOf("KHTML")>-1||sUserAgent.indexOf("Konqueror")>-1||sUserAgent.indexOf("AppleWebKit")>-1;var isMoz=sUserAgent.indexOf("Gecko")>-1&&!isKHTML;var isOpera=sUserAgent.indexOf("Opera")>-1;var isIE=sUserAgent.indexOf("compatible")>-1&&sUserAgent.indexOf("MSIE")>-1&&!isOpera;var _xmlDoc;var importXML=function(xml)
{processRequest=function(){if(req.readyState==4){var xmlDoc=req.responseXML;if(xmlDoc){_xmlDoc=xmlDoc;}}}
var req=null;if(window.XMLHttpRequest){try{req=new XMLHttpRequest();}catch(e){req=null;}}else if(window.ActiveXObject){try{req=new ActiveXObject("Msxml2.XMLHTTP");}catch(e){try{req=new ActiveXObject("Microsoft.XMLHTTP");}catch(e){req=null;}}}
if(req){req.open("GET",xml,true);req.onreadystatechange=processRequest;req.setRequestHeader("Content-Type","text/xml");req.send("");}}
if(xmlPath){importXML(xmlPath);}
else{throw Error("Path to xml is not given");}
this.getElementsByTagName=function(tagName){if(_xmlDoc){return _xmlDoc.getElementsByTagName(tagName);}
else{return undefined;}}
if(isIE||isMoz){this.selectNodes=function(sXPath){if(_xmlDoc){return _xmlDoc.documentElement.selectNodes(sXPath);}
else{return null;}}
this.selectSingleNode=function(sXPath){if(_xmlDoc){return _xmlDoc.documentElement.selectSingleNode(sXPath);}
else{return null;}}
this.query=this.selectNodes;}}
oXmlDom=new Object();var DateTimeUtils=base2.Base.extend({constructor:function(){this.DEFAULT_TIME_MASK=this.HOURS_23_MASK+":"+this.MINUTES_MASK;this.DEFAULT_DATE_MASK=this.DAYS_MASK+"."+this.MONTHS_MASK+"."+this.YEARS_MASK;this.extend({isFullDateMask:function(mask){if(arguments.length<1||!mask||!mask.indexOf){return false;}
return(mask.indexOf(this.DAYS_MASK)>-1)&&(mask.indexOf(this.MONTHS_MASK)>-1)&&(mask.indexOf(this.YEARS_MASK)>-1)},areValidParameters:function(args,types){if(args.length<types.length){return false;}
for(var index=0;index<types.length;index++){if(args[index]==null||args[index].constructor!=types[index]){return false;}}
return true;},cutForwardedZeros:function(strNumber){var i=0;while(strNumber!=""&&strNumber.charAt(i)=="0")i++;strNumber=strNumber.substring(i,strNumber.length);if(strNumber=="")strNumber="0";return strNumber;}});},HOURS_23_MASK:"hh",HOURS_24_MASK:"HH",HOURS_999_MASK:"hhh",MINUTES_MASK:"mm",SECONDS_MASK:"ss",DAYS_MASK:"dd",MONTHS_MASK:"MM",YEARS_MASK:"yyyy",MAX_YEAR:9999,MIN_YEAR:0,HOURS_hh_VALIDATION_MASK:"([0-1]\\d|[2][0-3])",HOURS_hhh_VALIDATION_MASK:"\\d{3}",HOURS_HH_VALIDATION_MASK:"(0[1-9]|1\\d|2[0-4])",MINUTES_VALIDATION_MASK:"([0-5]\\d)",SECONDS_VALIDATION_MASK:"([0-5]\\d)",DAYS_VALIDATION_MASK_31:"(0[1-9]|[12]\\d|3[01])",DAYS_VALIDATION_MASK_30:"(0[1-9]|[12]\\d|3[0])",DAYS_VALIDATION_MASK_29:"(0[1-9]|[12]\\d)",DAYS_VALIDATION_MASK_28:"(0[1-9]|1\\d|2[0-8])",MONTHS_VALIDATION_MASK_31:"(0[13578]|1[02])",MONTHS_VALIDATION_MASK_30:"(0[469]|11)",MONTHS_VALIDATION_MASK_29:"(02)",MONTHS_VALIDATION_MASK_28:"(02)",YEARS_VALIDATION_MASK_31:"\\d\\d\\d\\d",YEARS_VALIDATION_MASK_30:"\\d\\d\\d\\d",YEARS_VALIDATION_MASK_29:"(\\d\\d(0[48]|[2468][048]|[13579][26]))|(([02468][048]|[13579][26])00)",YEARS_VALIDATION_MASK_28:"(\\d\\d([02468][1235679]|[13579][01345789]))|(([02468][1235679]|[13579][01345789])00)",LEAP_YEAR_REG_EXP:/^((\d\d(0[48]|[2468][048]|[13579][26]))|(([02468][048]|[13579][26])00))$/,isLeapYear:function(year){return this.LEAP_YEAR_REG_EXP.test(year);},getLastMonthsDay:function(month,year){if(!this.areValidParameters(arguments,new Array(Number,Number))){return;}
switch(month){case 1:case 3:case 5:case 7:case 8:case 10:case 12:{return 31;}
case 4:case 6:case 9:case 11:{return 30;}
case 2:{if(this.isLeapYear(year)){return 29;}
else{return 28;}}
default:{return-1;}}},getMonthsBaseOnDaysCount:function(days,year){if(!this.areValidParameters(arguments,new Array(Number,Number))){return;}
var months;if(days==31){months=new Array(1,3,5,7,8,10,12);}
else if(days==30||(days==29&&!this.isLeapYear(year))){months=new Array(1,3,4,5,6,7,8,9,10,11,12);}
else if(0<days&&days<=29&&days!==true){months=new Array(1,2,3,4,5,6,7,8,9,10,11,12);}
return months;},getNextValidMonth:function(day,month,year){if(!this.areValidParameters(arguments,new Array(Number,Number,Number))){return;}
var months=this.getMonthsBaseOnDaysCount(day,year);var i=0;while(i<months.length&&months[i]<=month)i++;if(i<months.length){return months[i];}
else{return months[months.length-1];}},getPrevValidMonth:function(day,month,year){if(!this.areValidParameters(arguments,new Array(Number,Number,Number))){return;}
var months=this.getMonthsBaseOnDaysCount(day,year);var i=0;while(i<months.length&&months[i]<month)i++;if(i==0){return months[0];}
else{return months[i-1];}},getNextValidYear:function(day,month,year){if(!this.areValidParameters(arguments,new Array(Number,Number,Number))){return;}
var newYear;if(day==29&&month==2&&this.isLeapYear(year)){newYear=year+4;if(!this.isLeapYear(newYear)){newYear+=4;}}
else{newYear=year+1;}
if(newYear>this.MAX_YEAR){newYear=this.MAX_YEAR;}
return newYear;},getPrevValidYear:function(day,month,year){if(!this.areValidParameters(arguments,new Array(Number,Number,Number))){return;}
var newYear;if(day==29&&month==2&&this.isLeapYear(year)){var newYear=year-4;if(!this.isLeapYear(newYear)){newYear-=4;}}
else{newYear=year-1;}
if(newYear<this.MIN_YEAR){newYear=this.MIN_YEAR;}
return newYear;},isValidDate:function(strDate,mask){if(!this.areValidParameters(arguments,new Array(String))||strDate==""){return;}
if(typeof mask=='undefined'||mask==null){mask=this.DEFAULT_DATE_MASK;}
mask=mask.replace(/\./g,"\\\.");var dateMask31=mask.replace(/dd/,this.DAYS_VALIDATION_MASK_31);dateMask31=dateMask31.replace(/MM/,this.MONTHS_VALIDATION_MASK_31);dateMask31=dateMask31.replace(/yyyy/,this.YEARS_VALIDATION_MASK_31);var dateMask30=mask.replace(/dd/,this.DAYS_VALIDATION_MASK_30);dateMask30=dateMask30.replace(/MM/,this.MONTHS_VALIDATION_MASK_30);dateMask30=dateMask30.replace(/yyyy/,this.YEARS_VALIDATION_MASK_30);var dateMask29=mask.replace(/dd/,this.DAYS_VALIDATION_MASK_29);dateMask29=dateMask29.replace(/MM/,this.MONTHS_VALIDATION_MASK_29);dateMask29=dateMask29.replace(/yyyy/,this.YEARS_VALIDATION_MASK_29);var dateMask28=mask.replace(/dd/,this.DAYS_VALIDATION_MASK_28);dateMask28=dateMask28.replace(/MM/,this.MONTHS_VALIDATION_MASK_28);dateMask28=dateMask28.replace(/yyyy/,this.YEARS_VALIDATION_MASK_28);var dateMask="^("+dateMask31+")|("+dateMask30+")|("+dateMask29+")|("+dateMask28+")$";var dateRegExp=new RegExp(dateMask);return(strDate.replace(dateRegExp,"")=="");},getMSFromStrDate:function(strDate,mask){if(typeof mask=='undefined'||mask==null){mask=this.DEFAULT_DATE_MASK;}
if(!this.areValidParameters(arguments,new Array(String,String))||!this.isFullDateMask(mask)||!this.isValidDate(strDate,mask)){return;}
var daysIndex=mask.indexOf(this.DAYS_MASK);var day=parseInt(this.cutForwardedZeros(strDate.substr(daysIndex,this.DAYS_MASK.length)));if(isNaN(parseInt(strDate.substr(daysIndex,this.DAYS_MASK.length)))){return 0;}
var monthsIndex=mask.indexOf(this.MONTHS_MASK);var month=parseInt(this.cutForwardedZeros(strDate.substr(monthsIndex,this.MONTHS_MASK.length)))-1;var yearsIndex=mask.indexOf(this.YEARS_MASK);var year=parseInt(this.cutForwardedZeros(strDate.substr(yearsIndex,this.YEARS_MASK.length)));return(new Date(year,month,day)).getTime();},formStrDateFromMS:function(ms,mask){if(typeof mask=='undefined'||mask==null){mask=this.DEFAULT_DATE_MASK;}
if(!this.areValidParameters(arguments,new Array(Number,String))||!this.isFullDateMask(mask)){return;}
var date=new Date(ms);var day=date.getDate();var month=date.getMonth()+1;var year=date.getFullYear();var resultString=mask.replace(/dd/g,((day<10)?"0":"")+day);var resultString=resultString.replace(/MM/g,((month<10)?"0":"")+month);var resultString=resultString.replace(/yyyy/g,year);return resultString;},getUpperLimitForTimeComponent:function(mask){if(!this.areValidParameters(arguments,new Array(String))){return;}
switch(mask){case this.HOURS_23_MASK:{return 23;}
case this.HOURS_24_MASK:{return 24;}
case this.MINUTES_MASK:case this.SECONDS_MASK:{return 59;}}},getLowerLimitForTimeComponent:function(mask){if(!this.areValidParameters(arguments,new Array(String))){return;}
switch(mask){case this.HOURS_23_MASK:case this.MINUTES_MASK:case this.SECONDS_MASK:{return 0;}
case this.HOURS_24_MASK:{return 1;}}},isValidTime:function(strTime,mask){if(typeof mask=='undefined'||mask==null){mask=this.DEFAULT_TIME_MASK;}
if(!this.areValidParameters(arguments,new Array(String))||strTime==""){return;}
mask=mask.replace(/\./g,"\\\.");var timeMask=mask.replace(/hhh/g,this.HOURS_hhh_VALIDATION_MASK);timeMask=timeMask.replace(/hh/g,this.HOURS_hh_VALIDATION_MASK);timeMask=timeMask.replace(/HH/g,this.HOURS_HH_VALIDATION_MASK);timeMask=timeMask.replace(/mm/g,this.MINUTES_VALIDATION_MASK);timeMask=timeMask.replace(/ss/g,this.SECONDS_VALIDATION_MASK);var timeRegExp=new RegExp("^"+timeMask+"$");return(strTime.replace(timeRegExp,"")=="");},getMSFromStrTime:function(strTime,mask){if(typeof mask=='undefined'||mask==null){mask=this.DEFAULT_TIME_MASK;}
if(!this.areValidParameters(arguments,new Array(String))||!this.isValidTime(strTime,mask)){return;}
var secondsIndex=mask.indexOf(this.SECONDS_MASK);var seconds=(secondsIndex>-1)?parseInt(this.cutForwardedZeros(strTime.substr(secondsIndex,this.SECONDS_MASK.length))):0;var minutesIndex=mask.indexOf(this.MINUTES_MASK);var minutes=(minutesIndex>-1)?parseInt(this.cutForwardedZeros(strTime.substr(minutesIndex,this.MINUTES_MASK.length))):0;var hoursIndex=mask.indexOf(this.HOURS_999_MASK);if(hoursIndex>-1){var hours=parseInt(this.cutForwardedZeros(strTime.substr(hoursIndex,this.HOURS_999_MASK.length)));}
else{hoursIndex=mask.indexOf(this.HOURS_23_MASK);if(hoursIndex>-1){var hours=parseInt(this.cutForwardedZeros(strTime.substr(hoursIndex,this.HOURS_23_MASK.length)));}
else{hoursIndex=mask.indexOf(this.HOURS_24_MASK);var hours=parseInt(this.cutForwardedZeros(strTime.substr(hoursIndex,this.HOURS_24_MASK.length)));if(hours==24){hours=0;}}}
return(seconds+(minutes+hours*60)*60)*1000;},formStrTimeFromMS:function(seconds,mask){if(typeof mask=='undefined'||mask==null){mask=this.DEFAULT_TIME_MASK;}
if(!this.areValidParameters(arguments,new Array(Number))){return;}
seconds=seconds/1000;var minutes=parseInt(seconds/60);seconds=seconds-minutes*60;var hours=parseInt(minutes/60);minutes=minutes-hours*60;var resultString=mask.replace(/hh/g,((hours<10)?"0":"")+hours);var resultString=resultString.replace(/HH/g,(function(){if(hours==0){hours=24;}
return((hours<10)?"0":"")+hours;})());var resultString=resultString.replace(/mm/g,((minutes<10)?"0":"")+minutes);var resultString=resultString.replace(/ss/g,((seconds<10)?"0":"")+seconds);return resultString;}});var Validator=base2.Base.extend({constructor:function(pathToXML,checkXml,messages){if(messages){var ValidationMsg=messages;}
var dateTimeUtils=new DateTimeUtils();this.setXmlDoc(new XmlDOM(pathToXML));this.setCheckXmlNodeFlag(checkXml);this.extend({errorStack:new Array(),cursorPosition:"",xmlDoc:"",checkXmlNodeFlag:true,isErrorStackEmpty:function(){if(this.getErrorStack().length==0){return true;}
return false;},showErrors:function(){var string="";var errors=this.getErrorStack();if(this.isErrorStackEmpty()){return true;}
else{for(var i=0;i<errors.length;i++){string+=errors[i]+"<br/>";}
popupHandler.showValidationPopup(string);}},findFormForElement:function(input){var node=input;while(node.parentNode.nodeName!="FORM"&&node.parentNode.nodeName!="BODY"){node=node.parentNode;}
if(node.parentNode.nodeName!="FORM"){return false;}
return node.parentNode;},getInputsForValidation:function(elem,params){var inputs=new Array();if(typeof params!='undefined'&&params!=null){for(var i=0;i<params.length;i++){inputs.push(this.getInputForValidation(findFormForElement(elem),params[i]));}}
return inputs;},getInputForValidation:function(form,xmlFieldName){var inputsFromForm;var inputs;if(!form.getElementsByName){if(form.elements){inputsFromForm=form.elements;}else{inputsFromForm=[];var cFields=form.getElementsByTagName("input");var i=cFields.length;while(i-->0){inputsFromForm.unshift(cFields.item(i));}
cFields=form.getElementsByTagName("textarea");i=cFields.length;while(i-->0){inputsFromForm.unshift(cFields.item(i));}
cFields=form.getElementsByTagName("select");i=cFields.length;while(i-->0){inputsFromForm.unshift(cFields.item(i));}}}else{inputs=form.getElementsByName(xmlFieldName);}
if(inputsFromForm){for(var inputIndex=0;inputIndex<inputsFromForm.length;inputIndex++){if(inputsFromForm[inputIndex].name==xmlFieldName&&inputsFromForm[inputIndex].disabled!=true){return inputsFromForm[inputIndex];}}}
return this.getInput(inputs);},getInput:function(inputs){if(inputs){for(var inputIndex=0;inputIndex<inputs.length;inputIndex++){if(inputs[inputIndex].disabled!=true){return inputs[inputIndex];}}}
return false;},isElementDefined:function(element){return typeof(element)!='undefined';},isParamOfThisType:function(xmlParam,paramType){return xmlParam.getAttribute(this.VALIDATOR_TYPE_NODE)==paramType;},isXmlParamKeyPresent:function(xmlParam){if(xmlParam.getAttribute('key')){return true;}
return false;},getXmlParamValue:function(xmlNode,paramType){var xmlParam=this.getXmlParamTag(xmlNode,paramType);if(this.isXmlParamKeyPresent(xmlParam)){var validationMsg=ValidationMsg[xmlParam.getAttribute('key')];if(validationMsg){if(validationMsg instanceof Function){return validationMsg();}
return ValidationMsg[xmlParam.getAttribute('key')];}}
return xmlParam.firstChild.nodeValue;},isXmlParamPresent:function(xmlNode,paramType){return(this.getXmlParamTag(xmlNode,paramType)!=null);},getXmlParamTag:function(xmlNode,paramType){if(this.getXmlDoc().selectNodes){var xmlParam=xmlNode.selectNodes("param[@type='"+paramType+"']");if(xmlParam[0]){return xmlParam[0];}}
else{var params=xmlNode.getElementsByTagName("param");for(var i=0;i<params.length;i++){if(params[i].getAttribute("type")==paramType){return params[i];}}}
return null;},getXmlFieldsForBlock:function(blockName){if(this.getXmlDoc().selectNodes){var xmlForm=this.getXmlDoc().selectNodes("//block/name[@value='"+blockName+"']");}
else{var blocks=this.getXmlDoc().getElementsByTagName("block");for(var i=0;i<blocks.length;i++){var name=blocks[i].getElementsByTagName("name")[0];if(name.getAttribute("value")==blockName){var xmlForm=[];xmlForm.push(name);break;}}}
if(xmlForm&&xmlForm[0]){if(this.getXmlDoc().selectNodes){var xmlField=xmlForm[0].parentNode.parentNode.selectNodes("fields/field");}
else{var xmlField=xmlForm[0].parentNode.parentNode.getElementsByTagName("field");}
if(typeof xmlField!='undefined'){return xmlField;}}
return false;},getXmlFields:function(actionName){if(this.getXmlDoc().selectNodes){var xmlForm=this.getXmlDoc().selectNodes("//actions/action[@url='"+actionName+"']");}
else{var actions=this.getXmlDoc().getElementsByTagName("actions");for(var i=0;i<actions.length;i++){var action=actions[i].getElementsByTagName("action")[0];if(action.getAttribute("url")==actionName){var xmlForm=[];xmlForm.push(action);break;}}}
if(xmlForm&&xmlForm[0]){var xmlField=xmlForm[0].parentNode.parentNode.getElementsByTagName("field");if(typeof xmlField!='undefined'){return xmlField;}}
return false;},replaceNamesInExpr:function(formElements,expr){var newExpr=expr;var fieldsName=this.getFieldsNameFromExpression(expr);if(fieldsName){for(var j=0;j<fieldsName.length;j++){var tempExpr=newExpr;if(!(fieldsName[fieldsName[j]]instanceof Function)){var findName="#{"+fieldsName[j]+"}";switch(formElements[fieldsName[j]].type){case'time':newExpr=tempExpr.replace(new RegExp(findName,"g"),dateTimeUtils.getMSFromStrTime(formElements[fieldsName[j]].value,this.VALIDATOR_DEFAULT_TIME_MASK));break;case'date':newExpr=tempExpr.replace(new RegExp(findName,"g"),dateTimeUtils.getMSFromStrDate(formElements[fieldsName[j]].value,this.VALIDATOR_DEFAULT_DATE_MASK));break;case'number':newExpr=tempExpr.replace(new RegExp(findName,"g"),parseInt(formElements[fieldsName[j]].value));break;default:var value=formElements[fieldsName[j]].value;if(typeof value=="string"){value=this.removeHTMLTags(value);if(value.indexOf("'")>-1){value=this.replaceApostropheSymbol(value);}}
if(typeof securedValue=="string"){var securedValue=value.replace(new RegExp("\"","g"),"\\\"");}
else{var securedValue=value;}
newExpr=tempExpr.replace(new RegExp(findName,"g"),securedValue);break;}}}}
newExpr=this.replaceOrOperator(newExpr);newExpr=this.replaceLessThanOperator(newExpr);return this.replaceAndOperator(newExpr);},removeHTMLTags:function(fieldValue){return fieldValue.replace(/<.*?>/gi,'').replace(/\s/g,'');},replaceApostropheSymbol:function(fieldValue){var splitValueArray=fieldValue.split("'");var newValue=splitValueArray.join(";");return newValue;},replaceAndOperator:function(expr){var ands=expr.match(/[\W]and[\W]|[\W]AND[\W]/g);if(ands){for(var j=0;j<ands.length;j++){var tempExpr=expr;expr=tempExpr.replace(new RegExp(/[\W]and[\W]|[\W]AND[\W]/),ands[j].slice(0,1)+"&&"+ands[j].slice(ands[j].length-1,ands[j].length));}}
return expr;},replaceOrOperator:function(expr){var ors=expr.match(/[\W]or[\W]|[\W]OR[\W]/g);if(ors){for(var j=0;j<ors.length;j++){var tempExpr=expr;expr=tempExpr.replace(new RegExp(/[\W]or[\W]|[\W]OR[\W]/),ors[j].slice(0,1)+"||"+ors[j].slice(ors[j].length-1,ors[j].length));}}
return expr;},replaceLessThanOperator:function(expr){var ors=expr.match(/[\W]less than[\W]/g);if(ors){for(var j=0;j<ors.length;j++){var tempExpr=expr;expr=tempExpr.replace(new RegExp(/[\W]less than[\W]/),ors[j].slice(0,1)+"<"+ors[j].slice(ors[j].length-1,ors[j].length));}}
return expr;},replaceParamsInMessage:function(params,msg){var newMsg=msg;var paramExpressions=msg.match(/\${[\w.]+}/g);if(paramExpressions){for(var i=0;i<paramExpressions.length;i++){var tempMsg=newMsg;if(!(params[paramExpressions[i].slice(2,-1)]instanceof Function)){newMsg=this.replaceParamInMessage(params[paramExpressions[i].slice(2,-1)],paramExpressions[i].slice(2,-1),tempMsg);}}}
return newMsg;},replaceParamInMessage:function(param,type,msg){var findParam="\\${"+type+"}";return msg.replace(new RegExp(findParam,"g"),param);},getParamsForMessage:function(validationType){var params=validationType.getElementsByTagName('param');var paramsForMessage=new Array();for(var j=0;j<params.length;j++){if(params[j].getAttribute('type')!=this.VALIDATOR_MESSAGE){paramsForMessage[params[j].getAttribute('type')]=this.getXmlParamValue(validationType,params[j].getAttribute('type'));}}
return paramsForMessage;},getXmlExpression:function(xmlField){if(this.getXmlDoc().selectNodes){var expr=xmlField.selectNodes("validation/expression");}
else{var expr=[];var validation=xmlField.getElementsByTagName("validation");for(var i=0;i<validation.length;i++){var exprElm=validation[i].getElementsByTagName("expression");if(exprElm.length>0){expr.push(exprElm[0]);}}}
if(typeof expr[0]!='undefined'){return expr[0].firstChild.nodeValue;}
return false;},getFieldsNameFromExpression:function(expr){var fieldsName=new Array();if(expr){var fieldsNameExpressions=expr.match(/\#{[\w.]+}/g);if(fieldsNameExpressions){for(var i=0;i<fieldsNameExpressions.length;i++){fieldsName.push(fieldsNameExpressions[i].slice(2,-1));}}}
return fieldsName;},getTypeForValidationsExpr:function(xmlField){var validationNodes=xmlField.getElementsByTagName("validation");for(var i=0;i<validationNodes.length;i++){if(validationNodes[i].getAttribute("type")=='date'){return'date';}
else if(validationNodes[i].getAttribute("type")=='time'){return'time';}
else if(validationNodes[i].getAttribute("type")=='range'){return'number';}
else if(validationNodes[i].getAttribute("type")=='digital'){return'number';}}
return'string';},getFormElementsForExpr:function(form,xmlField){var fieldsName=this.getFieldsNameFromExpression(this.getXmlExpression(xmlField));var formElements=new Array();for(var k=0;k<fieldsName.length;k++){if(this.getInputForValidation(form,fieldsName[k])){formElements[fieldsName[k]]={};formElements[fieldsName[k]].value=this.checkTypeInputeForValidation(this.getInputForValidation(form,fieldsName[k]));formElements[fieldsName[k]].type=this.getTypeForValidationsExpr(xmlField);}else{return false;}}
return formElements;},trimString:function(input){return input.value.replace(/^\s+/g,'').replace(/\s+$/g,'');},checkTypeInputeForValidation:function(inputForValidation){if(inputForValidation.type=="radio"){var inputs=document.getElementsByName(inputForValidation.getAttribute('name'));for(var j=0;j<inputs.length;j++){if(inputs[j].checked==true){return inputs[j].value;}}}
if(inputForValidation.type=="checkbox"){var inputs=document.getElementsByName(inputForValidation.getAttribute('name'));for(var j=0;j<inputs.length;j++){if(inputs[j].checked==true){return true;}}
return false;}
return inputForValidation.value;},_addErrorInfo:function(elem,msg){this.pushIntoErrorStack(msg);this.setCursorPosition(elem);},clearErrorStack:function(){this.errorStack=new Array();},checkXmlNode:function(xmlInput){if(xmlInput){var paramsValidation=xmlInput.getElementsByTagName(this.VALIDATOR_VALIDATION);for(var paramsIndex=0;paramsIndex<paramsValidation.length;paramsIndex++){switch(paramsValidation[paramsIndex].getAttribute(this.VALIDATOR_TYPE_NODE)){case this.VALIDATOR_VALIDATION_REQUIRED:this.checkAttributePresent(this.isXmlParamPresent(paramsValidation[paramsIndex],this.VALIDATOR_MESSAGE),this.VALIDATOR_MESSAGE);break;case this.VALIDATOR_VALIDATION_RANGE_PREFIX:this.checkAttributePresent(this.isXmlParamPresent(paramsValidation[paramsIndex],this.VALIDATOR_MESSAGE),this.VALIDATOR_MESSAGE);this.checkAttributePresent(this.isXmlParamPresent(paramsValidation[paramsIndex],this.VALIDATOR_MIN),this.VALIDATOR_MIN);this.checkAttributePresent(this.isXmlParamPresent(paramsValidation[paramsIndex],this.VALIDATOR_MAX),this.VALIDATOR_MAX);break;case this.VALIDATOR_VALIDATION_TIME:this.checkAttributePresent(this.isXmlParamPresent(paramsValidation[paramsIndex],this.VALIDATOR_MESSAGE),this.VALIDATOR_MESSAGE);break;case this.VALIDATOR_VALIDATION_DATE:this.checkAttributePresent(this.isXmlParamPresent(paramsValidation[paramsIndex],this.VALIDATOR_MESSAGE),this.VALIDATOR_MESSAGE);break;case this.VALIDATOR_VALIDATION_NUMERIC:this.checkAttributePresent(this.isXmlParamPresent(paramsValidation[paramsIndex],this.VALIDATOR_MESSAGE),this.VALIDATOR_MESSAGE);break;case this.VALIDATOR_VALIDATION_CHARACTERS:this.checkAttributePresent(this.isXmlParamPresent(paramsValidation[paramsIndex],this.VALIDATOR_MESSAGE),this.VALIDATOR_MESSAGE);break;case this.VALIDATOR_VALIDATION_MASK:this.checkAttributePresent(this.isXmlParamPresent(paramsValidation[paramsIndex],this.VALIDATOR_MESSAGE),this.VALIDATOR_MESSAGE);this.checkAttributePresent(this.isXmlParamPresent(paramsValidation[paramsIndex],this.VALIDATOR_MASK),this.VALIDATOR_MASK);break;case this.VALIDATOR_VALIDATION_URL:this.checkAttributePresent(this.isXmlParamPresent(paramsValidation[paramsIndex],this.VALIDATOR_MESSAGE),this.VALIDATOR_MESSAGE);break;case this.VALIDATOR_VALIDATION_EMAIL:this.checkAttributePresent(this.isXmlParamPresent(paramsValidation[paramsIndex],this.VALIDATOR_MESSAGE),this.VALIDATOR_MESSAGE);break;}}}},logErrors:function(nameElement){if(nameElement){alert("Attribute "+nameElement+" is required!");}},checkAttributePresent:function(attribute,attributeName){if(!attribute){Validator.logErrors(attributeName);}}});},getErrorStack:function(){return this.errorStack;},pushIntoErrorStack:function(value){this.errorStack.push(value);},getCursorPosition:function(){return cursorPosition;},setCursorPosition:function(newCursorPosition){cursorPosition=newCursorPosition;},getXmlDoc:function(){return xmlDoc;},setXmlDoc:function(foundXmlDoc){xmlDoc=foundXmlDoc;},getCheckXmlNodeFlag:function(){return checkXmlNodeFlag;},setCheckXmlNodeFlag:function(checkXml){checkXmlNodeFlag=checkXml;},VALIDATOR_VALIDATION:'validation',VALIDATOR_TYPE_NODE:'type',VALIDATOR_MESSAGE:'message',VALIDATOR_MIN:'min',VALIDATOR_MAX:'max',VALIDATOR_MASK:'mask',VALIDATOR_INPUT:'input',VALIDATOR_PARAM:'param',VALIDATOR_FIELD:'field',VALIDATOR_ACTION:'action',VALIDATOR_URL:'url',VALIDATOR_EMAIL:'e-mail',VALIDATOR_VALID_WHEN:'validWhen',VALIDATOR_FILE_LOAD:"/BackEndv2/js/validators/validation-rules.xml",VALIDATOR_VALIDATION_REQUIRED:"required",VALIDATOR_VALIDATION_RANGE_PREFIX:"range",VALIDATOR_VALIDATION_DATE_TIME:"date_time",VALIDATOR_VALIDATION_DATE_TIME_MASK:"date_time_mask",VALIDATOR_VALIDATION_TIME:"time",VALIDATOR_VALIDATION_TIME_MASK:"time_mask",VALIDATOR_VALIDATION_DATE:"date",VALIDATOR_VALIDATION_DATE_MASK:"date_mask",VALIDATOR_VALIDATION_NUMERIC:"digital",VALIDATOR_VALIDATION_FLOAT_NUMERIC:"float",VALIDATOR_VALIDATION_RANGE_FLOAT_NUMERIC:"rangeFloat",VALIDATOR_VALIDATION_CHARACTERS:"characters",VALIDATOR_VALIDATION_MASK:"mask",VALIDATOR_VALIDATION_MASK_REG_EXP:"mask_reg_exp",VALIDATOR_DEFAULT_TIME_MASK:"hh:mm",VALIDATOR_DEFAULT_DATE_MASK:"dd.MM.yyyy",VALIDATOR_DEFAULT_DATE_TIME_MASK:this.VALIDATOR_DEFAULT_DATE_MASK+" "+this.VALIDATOR_DEFAULT_TIME_MASK,VALIDATOR_HOURS_hh_VALIDATION_MASK:"([0-1]\\d|[2][0-3])",VALIDATOR_HOURS_HH_VALIDATION_MASK:"(0[1-9]|1\\d|2[0-4])",VALIDATOR_MINUTES_VALIDATION_MASK:"([0-5]\\d)",VALIDATOR_SECONDS_VALIDATION_MASK:"([0-5]\\d)",VALIDATOR_DAYS_VALIDATION_MASK_31:"(0[1-9]|[12]\\d|3[01])",VALIDATOR_DAYS_VALIDATION_MASK_30:"(0[1-9]|[12]\\d|3[0])",VALIDATOR_DAYS_VALIDATION_MASK_29:"(0[1-9]|[12]\\d)",VALIDATOR_DAYS_VALIDATION_MASK_28:"(0[1-9]|1\\d|2[0-8])",VALIDATOR_MONTHS_VALIDATION_MASK_31:"(0[13578]|1[02])",VALIDATOR_MONTHS_VALIDATION_MASK_30:"(0[469]|11)",VALIDATOR_MONTHS_VALIDATION_MASK_29:"(02)",VALIDATOR_MONTHS_VALIDATION_MASK_28:"(02)",VALIDATOR_YEARS_VALIDATION_MASK_31:"\\d\\d\\d\\d$",VALIDATOR_YEARS_VALIDATION_MASK_30:"\\d\\d\\d\\d$",VALIDATOR_YEARS_VALIDATION_MASK_29:"(\\d\\d(0[48]|[2468][048]|[13579][26])$)|(([02468][048]|[13579][26])00)$",VALIDATOR_YEARS_VALIDATION_MASK_28:"(\\d\\d([02468][1235679]|[13579][01345789])$)|(([02468][1235679]|[13579][01345789])00)",VALIDATOR_DIGITAL_VALIDATION_MASK:/^(\d)*$/,VALIDATOR_CHARACTERS_VALIDATION_MASK:/^([a-zA-Z])*$/,VALIDATOR_EMAIL_VALIDATION_MASK:/^[0-9a-z_.]+@[0-9a-z_\-^\.]+\.[a-z]{2,6}$/i,VALIDATOR_URL_VALIDATION_MASK:/^(https?:\/\/)?(([0-9a-z_!~*'().&=+$%-]+:)?[0-9a-z_!~*'().&=+$%-]+@)?(([0-9]{1,3}\.){3}[0-9]{1,3}|([0-9a-z_!~*'()-]+\.)*([0-9a-z][0-9a-z-]{0,61})?[0-9a-z]\.[a-z]{2,6})(:[0-9]{1,4})?((\/?)|(\/[0-9a-zA-Z_!~*'().;?:@&=+$,%#-]+)+\/?)$/,VALIDATOR_FLOAT_VALIDATION_MASK:/^[-+]?\d+(\.\d+)?$/,VALIDATOR_ELEMENT_BLUR_VT:0,VALIDATOR_FORM_SUBMIT_VT:1,required:function(elem,msg){if(elem.value==""){this._addErrorInfo(elem,msg);}},range:function(elem,msg,params){var intMin;var min;var intMax;var max;if(typeof params!='undefined'&&params!=null){if(typeof params[this.VALIDATOR_MIN]!='undefined'&&!(params[this.VALIDATOR_MIN]instanceof Function)){intMin=parseInt(params[this.VALIDATOR_MIN]);min=params[this.VALIDATOR_MIN];}
if(typeof params[this.VALIDATOR_MAX]!='undefined'&&!(params[this.VALIDATOR_MAX]instanceof Function)){intMax=parseInt(params[this.VALIDATOR_MAX]);max=params[this.VALIDATOR_MAX];}}
var intValue=parseInt(elem.value);var newMsg=this.replaceParamsInMessage(params,msg);if(!(isNaN(intMin)||isNaN(intMax))){if(isNaN(intValue)||intValue<=min||intValue>=max){this._addErrorInfo(elem,newMsg);}}
else if(!isNaN(intMin)&&(max==""||typeof max=='undefined')){if(isNaN(intValue)||intValue<=intMin){this._addErrorInfo(elem,newMsg);}}
else if(!isNaN(intMax)&&(min==""||typeof min=='undefined')){if(isNaN(intValue)||intValue>=intMax){this._addErrorInfo(elem,newMsg);}}
else{if(elem.value<=min||elem.value>=max){this._addErrorInfo(elem,newMsg);}}},_replaceDateRegExp:function(mask){var dateMask31=mask.replace(/dd/,this.VALIDATOR_DAYS_VALIDATION_MASK_31);dateMask31=dateMask31.replace(/MM/,this.VALIDATOR_MONTHS_VALIDATION_MASK_31);dateMask31=dateMask31.replace(/yyyy/,this.VALIDATOR_YEARS_VALIDATION_MASK_31);var dateMask30=mask.replace(/dd/,this.VALIDATOR_DAYS_VALIDATION_MASK_30);dateMask30=dateMask30.replace(/MM/,this.VALIDATOR_MONTHS_VALIDATION_MASK_30);dateMask30=dateMask30.replace(/yyyy/,this.VALIDATOR_YEARS_VALIDATION_MASK_30);var dateMask29=mask.replace(/dd/,this.VALIDATOR_DAYS_VALIDATION_MASK_29);dateMask29=dateMask29.replace(/MM/,this.VALIDATOR_MONTHS_VALIDATION_MASK_29);dateMask29=dateMask29.replace(/yyyy/,this.VALIDATOR_YEARS_VALIDATION_MASK_29);var dateMask28=mask.replace(/dd/,this.VALIDATOR_DAYS_VALIDATION_MASK_28);dateMask28=dateMask28.replace(/MM/,this.VALIDATOR_MONTHS_VALIDATION_MASK_28);dateMask28=dateMask28.replace(/yyyy/,this.VALIDATOR_YEARS_VALIDATION_MASK_28);var dateMask="("+dateMask31+")|("+dateMask30+")|("+dateMask29+")|("+dateMask28+")";return dateMask;},_replaceTimeRegExp:function(mask){var timeMask=mask.replace(/hh/g,this.VALIDATOR_HOURS_hh_VALIDATION_MASK);timeMask=timeMask.replace(/HH/g,this.VALIDATOR_HOURS_HH_VALIDATION_MASK);timeMask=timeMask.replace(/mm/g,this.VALIDATOR_MINUTES_VALIDATION_MASK);timeMask=timeMask.replace(/ss/g,this.VALIDATOR_SECONDS_VALIDATION_MASK);return timeMask;},time:function(elem,msg,params){var newMsg=this.replaceParamsInMessage(params,msg);var timeMask=this.VALIDATOR_DEFAULT_TIME_MASK;timeMask=timeMask.replace(/\./g,"\\\.");if(typeof params!='undefined'&&params!=null){if(typeof params[this.VALIDATOR_MASK]!='undefined'&&!(params[this.VALIDATOR_MASK]instanceof Function)){timeMask=params[this.VALIDATOR_MASK].firstChild.nodeValue;}}
timeMask=this._replaceTimeRegExp(timeMask);this.mask(elem,newMsg,eval("/^"+timeMask+"$/g"));},date:function(elem,msg,params){var newMsg=this.replaceParamsInMessage(params,msg);var dateMask=this.VALIDATOR_DEFAULT_DATE_MASK;dateMask=dateMask.replace(/\./g,"\\\.");if(typeof params!='undefined'&&params!=null){if(typeof params[this.VALIDATOR_MASK]!='undefined'&&!(params[this.VALIDATOR_MASK]instanceof Function)){dateMask=params[this.VALIDATOR_MASK];}}
dateMask=this._replaceDateRegExp(dateMask);this.mask(elem,newMsg,eval("/^"+dateMask+"$/g"));},datetime:function(elem,msg,params){var newMsg=this.replaceParamsInMessage(params,msg);var datetimeMask=this.VALIDATOR_DEFAULT_DATE_TIME_MASK;if(typeof params!='undefined'&&params!=null){if(typeof params[this.VALIDATOR_MASK]!='undefined'&&!(params[this.VALIDATOR_MASK]instanceof Function)){datetimeMask=params[this.VALIDATOR_MASK];}}
datetimeMask=this._replaceDateRegExp(datetimeMask);datetimeMask=this._replaceTimeRegExp(datetimeMask);this.mask(elem,newMsg,eval("/^"+datetimeMask+"$/g"));},validationMask:function(elem,msg,params){var mask;if(typeof params!='undefined'&&params!=null){if(typeof params[this.VALIDATOR_MASK]!='undefined'&&!(params[this.VALIDATOR_MASK]instanceof Function)){mask=params[this.VALIDATOR_MASK];}}
var newMsg=this.replaceParamsInMessage(params,msg);this.mask(elem,newMsg,new RegExp(mask));},mask:function(elem,msg,mask){if(elem.value==""){return true;}
if(!mask.test(elem.value)){this._addErrorInfo(elem,msg);}},digital:function(elem,msg,params){var newMsg=this.replaceParamsInMessage(params,msg);this.mask(elem,newMsg,this.VALIDATOR_DIGITAL_VALIDATION_MASK);},floatNumber:function(elem,msg,params){var newMsg=this.replaceParamsInMessage(params,msg);this.mask(elem,newMsg,this.VALIDATOR_FLOAT_VALIDATION_MASK);},rangeFloat:function(elem,msg,params){var floatMin;var min;var floatMax;var max;if(typeof params!='undefined'&&params!=null){if(typeof params[this.VALIDATOR_MIN]!='undefined'&&!(params[this.VALIDATOR_MIN]instanceof Function)){floatMin=parseFloat(params[this.VALIDATOR_MIN]);min=params[this.VALIDATOR_MIN];}
if(typeof params[this.VALIDATOR_MAX]!='undefined'&&!(params[this.VALIDATOR_MAX]instanceof Function)){floatMax=parseFloat(params[this.VALIDATOR_MAX]);max=params[this.VALIDATOR_MAX];}}
var floatValue=parseFloat(elem.value);var newMsg=this.replaceParamsInMessage(params,msg);if(!(isNaN(floatMin)||isNaN(floatMax))){if(isNaN(floatValue)||floatValue<=floatMin||floatValue>=floatMax){this._addErrorInfo(elem,newMsg);}}
else if(!isNaN(floatMin)&&(max==""||typeof max=='undefined')){if(isNaN(floatValue)||floatValue<=floatMin){this._addErrorInfo(elem,newMsg);}}
else if(!isNaN(floatMax)&&(min==""||typeof min=='undefined')){if(isNaN(floatValue)||floatValue>=floatMax){this._addErrorInfo(elem,newMsg);}}
else{if(elem.value<=min||elem.value>=max){this._addErrorInfo(elem,newMsg);}}},characters:function(elem,msg,params){var newMsg=this.replaceParamsInMessage(params,msg);this.mask(elem,newMsg,this.VALIDATOR_CHARACTERS_VALIDATION_MASK);},email:function(elem,msg,params){if(elem.value==""){return true;}
var newMsg=this.replaceParamsInMessage(params,msg);this.mask(elem,newMsg,this.VALIDATOR_EMAIL_VALIDATION_MASK);},url:function(elem,msg,params){if(elem.value==""){return true;}
var newMsg=this.replaceParamsInMessage(params,msg);this.mask(elem,newMsg,this.VALIDATOR_URL_VALIDATION_MASK);},validWhen:function(elem,msg,xmlField,params){var formElements=this.getFormElementsForExpr(this.findFormForElement(elem),xmlField);var expr=this.getXmlExpression(xmlField);if(formElements){var resultExpr=this.replaceNamesInExpr(formElements,expr);var newMsg=this.replaceParamsInMessage(params,msg);resultExpr=resultExpr.replace(/[\r\n]/g,'');if(!eval(resultExpr)){this._addErrorInfo(elem,newMsg);}}},validateForm:function(form){var xmlElements=this.getXmlFields(document.getElementById(form.id).attributes.action.value);if(xmlElements){if(this.processFormValidation(form,xmlElements)){return true;}
else{this.showErrors();}}else{alert("Bad rules for validation");}},processFormValidation:function(form,elements){this.clearErrorStack();var formElements;for(var elemIndex=0;elemIndex<elements.length;elemIndex++){var input=this.getInputForValidation(form,elements[elemIndex].getAttribute('name'));if(input){this.validateElement(elements[elemIndex],input);}}
if(this.isErrorStackEmpty()){return true;}},validateNamesBlock:function(form,nameBlock){var elements=this.getXmlFieldsForBlock(nameBlock);if(elements){if(this.processFormValidation(form,elements)){return true;}
else{this.showErrors();}}else{alert("Bad rules for validation");}},validateInput:function(input){if(findFormForElement(input)){this.processFormValidation(findFormForElement(input));}else{return false;}},validateElement:function(xmlInput,input){input.value=this.trimString(input);if(xmlInput){if(this.getCheckXmlNodeFlag()){this.checkXmlNode(xmlInput);}
var typeValidation=xmlInput.getElementsByTagName(this.VALIDATOR_VALIDATION);for(var paramsIndex=0;paramsIndex<typeValidation.length;paramsIndex++){var params=this.getParamsForMessage(typeValidation[paramsIndex]);switch(typeValidation[paramsIndex].getAttribute(this.VALIDATOR_TYPE_NODE)){case this.VALIDATOR_VALIDATION_REQUIRED:this.required(input,this.getXmlParamValue(typeValidation[paramsIndex],this.VALIDATOR_MESSAGE));break;case this.VALIDATOR_VALIDATION_RANGE_PREFIX:this.range(input,this.getXmlParamValue(typeValidation[paramsIndex],this.VALIDATOR_MESSAGE),params);break;case this.VALIDATOR_VALIDATION_TIME:this.time(input,this.getXmlParamValue(typeValidation[paramsIndex],this.VALIDATOR_MESSAGE),params);break;case this.VALIDATOR_VALIDATION_DATE:this.date(input,this.getXmlParamValue(typeValidation[paramsIndex],this.VALIDATOR_MESSAGE),params);break;case this.VALIDATOR_VALIDATION_NUMERIC:this.digital(input,this.getXmlParamValue(typeValidation[paramsIndex],this.VALIDATOR_MESSAGE),params);break;case this.VALIDATOR_VALIDATION_RANGE_FLOAT_NUMERIC:this.rangeFloat(input,this.getXmlParamValue(typeValidation[paramsIndex],this.VALIDATOR_MESSAGE),params);break;case this.VALIDATOR_VALIDATION_FLOAT_NUMERIC:this.floatNumber(input,this.getXmlParamValue(typeValidation[paramsIndex],this.VALIDATOR_MESSAGE),params);break;case this.VALIDATOR_VALIDATION_CHARACTERS:this.characters(input,this.getXmlParamValue(typeValidation[paramsIndex],this.VALIDATOR_MESSAGE),params);break;case this.VALIDATOR_VALIDATION_MASK:this.validationMask(input,this.getXmlParamValue(typeValidation[paramsIndex],this.VALIDATOR_MESSAGE),params);break;case this.VALIDATOR_EMAIL:this.email(input,this.getXmlParamValue(typeValidation[paramsIndex],this.VALIDATOR_MESSAGE),params);break;case this.VALIDATOR_URL:this.url(input,this.getXmlParamValue(typeValidation[paramsIndex],this.VALIDATOR_MESSAGE),params);break;case this.VALIDATOR_VALID_WHEN:this.validWhen(input,this.getXmlParamValue(typeValidation[paramsIndex],this.VALIDATOR_MESSAGE),xmlInput,params);break;}}}}});var validator=new Validator("/js/yukon/validators/validation-rules.xml",false,PoiMsg.js_msg.validation);