function $children(J,K,L,F){var D=null;if(J){if(K=="*"&&L=="id"&&!window.ie){D=J.getElements("#"+F)}else{var G=(K=="*")?J.all:J.getElements(K);if(L){D=new Array();var I=(typeof F!="undefined")?new RegExp("(^|\\s)"+F+"(\\s|$)","i"):null;var A;var H;for(var C=0;C<G.length;C++){A=G[C];H=A.getAttribute&&A.getAttribute(L);if(typeof H=="string"&&H.length>0){if(typeof F=="undefined"||(I&&I.test(H))){D.push(A)}}}}else{D=G}}}var E=null;if(D){E=new Array();for(var C=0,B=D.length;C<B;C++){E.push($(D[C]))}}return E}function $child(A,C){if(A){var B=$children(A,"*","id",C);if(B&&B.length){return $(B[0])}else{return null}}else{return null}}function $exec(script){var res=false;try{if(script){if(window.execScript){window.execScript(script)}else{var el_window=this;el_window.eval?el_window.eval(script):eval(script)}}res=true}catch(e){if(!window.ie&&$defined(console)){console.log(e.message)}else{if($page.options.debug){alert(e.message+"\n"+script.slice(0,40196)+"...")}}}return res}function $show(D,A){if(D){if(A==undefined){A=true}if($type(D)=="array"){for(var C=0,B=D.length;C<B;C++){D[C].setStyle("display",!A?"none":"")}}else{D.setStyle("display",!A?"none":"")}}}function $hide(A){$show(A,false)}function $enable(E,B){function D(G){var F=G.getTag();if(F=="input"||F=="select"||F=="textarea"){if(B){G.removeProperty("disabled","disabled")}else{G.setProperty("disabled","disabled")}}else{$show(G,B)}}if(E){if(B==undefined){B=true}if($type(E)=="array"){for(var C=0,A=E.length;C<A;C++){D(E[C])}}else{D(E)}}}function $disable(A){$enable(A,false)}function $visible(A){return A&&(A.offsetWidth!=0)}function $json_to_el(C,F,J,N){if(C){var K=new Array();var B=C.getElements("*");if(B&&B.length){for(var I=0,H=B.length;I<H;I++){var D=B[I];var A=D.getProperty("name");if(A){if(J&&A==J){D.value=N}else{if(F){var M=F[A];if($type(M)=="number"){M=M+""}if($type(M)=="string"){switch(D.getTag()){case"a":var L=D.getProperty("type");if(L=="text"){D.setText(M);break}else{if(L=="textlink"||L=="linktext"){D.href=M;D.setText(M);break}}D.href=M;var E=D.getProperty("tween");if(E){var G=$child(C,E);if(!M){$hide(D);$show(G)}else{$show(D);$hide(G)}}break;case"select":if(!D.options.length){D.options[0]=new Option("",M);D.options[0].selected=true}D.value=M;D.fireEvent("UT_change");break;case"input":switch(D.getProperty("type")){case"radio":case"checkbox":D.checked=(D.value==M);D.fireEvent("UT_change");break;default:D.value=M;D.fireEvent("UT_change")}break;case"textarea":D.setText(M);D.fireEvent("UT_change");break;case"img":D.src=M;break;default:M=M.replace(/\n/g,"<br/>");D.innerHTML=M}}}}}}}for(var I=0,H=K.length;I<H;I++){var D=K[I];D.remove()}}}function $el_to_json(E,H){if(E&&H){var B=E.getElements("*");if(B&&B.length){for(var D=0,C=B.length;D<C;D++){var F=B[D];if(F.name){var A=F.getTag();if(A!="a"){var G=("value" in F)?F.value:null;if(A=="input"||A=="select"){switch(F.getProperty("type")){case"radio":if(!F.getProperty("checked")){continue}break;case"checkbox":if(!F.getProperty("checked")){G=0}}}if(G!=null){H[F.name]=G}}}}}return true}else{return false}}function $radio_to_text(C,A,I){var B=$children(C,"input","name",A);var G=null;if(B){for(var F=0,E=B.length;F<E;F++){var D=B[F];if(D.value==I){var H=D.getParent();G=H.getText();break}}}return G}function $option_to_text(C,D){if(!D||D=="0"){return""}else{if(C&&C.getTag()=="select"){for(var B=0,A=C.options.length;B<A;B++){var E=C.options[B];if(E.value==D){return E.text}}}return D}}function $setHTML(A,B){if(A&&$defined(A)&&B!=null){A.innerHTML=B}}function gettext(B,A){if($page&&$page.gettext){return $page.gettext(B,A)}else{return B}}function $remove_br(B){var A=B;if($type(A)=="string"){A=B.replace(/\n/g,"");A=A.replace(/<br>/gi,"\n");A=A.replace(/<br\/>/gi,"\n")}return A}function json_to_url(B){var A=$type(B);if(A!="object"&&A!="array"){$page.log("Type of json must be object or array");return""}else{var C=Json.toString(B);if(!$page.options.debug){}return C}}function url_to_json(A){var C=decodeURIComponent(A);try{if(!$page.options.debug){}var B=Json.evaluate(C)}catch(D){$page.log("Cannot decode "+C);var B={}}return B}var UT_Jsons=new Class({items:null,_add:function(B,A){if(!this.items){this.items=new Array()}this.items.push({method:B,f:A})},_handle:function(C){if(C&&C.method&&this.items){for(var B=0,A=this.items.length;B<A;B++){var D=this.items[B];if(D.method==C.method||D.method=="*"){D.f(C)}}}return this}});var UT_Cache=new Class({data:null,clear:function(){this.data=new Hash()},put:function(B,A){var D=$merge({},B);if("cid" in D){delete D.cid}var E=$merge({},A);if("cid" in E){delete E.cid}var C=Json.toString(D);this.data.set(C,A)},get:function(A){var C=$merge({},A);if("cid" in C){delete C.cid}var B=Json.toString(C);var D=this.data.get(B);if(D){if("cid" in A){D.cid=A.cid}}return D},initialize:function(A){this.clear()}});var UT_Json=new Class({options:{handle_all:false,use_cid:true,use_cache:false,method_name:null,key_name:null,key_value:null,onAjaxComplete:function(A){this.fireEvent("onComplete",A);this.receive(A.response.text,A.getHeader("Content-type"),A.$requested_data)},onAjaxFailure:function(A){this.fireEvent("onFailure",A);this._fail_response(A.$requested_data,-1,gettext("ajax_error"))}},children:null,prepare_handlers:null,response_handlers:null,request_methods:null,request_cids:null,get_request_json:function(E){var F=new Array();this._prepare_request(F,E);for(var D=0,C=this.children.length;D<C;D++){var H=this.children[D];var B=H.get_request_json();if(B){for(var G=0,A=B.length;G<A;G++){F.push(B[G])}}}return F},inject_cids:function(D){if(this.options.use_cid){for(var B=0,A=D.length;B<A;B++){var C=D[B];if(!C.cid){C.cid=this._new_cid();this.request_cids.push(C.cid)}}}},_new_cid:function(){return Math.ceil(10000*Math.random())},request:function(M){var K=this.get_request_json(M);if(K&&K.length){var E=0,D=K.length;while(E<D){if($page.json_cacheable(K[E])){var H=K[E];var J=$page.json_from_cache(H);if(J){var J=$merge({cid:H.cid},J);setTimeout(this._handle_response.pass([J],this),10);K.splice(E,1)}else{if(H.cid){this.caching_requests[H.cid]=H}E++}}else{E++}}if(!K.length){return }var G=new Array();$page.prepare_request(G);for(var E=0,D=K.length;E<D;E++){var L=K[E];var F=false;for(var A=0,C=G.length;A<C;A++){if(G[A].method==L.method){F=Json.toString(G[A])==Json.toString(L);if(F){break}}}if(!F){G.push(K[E])}}this.inject_cids(G);var B=this.options.url||$page.options.json_url;if($page.options.debug){var I=new Ajax(B,{method:$page.options.json_request_method||"post",data:"json="+Json.toString(G)})}else{var I=new Ajax(B,{method:$page.options.json_request_method||"post"})}I.addEvent("onComplete",this.fireEvent.pass(["onAjaxComplete",I],this));I.addEvent("onFailure",this.fireEvent.pass(["onAjaxFailure",I],this));I.$requested_data=G;if($page.options.debug){I.request()}else{I.request({json:Json.toString(G)})}}},receive:function(B,F,D){var K=new String(F);if((K.indexOf("application/x-javascript")>=0)||(K.indexOf("text/javascript")>=0)||(K.indexOf("text/plain")>=0)){try{var H=Json.evaluate(B)}catch(G){this._fail_response(D,-1,G);return }if(H){var A={error_code:0,errormsg:"",json:null,$error_code:function(){return this.error_code},$abort:function(L,M){this.error_code=L||-1;this.errormsg=M}};for(var E=0,C=H.length;E<C;E++){var J=H[E];J.$error_code=A.$error_code.bind(A);J.$abort=A.$abort.bind(A);if(J.cid){var I=this.caching_requests[J.cid];$page.json_to_cache(I,J);delete this.caching_requests[J.cid]}this._handle_response(J);if(!J.$error_code()){$page.handle_response(J)}delete J["$error_code"];delete J["$abort"];if(A.error_code&&D){this._fail_response(D,A.error_code,A.errormsg);break}}}}else{$page.handle_error(B,F)}},prepare_request:function(C){for(var B=0,A=this.prepare_handlers.length;B<A;B++){var D=this.prepare_handlers[B];if($type(D)=="function"){D(C)}}},handle_response:function(A){this.response_handlers._handle(A)},add_request_handler:function(C){if($type(C)=="array"){for(var B=0,A=C.length;B<A;B++){this.prepare_handlers.push(C[B])}}else{this.prepare_handlers.push(C)}},add_response_handler:function(D,C){if($type(D)=="array"){for(var B=0,A=D.length;B<A;B++){this.response_handlers._add(D[B],C)}}else{if($type(D)!="string"){$page.log("В add_response_handler нужно передать имя метода или массив имен")}this.response_handlers._add(D,C)}},add_child:function(A){this.children.push(A)},rem_child:function(A){this.children.remove(A)},_prepare_request:function(E,D){var G=E.length;if(D){if($type(D)=="array"){for(var C=0,A=D.length;C<A;C++){E.push(D[C])}}else{E.push(D)}}if(this.options.method_name){var D={method:this.options.method_name,data:{}};if(this.options.key_name){D.data[this.options.key_name]=this.options.key_value}E.push(D)}var B=this.prepare_request(E);for(var C=G,A=E.length;C<A;C++){var F=E[C].method;if(F&&!this.request_methods.contains(F)){this.request_methods.push(F)}}this.inject_cids(E);return B},_key_matches:function(A){if(this.options.use_cid){if(this.request_cids.contains(A.cid)){this.request_cids.remove(A.cid)}else{return false}}else{if(this.options.key_name&&this.options.key_value){var B=0;if(A.result&&A.input){B=A.input[this.options.key_name]}else{if(A.data){B=A.data[this.options.key_name]}}if(B!=this.options.key_value){return false}}}return true},_handle_response:function(D){var C=0;if(this.options.handle_all||(D.method&&this.request_methods.contains(D.method))){if(D&&this._key_matches(D)){C=this.handle_response(D)}}for(var B=0,A=this.children.length;B<A;B++){if(D.$error_code&&D.$error_code()){return }this.children[B]._handle_response(D)}return C},_fail_response:function(E,A,F){if(E&&$type(E)=="array"){for(var D=0,B=E.length;D<B;D++){var C=E[D];C.result=A;C.errormsg=F;this._handle_response(C)}}},initialize:function(A){this.setOptions(A);this.caching_requests=new Array();this.prepare_handlers=new Array();this.response_handlers=new UT_Jsons();this.children=new Array();this.request_methods=new Array();this.request_cids=new Array();return this}});UT_Json.implement(new Events,new Options);var UT_Template=new Class({options:{template:null,el:null,lang:null,roller:true,full_url:"",onAjaxComplete:function(A){this.handle_response(A.response.text,A.getHeader("Content-type"))},onAjaxFailure:function(A){if(this.options.lang&&this.options.lang!="EN"){this.options.lang="EN";this.request()}else{$page.log("Cannot load template "+this.options.template);this.fireEvent("onFailure",A);this._hide_roller()}}},overlays:null,response:null,success:null,check_options:function(A){if(A){for(property in A){if(property=="el"&&!A.el){$page.log("UT_Template: свойство options.el содержит пустое значение")}}}},request:function(C){this.check_options(C);this.setOptions(C);var B=$page.options.template_url+(this.options.lang||$page.options.session.lang).toLowerCase()+"/"+this.options.template;this.full_url=B;var D=this.load_from_cache(B);if(D){if(this.options.el){this.options.el.innerHTML=D.innerHTML}if("template_scripts" in D){var A=D.template_scripts;if(A){$exec(A)}}this.fireEvent("onComplete")}else{var E=new Ajax(B,{method:"get"});E.addEvent("onComplete",this.fireEvent.pass(["onAjaxComplete",E],this));E.addEvent("onFailure",this.fireEvent.pass(["onAjaxFailure",E],this));this.success=true;E.request();this._show_roller()}return this},_show_roller:function(){if(this.options.roller&&this.options.el){var A=$children(this.options.el,"*","id","waiting_data");if(!A||!A.length){A=$("template_waiting_data");if(A){A=A.clone();A.removeProperty("id");A.setProperty("id","waiting_data");A.injectInside(this.options.el)}}$show(A)}},_hide_roller:function(){$hide($children(this.options.el,"*","id","waiting_data"))},handle_response:function(A,G){var F=G.split(";");G=F[0];if(G=="text/html"){var I=A;var B=new Array();var J=/<script([^>]*)src="([\s\S]*?)"([^>]*?)>/gi;while((script=J.exec(I))){B.push(script[2])}for(var D=0,C=B.length;D<C;D++){this.overlays.push(B[D])}var E=new Array();var J=/<link([^>]*)href="([\s\S]*?.css)"([^>]*?)>/gi;while((href=J.exec(I))){E.push(href[2])}J=/<script[^>]*>([\s\S]*?)<\/script>/gi;var H=new Array();while((script=J.exec(I))){H.push(script[1])}H=H.join("\n");I=I.replace(/<html[^>]*>/gi,"");I=I.replace(/<\/html>/gi,"");I=I.replace(/<body[^>]*>/gi,"");I=I.replace(/<\/body>/gi,"");J=/<script[^>]*>([\s\S]*?)<\/script>/gi;I=I.replace(J,"");J=/<link([^>]*)href="([\s\S]*?.css)"([^>]*?)>/gi;I=I.replace(J,"");this.response.content=I;this.response.script=H;for(var D=0,C=E.length;D<C;D++){$page.load_css(E[D],this.fireEvent.pass(["onOverlayLoad",[E[D],true]],this))}if(B.length){for(var D=0,C=B.length;D<C;D++){$page.load_script(B[D],this._overlay_loaded.bind(this))}}else{this.inject_content(I,H)}}return this},_overlay_loaded:function(B,A){this.success=this.success&&A;this.overlays.remove(B);if(!this.overlays.length){if(this.success){this.inject_content(this.response.content,this.response.script)}else{$page.log("Cannot load "+B+" (template "+this.options.template+")");this.fireEvent("onFailure")}}this.fireEvent("onOverlayLoad",[B,A])},url_to_id:function(A){var B=/[\/\.]/gi;return A.replace(B,"_")},get_cache_el:function(){var A=$("UT_template_cache");if(!A){A=new Element("div",{id:"UT_template_cache"});A.setStyle("display","none");A.injectInside(document.body)}return A},load_from_cache:function(A){return $child(this.get_cache_el(),this.url_to_id(A))},save_to_cache:function(A,C){var B=this.load_from_cache(A);if(!B){B=new Element("div",{id:this.url_to_id(A)});B.injectInside(this.get_cache_el())}B.innerHTML=C;return B},inject_content:function(D,A){if(this.options.el){this.options.el.innerHTML=D}if(!this.options.dont_cache){var B=this.save_to_cache(this.full_url,D);if(A){B.template_scripts=A}}var C=$children(this.options.el,"div","id","messages");$page.add_template_messages(C);if(A){$exec(A)}this.fireEvent("onComplete");return this},initialize:function(A){this.check_options(A);this.setOptions(A);this.response={};this.overlays=new Array();this.success=true}});UT_Template.implement(new Events,new Options);var UT_Container=new Class({options:{template:null,el:null,navigation_path:""},children:null,method:null,create_child:function(el,class_name,options){options=$merge({el:el,el_template:el},options);if(class_name&&class_name.slice(0,1)=="."){class_name="UT_Container"+class_name}if(!class_name){class_name="UT_Container"}var container=eval("new "+class_name+"(options)");if(el&&el.container){this.rem_child(el.container)}this.add_child(container);if(el){el.container=container}return container},load_child:function(E,D,F,B,C){if(E&&E.container&&E.container.options.container_id==B.container_id){E.container.navigate(B.child_path)}else{var G=$merge({el:E,template:D},C);var A=new UT_Template(G);A.addEvent("onComplete",this.create_child.pass([E,F,B],this));A.request()}},inject_child:function(B,A){},navigate:function(I){try{if(!I){I=this.options.child_path}if($type(I)!="string"){I=""}var B=I;var H=I.split("+");if(H.length){B=H[0]}if(B.match("UT_")){return false}var F=B.split("{");if(F&&F.length>1){try{var A="";for(var E=1,D=F.length;E<D;E++){A+=F[E];if(E<D-1){A+="{"}}var C=url_to_json("{"+A)}catch(G){var C={}}}else{var C={}}C.child_path="";for(var E=1,D=H.length;E<D;E++){C.child_path+=H[E];if(E<D-1){C.child_path+="+"}}C.container_id=B;C.navigation_path=(this.navigation_path?this.navigation_path+"+":"")+B;if(F&&F.length>1){B=F[0]}C.child_id=B;this.inject_child(B,C)}catch(G){$page.log(G.message)}this.options.navigating=false},update_links:function(E){if(E||(this.options.el&&this.options.navigation_path)){var D=$children(E?E:this.options.el,"a");if(D){for(var C=0,B=D.length;C<B;C++){var E=D[C];if(E.hasClass("link_relative")||E.getProperty("type")=="relative"){E.removeProperty("type");var F=E.href;var G="";if(F){var A=F.split("#");if(A&&A.length>1){G=A[1];if(G&&G!=""){G="+"+G}}}E.hash=this.options.navigation_path+G}}}}},notify:function(D,A){for(var C=0,B=this.children.length;C<B;C++){this.children[C].notify(D,A)}},add_child:function(A){if(!this.children.contains(A)){this.children.push(A);if(A.method){this.method.add_child(A.method)}}},rem_child:function(A){if(A.method){this.method.rem_child(A.method)}this.children.remove(A)},add_method:function(A){this.method.add_child(A)},rem_method:function(A){this.method.rem_child(A)},request:function(A){this.method.request(A)},request_template:function(C,B){var A=new UT_Template({template:C||this.options.template,el:B||this.options.el});A.addEvent("onComplete",function(){this.update_links();this.fireEvent("onTemplateComplete")}.bind(this));A.addEvent("onFailure",function(){this.fireEvent("onTemplateFailure")}.bind(this));A.request()},initialize:function(A){this.setOptions(A);this.children=new Array();this.method=new UT_Json();this.navigate_handlers=new Hash();this.update_links()}});UT_Container.implement(new Events,new Options);var UT_Page=new Class({options:{debug:false,json_url:"/",template_url:"/template/",lang:"EN",session:{id:0,expired:0,lang:"EN"}},json_cache:null,prepare_handlers:null,response_handlers:null,error_handlers:null,refs:null,scripts:null,script_requests:null,messages:null,log:function(A){if(this.options.debug){if("console" in window){console.log(A)}}},json_to_cache:function(B,A){this.json_cache.put(B,A)},json_from_cache:function(A){return this.json_cache.get(A)},json_cacheable:function(D){var C=false;for(var B=0,A=this.cacheable_handlers.length;B<A;B++){var E=this.cacheable_handlers[B];if($type(E)=="function"){C=E(D)}if(C){break}}return C},prepare_request:function(C){for(var B=0,A=this.prepare_handlers.length;B<A;B++){var D=this.prepare_handlers[B];if($type(D)=="function"){D(C)}}},handle_response:function(A){this.response_handlers._handle(A)},handle_error:function(A,D){for(var C=0,B=this.error_handlers.length;C<B;C++){var E=this.error_handlers[C];if($type(E)=="function"){E(A,D)}}},add_request_handler:function(C){if($type(C)=="array"){for(var B=0,A=C.length;B<A;B++){this.prepare_handlers.push(C[B])}}else{this.prepare_handlers.push(C)}},add_response_handler:function(D,C){if($type(D)=="array"){for(var B=0,A=D.length;B<A;B++){this.response_handlers._add(D[B],C)}}else{if($type(D)!="string"){$page.log("В add_response_handler нужно передать имя метода или массив имен")}this.response_handlers._add(D,C)}},add_error_handler:function(A){this.error_handlers.push(A)},add_cacheable_handler:function(A){this.cacheable_handlers.push(A)},add_ref:function(A){this.refs.push(A)},rem_ref:function(C){var A=this.refs.length;var B=0;while(B<A){if(this.refs[B]==C){this.refs.splice(B,1);break}else{B++}}},load_script:function(A,G){if(this.scripts.indexOf(A)==-1){var D=/senderok\.js/gi;if(D.exec(A)){if(G){G(A,true)}return }var E=true;for(var C=0,B=this.script_requests.length;C<B;C++){if(this.script_requests[C].script==A){E=false;break}}this.script_requests.push({script:A,onload:G,received:false});if(E){var F=new Ajax(A,{method:"get"});F.addEvent("onComplete",function(O,P){for(var L=0,J=this.script_requests.length;L<J;L++){var I=this.script_requests[L];if(I.script==O){I.received=true;I.javascript=P.response.text}}while(this.script_requests.length){var I=this.script_requests[0];var R=I.script;if(I.received){if(this.options.debug&&!window.ie){var N=new Array();for(var Q=0,M=this.script_requests.length;Q<M;Q++){var K=this.script_requests[Q];if(K.script==R&&K.onload){N.push(K.onload)}}var H=Asset.javascript(R,{onload:function(S,V){if(V){for(var U=0,T=N.length;U<T;U++){V[U](S,true)}}}.pass([R,N],this)})}else{$exec(I.javascript)}this.scripts.push(R);var L=0;while(L<this.script_requests.length){var K=this.script_requests[L];if(K.script==R){if(K.onload&&(!this.options.debug||window.ie)){K.onload(R,true)}this.script_requests.splice(L,1)}else{L++}}}else{break}}}.pass([A,F],this));F.addEvent("onFailure",function(H,K){var J=0;while(J<this.script_requests.length){var I=this.script_requests[J];if(I.script==H){if(I.onload){I.onload(H,false)}this.script_requests.splice(J,1)}else{J++}}}.pass([A,F],this));F.request()}}else{if(G){G(A,true)}}},load_css:function(A){if(this.scripts.indexOf(A)==-1){new Asset.css(A);this.scripts.push(A)}},gettext:function(D,A){var B=null;var C=this.messages[this.options.lang||"EN"];if(C){B=C[A?A+"::"+D:D]}if(A&&!B){B=C[D]}return B||D},add_message:function(E,C,A,D){var B=this.messages[D||this.options.lang||"EN"];if(!B){B=this.messages[D||this.options.lang||"EN"]=new Array()}if(A){B[A+"::"+E]=C;if(!B[E]){B[E]=C}}else{B[E]=C}},add_template_messages:function(E){if(E){for(var G=0,F=E.length;G<F;G++){var H=E[G].getChildren();for(var B=0,C=H.length;B<C;B++){var I=H[B];var A=I.getProperty("id");var D=I.getProperty("selector");if(A){this.add_message(A,I.innerHTML,D)}}E[G].remove()}}},domready:function(){var A=$$(document.getElementsByTagName("script"));if(A){for(var D=0,C=A.length;D<C;D++){var B=A[D];if(B.src){var F=B.src;var E=window.location.protocol+"//"+window.location.hostname;F=F.replace(E,"");if(!this.scripts.contains(F)){this.scripts.push(F)}}}}this.add_template_messages($$("#messages"))},initialize:function(A){this.prepare_handlers=new Array();this.error_handlers=new Array();this.cacheable_handlers=new Array();this.messages=new Array();this.response_handlers=new UT_Jsons();this.json_cache=new UT_Cache();this.refs=new Array();this.scripts=new Array();this.root=new UT_Container();this.script_requests=new Array();window.addEvent("domready",this.domready.bind(this));return this}});UT_Page.implement(new Events,new Options);var $page=new UT_Page();if(window.dhtmlHistory){window.dhtmlHistory.create({toJSON:function(A){return Json.toString(A)},fromJSON:function(A){return Json.evaluate(A)}});var locationListener=function(A,C){var B=decodeURIComponent(A);$page.add_template_messages($$("#messages"));if($page&&$page.root&&B!=$page.root.options.current_path){$page.root.options.current_path=B;$page.root.navigate(B)}}}UT_Container.Editor=UT_Container.extend({options:{read_only:true,clone:false,framed:true,dont_close:false,el_template:null,el_display:null,el_edit:null,el_controls:null,onTemplateComplete:function(){this._link_with_el(this.options)}},sreq:null,data:null,tmp_data:null,els:null,get_request:function(){return this.method},set_request:function(){if(!this.sreq){this.sreq=new UT_Json({key_name:this.options.key_name,key_value:this.options.key_value});this.sreq.add_request_handler(this._prepare_set.bind(this));this.sreq.add_response_handler("*",this.handle_set.bind(this));this.sreq.addEvent("onFailure",function(){this._hide_splash();this._unlock_save()}.bind(this))}return this.sreq},_show_splash:function(){$show(this.els.splashes)},_hide_splash:function(){$hide(this.els.splashes)},_enable_buttons:function(B,A){if(this.options.el&&B){$enable($children(this.options.el,"*","id",B),A)}},_lock_save:function(){this._enable_buttons("btn_save",false)},_unlock_save:function(){this._enable_buttons("btn_save",true)},_process_required_tag:function(E,A){var D=$children(E,A);if(D){for(var C=0,B=D.length;C<B;C++){var E=D[C];if(E.hasClass("required")){if(!this.els.required.contains(E)){var G=5;F=E;while(G&&!F.hasClass("require_indicator")){var F=F.getParent();G--}if(F.hasClass("require_indicator")){E.el_indicator=F}else{E.el_indicator=E}this.els.required.push(E);E.addEvent("change",this._fire_UT_change.bind(this,[E]));E.addEvent("keydown",function(H){setTimeout(this._fire_UT_change.bind(this,[H]),20)}.bind(this,[E]));E.addEvent("UT_change",this._handle_required_changes.bind(this,[E]))}this._handle_required_changes(E)}}}},_process_required:function(){var A=this.els.el_edit;if(A){this._process_required_tag(A,"input");this._process_required_tag(A,"select");this._process_required_tag(A,"textarea");this._check_unfilled()}},_check_unfilled:function(){var B=true;for(var C=0,A=this.els.unfilled.length;C<A;C++){var D=this.els.unfilled[C];if($visible(D)){B=false;break}}this._enable_buttons("btn_save",B);return B},_fire_UT_change:function(A){if(A){A.fireEvent("UT_change",[A])}},_handle_required_changes:function(A){var B=(!("value" in A)||((A.getTag()=="select")?(A.options.length==0||(A.options.length>1&&A.value==A.options[0].value)):(!A.value||(!A.value.trim()))));if(B){if(!this.els.unfilled.contains(A)){this.els.unfilled.push(A)}A.el_indicator.addClass("input_required")}else{this.els.unfilled.remove(A);A.el_indicator.removeClass("input_required")}this._check_unfilled()},_focus_first:function(){var B=this.els.el_edit.getElements("*");if(B&&B.length){for(var D=0,C=B.length;D<C;D++){var E=B[D];var A=E.getTag();if(A=="input"||A=="textarea"||A=="select"){if($visible(E)){E.focus();break}}}}},_json_to_el:function(D,E){var C=$children(D,"*","id","editor_fields");if(C&&C.length){for(var B=0,A=C.length;B<A;B++){$json_to_el(C[B],E,this.options.key_name,this.options.key_value)}return 1}else{return $json_to_el(D,E,this.options.key_name,this.options.key_value)}},_el_to_json:function(E,F){var D=$children(E,"*","id","editor_fields");if(D&&D.length){var C=1;for(var B=0,A=D.length;B<A;B++){C=C&&$el_to_json(D[B],F)}return C}else{return $el_to_json(E,F)}},_display_data:function(A,B){this.data=A;this._json_to_el(this.els.el_display,A);this._json_to_el(this.els.el_edit,A);this._process_required()},_prepare_set:function(A){var B=A.length;this.prepare_set(A);if(B<A.length){this._show_splash();this._lock_save()}},_show_error:function(C){if(!this.els.el_error){this.els.el_error=$children(this.options.el,"*","id","editor_error_frame");this.els.el_errormsg=$children(this.options.el,"*","id","editor_error_message")}if(this.els.el_errormsg){for(var B=0,A=this.els.el_errormsg.length;B<A;B++){this.els.el_errormsg[B].innerHTML=C}$show(this.els.el_error);$show(this.els.el_errormsg)}},_hide_error:function(){$hide(this.els.el_errormsg);$hide(this.els.el_error)},prepare_get:function(B){if(this.options.get_method_name&&B.length){var A=B[B.length-1];return A}},prepare_set:function(B){var A={method:this.options.set_method_name,data:{}};if(this.options.key_name&&this.options.key_value){A.data[this.options.key_name]=this.options.key_value}if(this._el_to_json(this.els.el_edit,A.data)){this.data_sent=A.data;B.push(A)}return A},handle_set:function(A){if(this.set_request().request_methods.contains(A.method)){if(A.result){this._hide_splash();this._unlock_save();this.data_sent=null;this._show_error(A.errormsg)}else{this._hide_error();if(!this.data_sent){this.data_sent=A.data}else{for(prop in A.data){this.data_sent[prop]=A.data[prop]}}if(this.data&&$type(this.data_sent)!="array"){for(prop in this.data_sent){this.data[prop]=this.data_sent[prop]}}else{this.data=this.data_sent}this.data_sent=null;this._hide_splash();this._unlock_save();this._display_data(this.data,true);if(!this.options.dont_close){this.display()}this.fireEvent("onSaved")}}},handle_get:function(A){if(A.method==this.options.get_method_name){if(!A.result){this._display_data(A.data)}}},validate:function(){if(this.els.el_edit){var A=this.els.el_edit.getElements("input");if(A&&A.length){for(var D=0,C=A.length;D<C;D++){var E=A[D];var G=E.getProperty("pattern");if(G){var F=("value" in E)?E.value:null;if(G&&F){var B=F.match(G);if(!B||B[0]!=F){var H=E.getProperty("errormsg");if(H){this._show_error(gettext(H))}else{this._show_error(gettext("invalid_input"))}return false}}}}}return true}else{return true}},save:function(){if(this.validate()){this.fireEvent("onSave");this.set_request().request()}},cancel:function(){this.fireEvent("onCancel");this.display()},edit:function(){if(!this.options.read_only){this._hide_error();var F=this.options.el;if(F){var H=this.els.el_edit;if(!H){var G=this.options.clone?this.options.el_edit.clone():this.options.el_edit;var H=$("editor_frame_edit");if(this.options.framed&&H){H=H.clone();H.removeProperty("id");H.injectInside(F);$json_to_el(H,{title:this.options.title});var A=$child(H,"editor_frame_content")||H;G.injectInside(A);G.setStyle("display","block");var C=$children(H,"*","id","editor_loading");if(C){this.els.splashes.merge(C)}}else{H=G}if(F!=this.options.el_template){H.injectInside(F)}this.els.el_edit=H;var B=$children(H,"*","id","btn_cancel");if(B){for(var E=0,D=B.length;E<D;E++){B[E].addEvent("click",this.cancel.bind(this))}}var I=$children(H,"*","id","btn_save");if(I){for(var E=0,D=I.length;E<D;E++){I[E].addEvent("click",this.save.bind(this))}}}if(H){this._json_to_el(H,this.data);if(this.els.el_display){this.els.el_display.setStyle("display","none")}if(this.els.el_controls){this.els.el_controls.setStyle("display","none")}H.setStyle("display","block");this._process_required();this.fireEvent("onEdit");setTimeout(this._focus_first.bind(this),100)}}}},display:function(){var F=this.options.el;if(F){$hide(this.els.el_errormsg);$hide(this.els.el_error);var H=this.els.el_edit;if(H){H.setStyle("display","none")}var I=this.els.el_display;if(!I){I=this.options.clone?this.options.el_display.clone():this.options.el_display;if(F!=this.options.el_template){I.injectInside(F)}this.els.el_display=I;this._json_to_el(I,this.data)}if(I){I.setStyle("display","block");if(!this.options.read_only){var J=this.els.el_controls;if(!J){if(!this.options.el_controls){J=$child(I,"editor_controls")}else{J=this.options.el_controls;if(F!=this.options.el_template){if(this.options.clone){J=J.clone()}J.injectInside(F)}}if(!J){J=I}var G=$child(J,"btn_edit");if(!G){var B=$("editor_frame_controls");if(B){B=B.clone();B.removeProperty("id");B.injectInside(J)}}var A=$children(J,"*","id","btn_edit");for(var E=0,D=A.length;E<D;E++){A[E].addEvent("click",function(){this.edit()}.bind(this))}this._extra_control(J);this.els.el_controls=J}J.setStyle("display","block")}var C=$children(F,"*","id","editor_loading");if(C){this.els.splashes.merge(C)}}}},_extra_control:function(A){},_link_with_el:function(A){this.options.el_display=A.el_display||$child(this.options.el_template,"editor_display");this.options.el_edit=A.el_edit||$child(this.options.el_template,"editor_edit");this.options.el_controls=A.el_controls;this.options.read_only=(!A||!this.options.el_edit||(A&&A.read_only))},add_uploader:function(C,B){if(B==undefined){B=true}var A=new UT_Form.Upload(C.form);A.owner=this;A.addEvent("onJSON",this._handle_upload.bind(A));A.addEvent("onSubmit",this._onUploadProcess.bind(this));A.addEvent("onSuccess",this._onUploadSuccess.bind(this));A.addEvent("onFailure",this._onUploadError.bind(this));if(B){C.onchange=this._input_upload_change.bind(this,[C,A])}return A},handle_upload:function(B,A){},_input_upload_change:function(B,A){if(B.value){A.submit()}},_handle_upload:function(A){this.owner.handle_upload(A,this)},_onUploadProcess:function(){this._hide_error();this._show_splash();this._lock_save()},_onUploadSuccess:function(){this._hide_splash();this._unlock_save()},_onUploadError:function(A){this._hide_splash();this._show_error(gettext("ajax_error"));this._unlock_save()},initialize:function(options){if(!options){options={}}this.parent(options);this.els={el_display:null,el_edit:null,required:new Array(),unfilled:new Array(),splashes:new Array()};this.options.el_template=options.el_template||options.el;this._link_with_el(options);if(this.options.get_method_name){with(this.method){options.method_name=this.options.get_method_name;options.key_name=this.options.key_name;options.key_value=this.options.key_value}}with(this.method){add_request_handler(this.prepare_get.bind(this));add_response_handler("*",this.handle_get.bind(this))}var editor=this.options.el_edit;if(editor){var el_buttons=$child(editor,"editor_main_controls");if(el_buttons&&el_buttons.innerHTML==""){var el_tpl=$("editor_main_controls_default");if(el_tpl){el_buttons.innerHTML=el_tpl.innerHTML;var hash=window.location.hash;var ref=hash.split("#");if(ref&&ref.length){hash=ref[1]}else{hash=""}var els=$children(el_buttons,"a");if(els){for(var i=0,j=els.length;i<j;i++){var el=els[i];el.hash=hash}}}}}}});UT_Container.List=UT_Container.extend({options:{max_count:-1,min_count:-1},data:null,el_items:null,data_stack:null,_update:function(){for(var B=0,A=this.el_items.length;B<A;B++){var C=this.el_items[B];if(C.el_add){if(this.options.max_count!=-1&&A>=this.options.max_count){$disable(C.el_add)}else{$enable(C.el_add)}}if(C.el_del){if(this.options.min_count==-1||A>this.options.min_count){$enable(C.el_del)}else{$disable(C.el_del)}}}},_add_item:function(D){var A={};var C=this._new_item(A,D);if(!this.data){this.data=new Array()}if(C&&!this.data.contains(A)){if(D){var B=this.el_items.indexOf(D);this.data.splice(B+1,0,A)}else{this.data.push(A)}}this._update();return C},_free_item:function(A){this.el_items.remove(A);A.remove()},_del_item:function(A){if(A){this._free_item(A);if(this.data&&this.data.remove){this.data.remove(A.data)}}this._update()},_sort:function(C){if(this.data){this.data.sort(C);var H=0;for(var E=0,D=this.data.length;E<D;E++){var G=this.data[E];var F=0;for(var B=0,A=this.el_items.length;B<A;B++){if(this.el_items[B].data==G){F=this.el_items[B];break}}if(H&&F){F.injectAfter(H)}H=F}}},_init_item:function(A){return A},_new_item:function(A,D){var C=null;if(this.options.el_template){C=this.options.el_template.clone();C.data=A;if(this.options.default_item_data){for(prop in this.options.default_item_data){if(!C.data[prop]){C.data[prop]=this.options.default_item_data[prop]}}}C.removeProperty("id");$json_to_el(C,A);if(D){C.injectAfter(D);var B=this.el_items.indexOf(D);this.el_items.splice(B+1,0,C)}else{C.injectInside(this.options.el_target||this.options.el);this.el_items.push(C)}this._init_item(C);$show(C);C.el_add=$child(C,"btn_add");if(C.el_add){C.el_add.addEvent("click",function(F,E){new Event(F).stop();this._add_item(E)}.bindAsEventListener(this,[C]))}C.el_del=$child(C,"btn_del");if(C.el_del){C.el_del.addEvent("click",function(F,E){new Event(F).stop();this._del_item(E)}.bindAsEventListener(this,[C]))}}return C},set_data:function(E){if(!this.data_stack.length){this.data_stack.push(E);while(this.data_stack.length){E=this.data_stack.shift();if(this.options.copy_data){this.data=Array.copy(E)}else{this.data=E}if(!this.data){this.data=new Array()}var A=this.options.el_target||this.options.el;if(A){while(this.el_items.length){this._free_item(this.el_items[0])}if(this.data&&this.data.length){for(var C=0,B=this.data.length;C<B;C++){this._new_item(this.data[C])}this._update()}else{if(this.options.min_count!=-1){for(var C=0,B=this.options.min_count;C<B;C++){var D=this._add_item()}}}}}}else{this.data_stack.push(E)}},get_data:function(){for(var B=0,A=this.el_items.length;B<A;B++){var C=this.el_items[B];$el_to_json(C,C.data)}return this.data},initialize:function(A){this.el_items=new Array();A.el_template=A.el_template||$child(A.el,"list_item_template");this.parent(A);this.data_stack=new Array();if(this.options.get_method_name){this.method.options.method_name=this.options.get_method_name;this.method.options.key_name=this.options.key_name;this.method.options.key_value=this.options.key_value}}});UT_Container.EditorList=UT_Container.List.extend({deleting:null,_update:function(){var B=true;for(var C=0,A=this.el_items.length;C<A;C++){var D=this.el_items[C];if(!D.container||!$defined(D.container.data[this.options.id_prop])){B=false;$show(D.el_del,false)}else{if(D.container.data[this.options.id_prop]){$show(D.el_del,true)}}}$show($children(this.options.el,"*","id","btn_add"),B)},_init_item:function(item){if(item){var class_name=this.options.editor_class;if(class_name&&class_name.slice(0,1)=="."){class_name="UT_Container"+class_name}if(!class_name){class_name="UT_Container.Editor"}var constructor=eval(class_name);if(!constructor){$page.log("Constructor "+class_name+" not found")}else{var options={el:item,set_method_name:this.options.set_method_name,onSaved:this._update.bindAsEventListener(this)};if(this.options.item_options){for(var prop in this.options.item_options){options[prop]=this.options.item_options[prop]}}item.container=new constructor(options);this.add_child(item.container);if(item.container._display_data){item.container._display_data(item.data)}if(item.container.display){item.container.display()}}}return item},_del_item:function(C,B){if(this.deleting.indexOf(C)!=-1){this.deleting.remove(C);this.parent(C)}else{if(B||confirm(this.options.confirm_delete_msg)){if(C.data[this.options.id_prop]){C.container._show_splash();C.container._enable_buttons("btn_edit",false);C.container._enable_buttons("btn_del",false);var A=UT_Json.extend({prepare_request:function(E){var D={method:this.options.list.options.del_method_name,data:{}};D.data[this.options.list.options.id_prop]=this.options.el_item.data[this.options.list.options.id_prop];E.push(D)},handle_response:function(D){if(D&&D.method==this.options.list.options.del_method_name){this.options.el_item.container._hide_splash();if(!D.result){this.options.list._del_item(this.options.el_item)}else{this.options.el_item.container._enable_buttons("btn_edit",true);this.options.el_item.container._enable_buttons("btn_del",true)}}}});req=new A({el_item:C,list:this});this.deleting.push(C);req.request()}else{this.parent(C)}}}},_free_item:function(A){this.rem_child(A.container);A.container=null;this.parent(A)},prepare_get:function(A){if(this.method.options.method_name&&A.length){return A[A.length-1]}else{return 0}},handle_get:function(A){if(A&&(!A.result||A.result==4)&&A.method==this.method.options.method_name){this.set_data(A.data)}},cancel_add:function(B,A){this._del_item(A,true)},remove_cancel_handler:function(C,B){var A=B.container.$events.onCancel;if(A){A.splice(0,A.length)}},initialize:function(B){this.parent(B);this.method.options.method_name=B.get_method_name;this.options.confirm_delete_msg=this.options.confirm_delete_msg||gettext("Do you want to delete this item?");this.deleting=new Array();this.options.el_target=$child(this.options.el,"list_target");this.method.add_request_handler(this.prepare_get.bind(this));this.method.add_response_handler("*",this.handle_get.bind(this));var D=$children(this.options.el,"*","id","btn_add");if(D){for(var C=0,A=D.length;C<A;C++){var E=D[C];E.addEvent("click",function(G){new Event(G).stop();var F=this._add_item();F.container.addEvent("onCancel",this.cancel_add.bindAsEventListener(this,[F]));F.container.addEvent("onSaved",this.remove_cancel_handler.bindAsEventListener(this,[F]));F.container.edit()}.bindAsEventListener(this))}}}});var UT_Form={};UT_Form.Base=new Class({submit:function(){if(!this.valid){return false}this.fireEvent("onSubmit");var A=this.options.action||this.element.action;if(!A){return false}this.internal_submit()},getOptions:function(){return{bind:true}},internal_submit:function(){},initialize:function(B,A){this.valid=true;this.element=$(B);if(!this.element||this.element.getTag()!="form"){this.valid=false;return }this.setOptions(this.getOptions(),A);if(this.options.bind){this.element.addEvent("submit",function(C){C.preventDefault();this.submit();return false}.bindWithEvent(this))}return this}});UT_Form.Base.implement(new Options,new Events);UT_Form.Upload=UT_Form.Base.extend({async_post:function(){var L=function(O){var N="ajaxSubmit"+(O.name||O.id);var P=null;if(window.ActiveXObject){P=$(document.createElement('<iframe id="'+N+'" name="'+N+'" />'));P.src="javascript:false"}else{P=new Element("iframe").setProperties({id:N,name:N})}P.setStyles({position:"absolute",top:"-1000px",left:"-1000px"});document.body.appendChild(P);return P};var E=function(){var O={};var P=true;try{O.responseText=G.contentWindow.document.body?$(G.contentWindow.document.body).getText():null}catch(N){P=false}P=P&&this.handle_json(O.responseText);if(P){this.fireEvent("onSuccess",O)}else{this.fireEvent("onFailure",O)}this.fireEvent("onComplete",O);G.removeEvent("load",E);G.remove.delay(100,G)}.bind(this);var J=this.element.toQueryString();var K="";if(this.options.appendData){switch($type(this.options.appendData)){case"element":K=$(this.options.appendData).toQueryString();break;case"object":K=Object.toQueryString(this.options.appendData)}}if(this.element.getElements("input[type=file]").length==0){var A=(this.method||"get");J=(J.length==0)?K:((K.length>0)?J+"&"+K:J);var M=$merge({method:A},this.options);if(A=="get"&&J.length>0){if(action.test(/\?/)){action+=(action.test(/\?$/)?"":"&")+J}else{action+="?"+J}}var H=new Ajax(action,M);H.events=this.events;H.request(J);return }if(this.element.encoding){this.element.encoding="multipart/form-data"}else{this.element.enctype="multipart/form-data"}var D=new Array();if(K.length>0){var B=K.split("&");for(i=0;i<B.length;i++){var C=B[i].indexOf("=");if(C!=-1){D[i]=$(new Element("input"));D[i].type="hidden";D[i].name=B[i].substring(0,C);D[i].value=B[i].substring(C+1);D[i].injectInside(this.element)}}}var G=L(this.element);var I=this.method||"post";var F=this.target||"";this.element.method="post";this.element.target=G.id;G.addEvent("load",E);this.element.action=this.element.action||$page.options.json_url;this.element.submit();for(i=0;i<D.length;i++){if(D[i].remove){D[i].remove()}else{D[i]=null}}this.element.method=I;this.element.target=F},prepare_request:function(C){var B=this.options.upload_input;if($type(B)=="string"){var A=this.element.getElements("input[name="+B+"]");if(!A.length){return this}B=A[0]}C.push({method:"upload",data:{type:this.options.upload_type,param:B.name}})},handle_response:function(A){if(A.method=="upload"){this.fireEvent("onJSON",A)}},handle_json:function(A){var B=0;try{B=Json.evaluate(A)}catch(C){}if(B){B.each(function(D){this.handle_response(D);$page.handle_response(D)},this);return 1}else{return 0}},internal_submit:function(){if(this.element){var A=false;var C=0;var D=$children(this.element,"input","name","json");if(!D.length){C=$(new Element("input",{type:"hidden",name:"json"}).injectInside(this.element));A=true}else{C=D[0]}D=new Array();$page.prepare_request(D);this.prepare_request(D);var B=C.value;C.value=Json.toString(D);this.async_post();if(A&&C.remove){C.remove()}}},initialize:function(B,A){if(!A){A={}}if(!A.upload_input){A.upload_input="upload"}if(!A.upload_type){A.upload_type="logo"}this.parent(B,A)}});UT_Form.Upload.implement(new Options,new Events);