/*
Licencováno pod MIT Licencí

© 2008 Seznam.cz, a.s.

Tímto se uděluje bezúplatná nevýhradní licence k oprávnění užívat Software,
časově i místně neomezená, v souladu s příslušnými ustanoveními autorského zákona.

Nabyvatel/uživatel, který obdržel kopii tohoto softwaru a další přidružené 
soubory (dále jen „software“) je oprávněn k nakládání se softwarem bez 
jakýchkoli omezení, včetně bez omezení práva software užívat, pořizovat si 
z něj kopie, měnit, sloučit, šířit, poskytovat zcela nebo zčásti třetí osobě 
(podlicence) či prodávat jeho kopie, za následujících podmínek:

- výše uvedené licenční ujednání musí být uvedeno na všech kopiích nebo 
podstatných součástech Softwaru.

- software je poskytován tak jak stojí a leží, tzn. autor neodpovídá 
za jeho vady, jakož i možné následky, ledaže věc nemá vlastnost, o níž autor 
prohlásí, že ji má, nebo kterou si nabyvatel/uživatel výslovně vymínil.



Licenced under the MIT License

Copyright (c) 2008 Seznam.cz, a.s.

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/
{if(typeof SZN!="object"){var SZN={};};SZN.bind=function(obj,fnc){return function(){return fnc.apply(obj,arguments);};};SZN.idGenerator=function(){this.idCnt=this.idCnt<10000000?this.idCnt:0;var ids="m"+new Date().getTime().toString(16)+"m"+this.idCnt.toString(16);this.idCnt++;return ids;};if(!Array.prototype.indexOf){Array.prototype.indexOf=function(item,from){var len=this.length;var i=from||0;if(i<0){i+=len;}for(;i<len;i++){if(i in this&&this[i]===item){return i;}}return -1;};}if(!Array.indexOf){Array.indexOf=function(obj,item,from){return Array.prototype.indexOf.call(obj,item,from);};}if(!Array.prototype.lastIndexOf){Array.prototype.lastIndexOf=function(item,from){var len=this.length;var i=from||len-1;if(i<0){i+=len;}for(;i>-1;i--){if(i in this&&this[i]===item){return i;}}return -1;};}if(!Array.lastIndexOf){Array.lastIndexOf=function(obj,item,from){return Array.prototype.lastIndexOf.call(obj,item,from);};}if(!Array.prototype.forEach){Array.prototype.forEach=function(cb,_this){var len=this.length;for(var i=0;i<len;i++){if(i in this){cb.call(_this,this[i],i,this);}}};}if(!Array.forEach){Array.forEach=function(obj,cb,_this){Array.prototype.forEach.call(obj,cb,_this);};}if(!Array.prototype.every){Array.prototype.every=function(cb,_this){var len=this.length;for(var i=0;i<len;i++){if(i in this&&!cb.call(_this,this[i],i,this)){return false;}}return true;};}if(!Array.every){Array.every=function(obj,cb,_this){return Array.prototype.every.call(obj,cb,_this);};}if(!Array.prototype.some){Array.prototype.some=function(cb,_this){var len=this.length;for(var i=0;i<len;i++){if(i in this&&cb.call(_this,this[i],i,this)){return true;}}return false;};}if(!Array.some){Array.some=function(obj,cb,_this){return Array.prototype.some.call(obj,cb,_this);};}if(!Array.prototype.map){Array.prototype.map=function(cb,_this){var len=this.length;var res=new Array(len);for(var i=0;i<len;i++){if(i in this){res[i]=cb.call(_this,this[i],i,this);}}return res;};}if(!Array.map){Array.map=function(obj,cb,_this){return Array.prototype.map.call(obj,cb,_this);};}if(!Array.prototype.filter){Array.prototype.filter=function(cb,_this){var len=this.length;var res=[];for(var i=0;i<len;i++){if(i in this){var val=this[i];if(cb.call(_this,val,i,this)){res.push(val);}}}return res;};}if(!Array.filter){Array.filter=function(obj,cb,_this){return Array.prototype.filter.call(obj,cb,_this);};}SZN.ClassMaker={};SZN.ClassMaker.VERSION="3.0";SZN.ClassMaker.NAME="ClassMaker";SZN.ClassMaker.CLASS="static";SZN.ClassMaker.copyObj=null;SZN.ClassMaker.makeClass=function(params){if(!params.NAME){throw new Error("No NAME passed to SZN.ClassMaker.makeClass()");}var version=params.VERSION||"1.0";var extend=params.EXTEND||false;var implement=params.IMPLEMENT||[];var depend=params.DEPEND||[];var type=params.CLASS;if(!(implement instanceof Array)){implement=[implement];}var result=false;if(result=this._testDepend(depend)){throw new Error("Dependency error in class "+params.NAME+" ("+result+")");}if(type=="static"){var obj={};obj.VERSION=version;obj.NAME=params.NAME;obj.CLASS="static";return obj;}var constructor=function(){var inicializator=false;if("$constructor" in arguments.callee.prototype){inicializator=arguments.callee.prototype.$constructor;}else{if(params.NAME in arguments.callee.prototype){inicializator=arguments.callee.prototype[params.NAME];}}if(inicializator){inicializator.apply(this,arguments);}};constructor.NAME=params.NAME;constructor.VERSION=version;constructor.EXTEND=extend;constructor.IMPLEMENT=implement;constructor.DEPEND=depend;constructor.CLASS="class";constructor.destroy=this._destroy;this._setInheritance(constructor);constructor.prototype.CLASS="class";constructor.prototype.sConstructor=constructor;constructor.prototype.callSuper=this._callSuper;return constructor;};SZN.ClassMaker.jsonToClass=function(classDef){eval("var trg = "+classDef.staticData.trg);var name=classDef.staticData.NAME;var params={"NAME":name,"VERSION":classDef.staticData.VERSION,"CLASS":"class"};if(classDef.staticData.EXTEND){params.EXTEND=classDef.staticData.EXTEND;}if(classDef.staticData.DEPEND){params.DEPEND=classDef.staticData.DEPEND;}if(classDef.staticData.IMPLEMENT){params.IMPLEMENT=classDef.staticData.IMPLEMENT;}trg[name]=SZN.ClassMaker.makeClass(params);for(var p in classDef.proto){trg[name].prototype[p]=classDef.proto[p];if((typeof classDef.access=="object")&&(typeof classDef.access[p]!="undefined")){trg[name].prototype[p].access=classDef.access[p];}}};SZN.ClassMaker._destroy=function(obj){for(var p in obj){obj[p]=null;};};SZN.ClassMaker._callSuper=function(methodName,callingFunction){if(callingFunction.loc_level){var level=callingFunction.loc_level;}else{var level=this.sConstructor;}var sup=level.EXTEND;if(!sup){throw new Error("\"No super-class available\"");}var method=sup.prototype[methodName];if(!method||(typeof method!="function")){throw new Error("\"Super-class doesn't have method \""+methodName+"\"");}var mySelf=this;eval("var func="+method.toString());func.loc_level=sup;return function(){return func.apply(mySelf,arguments);};};SZN.ClassMaker._setInheritance=function(constructor){if(constructor.EXTEND){this._makeInheritance(constructor,constructor.EXTEND);}for(var i=0;i<constructor.IMPLEMENT.length;i++){this._makeInheritance(constructor,constructor.IMPLEMENT[i],true);}};SZN.ClassMaker._makeInheritance=function(constructor,parent,noSuper){for(var p in parent.prototype){if(typeof parent.prototype[p]=="object"){if("ObjCopy" in SZN){if(this.copyObj==null){this.copyObj=new SZN.ObjCopy();}constructor.prototype[p]=this.copyObj.copy(parent.prototype[p]);}}else{if(noSuper&&((p=="$constructor")||(p=="$destructor"))){continue;}constructor.prototype[p]=parent.prototype[p];}}};SZN.ClassMaker._testDepend=function(depend){var out=true;for(var i=0;i<depend.length;i++){var item=depend[i];if(!item.sClass||!item.ver){return "Malformed dependency";}var depMajor=item.sClass.VERSION.split(".")[0];var claMajor=item.ver.split(".")[0];if(depMajor!=claMajor){return "Version conflict in "+item.sClass.NAME;}}return false;};SZN.Events=SZN.ClassMaker.makeClass({"NAME":"Events","VERSION":"2.0","CLASS":"static"});SZN.Events.eventFolder=new Object();SZN.Events._domReadyTimer=null;SZN.Events._domReadyCallback=[];SZN.Events._domReadyAlreadyRun=false;SZN.Events._windowLoadListenerId="";SZN.Events.onDomReady=function(obj,func){SZN.Events._domReadyCallback[SZN.Events._domReadyCallback.length]={"obj":obj,"func":func};SZN.Events._onDomReady();};SZN.Events._onDomReady=function(){if((/Safari/i.test(navigator.userAgent))||(/WebKit|Khtml/i.test(navigator.userAgent))){SZN.Events._domReadyTimer=setInterval(function(){if(/loaded|complete/.test(document.readyState)){clearInterval(SZN.Events._domReadyTimer);SZN.Events._domReady();}},10);}else{if(document.all&&!window.opera){try{document.documentElement.doScroll("left");}catch(error){setTimeout(arguments.callee,1);return;}SZN.Events._domReady();}else{if(document.addEventListener){document.addEventListener("DOMContentLoaded",SZN.Events._domReady,false);}}}SZN.Events._windowLoadListenerId=SZN.Events.addListener(window,"load",window,function(){SZN.Events._domReady();},false,true);};SZN.Events._domReady=function(){if(!SZN.Events._domReadyAlreadyRun){SZN.Events._domReadyAlreadyRun=true;if(document.addEventListener){document.removeEventListener("DOMContentLoaded",SZN.Events._domReady,true);}SZN.Events.removeListener(SZN.Events._windowLoadListenerId);for(var i=0;i<SZN.Events._domReadyCallback.length;i++){var callback=SZN.Events._domReadyCallback[i];if(typeof callback.func=="string"){callback.obj[callback.func]();}else{callback.func.apply(callback.obj,[]);}}SZN.Events._domReadyCallback=[];}};SZN.Events.destructor=function(){this.removeAllListeners();this.sConstructor.destroy(this);};SZN.Events.getEvent=function(e){return e||window.event;};SZN.Events.getTarget=function(e){var e=e||window.event;return e.target||e.srcElement;};SZN.Events.addListener=function(elm,eType,obj,func,capture,cached){var capture=arguments[4]?arguments[4]:false;var cached=arguments[5]?arguments[5]:false;var method=null;var toFold=null;if(typeof obj=="function"){toFold=this._addListener(elm,eType,obj,capture);}else{if(typeof obj=="object"){var cached=true;if(typeof func=="string"){if(typeof obj[func]=="function"){method=this._getMethod(obj,func,elm);toFold=this._addListener(elm,eType,method,capture);}else{throw new Error("Events.addListener: arguments[3] must be method of arguments[2]");}}else{if(typeof func=="function"){method=this._getMethod(obj,func,elm);toFold=this._addListener(elm,eType,method,capture);}}}else{throw new Error("Events.addListener: arguments[2] must be object or function");}}if(cached){return this._storeToFolder(toFold);}else{return 0;}};SZN.Events._addListener=function(elm,eType,func,capture){if(document.addEventListener){if(window.opera&&(elm==window)){elm=document;}elm.addEventListener(eType,func,capture);}else{if(document.attachEvent){elm.attachEvent("on"+eType,func);}}return [elm,eType,func,capture];};SZN.Events._getMethod=function(obj,func,elm){if(typeof func=="string"){if(typeof obj[func].canTransform=="undefined"){return function(e){return obj[func].apply(obj,[e,elm]);};}else{return obj[func];}}else{if(typeof func.canTransform=="undefined"){return function(e){return func.apply(obj,[e,elm]);};}else{return func;}}};SZN.Events._storeToFolder=function(data){var id=SZN.idGenerator();this.eventFolder[id]=new Object();this.eventFolder[id].trg=data[0];this.eventFolder[id].typ=data[1];this.eventFolder[id].action=data[2];this.eventFolder[id].bool=data[3];return id;};SZN.Events.removeListener=function(elm,eType,obj,func,capture,cached){var capture=arguments[4]?arguments[4]:false;var cached=arguments[5]?arguments[5]:false;cached=(arguments.length==1)?arguments[0]:cached;if(typeof cached=="string"){return this._removeById(cached);}if(typeof obj=="function"){return this._removeListener(elm,eType,obj,capture);}throw new Error("Events.removeListener: wrong arguments");};SZN.Events._removeListener=function(elm,eType,func,capture){if(document.removeEventListener){if(window.opera&&(elm==window)){elm=document;}elm.removeEventListener(eType,func,capture);}else{if(document.detachEvent){elm.detachEvent("on"+eType,func);}}return 0;};SZN.Events._removeById=function(cached){try{var obj=this.eventFolder[cached];this._removeListener(obj.trg,obj.typ,obj.action,obj.bool);this.eventFolder[cached]=null;delete (this.eventFolder[cached]);}catch(e){return 1;}return 0;};SZN.Events.removeAllListeners=function(){for(var p in this.eventFolder){this._removeById(p);}};SZN.Events.stopEvent=function(e){var e=e||window.event;if(e.stopPropagation){e.stopPropagation();}else{e.cancelBubble=true;}};SZN.Events.cancelDef=function(e){var e=e||window.event;if(e.preventDefault){e.preventDefault();}else{e.returnValue=false;}};SZN.Events.addTimeFunction=function(owner,handleFuncName,exeFunc,exeObj){if(!!exeObj){owner[handleFuncName]=function(){return exeFunc.apply(exeObj,[]);};}else{owner[handleFuncName]=function(){return exeFunc.apply(owner,[]);};}};SZN.Browser=SZN.ClassMaker.makeClass({"NAME":"Browser","VERSION":"2.0","CLASS":"static"});SZN.Browser.platform="";SZN.Browser.client="";SZN.Browser.klient="";SZN.Browser.version=0;SZN.Browser.agent="";SZN.Browser.mouse={};SZN.Browser._getPlatform=function(){if((this._agent.indexOf("X11")!=-1)||(this._agent.indexOf("Linux")!=-1)){return "nix";}else{if(this._agent.indexOf("Mac")!=-1){return "mac";}else{if(this._agent.indexOf("Win")!=-1){return "win";}else{return "oth";}}}};SZN.Browser._getKlient=function(){if(window.opera){return "opera";}else{if(document.attachEvent&&(typeof navigator.systemLanguage!="undefined")){return "ie";}else{if(document.getAnonymousElementByAttribute){return "gecko";}else{if(this._agent.indexOf("KHTML")){if(this._vendor=="KDE"){return "konqueror";}else{return "safari";}}else{return "oth";}}}}};SZN.Browser._getMouse=function(){var left;var right;var middle;if((SZN.Browser.client=="ie")||(SZN.Browser.client=="konqueror")){left=1;middle=4;right=2;}else{if((SZN.Browser.client=="opera")&&(SZN.Browser.version>7)&&(SZN.Browser.version<9)){left=1;middle=4;right=2;}else{if(SZN.Browser.client=="safari"){if(parseInt(SZN.Browser.version)>2){left=0;middle=0;right=2;}else{left=1;middle=1;right=2;}}else{left=0;middle=1;right=2;}}}return {"left":left,"right":right,"middle":middle};};SZN.Browser._getVersion=function(){var out=0;var fncName="_get_"+this.client+"_ver";if(typeof this[fncName]=="function"){return this[fncName]();}else{return 0;}};SZN.Browser._get_ie_ver=function(){if(typeof Function.prototype.call!="undefined"){if(window.XMLHttpRequest){return "7";}else{if(typeof document.doctype=="object"){return "6";}else{return "5.5";}}}else{return "5.0";}};SZN.Browser._get_opera_ver=function(){if(document.designMode&&document.execCommand){if(typeof Object.__defineGetter__=="function"){return "9.5";}else{return "9";}}else{if((document.selection)&&(document.createRange)){return "8";}else{if(document.createComment){return "7";}else{return "6";}}}};SZN.Browser._get_gecko_ver=function(){if(window.external){return "2";}else{return "1.5";}};SZN.Browser._get_konqueror_ver=function(){var num=this._agent.indexOf("KHTML")+6;var part=this._agent.substring(num);var end=part.indexOf(" ");var x=part.substring(0,end-2);return x;};SZN.Browser._get_safari_ver=function(){return "1";};SZN.Browser.getBrowser=function(){this._agent=this.agent=navigator.userAgent;this._platform=navigator.platform;this._vendor=navigator.vendor;this.platform=this._getPlatform();this.client=this._getKlient();this.klient=this.client;this.version=this._getVersion();this.mouse=this._getMouse();};SZN.Browser.getBrowser();SZN.Components=function(){};SZN.Components.Name="Components";SZN.Components.version="1.0";SZN.Components.prototype.CLASS="class";SZN.Components.prototype.hasComponents=function(){if((this.components instanceof Array)&&this.components.length){return true;}else{return false;}};SZN.Components.prototype.addAllComponents=function(){if(!this.hasComponents()){return false;}for(var i=0;i<this.components.length;i++){this._addComponent(this.components[i]);}return true;};SZN.Components.prototype.addNewComponent=function(component){if(!this.hasComponents()){this.components=new Array();}this.components.push(component);this._addComponent(component);};SZN.Components.prototype._addComponent=function(component){if(typeof component.part!="undefined"){if(typeof component.name=="undefined"){component.name=component.part.NAME.substring(0,1).toLowerCase();component.name+=component.part.NAME.substring(1);}if(typeof component.setting!="undefined"){this[component.name]=new component.part(this,component.name,component.setting);}else{this[component.name]=new component.part(this,component.name);}}};SZN.Components.prototype.registredMethod=function(owner){var field=[this,this.sConstructor];for(var i=0;i<field.length;i++){var obj=field[i];for(var j in obj){if(obj[j]===null)continue;if(typeof obj[j]=="undefined")continue;if((typeof obj[j].access!="undefined")&&(obj[j].access.indexOf("public")==0)){var nameFirstChar=j.substring(0,1).toUpperCase();var nameNext=j.substring(1);var mods=obj[j].access.replace(/[ ]{2,}/gi," ").split(" ");if(mods.length>1){var name=mods[1];}else{var namePrefix=(obj==this.sConstructor)?obj.NAME:this._name;var name=namePrefix+nameFirstChar+nameNext;}if(typeof owner[name]=="undefined"){owner[name]=(obj==this.sConstructor)?this.sConstructor[j]:SZN.bind(this,this[j]);}else{throw new Error("registredMethod: method \""+name+"\" already exist!");}}}}};SZN.Components.prototype.getMain=function(){var obj=this;while(typeof obj.TOP_LEVEL=="undefined"){if(typeof obj._owner=="undefined"){throw new Error("can't find TOP LEVEL Class");}else{obj=obj._owner;}}return obj;};SZN.Components.prototype.callChildDestructor=function(){this.inDestruction=true;if(!this.hasComponents()){return false;}for(var i=0;i<this.components.length;i++){var cName=this.components[i].name;if(this[cName]==null){continue;}if((typeof this[cName].CLASS!="undefined")&&(typeof this[cName].inDestruction!="boolean")){var name="$destructor";if((typeof this[cName][name]!="undefined")&&(typeof this[cName][name]=="function")){this[cName][name]();}this[cName]=null;}}};SZN.Components.prototype.removeComponent=function(component,withDestruction){for(var i=0;i<this.components.length;i++){var c=this.components[i];if(component==c.name||component==this[c.name]){if(withDestruction&&(typeof this[c.name].$destructor=="function")){this[c.name].$destructor();}this[c.name]=null;c=null;this.components.splice(i,1);break;}}};SZN.Dom=SZN.ClassMaker.makeClass({"NAME":"Dom","VERSION":"3.1","CLASS":"static"});SZN.cEl=function(tagName,id,className,styleObj,doc){var d=doc||document;var node=d.createElement(tagName);if(arguments.length==1){return node;}if(id){node.id=id;}if(className){node.className=className;}if(styleObj)for(p in styleObj){node.style[p]=styleObj[p];}return node;};SZN.cTxt=function(str,doc){var d=doc||document;return d.createTextNode(str);};SZN.gEl=function(ids){if(typeof (ids)=="string"){return document.getElementById(ids);}else{return ids;}};SZN.Dom.append=function(){for(var i=0;i<arguments.length;i++){var arr=arguments[i];var head=arr[0];for(var j=1;j<arr.length;j++){head.appendChild(arr[j]);}}};SZN.Dom.hasClass=function(element,className){var arr=element.className.split(" ");for(var i=0;i<arr.length;i++){if(arr[i]==className){return true;}}return false;};SZN.Dom.addClass=function(element,className){if(SZN.Dom.hasClass(element,className)){return;}element.className+=" "+className;};SZN.Dom.removeClass=function(element,className){var names=element.className.split(" ");var newClassArr=[];for(var i=0;i<names.length;i++){if(names[i]!=className){newClassArr.push(names[i]);}}element.className=newClassArr.join(" ");};SZN.Dom.clear=function(element){while(element.firstChild){element.removeChild(element.firstChild);}};SZN.Dom.getDocSize=function(){var x=0;var y=0;if(document.documentElement.clientWidth&&SZN.Browser.klient!="opera"){x=document.documentElement.clientWidth;y=document.documentElement.clientHeight;}else{if(SZN.Browser.klient=="opera"){if(parseFloat(SZN.Browser.version)<9.5){x=document.body.clientWidth;y=document.body.clientHeight;}else{x=document.documentElement.clientWidth;y=document.documentElement.clientHeight;}}}if((SZN.Browser.klient=="safari")||(SZN.Browser.klient=="konqueror")){y=window.innerHeight;}return {"width":x,"height":y};};SZN.Dom.getBoxPosition=function(obj,ref){var top=0;var left=0;var refBox=ref||document.body;while(obj&&obj!=refBox){top+=obj.offsetTop;left+=obj.offsetLeft;obj=obj.offsetParent;}return {"top":top,"left":left};};SZN.Dom.getFullBoxPosition=function(obj,parent){var pos=SZN.Dom.getBoxPosition(obj,parent);var scroll=SZN.Dom.getBoxScroll(obj,parent);return {"left":pos.left-scroll.x,"top":pos.top-scroll.y};};SZN.Dom.getBoxScroll=function(obj,ref){var x=0;var y=0;var cur=obj.parentNode;var limit=ref||document.documentElement;while(1){if(SZN.Browser.client=="opera"&&SZN.Dom.getStyle(cur,"display")!="block"){cur=cur.parentNode;continue;}if(SZN.Browser.client=="opera"&&cur==document.documentElement){break;}x+=cur.scrollLeft;y+=cur.scrollTop;if(cur==limit){break;}cur=cur.parentNode;if(!cur){break;}}return {"x":x,"y":y};};SZN.Dom.getScrollPos=function(){if(document.documentElement.scrollTop||document.documentElement.scrollLeft){var ox=document.documentElement.scrollLeft;var oy=document.documentElement.scrollTop;}else{if(document.body.scrollTop||document.body.scrollLeft){var ox=document.body.scrollLeft;var oy=document.body.scrollTop;}else{var ox=0;var oy=0;}}return {"x":ox,"y":oy};};SZN.Dom.getStyle=function(elm,property){if(document.defaultView&&document.defaultView.getComputedStyle){var cs=elm.ownerDocument.defaultView.getComputedStyle(elm,"");if(!cs){return false;}return cs[property];}else{return elm.currentStyle[property];}};SZN.Dom.setStyle=function(elm,style){for(name in style){elm.style[name]=style[name];}};SZN.Dom.elementsHider=function(obj,elements,action){var elems=elements;if(!elems){elems=["select","object","embed","iframe"];}function testParent(node){var ok=false;var cur=node;while(cur.parentNode&&cur!=document){if(cur==obj){ok=true;}cur=cur.parentNode;}return ok;}if(action=="hide"){if(typeof obj=="string"){var obj=SZN.gEl(obj);}else{var obj=obj;}var box=this.getBoxPosition(obj);box.width=obj.offsetWidth+box.left;box.height=obj.offsetHeight+box.top;for(var e=0;e<elems.length;++e){var elm=document.getElementsByTagName(elems[e]);for(var f=0;f<elm.length;++f){var node=this.getBoxPosition(elm[f]);if(testParent(elm[f])){continue;}node.width=elm[f].offsetWidth+node.left;node.height=elm[f].offsetHeight+node.top;if(!((box.left>node.width)||(box.width<node.left)||(box.top>node.height)||(box.height<node.top))){elm[f].style.visibility="hidden";elm[f].myPropertyHide=true;}else{elm[f].style.visibility="visible";elm[f].myPropertyHide=false;}}}}else{for(var e=0;e<elems.length;++e){var elm=document.getElementsByTagName(elems[e]);for(var f=0;f<elm.length;++f){if(testParent(elm[f])){continue;}if(elm[f].myPropertyHide){elm[f].style.visibility="visible";elm[f].myPropertyHide=false;}}}}};SZN.Dom.getElementsByClass=function(searchClass,node,tag){var classElements=[];var node=node||document;var tag=tag||"*";var els=node.getElementsByTagName(tag);var elsLen=els.length;var pattern=new RegExp("(^|\\s)"+searchClass+"(\\s|$)");for(var i=0,j=0;i<elsLen;i++){if(pattern.test(els[i].className)){classElements[j]=els[i];j++;}}return classElements;};SZN.ObjCopy=SZN.ClassMaker.makeClass({"NAME":"ObjCopy","VERSION":"1.0","CLASS":"class"});SZN.ObjCopy.prototype.DEEP=200;SZN.ObjCopy.prototype.$constructor=function(){};SZN.ObjCopy.prototype.$destructor=function(){};SZN.ObjCopy.prototype.copy=function(objToCopy){var deepFlag=0;var mySelf=this;var firstStep=true;var myCopy=function(obj){if(typeof obj=="function"){throw new Error("ObjCopy error: property is function");}var newObject=new Object();if(deepFlag<=mySelf.DEEP){if(firstStep){var firstTest=mySelf._copyBuildInObject(obj);if(firstTest.isSet){return firstTest.output;}firstStep=false;}for(i in obj){if(typeof obj[i]!="object"){if(typeof obj=="function"){throw new Error("ObjCopy error: property is function");}newObject[i]=obj[i];}else{var buildInProp=mySelf._copyBuildInObject(obj[i]);if(buildInProp.isSet){newObject[i]=buildInProp.output;}else{deepFlag++;newObject[i]=myCopy(obj[i]);}}}}else{throw new Error("ObjCopy structure so deep");}return newObject;};myObject=myCopy(objToCopy);return myObject;};SZN.ObjCopy.prototype.arrayCopy=function(arrayToCopy){var newField=new Array();var mySelf=this;var myCopy=function(field){if(field instanceof Array){for(var i=0;i<field.length;i++){if(typeof (field[i])!="object"){newField[i]=field[i];}else{newField[i]=mySelf.copy(field[i]);}}return newField;}else{throw new Error("ObjCopy.arrayCopy: Attribute is not Array");}};var myField=myCopy(arrayToCopy);return myField;};SZN.ObjCopy.prototype._copyBuildInObject=function(testedObj){var output=null;var isSet=false;if(testedObj instanceof String){output=new String(testedObj);isSet=true;}else{if(testedObj instanceof Number){output=new Number(testedObj);isSet=true;}else{if(testedObj instanceof RegExp){output=new RegExp(testedObj);isSet=true;}else{if(testedObj instanceof Array){output=this.arrayCopy(testedObj);isSet=true;}else{if(testedObj instanceof Date){output=new Date(testedObj);isSet=true;}else{if(testedObj instanceof Boolean){output=new Boolean(testedObj);isSet=true;}else{if(testedObj==null){isSet=true;}}}}}}}return {"isSet":isSet,"output":output};};SZN.ObjLib=SZN.ClassMaker.makeClass({"NAME":"ObjLib","VERSION":"1.0","CLASS":"class","EXTEND":SZN.ObjCopy});SZN.ObjLib.prototype.$constructor=function(){};SZN.ObjLib.prototype.$destructor=function(){};SZN.ObjLib.prototype.serialize=function(objToSource,showFlag){var deepFlag=0;var startString="{";var endString="}";var propertySep=":";var propertyEnd=",";var lineEndMark=this._isIE()?"\n":"\n";var lineEnd=showFlag?lineEndMark:"";var lineTab=showFlag?showFlag:"";var tabs=lineTab;var mySelf=this;var output="";var firstStep=true;var mySource=function(obj){if(deepFlag<=mySelf.DEEP){var output="{"+lineEnd;if(arguments[1]){tabs=mySelf._charUp(tabs,lineTab);}if(firstStep){var buildIn=mySelf._buildInObjectSerialize(obj);if(buildIn.isSet){return buildIn.output;}firstStep=false;}for(var i in obj){if(typeof obj[i]=="function"){throw new Error("Serialize: can't serialize object with some method - ** "+i+" **");}else{if(typeof obj[i]!="object"){if(typeof obj[i]=="string"){var str="'";var propValue=obj[i].replace(/\'/g,"\\'");}else{var str="";var propValue=obj[i];}output=output+tabs+"'"+i+"'"+propertySep+str+propValue+str+propertyEnd+lineEnd;}else{var buildIn=mySelf._buildInObjectSerialize(obj[i]);if(buildIn.isSet){output=output+tabs+"'"+i+"'"+propertySep+buildIn.output+propertyEnd+lineEnd;}else{deepFlag++;var isEmpty=true;for(var j in obj[i]){if(j){var isEmpty=false;break;}}output=output+tabs+"'"+i+"'"+propertySep+(isEmpty?"{}":mySource(obj[i],1))+propertyEnd+lineEnd;}}}}tabs=mySelf._charDown(tabs);var charNum=(output.lastIndexOf(",")>=0)?output.lastIndexOf(","):output.length;output=output.substring(0,charNum)+lineEnd;return output+tabs+endString;}else{throw new Error("Serialize: structure is so deep.");}};var source=mySource(objToSource);return source;};SZN.ObjLib.prototype.arraySerialize=function(fieldToSerialize){var fieldStr="";var mySelf=this;var mySource=function(field){if(field instanceof Array){for(var i=0;i<field.length;i++){if(typeof field[i]=="function"){throw new Error("Serialize: can't serialize Function");}if(typeof field[i]!="object"){if(typeof field[i]=="string"){var str=field[i].replace(/\'/g,"\\'");fieldStr+="'"+str+"',";}else{fieldStr+=field[i]+",";}}else{fieldStr+=mySelf.serialize(field[i],0)+",";}}return "["+fieldStr.substring(0,fieldStr.length-1)+"]";}else{throw new Error("arraySerialize: Attribute is not Array");}};var myString=mySource(fieldToSerialize);return myString;};SZN.ObjLib.prototype.unserialize=function(serializedString){eval("var newVar="+serializedString);return newVar;};SZN.ObjLib.prototype.match=function(refObj,matchObj){if(this.serialize(refObj,0).length==this.serialize(matchObj,0).length){var step1=this._matchProcess(refObj,matchObj);var step2=this._matchProcess(matchObj,refObj);return (step1&&step2);}else{return false;}};SZN.ObjLib.prototype._matchProcess=function(refObj,matchObj){var success=true;var mySelf=this;var firstStep=true;var myMatch=function(obj1,obj2){if(firstStep){var buildIn=mySelf._matchBuildInObj(obj1,obj2);if((buildIn.isSet)&&(!buildIn.success)){success=false;return false;}firstStep=false;}for(var i in obj1){if(((typeof obj1[i]!=undefined)&&(typeof obj2[i]!=undefined))||((typeof obj1[i]==undefined)&&(typeof obj2[i]==undefined))){if(typeof obj1[i]!="object"){if(obj1[i]!=obj2[i]){success=false;return success;}else{succes=success;}}else{var buildIn=mySelf._matchBuildInObj(obj1,obj2);if(buildIn.isSet){if(!buildIn.success){success=false;return false;}}else{success=myMatch(obj1[i],obj2[i]);}}}else{success=false;return success;}}return success;};success=myMatch(refObj,matchObj);return success;};SZN.ObjLib.prototype._matchBuildInObj=function(refObj,matchObj){var objField=["String","Number","RegExp","Date","Boolean"];var success=false;var isSet=false;for(var i=0;i<objField.length;i++){if((refObj instanceof window[objField[i]])&&(matchObj instanceof window[objField[i]])){isSet=true;if((this.serialize(refObj,0))==(this.serialize(matchObj,0))){success=true;}}}return {"isSet":isSet,"success":success};};SZN.ObjLib.prototype._buildInObjectSerialize=function(testedObj){var output=null;var isSet=false;if(testedObj instanceof String){var str=testedObj.replace(/\"/g,"\\\"");output="new String(\""+str+"\")";isSet=true;}else{if(testedObj instanceof Number){output="new Number("+testedObj+")";isSet=true;}else{if(testedObj instanceof RegExp){output="new RegExp("+testedObj+")";isSet=true;}else{if(testedObj instanceof Array){output=this.arraySerialize(testedObj);isSet=true;}else{if(testedObj instanceof Date){output="new Date("+testedObj+")";isSet=true;}else{if(testedObj instanceof Boolean){output="new Boolean("+testedObj+")";isSet=true;}else{if(testedObj==null){isSet=true;}}}}}}}return {"isSet":isSet,"output":output};};SZN.ObjLib.prototype._charUp=function(modString,counter){return modString+counter;};SZN.ObjLib.prototype._charDown=function(modString){return modString.substring(0,modString.length-1);};SZN.ObjLib.prototype._isIE=function(){if(document.all&&document.attachEvent&&!window.opera){return true;}return false;};SZN.HTTPRequest=SZN.ClassMaker.makeClass({"NAME":"HTTPRequest","VERSION":"1.0","CLASS":"class"});SZN.HTTPRequest.prototype.$constructor=function(url,callBackObj,callBackFunc){this.data=new Object();this.url=url?url:"";this.callBackObj=callBackObj;this.callBackFunc=callBackFunc;this.setFormat();this.setMode();this.setMethod();this.setPostData();this.setHeaders();};SZN.HTTPRequest.Setting=function(url,method,postData,headers,mode,format){this.url=url?url:"";this.method=method?method:"";this.mode=mode?mode:"";this.format=format?format:"";this.headers=headers?headers:"";this.postData=postData?postData:"";};SZN.HTTPRequest.prototype.METHOD={"post":"post","get":"get","def":"get"};SZN.HTTPRequest.prototype.FORMAT={"xml":"xml","txt":"txt","def":"txt"};SZN.HTTPRequest.prototype.MODE={"async":true,"sync":false,"def":true};SZN.HTTPRequest.prototype.HEADER=[{"typ":"Content-Type","content":"application/x-www-form-urlencoded"}];SZN.HTTPRequest.prototype.destructor=function(){for(var i in this){this[i]=null;}};SZN.HTTPRequest.prototype.init=function(){};SZN.HTTPRequest.prototype.setMethod=function(method){this.data.method=this._getMethod(method);};SZN.HTTPRequest.prototype.setMode=function(mode){this.data.mode=this._getMode(mode);};SZN.HTTPRequest.prototype.setFormat=function(format){this.data.format=this._getFormat(format);};SZN.HTTPRequest.prototype.setHeaders=function(headers){this.data.headers=this._setHeaders(headers);};SZN.HTTPRequest.prototype.setPostData=function(data){this.data.postData=data?data:"";};SZN.HTTPRequest.prototype.send=function(url,obj,method,requestData,returnOnly){var mySelf=this;var param=requestData?requestData:{};var data=this._setFromData(url,obj,method,param);var XHR=this._getRequest();try{XHR.open(data.method,data.url,data.mode);}catch(e){return 0;}for(var i=0;i<data.headers.length;i++){XHR.setRequestHeader(data.headers[i].typ,data.headers[i].content);}if(data.mode){function stateChangeFunction(){if(XHR.readyState==4){if(data.format=="xml"){var out=XHR.responseXML;}else{if(data.format=="txt"){var out=XHR.responseText;}}data.callBackObj[data.callBackFunc](out,XHR.status);XHR=null;}}XHR.onreadystatechange=stateChangeFunction;}if(data.method==this.METHOD["post"]){if(typeof data.postData!="undefined"){XHR.send(data.postData);}else{return 0;}}else{XHR.send(null);}if(!data.mode){if(data.format=="xml"){var out=XHR.responseXML;}else{var out=XHR.responseText;}if(returnOnly){return {"status":XHR.status,"data":out};}else{data.callBackObj[data.callBackFunc](out,XHR.status);}}else{return XHR;}};SZN.HTTPRequest.prototype.abort=function(XHR){if(typeof XHR=="object"){XHR.abort();}else{return 0;}};SZN.HTTPRequest.prototype._getMethod=function(method){return (typeof this.METHOD[method]!="undefined")?this.METHOD[method]:this.METHOD["def"];};SZN.HTTPRequest.prototype._getMode=function(mode){return (typeof this.MODE[mode]!="undefined")?this.MODE[mode]:this.MODE["def"];};SZN.HTTPRequest.prototype._getFormat=function(format){return (typeof this.FORMAT[format]!="undefined")?this.FORMAT[format]:this.FORMAT["def"];};SZN.HTTPRequest.prototype._setHeaders=function(headers){var headers=(headers instanceof Array)?headers:new Array();var out=new Array();var setContent=false;for(var i=0;i<headers.length;i++){if(headers[i].typ=="Content-Type"){setContent=true;}out[i]={"typ":headers[i].typ,"content":headers[i].content};}if(!setContent){out.push({"typ":this.HEADER[0].typ,"content":this.HEADER[0].content});}return out;};SZN.HTTPRequest.prototype._setFromData=function(url,obj,func,setting){var data=new Object();for(var i in this.data){switch(i){case "method":if(setting[i]){data[i]=this._getMethod(setting[i]);}else{data[i]=this.data[i];}break;case "format":if(setting[i]){data[i]=this._getFormat(setting[i]);}else{data[i]=this.data[i];}break;case "mode":if(setting[i]){data[i]=this._getMode(setting[i]);}else{data[i]=this.data[i];}break;case "headers":if(setting[i]){data.headers=this._setHeaders(setting[i]);}else{data.headers=this._setHeaders(this.data[i]);}break;default:if(setting[i]){data[i]=setting[i];}else{data[i]=this.data[i];}break;}}data.url=url?url:this.url;data.callBackObj=obj?obj:this.callBackObj;data.callBackFunc=func?func:this.callBackFunc;return data;};SZN.HTTPRequest.prototype._getRequest=function(){if(typeof (XMLHttpRequest)!="undefined"){return new XMLHttpRequest();}else{try{return new ActiveXObject("Msxml2.XMLHTTP");}catch(e){try{return new ActiveXObject("Microsoft.XMLHTTP");}catch(e){return 0;}}}};SZN.Signals=SZN.ClassMaker.makeClass({"NAME":"Signals","VERSION":"1.1","CLASS":"class"});SZN.Signals.prototype.$constructor=function(owner,name){this._owner=owner;this._name=name;this.messageFolder={};this.myEventFolder={};this.myHandleFolder={};this.apiHandler=null;};SZN.Signals.prototype.$destructor=function(){};SZN.Signals.prototype.setApiHandler=function(handler){this.apiHandler=handler;};SZN.Signals.prototype.setMessage=function(msgName,msgValue){this.messageFolder[msgName]=msgValue;};SZN.Signals.prototype.getMessage=function(msgName){return this.messageFolder[msgName];};SZN.Signals.prototype.addListener=function(owner,type,funcOrString,sender){this._addListener(owner,type,funcOrString,sender);};SZN.Signals.prototype._addListener=function(owner,type,funcOrString,sender){if(!(type in this.myHandleFolder)){this.myHandleFolder[type]={};}for(var p in this.myHandleFolder[type]){var item=this.myHandleFolder[type][p];if((item.eFunction==funcOrString)&&(item.eOwner==owner)&&(item.eSender==sender)){return 1;}}var ids=SZN.idGenerator();this.myHandleFolder[type][ids]={"eOwner":owner,"eFunction":funcOrString,"eSender":sender};return 0;};SZN.Signals.prototype.removeListener=function(owner,type,funcOrString,sender){var removed=1;for(var p in this.myHandleFolder[type]){var item=this.myHandleFolder[type][p];if((item.eFunction==funcOrString)&&(item.eOwner==owner)&&(item.eSender==sender)){item=null;delete (this.myHandleFolder[type][p]);removed=0;}}return removed;};SZN.Signals.prototype.makeEvent=function(type,trg,accessType,timestamp){var ids=SZN.idGenerator();this.myEventFolder["e-"+ids]=new this.NewEvent(type,trg,accessType,timestamp,ids);this.myEventHandler(this.myEventFolder["e-"+ids]);};SZN.Signals.prototype.NewEvent=function(type,trg,access,time,ids){this.type=type;this.target=trg;this.accessType=access;this.timeStamp=time;this._id=ids;};SZN.Signals.prototype.myEventHandler=function(myEvent){var functionCache=[];for(var type in this.myHandleFolder){if(type==myEvent.type){for(var p in this.myHandleFolder[type]){var item=this.myHandleFolder[type][p];if(!item.eSender||item.eSender==myEvent.target){functionCache.push(item);}}}}for(var i=0;i<functionCache.length;i++){var item=functionCache[i];var owner=item.eOwner;var fnc=item.eFunction;if(typeof fnc=="string"){owner[fnc](myEvent);}else{if(typeof fnc=="function"){fnc(myEvent);}}}if((myEvent.accessType=="public")&&(this.apiHandler!=null)&&(myEvent._owner!="api")){this.apiHandler._apiEventHandler(myEvent);}this.destroyEvent(myEvent._id);};SZN.Signals.prototype.destroyEvent=function(ids){this.myEventFolder["e-"+ids]=null;delete (this.myEventFolder["e-"+ids]);};SZN.signals=new SZN.Signals();SZN.SigInterface=SZN.ClassMaker.makeClass({"NAME":"SigInterface","VERSION":"1.0","CLASS":"class"});SZN.SigInterface.prototype.setInterface=function(interfaceName){if(typeof (this[interfaceName])!="object"){var owner=this._owner;while(typeof (owner[interfaceName])=="undefined"){if(typeof owner.TOP_LEVEL!="undefined"){throw new Error("SetInterface:Interface not found");}else{owner=owner._owner;}}return owner[interfaceName];}};SZN.SigInterface.prototype.addListener=function(type,handleFunction,sender){this.getInterface().addListener(this,type,handleFunction,sender);};SZN.SigInterface.prototype.removeListener=function(type,handleFunction,sender){this.getInterface().removeListener(this,type,handleFunction,sender);};SZN.SigInterface.prototype.makeEvent=function(type,accessType){var time=new Date().getTime();this.getInterface().makeEvent(type,this,accessType,time);};SZN.SigInterface.prototype.setSysMessage=function(msgName,msgValue){this.getInterface().signals.setMessage(msgName,msgValue);};SZN.SigInterface.prototype.getSysMessage=function(msgName){return this.signals.getMessage(msgName);};SZN.SigInterface.prototype.getInterface=function(){return (typeof (this.signals)=="object"?this.signals:SZN.signals);};}
