
(function(){if("".replace(/^/,String)){var default_replace=String.prototype.replace;String.prototype.replace=function(search,replace){if(typeof replace!="function"){return default_replace.apply(this,arguments)}
var str=""+this;var callback=replace;if(!(search instanceof RegExp)){var idx=str.indexOf(search);return idx==-1?str:default_replace.apply(str,[search,callback(search,idx,str)])}
var reg=search;var result=[];var lastidx=reg.lastIndex;var re;while((re=reg.exec(str))!=null){var idx=re.index;var args=re.concat(idx,str);result.push(str.slice(lastidx,idx),callback.apply(null,args).toString());if(!reg.global){lastidx+=RegExp.lastMatch.length;break}else{lastidx=reg.lastIndex;}}
result.push(str.slice(lastidx));return result.join("")}}
var camelizeCSSProperty=function(property){return property.replace(/\-([a-z])/g,function(str){return str.charAt(1).toUpperCase();});};if(typeof window.addEventListener=='undefined'){window.addEventListener=function(eventType,callback,dummy){window.attachEvent('on'+eventType,function(){var e=window.event;e.target=e.srcElement;e.preventDefault=function(){this.returnValue=false;}
callback(e);});}
document.addEventListener=function(eventType,callback,dummy){document.attachEvent('on'+eventType,function(){var e=window.event;e.target=e.srcElement;e.preventDefault=function(){this.returnValue=false;}
callback(e);});}}
window.addMainListener=function(eventType,callback){if(document.all){document.addEventListener(eventType,callback,null);}else{window.addEventListener(eventType,callback,true);}}
if(typeof window.getComputedStyle=='undefined'){window.getComputedStyle=function(element,pseudoclass){return new function(){this.getPropertyValue=function(property){return element.currentStyle[camelizeCSSProperty(property)];}}}}})();
Logi={Net:{},UI:{},DOM:{},Data:{}};(function(){var func_toString=function(){return"[Delegate : function = "+method+", this = "+thisObject;};Delegate=function(thisObject,method){if(typeof method=='function'){var func=function(){return method.apply(thisObject,arguments);}}else{var func=function(){return thisObject[method].apply(thisObject,arguments);}}
func.toString=func_toString;return func;}
DelegateIterate=function(thisObject,objectList){if(typeof objectList=='function'){objectList=Delegate(objectList);}else if(objectList instanceof Array){for(var i=0;i<objectList.length;i++){objectList[i]=Delegate(thisObject,objectList[i]);}}else{for(var i in objectList){objectList[i]=Delegate(thisObject,objectList[i]);}}
return objectList;}
var browsers={opera:'opera',safari:'webkit',gecko:'gecko',ie:'msie'}
var br;var uag=navigator.userAgent.toLowerCase();for(var b in browsers){if(uag.indexOf(b)>-1)br=browsers[b];}
var ver=null;if(br==browsers.ie){ver=parseFloat(navigator.appVersion.match(/MSIE\s*(\d+(\.\d+)?)/)[1]);}
Logi.Browser={name:br,version:ver};})();Logi.emptyFunction=function(){}
Logi.abstractFunction=function(message){var fn=function(){throw new Error(message);}
fn.isAbstract=true;return fn;}
Logi.clone=function(obj){if(obj instanceof Array){var cloned=[];for(var i=0;i<obj.length;i++){cloned[i]=obj[i];}}else{var cloned={};for(var i in obj){cloned[i]=obj[i];}}
return cloned;}
Logi.each=function(array,callback,context){if(typeof context!='undefined'){if(array instanceof Array||(array.length&&typeof array.length=='number')){for(var i=0;i<array.length;i++){callback.call(context,array[i],i);}}else{for(var i in array){callback.call(context,array[i],i);}}}else{if(array instanceof Array||(array.length&&typeof array.length=='number')){for(var i=0;i<array.length;i++){callback(array[i],i);}}else{for(var i in array){callback(array[i],i);}}}}
if(typeof window.console!='undefined'&&typeof window.console.log=='function'){Logi.log=function(){console.log.apply(console,arguments);};}else{Logi.log=Logi.emptyFunction;}
Logi.quickAccess=function(shortHand,namespace,level){level=level||2;if(Logi_quickAccess>=level){window[shortHand]=namespace;}}
Logi.Callback={Modifier:function(modifier,callback){return function(response){var result=modifier(response);if(typeof callback=='function'){callback(result);}else{return result;}};},Helper:function(callback,preModifier,postModifier){var postM=Logi.Callback.Modifier(postModifier,callback);if(typeof callback=='function'){preModifier(postM);}else{return postM(preModifier());}}};Logi.Language={term:function(term){return term;},terms:{}};
(function(){var parser=function(term,params){var args=params[1];return term.replace(/\{(\d+)\}/g,function(n1,n2,n3,n4){if(args.length>n2){return args[n2];}
throw new Error("Illegal term");});};Logi.Language.set=function(languageFile){var script=Logi.DOM.Element.create('script',{type:'text/javascript',src:languageFile});document.body.appendChild(script);}
Logi.Language.term=function(term){return parser(Logi.Language.terms[term]||term,arguments);}})();Logi.quickAccess('lang',Logi.Language.term);
(function(){var callerSupported=(function(){return typeof arguments.callee.caller=='function';})();var detectCaller=function(cls,caller,realParent){for(var i=cls.__proptable.length-1;i>=0;i--){var o=cls.__proptable[i];for(var prop in o[1]){if(o[1][prop]==caller){par=undefined;for(var j=i-1;realParent&&j>=0;j--){var po=cls.__proptable[j];if(po[1][prop]!=caller){break;}}
if(j>=0)par=cls.__proptable[j][1];return{caller:prop,callerClass:o[0],callerParent:par};}}}};var detectClass=function(cls,dClass){for(var i=0;i<cls.__proptable.length;i++){var o=cls.__proptable[i];if(o[0]==dClass)return o[1];}};var baseClass=function(){this.__construct.apply(this,arguments);};baseClass.prototype.__proptable=[];baseClass.prototype.__construct=function(){};baseClass.prototype.__callBaseMethod=function(){return detectClass(this,arguments[0])[arguments[1]].apply(this,Array.prototype.slice.apply(arguments,[2]));};if(callerSupported){baseClass.prototype.__callBase=function(){var info=detectCaller(this,arguments.callee.caller);return detectClass(this,arguments[0])[info.caller].apply(this,Array.prototype.slice.apply(arguments,[1]));};baseClass.prototype.__callParentMethod=function(){var info=detectCaller(this,arguments.callee.caller);return info.callerParent[arguments[0]].apply(this,Array.prototype.slice.apply(arguments,[1]));};baseClass.prototype.__callParent=function(){var info=detectCaller(this,arguments.callee.caller,true);return info.callerParent[info.caller].apply(this,arguments);};}else{baseClass.prototype.__callBase=function(){var info=detectCaller(this,this.__caller);return detectClass(this,arguments[0])[info.caller].apply(this,Array.prototype.slice.apply(arguments,[1]));};baseClass.prototype.__callParentMethod=function(){var info=detectCaller(this,this.__caller);return info.callerParent[arguments[0]].apply(this,Array.prototype.slice.apply(arguments,[1]));};baseClass.prototype.__callParent=function(){var info=detectCaller(this,this.__caller,true);return info.callerParent[info.caller].apply(this,arguments);};}
Class=function(properties,base){base=base||baseClass;var cls=function(){this.__construct.apply(this,arguments);};for(var property in base.prototype){cls.prototype[property]=base.prototype[property];}
cls.prototype.__parent=base;if(callerSupported){for(var property in properties){cls.prototype[property]=properties[property];}}else{var functionWrapper=function(prop,property){return function(){this.__caller=arguments.callee;return prop.apply(this,arguments);};};for(var property in properties){var prop=properties[property];if(typeof prop=='function'){cls.prototype[property]=functionWrapper(prop,property);}else{cls.prototype[property]=prop;}}}
var pt=[];var ppt=base.prototype.__proptable;for(var i=0;i<ppt.length;i++)pt.push(ppt[i]);pt.push([cls,cls.prototype]);cls.prototype.__proptable=pt;return cls;};})();
Logi.Object={copyTo:function(fromObject,toObject){for(var i in fromObject){toObject[i]=fromObject[i];}},merge:function(){var result={};for(var i=0;i<arguments.length;i++){var fromObject=arguments[i];for(var j in fromObject){result[j]=fromObject[j];}}
return result;},join:function(object,separator){separator=separator||',';return Logi.Object.toArray(object).join(separator);},toArray:function(object){var arr=[];for(var prop in object){arr.push(object[prop]);}
return arr;}};Logi.String={repeat:function(string,times){var result=[];for(var i=0;i<times;i++){result.push(string);}
return result.join('');},trim:function(string){return string.replace(/(^\s+|\s+$)/g,'');}};Logi.Date={fromString:function(dateString,separator,order,strict){var t=dateString.split(separator);var dateInfo={};for(var i=0;i<order.length;i++){dateInfo[order[i]]=parseInt(t[i],10);}
return Logi.Date.fromObject(dateInfo,strict);},fromObject:function(dateInfo,strict){var d=new Date();d.setFullYear(dateInfo.y);d.setMonth(dateInfo.m-1);d.setDate(dateInfo.d);d.setHours(dateInfo.h||0);d.setMinutes(dateInfo.i||0);d.setSeconds(dateInfo.s||0);if(strict){if(d.getFullYear()!=dateInfo.y||d.getMonth()!=dateInfo.m-1||d.getDate()!=dateInfo.d){return false;}}
return d;},parse:function(dateString,regExp,order,strict){var t=dateString.match(regExp);var dateInfo={};for(var i=0;i<order.length;i++){if(order[i]){dateInfo[order[i]]=parseInt(t[i],10);}}
return Logi.Date.fromObject(dateInfo,strict);},dateCompare:function(date1,date2){if(date1.getFullYear()>date2.getFullYear())return 1;if(date1.getFullYear()<date2.getFullYear())return-1;if(date1.getMonth()>date2.getMonth())return 1;if(date1.getMonth()<date2.getMonth())return-1;if(date1.getDate()>date2.getDate())return 1;if(date1.getDate()<date2.getDate())return-1;return 0;},dateTimeCompare:function(date1,date2){var dateCompare=Logi.Date.dateCompare(date1,date2);if(dateCompare!=0)return dateCompare;if(date1.getHours()>date2.getHours())return 1;if(date1.getHours()<date2.getHours())return-1;if(date1.getMinutes()>date2.getMinutes())return 1;if(date1.getMinutes()<date2.getMinutes())return-1;if(date1.getSeconds()>date2.getSeconds())return 1;if(date1.getSeconds()<date2.getSeconds())return-1;return 0;}};Logi.Number={format:function(value,decimalDigits,decimalSeparator,hundredsSeparator){if(decimalDigits<0)decimalDigits=0;decimalSeparator=decimalSeparator||'.';hundredsSeparator=String(hundredsSeparator||'');if(value!=0){for(var i=0;i<decimalDigits;i++){value*=10;};value=String(Math.round(value));}else{for(var i=0;i<decimalDigits;i++){value=String(value)+'0';};}
var sep=value.length-decimalDigits;var int_part=value.substr(0,sep);var decimal_part=value.substr(sep);if(hundredsSeparator.length>0&&int_part.length>3){int_part=int_part.substr(0,int_part.length-3)+
hundredsSeparator+int_part.substr(int_part.length-3);}
return int_part+decimalSeparator+decimal_part;}};
Logi.Data.Validation={}
Logi.Data.Validation.RE={required:/\S+/,url:/(ftp|http|https):\/\/([_a-z\d\-]+(\.[_a-z\d\-]+)+)(([_a-z\d\-\\\.\/]+[_a-z\d\-\\\/])+)*/i,email:/\b([_a-z0-9-]+(\.[_a-z0-9-]+)*)@([_a-z0-9-]+(\.[_a-z0-9-]+)*)\.([a-z]{2,3})\b/,'float':/^\-?\d+([\.\,]\d+)?$/,natural:/^\d+$/,integer:/^\-?\d+$/,percent:/^(\d{1,2}||100)$/,float_positive:/^\d+([\.\,]\d+)?$/,float_percent:/^(\d{1,2}([\.\,]\d+)?||100)$/,bg_postal_code:/^[1-9]\d{3}$/,dmY_date:/\d{2}\.\d{2}\.\d{4}/};Logi.Data.Validation.errorMessages={required:'Field {0} should have a value',integer:'Field {0} should be a number',natural:'Field {0} should be a non-negative number',float:'Field {0} should be a number',email:'Field {0} is not a valid email',percent:'Field {0} should be a percent (0-100)',dmY_date:'Field {0} should be a date',float_percent:'Field {0} should be a percent (0-100)'};Logi.Data.Validation.simpleMapping={required:'required',valid_url:'url',valid_email:'email',valid_float:'float',valid_natural:'natural',valid_integer:'integer',valid_percent:'percent',valid_float_percent:'float_percent',valid_dmY_date:'dmY_date'};Logi.Data.Validation.checkRE=function(value,validation,empty){if(empty&&value.length==0)return true;return value.match(Logi.Data.Validation.RE[validation]);};Logi.Data.Validation.isValidDate=function(date,separator,order){return Logi.Date.fromString(date,separator,order,true)&&true;};Logi.Data.Validation.Manager=new Class({errorMessages:undefined,classMapping:undefined,handler:undefined,invalidStates:undefined,form:undefined,__construct:function(form,handler,classMapping,errorMessages){this.classMapping=classMapping||Logi.Data.Validation.simpleMapping;this.errorMessages=errorMessages||Logi.Data.Validation.errorMessages;this.invalidStates={};this.handler=handler;this.form=cn(form);this.hasClass=Logi.DOM.Element.hasClass;this.form.addEventListener('keyup',Delegate(this,'keyupHandler'),true);this.form.addEventListener('change',Delegate(this,'changeHandler'),true);},keyupHandler:function(event){if(event.target&&event.target.id){this.manageUpdate(event.target,'keyup');}},changeHandler:function(event){if(event.target&&event.target.id){switch(event.target.nodeName.toUpperCase()){case'SELECT':this.manageUpdate(event.target,'change');break;}}},createErrorMessage:function(field,validationType){var correspondingLabel=false;if(field.id){correspondingLabel=css_query("label[for="+field.id+"]",field.parentNode.parentNode);correspondingLabel=correspondingLabel&&correspondingLabel[0];if(correspondingLabel){correspondingLabel=correspondingLabel.innerHTML;}}
return Logi.Language.term(this.errorMessages[validationType],[field.title||correspondingLabel||field.name]);},manageUpdate:function(element,event){var invalidStates=[];for(var className in this.classMapping){var validationType=this.classMapping[className];if(this.hasClass(element,className)&&!Logi.Data.Validation.checkRE(element.value,validationType,validationType!='required')){invalidStates.push(this.createErrorMessage(element,validationType));}}
if(event!='validate'){this.handler(element,invalidStates);}
this.invalidStates[element.id]=invalidStates;return invalidStates;},autoValidate:function(showErrors){var els=this.form.elements;var allErrors=[];var allFields=[];var validateMessage=showErrors?'validate':'check';for(var i=0;i<els.length;i++){var el=els[i];if(el.name&&!el.disabled){var errors=this.manageUpdate(el,validateMessage);if(errors.length>0){allFields.push(el);for(var j=0;j<errors.length;j++){allErrors.push(errors[j]);}}}}
if(allErrors.length){throw{element:allFields,message:showErrors?allErrors.join('<br/>'):Logi.Language.term('Required value missing'),ghost:!showErrors};}}});Logi.Data.Validation.Manager.cssClassChanger=function(className){return function(element,invalidStates){Logi.DOM.Element[invalidStates.length>0?'addClass':'removeClass'](element,className);};};Logi.quickAccess('validateRE',Logi.Data.Validation.checkRE);
Logi.Data.Form={serialize:function(form){var s=new Logi.Data.Form.Serializer(form);s.serialize();return s.data;},defaultSerializer:function(el){return[[el.name,el.value]];},checkSerializer:function(el){if(el.checked)return[[el.name,el.value?el.value:'on']];return[];},emptySerializer:function(el){return[];},varToFormArray:function(value){var result=[];var parseValue=function(prefix,cValue){switch(typeof cValue){case'object':if(!cValue)return;if(cValue instanceof Array){var len=cValue.length;for(var i=0;i<len;i++){parseValue(prefix+'['+i+']',cValue[i]);}}else{for(var i in cValue){parseValue(prefix+'['+i+']',cValue[i]);}}
break;default:result.push({name:prefix,value:cValue});}};if(value)for(var k in value){parseValue(k,value[k]);}
return result;},formFromArray:function(data,form){if(!form){form=document.createElement('FORM');}
var innerHTML=[];var dLength=data.length;for(var i=0;i<dLength;i++){innerHTML.push('<input type="hidden" name="'+data[i].name+'" value="'+data[i].value.replace(/"/g,'&quot;')+'"/>');}
form.innerHTML=innerHTML.join('');return form;}};(function(){var submitChain=new Class({__construct:function(){this.uploadForms=[];},submitUploadForm:function(formRef,callback){this.uploadForms.push({formRef:formRef,callback:callback});this.checkUploadForms();},checkUploadForms:function(){if(this.uploadForms.length>0){var cform=this.uploadForms.shift();this.currentUploadFormCallback=cform.callback;$el(cform.formRef).submit();}},uploadReady:function(response){this.currentUploadFormCallback(response);this.checkUploadForms();}});Logi.Data.Form.SubmitChain=new submitChain();})();(function(){var frm=Logi.Data.Form;frm.Serializer=new Class({__construct:function(form){this.form=Logi.DOM.Element.get(form);this.data={};this.getMaxIndex=function(arr){var maxIndex=-1;for(var i in arr){if(String(parseInt(i))==i)maxIndex=parseInt(i);}
return maxIndex;}},add:function(pairs){for(var i=0;i<pairs.length;i++){var fName=pairs[i][0];var bracket=fName.indexOf('[');if(bracket==-1){this.data[fName]=pairs[i][1];return;}
var brackets=fName.substring(bracket+1,fName.length-1).split('][');brackets.unshift(fName.substr(0,bracket));var cParent=this.data;for(var j=0;j<brackets.length;j++){var brIndex=brackets[j];if(!brIndex)brIndex=this.getMaxIndex(cParent)+1;if(typeof cParent[brIndex]!='object')cParent[brIndex]={};lParent=cParent;cParent=cParent[brIndex];}
lParent[brIndex]=pairs[i][1];}},getSerializer:function(element){var s=element.nodeName.toLowerCase();if(s=='input')s+='_'+element.type;return s;},serialize:function(){elements=this.form.elements;for(var i=0;i<elements.length;i++){var el=elements[i];if(el.name&&!el.disabled)this.add(this.serializers[this.getSerializer(el)](el));}},serializers:{input_text:frm.defaultSerializer,input_password:frm.defaultSerializer,input_file:frm.defaultSerializer,input_hidden:frm.defaultSerializer,textarea:frm.defaultSerializer,input_submit:frm.emptySerializer,input_button:frm.emptySerializer,input_image:frm.emptySerializer,button:frm.emptySerializer,input_radio:frm.checkSerializer,input_checkbox:frm.checkSerializer,select:function(el){if(el.multiple){var ret=[];for(var i=0;i<el.options.length;i++){if(el.options[i].selected)ret.push([el.name,el.options[i].value]);}
return ret;}else return[[el.name,el.value]];}}});})();Logi.quickAccess('$fs',Logi.Data.Form.serialize);
Logi.DOM.Event={addMainListener:function(eventType,callback){if(document.all){document.addEventListener(eventType,callback,null);}else{window.addEventListener(eventType,callback,true);}},preventDefaultCallback:function(event){event.preventDefault();},compatEvent:function(event){var e=event||window.event;if(!e.target)e.target=e.srcElement;if(typeof e.preventDefault!='function'){e.preventDefault=function(){this.returnValue=false;};}
if(typeof e.stopPropagation!='function'){e.stopPropagation=function(){this.cancelBubble=true;};}
return e;},simulateMouseClick:function(node){try{var evt=document.createEvent("MouseEvents");evt.initMouseEvent("click",true,true,window,0,0,0,0,0,false,false,false,false,0,null);node.dispatchEvent(evt);}catch(e){node.fireEvent('onclick');}},simulateFireEvent:function(node,eventType){try{var evt=document.createEvent("MouseEvents");evt.initEvent(eventType,true,true);return!node.dispatchEvent(evt);}catch(e){return node.fireEvent('on'+eventType,document.createEventObject());}},simulateKeyPress:function(keyCode){var evt=document.createEvent("KeyboardEvent");evt.initKeyEvent("keypress",true,true,window,0,0,0,0,0,keyCode);document.dispatchEvent(evt);}};(function(){var isLoaded=false;var safariTimer=undefined;var callbacks=[];var onLoad=function(){if(isLoaded)return;isLoaded=true;if(typeof safariTimer!='undefined')clearInterval(safariTimer);if(Logi.Browser.name=='gecko'||Logi.Browser.name=='opera'){document.removeEventListener("DOMContentLoaded",onLoad,true);}
for(var i=0;i<callbacks.length;i++){callbacks[i]();}
callbacks=null;};Logi.DOM.Event.onload=function(callback){callbacks.push(callback);};if(Logi.Browser.name=='gecko'||Logi.Browser.name=='opera'){document.addEventListener("DOMContentLoaded",onLoad,true);}else if(Logi.Browser.name=='msie'){document.write('<scr'+'ipt id="logi_event_onload_defer" defer="defer" src="/'+'/:"></scr'+"ipt>");var script=document.getElementById('logi_event_onload_defer');script.attachEvent('onreadystatechange',function(){if(script.readyState=="complete")onLoad();});}else{safariTimer=setInterval(function(){var state=document.readyState;if(state=="loaded"||state=="complete")onLoad();},10);}
window.onload=onLoad;})();Logi.quickAccess('$onload',Logi.DOM.Event.onload);
Logi.DOM.Element={mass:function(action,elements){var m=Logi.DOM.Element[action];Logi.each(elements,function(element){m(element);});},compatNode:function(nodeRef){var node=Logi.DOM.Element.get(nodeRef);if(!node){throw"compatNode failed: Invalid node provided: "+nodeRef;}
if(typeof node.addEventListener=='undefined')node.addEventListener=function(eventType,callback,dummy){node.attachEvent('on'+eventType,function(){callback(Logi.DOM.Event.compatEvent());});};return node;},focus:function(element,selectValue){setTimeout(function(){try{var el=Logi.DOM.Element.get(element);el.focus();if(selectValue){el.select();}}catch(e){}},100);},isVisible:function(element){element=Logi.DOM.Element.get(element);return getComputedStyle(element,null).getPropertyValue('display')!='none';},toggle:function(element){element=Logi.DOM.Element.get(element);if(Logi.DOM.Element.isVisible(element)){element.style.display='none';return false;}else{var dmode='block';if(element.nodeName=='TR'){dmode='table-row';}
if(element.nodeName=='TD'){dmode='table-cell';}
element.style.display=dmode;return true;}},hide:function(element){element=Logi.DOM.Element.get(element);element.style.display='none';},unhide:function(element){element=Logi.DOM.Element.get(element);element.style.display='';},show:function(element,dmode){element=Logi.DOM.Element.get(element);dmode=dmode||'block';if(element.nodeName=='TR'){dmode='table-row';}
if(element.nodeName=='TD'){dmode='table-cell';}
element.style.display=dmode;},toggleClass:function(element,className){element=Logi.DOM.Element.get(element);var state=!Logi.DOM.Element.hasClass(element,className);Logi.DOM.Element.expressionClass(element,className,state);return state;},expressionClass:function(element,className,expression){element=Logi.DOM.Element.get(element);Logi.DOM.Element[expression?'addClass':'removeClass'](element,className);},hasClass:function(element,className){element=Logi.DOM.Element.get(element);var re=new RegExp('(?:^|\\s+)'+className+'(?:\\s+|$)');return re.test(element.className||'');},addClass:function(element,className){element=Logi.DOM.Element.get(element);if(Logi.DOM.Element.hasClass(element,className))return;element.className=element.className&&element.className.length?element.className+' '+className:className;},removeClass:function(element,className){element=Logi.DOM.Element.get(element);if(!Logi.DOM.Element.hasClass(element,className))return;element.className=element.className.replace(new RegExp('(^'+className+'( |$)| '+className+'\\b)'),'');},insertAfter:function(newNode,refNode){if(refNode.nextSibling){return refNode.parentNode.insertBefore(newNode,refNode.nextSibling);}else{return refNode.parentNode.appendChild(newNode);}},next:function(element){var e=element;do{e=e.nextSibling;if(!e)return;if(e.nodeType==1){return e;}}while(1);},previous:function(element){var e=element;do{e=e.previousSibling;if(!e)return;if(e.nodeType==1){return e;}}while(1);},get:function(elementRef){return typeof elementRef=='string'?document.getElementById(elementRef):elementRef;},getText:function(element){element=Logi.DOM.Element.get(element);ecl=element.childNodes.length;for(var i=0;i<ecl;i++){var c=element.childNodes[i];if(c.nodeType==3){var content=c.textContent||c.data;if(!content.match(/(^\s+$)/)){return content;}}}
return'';},getPosition:function(element,relatedElement){relatedElement=relatedElement||document.body;var posX=0,posY=0;var n=element;while(n&&n!=relatedElement){posX+=n.offsetLeft;posY+=n.offsetTop;n=n.offsetParent;}
return{x:posX,y:posY};},fillCombo:function(combo,data,leaveFirst){combo.options.length=leaveFirst?1:0;for(var id in data){combo.options.add(new Option(data[id],id));}},camelizeCSSProperty:function(property){return property.replace(/\-([a-z])/g,function(str){return str.charAt(1).toUpperCase()});},setAttributes:function(element,attributes){attributes=attributes||{};for(var i in attributes){if(i=='className'){element.className=attributes[i];}else if(i=='style'){for(var j in attributes[i]){element.style[Logi.DOM.Element.camelizeCSSProperty(j)]=attributes[i][j];}}else{element.setAttribute(i,attributes[i]);}}},addChildren:function(element,children){children=children||[];Logi.each(children,function(child){if(typeof child=='function'){child(element);}
if(typeof child=='string'||typeof child=='number'){child=document.createTextNode(child);}
try{element.appendChild(child);}catch(e){}});},setContent:function(container,contents){container.innerHTML='';if(typeof(contents)=='undefined')return;if(typeof(contents)=='string'||typeof(contents)=='number'){container.innerHTML=contents;return;}
if(typeof(contents)=='function'){contents(container);return;}
if(!(contents instanceof Array))contents=[contents];Logi.each(contents,function(content){container.appendChild(content);});},create:function(tag,attributes,children,parentNode){if(typeof children!='undefined'&&!(children instanceof Array))children=[children];var el=document.createElement(tag.toUpperCase());this.setAttributes(el,attributes);this.addChildren(el,children);if(typeof parentNode!='undefined'&&parentNode!==null){parentNode.appendChild(el);}
return el;},createSpecial:{select:{}}};Logi.DOM.HTML={escape:function(html){return String(html).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;");},unescape:function(html){var temp=document.createElement('DIV');temp.innerHTML=str;return temp.firstChild.nodeValue;}};Logi.quickAccess('dom',Logi.DOM.Element);Logi.quickAccess('cn',Logi.DOM.Element.compatNode);Logi.quickAccess('$el',Logi.DOM.Element.get);
(function(){var Ext={};Ext.fly=function(element){return{getStyle:function(style){return window.getComputedStyle(element,null).getPropertyValue(style);}};}
Ext.DomQuery=function(){var cache={},simpleCache={},valueCache={};var nonSpace=/\S/;var trimRe=/^\s*(.*?)\s*$/;var tplRe=/\{(\d+)\}/g;var modeRe=/^(\s?[\/>]\s?|\s|$)/;var tagTokenRe=/^(#)?([\w-\*]+)/;function child(p,index){var i=0;var n=p.firstChild;while(n){if(n.nodeType==1){if(++i==index){return n;}}
n=n.nextSibling;}
return null;};function next(n){while((n=n.nextSibling)&&n.nodeType!=1);return n;};function prev(n){while((n=n.previousSibling)&&n.nodeType!=1);return n;};function clean(d){var n=d.firstChild,ni=-1;while(n){var nx=n.nextSibling;if(n.nodeType==3&&!nonSpace.test(n.nodeValue)){d.removeChild(n);}else{n.nodeIndex=++ni;}
n=nx;}
return this;};function byClassName(c,a,v,re,cn){if(!v){return c;}
var r=[];for(var i=0,ci;ci=c[i];i++){cn=ci.className;if(cn&&(' '+cn+' ').indexOf(v)!=-1){r[r.length]=ci;}}
return r;};function attrValue(n,attr){if(!n.tagName&&typeof n.length!="undefined"){n=n[0];}
if(!n){return null;}
if(attr=="for"){return n.htmlFor;}
if(attr=="class"||attr=="className"){return n.className;}
return n.getAttribute(attr)||n[attr];};function getNodes(ns,mode,tagName){var result=[],cs;if(!ns){return result;}
mode=mode?mode.replace(trimRe,"$1"):"";tagName=tagName||"*";if(typeof ns.getElementsByTagName!="undefined"){ns=[ns];}
if(mode!="/"&&mode!=">"){for(var i=0,ni;ni=ns[i];i++){cs=ni.getElementsByTagName(tagName);for(var j=0,ci;ci=cs[j];j++){result[result.length]=ci;}}}else{for(var i=0,ni;ni=ns[i];i++){var cn=ni.getElementsByTagName(tagName);for(var j=0,cj;cj=cn[j];j++){if(cj.parentNode==ni){result[result.length]=cj;}}}}
return result;};function concat(a,b){if(b.slice){return a.concat(b);}
for(var i=0,l=b.length;i<l;i++){a[a.length]=b[i];}
return a;}
function byTag(cs,tagName){if(cs.tagName||cs==document){cs=[cs];}
if(!tagName){return cs;}
var r=[];tagName=tagName.toLowerCase();for(var i=0,ci;ci=cs[i];i++){if(ci.nodeType==1&&ci.tagName.toLowerCase()==tagName){r[r.length]=ci;}}
return r;};function byId(cs,attr,id){if(cs.tagName||cs==document){cs=[cs];}
if(!id){return cs;}
var r=[];for(var i=0,ci;ci=cs[i];i++){if(ci&&ci.id==id){r[r.length]=ci;return r;}}
return r;};function byAttribute(cs,attr,value,op,custom){var r=[],st=custom=="{";var f=Ext.DomQuery.operators[op];for(var i=0;ci=cs[i];i++){var a;if(st){a=Ext.DomQuery.getStyle(ci,attr);}
else if(attr=="class"||attr=="className"){a=ci.className;}else if(attr=="for"){a=ci.htmlFor;}else if(attr=="href"){a=ci.getAttribute("href",2);}else{a=ci.getAttribute(attr);}
if((f&&f(a,value))||(!f&&a)){r[r.length]=ci;}}
return r;};function byPseudo(cs,name,value){return Ext.DomQuery.pseudos[name](cs,value);};var isIE=window.ActiveXObject?true:false;var key=30803;function nodupIEXml(cs){var d=++key;cs[0].setAttribute("_nodup",d);var r=[cs[0]];for(var i=1,len=cs.length;i<len;i++){var c=cs[i];if(!c.getAttribute("_nodup")!=d){c.setAttribute("_nodup",d);r[r.length]=c;}}
for(var i=0,len=cs.length;i<len;i++){cs[i].removeAttribute("_nodup");}
return r;}
function nodup(cs){var len=cs.length,c,i,r=cs,cj;if(!len||typeof cs.nodeType!="undefined"||len==1){return cs;}
if(isIE&&typeof cs[0].selectSingleNode!="undefined"){return nodupIEXml(cs);}
var d=++key;cs[0]._nodup=d;for(i=1;c=cs[i];i++){if(c._nodup!=d){c._nodup=d;}else{r=[];for(var j=0;j<i;j++){r[r.length]=cs[j];}
for(j=i+1;cj=cs[j];j++){if(cj._nodup!=d){cj._nodup=d;r[r.length]=cj;}}
return r;}}
return r;}
function quickDiffIEXml(c1,c2){var d=++key;for(var i=0,len=c1.length;i<len;i++){c1[i].setAttribute("_qdiff",d);}
var r=[];for(var i=0,len=c2.length;i<len;i++){if(c2[i].getAttribute("_qdiff")!=d){r[r.length]=c2[i];}}
for(var i=0,len=c1.length;i<len;i++){c1[i].removeAttribute("_qdiff");}
return r;}
function quickDiff(c1,c2){var len1=c1.length;if(!len1){return c2;}
if(isIE&&c1[0].selectSingleNode){return quickDiffIEXml(c1,c2);}
var d=++key;for(var i=0;i<len1;i++){c1[i]._qdiff=d;}
var r=[];for(var i=0,len=c2.length;i<len;i++){if(c2[i]._qdiff!=d){r[r.length]=c2[i];}}
return r;}
function quickId(ns,mode,root,id){if(ns==root){var d=root.ownerDocument||root;return d.getElementById(id);}
ns=getNodes(ns,mode,"*");return byId(ns,null,id);}
return{getStyle:function(el,name){return Ext.fly(el).getStyle(name);},compile:function(path,type){while(path.substr(0,1)=="/"){path=path.substr(1);}
type=type||"select";var fn=["var f = function(root){\n var mode; var n = root || document;\n"];var q=path,mode,lq;var tk=Ext.DomQuery.matchers;var tklen=tk.length;var mm;while(q&&lq!=q){lq=q;var tm=q.match(tagTokenRe);if(type=="select"){if(tm){if(tm[1]=="#"){fn[fn.length]='n = quickId(n, mode, root, "'+tm[2]+'");';}else{fn[fn.length]='n = getNodes(n, mode, "'+tm[2]+'");';}
q=q.replace(tm[0],"");}else if(q.substr(0,1)!='@'){fn[fn.length]='n = getNodes(n, mode, "*");';}}else{if(tm){if(tm[1]=="#"){fn[fn.length]='n = byId(n, null, "'+tm[2]+'");';}else{fn[fn.length]='n = byTag(n, "'+tm[2]+'");';}
q=q.replace(tm[0],"");}}
while(!(mm=q.match(modeRe))){var matched=false;for(var j=0;j<tklen;j++){var t=tk[j];var m=q.match(t.re);if(m){fn[fn.length]=t.select.replace(tplRe,function(x,i){return m[i];});q=q.replace(m[0],"");matched=true;break;}}
if(!matched){throw'Error parsing selector, parsing failed at "'+q+'"';}}
if(mm[1]){fn[fn.length]='mode="'+mm[1]+'";';q=q.replace(mm[1],"");}}
fn[fn.length]="return nodup(n);\n}";eval(fn.join(""));return f;},select:function(path,root,type){if(!root||root==document){root=document;}
if(typeof root=="string"){root=document.getElementById(root);}
var paths=path.split(",");var results=[];for(var i=0,len=paths.length;i<len;i++){var p=paths[i].replace(trimRe,"$1");if(!cache[p]){cache[p]=Ext.DomQuery.compile(p);if(!cache[p]){throw p+" is not a valid selector";}}
var result=cache[p](root);if(result&&result!=document){results=results.concat(result);}}
return results;},selectNode:function(path,root){return Ext.DomQuery.select(path,root)[0];},selectValue:function(path,root,defaultValue){path=path.replace(trimRe,"$1");if(!valueCache[path]){valueCache[path]=Ext.DomQuery.compile(path,"select");}
var n=valueCache[path](root);n=n[0]?n[0]:n;var v=(n&&n.firstChild?n.firstChild.nodeValue:null);return(v===null?defaultValue:v);},selectNumber:function(path,root,defaultValue){var v=Ext.DomQuery.selectValue(path,root,defaultValue||0);return parseFloat(v);},is:function(el,ss){if(typeof el=="string"){el=document.getElementById(el);}
var isArray=(el instanceof Array);var result=Ext.DomQuery.filter(isArray?el:[el],ss);return isArray?(result.length==el.length):(result.length>0);},filter:function(els,ss,nonMatches){ss=ss.replace(trimRe,"$1");if(!simpleCache[ss]){simpleCache[ss]=Ext.DomQuery.compile(ss,"simple");}
var result=simpleCache[ss](els);return nonMatches?quickDiff(result,els):result;},matchers:[{re:/^\.([\w-]+)/,select:'n = byClassName(n, null, " {1} ");'},{re:/^\:([\w-]+)(?:\(((?:[^\s>\/]*|.*?))\))?/,select:'n = byPseudo(n, "{1}", "{2}");'},{re:/^(?:([\[\{])(?:@)?([\w-]+)\s?(?:(=|.=)\s?['"]?(.*?)["']?)?[\]\}])/,select:'n = byAttribute(n, "{2}", "{4}", "{3}", "{1}");'},{re:/^#([\w-]+)/,select:'n = byId(n, null, "{1}");'},{re:/^@([\w-]+)/,select:'return {firstChild:{nodeValue:attrValue(n, "{1}")}};'}],operators:{"=":function(a,v){return a==v;},"!=":function(a,v){return a!=v;},"^=":function(a,v){return a&&a.substr(0,v.length)==v;},"$=":function(a,v){return a&&a.substr(a.length-v.length)==v;},"*=":function(a,v){return a&&a.indexOf(v)!==-1;},"%=":function(a,v){return(a%v)==0;}},pseudos:{"first-child":function(c){var r=[],n;for(var i=0,ci;ci=n=c[i];i++){while((n=n.previousSibling)&&n.nodeType!=1);if(!n){r[r.length]=ci;}}
return r;},"last-child":function(c){var r=[];for(var i=0,ci;ci=n=c[i];i++){while((n=n.nextSibling)&&n.nodeType!=1);if(!n){r[r.length]=ci;}}
return r;},"nth-child":function(c,a){var r=[];if(a!="odd"&&a!="even"){for(var i=0,ci;ci=c[i];i++){var m=child(ci.parentNode,a);if(m==ci){r[r.length]=m;}}
return r;}
var p;for(var i=0,l=c.length;i<l;i++){var cp=c[i].parentNode;if(cp!=p){clean(cp);p=cp;}}
for(var i=0,ci;ci=c[i];i++){var m=false;if(a=="odd"){m=((ci.nodeIndex+1)%2==1);}else if(a=="even"){m=((ci.nodeIndex+1)%2==0);}
if(m){r[r.length]=ci;}}
return r;},"only-child":function(c){var r=[];for(var i=0,ci;ci=c[i];i++){if(!prev(ci)&&!next(ci)){r[r.length]=ci;}}
return r;},"empty":function(c){var r=[];for(var i=0,ci;ci=c[i];i++){var cns=ci.childNodes,j=0,cn,empty=true;while(cn=cns[j]){++j;if(cn.nodeType==1||cn.nodeType==3){empty=false;break;}}
if(empty){r[r.length]=ci;}}
return r;},"contains":function(c,v){var r=[];for(var i=0,ci;ci=c[i];i++){if(ci.innerHTML.indexOf(v)!==-1){r[r.length]=ci;}}
return r;},"nodeValue":function(c,v){var r=[];for(var i=0,ci;ci=c[i];i++){if(ci.firstChild&&ci.firstChild.nodeValue==v){r[r.length]=ci;}}
return r;},"checked":function(c){var r=[];for(var i=0,ci;ci=c[i];i++){if(ci.checked==true){r[r.length]=ci;}}
return r;},"not":function(c,ss){return Ext.DomQuery.filter(c,ss,true);},"odd":function(c){return this["nth-child"](c,"odd");},"even":function(c){return this["nth-child"](c,"even");},"nth":function(c,a){return c[a-1];},"first":function(c){return c[0];},"last":function(c){return c[c.length-1];},"has":function(c,ss){var s=Ext.DomQuery.select;var r=[];for(var i=0,ci;ci=c[i];i++){if(s(ss,ci).length>0){r[r.length]=ci;}}
return r;},"next":function(c,ss){var is=Ext.DomQuery.is;var r=[];for(var i=0,ci;ci=c[i];i++){var n=next(ci);if(n&&is(n,ss)){r[r.length]=ci;}}
return r;},"prev":function(c,ss){var is=Ext.DomQuery.is;var r=[];for(var i=0,ci;ci=c[i];i++){var n=prev(ci);if(n&&is(n,ss)){r[r.length]=ci;}}
return r;}}};}();Logi.DOM.CSS=Logi.DOM.CSS||{};Logi.DOM.CSS.query=Ext.DomQuery.select;Logi.DOM.CSS.queryOne=function(path,root,type){var result=Logi.DOM.CSS.query(path,root,type);return result&&result[0];};Logi.DOM.CSS.queryEach=function(callback,path,root,type){Logi.each(Logi.DOM.CSS.query(path,root,type),callback);};})();Logi.quickAccess('css_query',Logi.DOM.CSS.query);Logi.quickAccess('css_query_one',Logi.DOM.CSS.queryOne);Logi.quickAccess('css_query_iterate',Logi.DOM.CSS.queryEach);
(function(){Logi.UI.Tabs=new Class({__construct:function(options){options=options||{};options.containerCssClass=options.containerCssClass||'logi_tabs_container';options.tabCssClass=options.tabCssClass||'logi_tabs_tab';options.activeTabCssClass=options.activeTabCssClass||'logi_tabs_activetab';options.tabContainerCssClass=options.tabContainerCssClass||'logi_tabs_tab_container';options.idMappingRule=options.idMappingRule||{button:/\_button$/,content:"_content"};options.propagateClick=options.propagateClick||false;options.clickConfirmator=options.clickConfirmator||Logi.emptyFunction;this.options=options;},resetState:function(tabGroupName){var ac=this.options.activeTabCssClass;Logi.each(this.tabGroups[tabGroupName].containers,function(container){container.style.display='none';});Logi.each(this.tabGroups[tabGroupName].tabs,function(tab){Logi.DOM.Element.removeClass(tab,ac);});},getActiveTab:function(tabGroup){return this.currentTabs[tabGroup];},setActiveTab:function(tab){var tab=this.tabsHash[typeof tab=='string'?tab:tab.id];if(tab){var containerId=tab.id.replace(this.options.idMappingRule.button,this.options.idMappingRule.content);var container=this.containersHash[containerId];if(container){this.resetState(this.tabsGroupsHash[tab.id]);this.currentTabs[this.tabsGroupsHash[tab.id]]=tab;container.style.display='';Logi.DOM.Element.addClass(tab,this.options.activeTabCssClass);}
return true;}
return false;},apply:function(){this.tabGroups={};Logi.log('Tab creation request');Logi.DOM.CSS.queryEach(Delegate(this,'applyFor'),"."+this.options.containerCssClass);},applyFor:function(mainContainer,tabGroupName){Logi.log('Creating tabs for ',mainContainer);var containersHash=this.containersHash=this.containersHash||{};var tabsHash=this.tabsHash=this.tabsHash||{};var tabsGroupsHash=this.tabsGroupsHash=this.tabsGroupsHash||{};var tabGroup={containers:[],tabs:[],tabsHash:{}};this.tabGroups[tabGroupName]=tabGroup;var currentTabs=this.currentTabs=this.currentTabs||{};var ac=this.options.activeTabCssClass;var resetState=Delegate(this,this.resetState);var getActiveTab=Delegate(this,this.getActiveTab);var propagateClick=this.options.propagateClick;var clickConfirmator=this.options.clickConfirmator;var setTabFunction=function(tab,container){return function(event){if(!propagateClick){event.preventDefault();}
if(clickConfirmator(tab,currentTabs[tabGroupName])===false){return;}
resetState(tabGroupName);currentTabs[tabGroupName]=tab;container.style.display='';Logi.DOM.Element.addClass(tab,ac);};};Logi.DOM.CSS.queryEach(function(container){containersHash[container.id]=container;tabGroup.containers.push(container);container.style.display='none';},"."+this.options.tabContainerCssClass,mainContainer);Logi.DOM.CSS.queryEach(Delegate(this,function(tab){tabsHash[tab.id]=tab;tabsGroupsHash[tab.id]=tabGroupName;tabGroup.tabs.push(tab);var containerId=tab.id.replace(this.options.idMappingRule.button,this.options.idMappingRule.content);var container=containersHash[containerId];if(!container){throw new Error("Container with id '"+containerId+"' for tab with id '"+tab.id+"' is missing.");}
if(Logi.DOM.Element.hasClass(tab,this.options.activeTabCssClass)){currentTabs[tabGroupName]=tab;container.style.display='';}
Logi.DOM.Element.compatNode(tab).addEventListener('click',setTabFunction(tab,container),true);}),"."+this.options.tabCssClass,mainContainer);}});})();Logi.UI.Tabs.create=function(options){var tabs=new Logi.UI.Tabs(options);tabs.apply();return tabs;};Logi.quickAccess('tabs_create',Logi.UI.Tabs.create);
if(!window.XMLHttpRequest){window.XMLHttpRequest=function(){var xmlVersions=["MSXML2.XMLHttp.5.0","MSXML2.XMLHttp.4.0","MSXML2.XMLHttp.3.0","MSXML2.XMLHttp","Microsoft.XMLHttp"];for(var i=0;i<xmlVersions.length;i++){try{var x=new ActiveXObject(xmlVersions[i]);return x;}catch(e){}}};}
(function(){var totalPendingRequests=0;var includeCache={};var handlers={activityStart:Logi.emptyFunction,activityStop:Logi.emptyFunction,requestStart:Logi.emptyFunction,requestStop:Logi.emptyFunction};Logi.Net.Ajax={setHandler:function(handler,callback){callback=typeof callback=='function'?callback:Logi.emptyFunction;if(handlers[handler]){var oldHandler=handlers[handler];handlers[handler]=callback;return oldHandler;}},request:function(url,data,callback,method){var request=new Logi.Net.Ajax.Request(url,data,callback,method);return request.doRequest();},includeJS:function(jsPath){if(includeCache[jsPath])return null;try{eval(Logi.Net.Ajax.request(jsPath));includeCache[jsPath]=true;return null;}catch(e){return e;}},Request:new Class({__construct:function(url,data,callback,options){options=options||{};this.method=options.method||'POST';this.skipLoader=options.skipLoader||false;this.timeout=options.timeout||10;this.requestObject=new XMLHttpRequest();if(typeof callback=='function'){this.successCallback=callback;this.errorCallback=false;this.timeoutCallback=false;}else if(typeof callback!='undefined'){this.successCallback=callback.success||false;this.errorCallback=callback.error||false;this.timeoutCallback=callback.timeout||false;}
this.data=data;this.url=url;},tryCallback:function(callback){if(this.requestObject.responseText.indexOf('Access Denied')==0){Logi.UI.MessageBox.show(Logi.Language.term('Access Denied'),Logi.Language.term('Please relogin'),function(){location.reload();},{relogin:Logi.Language.term('relogin')});return false;}
if(callback===false){throw new Error(arguments[1]);}else{callback(arguments[1],arguments[2]);}},removeRequestFromQueue:function(){totalPendingRequests--;handlers.requestStop(this.requestObject);if(totalPendingRequests==0){handlers.activityStop(this.requestObject);}},onReadyStateChange:function(event,isTimeout){if(this.requestObject.readyState==4){this.removeRequestFromQueue();if(isTimeout){this.tryCallback(this.timeoutCallback,'Server timeout');}else if(this.requestObject.status==200){this.tryCallback(this.successCallback,this.requestObject.responseText,this.requestObject.responseXML);}else{this.tryCallback(this.errorCallback,"Server returned status "+this.requestObject.status);}}else{}},doRequest:function(){var async=typeof this.successCallback=='function';this.requestObject.open(this.method,this.url,async);this.requestObject.setRequestHeader("Content-Language","en");this.requestObject.setRequestHeader("Content-Charset","utf-8");this.requestObject.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=utf-8");this.requestObject.setRequestHeader("Accept-Charset","utf-8");var thisref=this;if(async){this.requestObject.onreadystatechange=function(e){thisref.onReadyStateChange.call(thisref,e);};}
this.requestObject.send(this.data);if(totalPendingRequests++==0){if(!this.skipLoader){handlers.activityStart(this.requestObject);}}
handlers.requestStart(this.requestObject);if(!async){this.removeRequestFromQueue();return this.requestObject.responseText;}}})};})();var Iframe={iframe:undefined,submit:function(form,callback){var ifr=new Iframe.Fallback(form,callback);ifr.submit();},Fallback:new Class({__construct:function(form,callback){this.form=form;this.callback=callback;if(Iframe.iframe===undefined){Iframe.iframe=document.getElementById('iframe');}},submit:function(){this.form.submit();this.interval=setInterval(Delegate(this,function(){if(Iframe.iframe.contentWindow&&Iframe.iframe.contentWindow.isLoaded){Iframe.iframe.contentWindow.isLoaded=false;clearInterval(this.interval);this.callback(Iframe.iframe.contentWindow.randomId,Iframe.iframe.contentWindow.filesCount);}}),100);}})};Logi.quickAccess('ajax',Logi.Net.Ajax.request);Logi.quickAccess('includeJS',Logi.Net.Ajax.includeJS);
Logi.Net.JSON={encode:function(data){var encoder=new Logi.Net.JSON.encoder(data,25);return encoder.encode(data);},decode:function(string){return string&&string.length>0?eval("("+string+")"):undefined;},request:function(url,data,callback,method){return Logi.Callback.Helper(callback,function(newCallback){return Logi.Net.Ajax.request(url,data===null?null:Logi.Net.JSON.encode(data),newCallback,method);},Logi.Net.JSON.decode);}}
Logi.Net.JSON.encoder=new Class({__construct:function(source,maxDepth){this.source=source;this.maxDepth=maxDepth||25;this.depth=0;this.pieces=[];this.piecesLength=0;},escapeSymbols:{'\b':'\\b','\f':'\\f','\n':'\\n','\r':'\\r','\t':'\\t'},addPiece:function(piece){this.pieces[this.piecesLength++]=piece;},parseSource:function(cVar){this.depth++;if(this.depth>this.maxDepth)return this.addPiece('null');switch(typeof cVar){case'boolean':return this.addPiece(String(cVar));case'number':return this.addPiece(isFinite(cVar)?+cVar:'null');case'string':var len=cVar.length;this.addPiece('"');for(var i=0;i<len;i++){var ch=cVar.charAt(i);if(ch<' '){var escSymbol=this.escapeSymbols[ch];if(escSymbol){this.addPiece(escSymbol);}else{ch=ch.charCodeAt();this.addPiece('\\u00'+
Math.floor(ch/16).toString(16)+
(ch%16).toString(16));}}else{if(ch=='\\'||ch=='"')this.addPiece("\\");this.addPiece(ch);}}
return this.addPiece('"');case'object':if(!cVar)return this.addPiece('null');if(cVar instanceof Array){var len=cVar.length;this.addPiece('[');for(var i=0;i<len;i++){if(i)this.addPiece(',');this.parseSource(cVar[i]);this.depth--;}
return this.addPiece(']');}
if(typeof cVar.toString=='undefined')return this.addPiece('null');this.addPiece('{');var isFirst=true;for(var i in cVar){var obj=cVar[i];var oType=typeof obj;if(oType!='undefined'&&oType!='function'){if(isFirst)isFirst=false;else this.addPiece(',');this.parseSource(i);this.depth--;this.addPiece(':');this.parseSource(obj);this.depth--;}}
return this.addPiece('}');}
return this.addPiece('null');},encode:function(){this.parseSource(this.source);return this.pieces.join('');}});Logi.quickAccess('json_encode',Logi.Net.JSON.encode);Logi.quickAccess('json_decode',Logi.Net.JSON.decode);Logi.quickAccess('json_request',Logi.Net.JSON.request);
(function(){var ef=Logi.UI.Effects={};ef.Interpolators={};ef.Interpolators.sling=function(start,end,currentStep,totalSteps){var z=totalSteps-1;var cs=z-currentStep;return end+(start-end)*cs*cs/z/z;return start+(end-start)*currentStep*currentStep/(totalSteps-1)/(totalSteps-1);return currentStep==totalSteps-1?end:start;return start+(end-start)*currentStep/(totalSteps-1);};var setPosition=function(div,x,y){div.style.left=x+'px';div.style.top=y+'px';};var setSize=function(div,w,h){div.style.width=w+'px';div.style.height=h+'px';};var setScrollPosition=function(div,x,y){div.scrollLeft=x;div.scrollTop=y;};var setOpacity=function(div,opacity){div.style.opacity=opacity;};getOpacity=function(div){return div.style.opacity;};ef.Iterator=new Class({effects:null,duration:1000,steps:10,active:false,onEnd:null,currentStep:null,__construct:function(effects,duration,steps){effects=effects instanceof Array?effects:[effects];this.effects=effects;duration&&(this.duration=duration);steps&&(this.steps=steps);},run:function(onEnd){if(this.active)throw"Previous effect is not finished yet";this.active=true;this.currentStep=0;this.onEnd=typeof onEnd=='function'?onEnd:Logi.emptyFunction;Logi.each(this.effects,function(effect){effect.beginEffect(this.steps);},this);this.interval=setInterval(Delegate(this,this.doStep),parseInt(this.duration/this.steps));},doStep:function(){Logi.each(this.effects,function(effect){effect.doStep(this.currentStep,this.steps);},this);this.currentStep++;if(this.steps==this.currentStep){clearInterval(this.interval);this.active=false;Logi.each(this.effects,function(effect){effect.endEffect(this.steps);},this);this.onEnd(this);}}});ef.Sequence=new Class({effectList:null,currentEffect:null,__construct:function(effectList){effectList=effectList instanceof Array?effectList:[effectList];this.effectList=effectList;},run:function(onEnd){this.onEnd=typeof onEnd=='function'?onEnd:Logi.emptyFunction;this.currentEffect=0;this.runEffect();},runEffect:function(){if(this.currentEffect<this.effectList.length){var effect=this.effectList[this.currentEffect];effect.run(Delegate(this,'runEffect'));this.currentEffect++;}else{this.onEnd(this);}}});ef.highlight=function(div,onEnd){var h1=new ef.Iterator(new ef.Fade(div,{startOpacity:1,endOpacity:0}),300);var h2=new ef.Iterator(new ef.Fade(div,{startOpacity:0,endOpacity:1}),300);var h3=new ef.Iterator(new ef.Fade(div,{startOpacity:1,endOpacity:0}),300);var h4=new ef.Iterator(new ef.Fade(div,{startOpacity:0,endOpacity:1}),300);var s=new ef.Sequence([h1,h2,h3,h4]);s.run(function(){typeof onEnd=='function'&&onEnd();});};ef.imageFadeChange=function(img,newSrc,duration,onEnd){if(img.src==newSrc){typeof onEnd=='function'&&onEnd();return;}
duration=duration||1000;var fadeImg=Logi.DOM.Element.create('IMG',{style:{position:'absolute',width:img.width+'px',height:img.height+'px',filter:'alpha(opacity=0)',opacity:0},src:newSrc});img.parentNode.insertBefore(fadeImg,img);var f=new ef.Iterator([new ef.Fade(fadeImg,{startOpacity:0,endOpacity:1}),],duration);f.run(function(){img.src=fadeImg.src;setOpacity(img,1);fadeImg.parentNode.removeChild(fadeImg);typeof onEnd=='function'&&onEnd();});};ef.base=new Class({target:null,options:null,iterator:null,__construct:function(target,options,iterator){this.target=target;options=options||{};this.options=options;if(typeof this.options.interpolator=='function'){this.interpolate=this.options.interpolator;}
if(typeof iterator=='number')iterator=new ef.Iterator(this,iterator);this.iterator=iterator;},run:function(onEnd){(this.iterator||new ef.Iterator(this)).run(onEnd);},interpolate:function(start,end,currentStep,totalSteps){return start+(end-start)*currentStep/(totalSteps-1);},beginEffect:function(totalSteps){},endEffect:function(totalSteps){},doStep:function(currentStep,totalSteps){throw"Logi.UI.Effects.base.doStep is abstract. Please override.";}});ef.InstantCommand=new Class({callback:null,iterator:null,__construct:function(callback,iterator){this.callback=callback;this.iterator=iterator||new ef.Iterator(this);this.iterator.duration=1;this.iterator.steps=1;},beginEffect:function(totalSteps){this.callback();},endEffect:function(totalSteps){},doStep:function(currentStep,totalSteps){},run:function(onEnd){this.iterator.run(onEnd);}});ef.ghostMessage=function(text,options,onEnd){options=options||{};var div=document.createElement('DIV');div.className=options.className||'logi_effect_ghost_message';div.appendChild(document.createTextNode(text));document.body.appendChild(div);var cw=(document.body.clientWidth-div.clientWidth)/2;var f=new ef.Iterator(new ef.Fade(div,{startOpacity:1,endOpacity:0}));var m=new ef.Iterator([new ef.Move(div,{x:cw,y:0},{x:cw,y:-div.clientHeight})]);var w=new ef.Iterator(new ef.Wait());var s=new ef.Sequence([m,w,f]);s.run(function(){document.body.removeChild(div);typeof onEnd=='function'&&onEnd();});}
ef.Fade=new Class({__construct:function(target,options,iterator){options=options||{};if(options.startOpacity===undefined)options.startOpacity=1;if(options.endOpacity===undefined)options.endOpacity=0;this.__callParent(target,options,iterator);},beginEffect:function(totalSteps){setOpacity(this.target,this.options.startOpacity);},endEffect:function(totalSteps){setOpacity(this.target,this.options.endOpacity);},doStep:function(currentStep,totalSteps){setOpacity(this.target,this.interpolate(this.options.startOpacity,this.options.endOpacity,currentStep,totalSteps));}},ef.base);ef.Wait=new Class({doStep:function(){}},ef.base);ef.Move=new Class({__construct:function(target,to,from,iterator,options){if(from===undefined){}
options=options||{};options.from=from;options.to=to;this.__callParent(target,options,iterator);},beginEffect:function(totalSteps){this.target.style.position='absolute';setPosition(this.target,this.options.from.x,this.options.from.y);},endEffect:function(totalSteps){setPosition(this.target,this.options.to.x,this.options.to.y);},doStep:function(currentStep,totalSteps){setPosition(this.target,this.interpolate(this.options.from.x,this.options.to.x,currentStep,totalSteps),this.interpolate(this.options.from.y,this.options.to.y,currentStep,totalSteps));}},ef.base);ef.Resize=new Class({__construct:function(target,to,from,iterator,options){if(from===undefined){}
options=options||{};options.from=from;options.to=to;this.__callParent(target,options,iterator);},beginEffect:function(totalSteps){setSize(this.target,this.options.from.width,this.options.from.height);},endEffect:function(totalSteps){setSize(this.target,this.options.to.width,this.options.to.height);},doStep:function(currentStep,totalSteps){setSize(this.target,this.interpolate(this.options.from.width,this.options.to.width,currentStep,totalSteps),this.interpolate(this.options.from.height,this.options.to.height,currentStep,totalSteps));}},ef.base);ef.Scroll=new Class({__construct:function(target,offsetX,offsetY,iterator,options){options=options||{};options.x=offsetX;options.y=offsetY;this.__callParent(target,options,iterator);},beginEffect:function(totalSteps){this.options.startX=this.target.scrollLeft;this.options.startY=this.target.scrollTop;this.options.endX=this.target.scrollLeft+this.options.x;this.options.endY=this.target.scrollTop+this.options.y;},endEffect:function(totalSteps){setScrollPosition(this.target,this.options.endX,this.options.endY);},doStep:function(currentStep,totalSteps){setScrollPosition(this.target,this.interpolate(this.options.startX,this.options.endX,currentStep,totalSteps),this.interpolate(this.options.startY,this.options.endY,currentStep,totalSteps));}},ef.base);})();
(function(){var zIndex=500;var currentIndex=0;var layerDefaultStyle={width:"100%",height:"100%",borderStyle:"none",display:"none",position:'fixed',overflow:'hidden',filter:'alpha(opacity=50)','-moz-opacity':.8,opacity:.8,margin:0,backgroundColor:'black'};var layers=[document.createElement('DIV')];Logi.each(layers,function(layer,i){var layerStyle=layer.style;for(var prop in layerDefaultStyle){layerStyle[prop]=layerDefaultStyle[prop];}
layer.className='logi_layer_fog';layer.id='logi_layer_'+i;});var isInitialized=false;var clickHandler=function(){Logi.each(handlers[zIndex]||[],function(handler,i){handler();});}
function init(){if(!isInitialized){document.body.insertBefore(layers[0],document.body.firstChild);Logi.DOM.Element.compatNode(layers[0]).addEventListener('click',clickHandler,true);isInitialized=true;}}
var handlers={};Logi.UI.LayerManager={handleLayerClick:function(zIndex,handler){handlers[zIndex]=handlers[zIndex]||[];handlers[zIndex].push(handler);},requestLayer:function(){init();var needsShow=currentIndex==0;currentIndex++;zIndex+=3;Logi.each(layers,function(layer,i){layer.style.zIndex=zIndex-1-i;if(needsShow){layer.style.display='block';}});return zIndex;},disposeLayer:function(){init();delete handlers[zIndex];zIndex-=3;currentIndex--;Logi.each(layers,function(layer,i){if(currentIndex==0){layer.style.display='none';layer.style.zIndex=0;}else{layer.style.zIndex=zIndex-1-i;}});return zIndex;},getLayersCount:function(){return zIndex;}}})();
Logi.UI.Popup=new Class({__construct:function(content,options){options=options||{};this.cssClass=options.cssClass||'logi_popup';this.container=Logi.DOM.Element.get(options.container)||document.body;var popup=document.createElement('DIV');popup.className=this.cssClass;if(options.layout=='fixed'||options.layout=='absolute'){popup.style.position=options.layout;}
if(options.position=='center'||options.position=='horizontal'){popup.style.left=Math.max((this.container.offsetWidth-(options.width||0))/2,0)+'px';}else{popup.style.left=(options.left||0)+'px';}
if(options.position=='center'||options.position=='vertical'){if(popup.style.position=='fixed'){popup.style.top='50%';popup.style.marginTop=(-(options.height/2||0))+'px';}else{popup.style.top=(Math.max((this.container.offsetHeight-(options.height||0))/2,0)+(document.documentElement.scrollTop||0))+'px';}}else{popup.style.top=((options.top||0)+(document.documentElement.scrollTop||0))+'px';}
if(options.width)popup.style.width=options.width+'px';if(options.height)popup.style.height=options.height+'px';var popupWrapper=document.createElement('DIV');popupWrapper.className='popup_wrapper';popupWrapper.appendChild(popup);popupWrapper.style.zIndex=popup.style.zIndex;this.container.appendChild(popupWrapper);this.domWrapper=popupWrapper;this.dom=popup;this.isShown=false;this.setContent(content);if(options.resizable){this.resizer=new Logi.UI.DragNDrop.ResizerFactory(popup,this.cssClass,options.resizable);}
this.fadeEffect=options.fade?parseFloat(options.fade):false;if(isNaN(this.fadeEffect))this.fadeEffect=1;},setContent:function(content){Logi.DOM.Element.setContent(this.dom,content);},show:function(callback){callback=typeof callback=='function'?callback:Logi.emptyFunction;if(this.isShown)return;this.domWrapper.style.zIndex=Logi.UI.LayerManager.requestLayer();this.domWrapper.style.display='block';this.isShown=true;if(this.fadeEffect){var f=new Logi.UI.Effects.Iterator(new Logi.UI.Effects.Fade(this.domWrapper,{startOpacity:0,endOpacity:1}));f.run(callback);}else{callback(this);}},hide:function(callback){callback=typeof callback=='function'?callback:Logi.emptyFunction;if(!this.isShown)return;var whenDone=Delegate(this,function(){this.isShown=false;this.domWrapper.style.display='none';Logi.UI.LayerManager.disposeLayer();callback(this);});if(this.fadeEffect){var f=new Logi.UI.Effects.Iterator(new Logi.UI.Effects.Fade(this.domWrapper,{startOpacity:1,endOpacity:0}));f.run(whenDone);}else{whenDone();}},destroy:function(){this.domWrapper.parentNode.removeChild(this.domWrapper);}});
Logi.UI.DragNDrop={};Logi.UI.DragNDrop.Listener=new Class({__construct:function(boxClassName,draggerClassName,handler,options){this.options=options||{};this.options.listener=this.options.listener||Logi.emptyFunction;this.boxClassName=boxClassName;this.draggerClassName=draggerClassName||boxClassName;this.dragObject=undefined;this.handler=handler||new Logi.UI.DragNDrop.Mover();Logi.DOM.Event.addMainListener('mousedown',Delegate(this,'mouseDown'));Logi.DOM.Event.addMainListener('mousemove',Delegate(this,'mouseMove'));Logi.DOM.Event.addMainListener('mouseup',Delegate(this,'mouseUp'));},findRelativeObject:function(element){var el=element;while(el.nodeName!='#document'){var pos=getComputedStyle(el,null).getPropertyValue('position');if(pos=='absolute'||pos=='relative')return el;el=el.parentNode;}
return document.body;},findDragObject:function(element,className){var el=element;while(el.nodeName!='#document'){if(Logi.DOM.Element.hasClass(el,className))return el;el=el.parentNode;}},mouseDown:function(event){var dragger=this.findDragObject(event.target,this.draggerClassName);if(dragger){var box=this.findDragObject(dragger,this.boxClassName);}
if(box){this.parentContainer=this.findRelativeObject(box.parentNode);this.dragObject=box;if(this.options.zIndex&&!this.dragObject.style.zIndex){this.dragObject.style.zIndex=this.options.zIndex;}
this.startX=event.screenX;this.startY=event.screenY;this.handler.storeInitialState(this);this.options.listener(1,this.dragObject);}},mouseMove:function(event){if(typeof this.dragObject!='undefined'){this.handler.setCurrentState(this,event.screenX-this.startX,event.screenY-this.startY);this.options.listener(2,this.dragObject);}},mouseUp:function(event){if(typeof this.dragObject!='undefined'){if(this.options.zIndex&&this.dragObject.style.zIndex){this.dragObject.style.zIndex='';}
this.options.listener(3,this.dragObject);this.dragObject=undefined;}}});Logi.UI.DragNDrop.Mover=new Class({__construct:function(){},storeInitialState:function(listener){this.dragX=parseInt(getComputedStyle(listener.dragObject,null).getPropertyValue('left'));this.dragY=parseInt(getComputedStyle(listener.dragObject,null).getPropertyValue('top'));},setCurrentState:function(listener,offsetX,offsetY){var posX=this.dragX+offsetX;var posY=this.dragY+offsetY;if(posX+listener.dragObject.offsetWidth>listener.parentContainer.scrollWidth){posX=listener.parentContainer.scrollWidth-listener.dragObject.offsetWidth;}
if(posY+listener.dragObject.offsetHeight>listener.parentContainer.scrollHeight){posY=listener.parentContainer.scrollHeight-listener.dragObject.offsetHeight;}
if(posX<0)posX=0;if(posY<0)posY=0;listener.dragObject.style.left=posX+'px';listener.dragObject.style.top=posY+'px';}});Logi.UI.DragNDrop.Resizer=new Class({__construct:function(directionX,directionY,minWidth,minHeight){if(directionX>1)directionX=1;if(directionX<-1)directionX=-1;if(directionX>1)directionY=1;if(directionX<-1)directionY=-1;this.directionX=directionX;this.directionY=directionY;this.minWidth=minWidth;this.minHeight=minHeight;},storeInitialState:function(listener){this.dragX=parseInt(getComputedStyle(listener.dragObject,null).getPropertyValue('left'));this.dragY=parseInt(getComputedStyle(listener.dragObject,null).getPropertyValue('top'));this.dragW=parseInt(getComputedStyle(listener.dragObject,null).getPropertyValue('width'));this.dragH=parseInt(getComputedStyle(listener.dragObject,null).getPropertyValue('height'));},setCurrentState:function(listener,offsetX,offsetY){var posX=this.directionX==-1?this.dragX+offsetX:this.dragX;var posY=this.directionY==-1?this.dragY+offsetY:this.dragY;var sizeX=this.directionX==0?this.dragW:this.dragW+offsetX*this.directionX;var sizeY=this.directionY==0?this.dragH:this.dragH+offsetY*this.directionY;if(this.minWidth!==false&&sizeX<this.minWidth){if(this.directionX==-1){posX-=this.minWidth-sizeX;}
sizeX=this.minWidth;}
if(this.minHeight!==false&&sizeY<this.minHeight){if(this.directionY==-1){posY-=this.minHeight-sizeY;}
sizeY=this.minHeight;}
if(posX+listener.dragObject.offsetWidth>listener.parentContainer.scrollWidth){posX=listener.parentContainer.scrollWidth-listener.dragObject.offsetWidth;}
if(posY+listener.dragObject.offsetHeight>listener.parentContainer.scrollHeight){posY=listener.parentContainer.scrollHeight-listener.dragObject.offsetHeight;}
if(posX<0)posX=0;if(posY<0)posY=0;listener.dragObject.style.left=posX+'px';listener.dragObject.style.top=posY+'px';listener.dragObject.style.width=sizeX+'px';listener.dragObject.style.height=sizeY+'px';}});(function(){var directionMapping={top:[0,-1],bottom:[0,1],left:[-1,0],right:[1,0],top_left:[-1,-1],top_right:[1,-1],bottom_left:[-1,1],bottom_right:[1,1]};Logi.UI.DragNDrop.ResizerFactory=new Class({__construct:function(container,containerClassName,options){this.container=container;this.containerClassName=containerClassName;if(options===true){options={horizontal:true,vertical:true};}
this.minWidth=options.minWidth||false;this.minHeight=options.minHeight||false;this.cssClassBase=options.cssClassBase||'logi_ui_resizer';this.horizontal=options.horizontal;this.vertical=options.vertical;this.dom=[];this.createResizers();},createResizers:function(){var hasBottom=this.vertical===true||this.vertical=='bottom';var hasTop=this.vertical===true||this.vertical=='top';var hasRight=this.horizontal===true||this.horizontal=='right';var hasLeft=this.horizontal===true||this.horizontal=='left';var hasBottomRight=hasBottom&&hasRight;var hasBottomLeft=hasBottom&&hasLeft;var hasTopRight=hasTop&&hasRight;var hasTopLeft=hasTop&&hasLeft;if(hasBottom)this.createResizer('bottom');if(hasTop)this.createResizer('top');if(hasRight)this.createResizer('right');if(hasLeft)this.createResizer('left');if(hasBottomRight)this.createResizer('bottom_right');if(hasBottomLeft)this.createResizer('bottom_left');if(hasTopRight)this.createResizer('top_right');if(hasTopLeft)this.createResizer('top_left');},createResizer:function(position){var dom=document.createElement('div');dom.className=this.cssClassBase+' '+this.cssClassBase+'_'+position;dom.innerHTML=' ';var dm=directionMapping[position];var temp=new Logi.UI.DragNDrop.Listener(this.containerClassName,this.cssClassBase+'_'+position,new Logi.UI.DragNDrop.Resizer(dm[0],dm[1],this.minWidth,this.minHeight));this.container.appendChild(dom);this.dom[position]=dom;}});})();
(function(){Logi.UI.PopupWindow=new Class({__construct:function(title,content,options){this.options=options=options||{};titleCssClass=options.titleBarCssClass||Logi.UI.PopupWindow.SETUP.titleBarCssClass;options.escTextCssClass=options.escTextCssClass||Logi.UI.PopupWindow.SETUP.escTextCssClass;if(options.fogClose!==false&&options.fogClose!==true){options.fogClose=Logi.UI.PopupWindow.SETUP.fogClose;}
var dopt=Logi.UI.PopupWindow.SETUP;for(var opt in dopt){options[opt]=options[opt]||dopt[opt];}
this.titleBar=Logi.DOM.Element.create('div',{className:titleCssClass});this.setTitle(title);if(options.onClose){var closeButton=Logi.DOM.Element.create('div',{className:options.closeButtonCssClass||'logi_popupwindow_closebutton'},'x');var esc=Logi.DOM.Element.create('div',{className:options.escTextCssClass},Logi.Language.term('ESC or'));var handler=options.onClose===true?Logi.UI.PopupWindowManager.close:options.onClose;this.handler=handler;var win=this;Logi.DOM.Element.compatNode(closeButton).addEventListener('click',handler,true);this.keyPressFunc=function(event){if(popups[popups.length-1]==win&&event.keyCode==27){handler();}};document.addEventListener('keydown',this.keyPressFunc,true);this.titleBar.insertBefore(esc,this.titleBar.firstChild);this.titleBar.insertBefore(closeButton,this.titleBar.firstChild);}
this.contentBar=Logi.DOM.Element.create('div',{className:options.contentBarCssClass||'logi_popupwindow_contentbar'});if(options.contentHeight){this.contentBar.style.height=options.contentHeight+'px';}
this.setContent(content);this.popup=new Logi.UI.Popup([this.titleBar,this.contentBar],options);this.windowCssClass=options.windowCssClass||'logi_popupwindow';Logi.DOM.Element.addClass(this.popup.dom,this.windowCssClass);this.dragger=new Logi.UI.DragNDrop.Listener(this.windowCssClass,titleCssClass);if(options.roundedBoxManager){var mgr=options.roundedBoxManager===true?new Logi.UI.PopupWindow.RoundedBox():options.roundedBoxManager;mgr.applyTo(this.popup.dom);}},show:function(callback){this.popup.show(Delegate(this,function(){if(this.options.onClose&&this.options.fogClose){Logi.UI.LayerManager.handleLayerClick(this.popup.dom.style.zIndex,this.handler);}
if(typeof callback=='function')callback();}));},hide:function(callback){this.popup.hide(callback);},setContent:function(content){Logi.DOM.Element.setContent(this.contentBar,content);},setTitle:function(content){Logi.DOM.Element.setContent(this.titleBar,content);},destroy:function(){this.popup.destroy();}});Logi.UI.PopupWindow.SETUP={fogClose:false,roundedBoxManager:null,titleBarCssClass:'logi_popupwindow_titlebar',closeButtonCssClass:'logi_popupwindow_closebutton',contentBarCssClass:'logi_popupwindow_contentbar',escTextCssClass:'logi_popupwindow_esctext'};Logi.UI.PopupWindow.RoundedBox=new Class({__construct:function(baseCssClass){this.baseCssClass=baseCssClass||'rounded_box';},applyTo:function(container){var bcss=this.baseCssClass;var directions=['bottom','top','right','left','bottom_right','bottom_left','top_right','top_left'];for(var i=0;i<directions.length;i++){Logi.DOM.Element.create('div',{className:bcss+' '+bcss+'_'+directions[i]},' ',container);}}});var popups=[];Logi.UI.PopupWindowManager={hasAny:function(){return popups.length>0;},open:function(title,content,options,onOpen){var popup=new Logi.UI.PopupWindow(title,content,options);popups.push(popup);popup.show(onOpen);return popup;},close:function(onClose){var popup=popups.pop();if(!popup){throw"There is no popup in the stack";}
popup.hide(function(){popup.destroy();popup=null;if(typeof onClose=='function'){onClose();}});},getTopPopup:function(){return popups[popups.length-1];},setTopTitle:function(content){popups[popups.length-1].setTitle(content);}};})();
Logi.UI.MessageBox={};Logi.UI.MessageBox.SETUP={width:300,position:'center',preCallback:Logi.emptyFunction};Logi.UI.MessageBox.show=function(title,message,callback,buttons,options){title=title||'';message=message||'';options=options||{};callback=typeof callback=='function'?callback:Logi.emptyFunction;var dopt=Logi.UI.MessageBox.SETUP;for(var opt in dopt){options[opt]=options[opt]||dopt[opt];}
buttons=buttons||{ok:Logi.Language.term('OK')};var firstButton;for(var button in buttons){firstButton=button;break;}
options.focusButton=options.focusButton||firstButton;var popupWindow=Logi.UI.PopupWindowManager.open(title,message,options);var bar=popupWindow.contentBar;var buttonContainerCssClass=options.buttonContainerCssClass||'logi_messagebox_button_container';var buttonCssClass=options.buttonCssClass||'logi_messagebox_button';var createButton=function(buttonId,button){var dom=Logi.DOM.Element.create('a',{className:buttonCssClass+' '+buttonId,href:'#'},button);Logi.DOM.Element.compatNode(dom).addEventListener('click',function(event){event.preventDefault();if(options.preCallback(buttonId)===false){return;}
Logi.UI.PopupWindowManager.close(function(){callback(buttonId);});},true);return dom;};var buttonsDom=[];var buttonsHash={};for(var button in buttons){var b=createButton(button,buttons[button]);buttonsDom.push(b);buttonsHash[button]=b;}
var bc=Logi.DOM.Element.create('div',{className:buttonContainerCssClass},buttonsDom);bar.appendChild(bc);popupWindow.show(function(){Logi.DOM.Element.focus(buttonsHash[options.focusButton]);});return buttonsHash;};Logi.UI.MessageBox.confirm=function(title,message,yesCallback,buttons,options){buttons=buttons||{yes:Logi.Language.term('YES'),no:Logi.Language.term('NO')};var callback=function(response){if(response=='yes')yesCallback();};Logi.UI.MessageBox.show(title,message,callback,buttons,options);};
(function(){var popup;var started=false;var fn=function(content){content=content||Logi.Language.term('Loading, please wait...');if(!started){popup=new Logi.UI.Popup(content,{position:'horizontal',top:85});Logi.DOM.Element.addClass(popup.dom,'logi_ajax_loader');Logi.DOM.Element.hide(popup.dom.parentNode);var cancel=Logi.DOM.Element.create('BUTTON',{className:'ajax_cancel'},'x',popup.dom);Logi.DOM.Element.compatNode(cancel).addEventListener('click',cacnelRequests,true);}
started=true;Logi.Net.Ajax.setHandler('activityStart',fn.start);Logi.Net.Ajax.setHandler('activityStop',fn.stop);Logi.Net.Ajax.setHandler('requestStart',requestStart);Logi.Net.Ajax.setHandler('requestStop',requestStop);};var requestObjects=[];var cacnelRequests=function(){for(var i=0;i<requestObjects.length;i++){requestObjects[i].abort();}};var requestStart=function(requestObject){requestObjects.push(requestObject);};var requestStop=function(requestObject){for(var i=0;i<requestObjects.length;i++){if(requestObjects[i]==requestObject){requestObjects.splice(i,1);break;}}};fn.start=function(){popup.show();};fn.stop=function(){popup.hide();};Logi.Net.Ajax.loader=fn;})();
(function(){Logi.UI.CopyTemplate=new Class({__construct:function(templateElement,copyParentElement,formName,options){this.templateElement=Logi.DOM.Element.get(templateElement);this.copyParentElement=Logi.DOM.Element.get(copyParentElement);Logi.DOM.Element.hide(this.templateElement);options=options||{};options.targetNodeName=options.targetNodeName||'div';options.formName=formName;options.templateMarker=options.templateMarker||'template';options.tabIndexOffset=options.tabIndexOffset||0;options.tabIndexIncrement=options.tabIndexIncrement||1;options.cloneListener=options.cloneListener||Logi.emptyFunction;this.counter=options.counter||0;this.options=options;},doClone:function(){var template=this.templateElement.innerHTML;var templateNew=template;this.counter++;var o=this.options;templateNew=templateNew.replace(new RegExp('(id|for)="?(.*?)_'+o.formName+'_'+o.templateMarker+'_(.*?)(\\"|\\"?\\b)','g'),'\$1=\$2_'+o.formName+'_'+this.counter+'_\$3');templateNew=templateNew.replace(new RegExp('name="?'+o.formName+'_'+o.templateMarker+'_([^\[\\]]*?)(\\[\\])?(\\"|\\"?\\b)','g'),'name='+o.formName+'['+this.counter+'][\$1]\$2');templateNew=templateNew.replace(/tabindex="(\d+)"/g,Delegate(this,function(t,s){return'tabindex="'+
(o.tabIndexOffset+parseInt(s)+o.tabIndexIncrement*this.counter)+'"';}));templateNew=templateNew.replace(new RegExp('value="?'+o.templateMarker+'"?\\b','g'),'value="'+this.counter+'"');var div=Logi.DOM.Element.create(o.targetNodeName,o.className?{className:o.className}:{},null,this.copyParentElement);div.innerHTML=templateNew;o.cloneListener(this.counter);}});var applyTemplate=function(element,contextInfo){if(contextInfo instanceof Logi.UI.Template){contextInfo.render(element);}else if(typeof contextInfo=='function'){contextInfo(element);}else{throw new Error("Unsupported case");}}
var renderSpecial=function(tag,prefixHTML,suffixHTML,isSelect){return function(tempContainer,context){var m,reg=/{{(\w+)}}/g;var children=[];while(m=reg.exec(this.template)){children.push(m);}
tempContainer.innerHTML=prefixHTML+this.template.replace(/{{(\w+)}}/g,'')+suffixHTML;var holder=tempContainer.getElementsByTagName(tag)[0];Logi.each(children,function(child){var contextName=child[1];var contextData=context[contextName];applyTemplate(holder,contextData);},this);return holder.parentNode;};}
Logi.UI.Template=new Class({__construct:function(template,data){this.template=template;this.data=data;},setTemplate:function(template){this.template=template;},getTemplate:function(){return this.template;},setData:function(data){this.data=data;},getData:function(){return this.data;},render:function(parentElement){var regexpMap={table:[/^<table.*?>({{(\w+)}})+<\/table>$/g,false],tr:[/^<tr.*?>{{(\w+)}}<\/tr>$/,true],td:[/^<td.*?>{{(\w+)}}<\/td>$/,true],th:[/^<th.*?>{{(\w+)}}<\/th>$/,true],select:[/<select.*?>{{(\w+)}}<\/select>/,false]}
var renderFunction='renderInContext';var childNodes=[];var baseContainer;var localContainers=[];var localContainer;for(var regexp in regexpMap){if(this.template.match(regexpMap[regexp][0])){renderFunction+='_'+regexp;var skipLocal=regexpMap[regexp][1];break;}}
var data=this.data;if(!(data instanceof Array))data=[data];for(var i=0;i<data.length;i++){localContainer=document.createElement('DIV');localContainers.push(localContainer);baseContainer=this[renderFunction](localContainer,data[i])||localContainer;for(var j=0;j<baseContainer.childNodes.length;j++){childNodes.push(baseContainer.childNodes[j]);}}
if(typeof parentElement=='function'){parentElement(childNodes);}else{for(var i=0;i<childNodes.length;i++){parentElement.appendChild(childNodes[i]);}}
Logi.each(localContainers,function(container){delete container;});},renderInContext_table:renderSpecial('TABLE','',''),renderInContext_tr:renderSpecial('TR','<table>','</table>'),renderInContext_td:renderSpecial('TD','<table><tr>','</tr></table>'),renderInContext_th:renderSpecial('TH','<table><tr>','</tr></table>'),renderInContext_select:renderSpecial('SELECT','','',true),renderInContext:function(tempContainer,context){tempContainer.innerHTML=this.template.replace(/{{(\w+)}}/g,'<del class="__temp">$1</del>');var points=tempContainer.getElementsByTagName('DEL');for(var j=points.length-1;j>=0;j--){var element=points[j];var key=element.innerHTML;var cval=context[key];var pn=element.parentNode;if(cval instanceof Logi.UI.Template){cval.render(function(nodes){for(var i=0;i<nodes.length;i++){if(nodes[i].nodeName=='TBODY'){var trows=nodes[i].rows;for(var k=0;k<trows.length;k){pn.insertBefore(trows[k],element);}
nodes[i].parentNode.removeChild(nodes[i]);}else{pn.insertBefore(nodes[i],element);}}});pn.removeChild(element);}else{(function(c){if(typeof c=='string'||typeof c=='number'){pn.replaceChild(document.createTextNode(c),element);}else if(typeof c=='function'){var newNode=document.createElement('DIV');c(newNode);for(var k=0;k<newNode.childNodes.length;k){pn.insertBefore(newNode.childNodes[k],element);}
element.parentNode.removeChild(element);}else if(c){pn.replaceChild(c,element);}else{pn.removeChild(element);}})(context[key])}}}});})();Logi.quickAccess('tpl',Logi.UI.Template);
if(!Logi.UI.Widget)Logi.UI.Widget={};(function(){var wt=Logi.UI.Widget;wt.regExpPool={url:/(ftp|http|https):\/\/([_a-z\d\-]+(\.[_a-z\d\-]+)+)(([_a-z\d\-\\\.\/]+[_a-z\d\-\\\/])+)*/i,email:/\b([_a-z0-9-]+(\.[_a-z0-9-]+)*)@([_a-z0-9-]+(\.[_a-z0-9-]+)*)\.([a-z]{2,3})\b/,creditCard:/(\d{3,4})[- ]?(\d{4})[- ]?(\d{4})[- ]?(\d{4})/,ip:/\b([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\b/,empty:null};wt.base=new Class({isRendered:undefined,options:undefined,container:undefined,__construct:function(options){options=options||{};this.isRendered=false;this.options=options;},render:Logi.abstractFunction("Logi.UI.Widget.base.render is abstract. Please implement!"),checkRendered:function(checkOnly){if(this.isRendered!==true){if(checkOnly)return false;throw new Error("Widget it not rendered.");}
return true;},show:function(){this.checkRendered();this.container.style.display='';},hide:function(){this.checkRendered();this.container.style.display='none';},bindElement:function(element,eventType,method){Logi.DOM.Element.compatNode(element).addEventListener(eventType,Delegate(this,method),false);},bindKeyPress:function(element,key,callback){Logi.DOM.Element.compatNode(element).addEventListener('keypress',Delegate(this,function(event){if(event.keyCode==key)setTimeout(callback,0);}),false);}});wt.valueBase=new Class({emptyValue:'',value:undefined,__construct:function(options){this.__callParent(options);this.resetValue();},cleanupValue:function(){},getValue:function(){if(this.checkRendered(true))this.synchronizeValue(false);return this.value;},setValue:function(value){this.value=typeof value=='undefined'?this.emptyValue:value;this.cleanupValue();if(this.checkRendered(true))this.synchronizeValue(true);},resetValue:function(){this.setValue();},synchronizeValue:Logi.abstractFunction("Logi.UI.Widget.valueBase.synchronizeValue is abstract. Please implement!"),validate:Logi.abstractFunction("Logi.UI.Widget.valueBase.validate is abstract. Please implement!")},wt.base);wt.readonlyBase=new Class({getValue:function(){return this.value;},synchronizeValue:Logi.abstractFunction("Logi.UI.Widget.readonlyBase.synchronizeValue is abstract. Please implement!")},wt.valueBase);wt.Dialog=new Class({fields:undefined,__construct:function(options,fields){this.emptyValue={};options=options||{};options.cssClass=new Logi.DOM.CSS.ClassList(options.cssClass,'logi_widget_dialog');options.rowCssClass=new Logi.DOM.CSS.ClassList(options.rowCssClass,'logi_widget_dialog_row');this.__callParent(options);this.fields=fields;},synchronizeValue:function(isWrite){if(this.value===null)this.value={};if(isWrite){Logi.each(this.value,function(value,fieldName){var f=this.fields[fieldName];if(f){f.widget.setValue(value);}},this);}else{Logi.each(this.fields,function(field,fieldName){if(typeof field.widget.getValue=='function'){this.value[fieldName]=field.widget.getValue();}},this);}},render:function(container,template){if(this.isRendered){throw Error("Widget is already rendered.");}
this.container=Logi.DOM.Element.get(container);template=template||this.getDefaultTemplate();template.render(this.container);this.isRendered=true;this.synchronizeValue(true);},getDefaultTemplate:function(){var fldList=[];Logi.each(this.fields,function(field,name){fldList.push(this.prepareTemplateField(field));},this);var rowTpl=new Logi.UI.Template('<div class="'+this.options.rowCssClass+'">{{label}}{{field}}</div>',fldList);var mainTpl=new Logi.UI.Template('<div class="'+this.options.cssClass+'">{{fields}}</div>',{fields:rowTpl});return mainTpl;},prepareCustomTemplate:function(dialogTemplateHTML,fieldTemplateHtml,fields){fields=fields||this.fields;fieldTemplateHtml=fieldTemplateHtml||'{{label}}{{field}}';var templateData={};Logi.each(fields,function(field,name){templateData[name]=new Logi.UI.Template(fieldTemplateHtml,this.prepareTemplateField(field));},this);return new Logi.UI.Template(dialogTemplateHTML,templateData);},prepareTemplateField:function(field){return{label:field.label?Logi.DOM.Element.create('label',{},field.label):'',field:Delegate(field.widget,field.widget.render)};},validate:function(){Logi.each(this.fields,function(field,fieldName){if(typeof field.widget.validate=='function')field.widget.validate();},this);}},wt.valueBase);wt.Grid={};wt.Grid.Pagination=new Class({__construct:function(options,callback){options=options||{};options.pagesText=options.pagesText||Logi.Language.term('Pages:');options.cssClass=new Logi.DOM.CSS.ClassList(options.cssClass,'logi_widget_grid_pagination');options.pageContainerCssClass=new Logi.DOM.CSS.ClassList(options.pageContainerCssClass,'logi_widget_grid_pagination_page_container');options.pageCssClass=new Logi.DOM.CSS.ClassList(options.pageCssClass,'logi_widget_grid_pagination_page');options.colspan=options.colspan||1;this.options=options;this.callback=callback||Logi.emptyFunction;},rerender:function(isInitial){var totalPages=this.value.total;var currentPage=this.value.current;if(totalPages>1){var pageList=[];var cb=this.callback;var p=this;var doPush=function(page){if(page==currentPage){pageList.push({page:page});}else{var pLink=new wt.Action.Link(function(){cb(p,page);},page);pageList.push({page:Delegate(pLink,'render')});}}
for(var i=1;i<=totalPages;i++){doPush(i);}}else{pageList={page:'less then 2 pages.'};}
this.templates.page.setData(pageList);this.templates.main.render(this.container);},render:function(container,templates){if(this.isRendered){throw Error("Widget is already rendered.");}
this.container=Logi.DOM.Element.get(container);templates=templates||{};templates.main=templates.main||new Logi.UI.Template('<tr class="'+this.options.cssClass+'">{{cell}}</tr>');var colspan=this.options.colspan;templates.cell=templates.cell||new Logi.UI.Template('<td colspan="'+colspan+'">{{pages}}</td>');templates.page=templates.page||new Logi.UI.Template('<span class="'+this.options.pageCssClass+'">{{page}}</span>');templates.main.setData({cell:templates.cell});templates.cell.setData({pages:templates.page,pages_text:this.options.pagesText});this.templates=templates;this.rerender(true);this.isRendered=true;},setCurrentPage:function(page){this.value.current=page;this.synchronizeValue(true);},setTotalPages:function(pages){this.value.total=pages;this.synchronizeValue(true);},synchronizeValue:function(isWrite){this.value=this.value||{current:1,total:1};this.rerender();}},wt.valueBase);wt.Grid.List=new Class({rowViewMethod:undefined,rowEditMethod:undefined,rows:undefined,__construct:function(options,header,rowViewMethod){this.emptyValue=[];options=options||{};options.gridCssClass=new Logi.DOM.CSS.ClassList(options.gridCssClass,'logi_widget_grid_list_grid');options.gridHeaderCssClass=new Logi.DOM.CSS.ClassList(options.gridHeaderCssClass,'logi_widget_grid_list_grid_header');options.gridRowCssClass=new Logi.DOM.CSS.ClassList(options.gridRowCssClass,'logi_widget_grid_list_grid_row');options.sortHandler=options.sortHandler||Logi.emptyFunction;this.__callParent(options);this.rowViewMethod=rowViewMethod;this.header=header;this.rows=[];},synchronizeValue:function(isWrite){if(isWrite){this.rows=[];Logi.each(this.value,function(row,rowIndex){var newRow=this.rowViewMethod();this.rows.push(newRow);newRow.setValue(row);},this);this.rerender();}else{this.value=[];Logi.each(this.rows,function(row){if(typeof row.getValue=='function'){this.value.push(row.getValue());}},this);}},addRow:function(data){this.value.push(data);this.synchronizeValue(true);},sortClick:function(column,index){this.options.sortHandler(this,column,index);},renderHeader:function(parent){Logi.each(this.header,function(columnData,index){var td=document.createElement('TH');parent.appendChild(td);if(columnData.label){if(columnData.sortable){var link=new wt.Action.Link(Delegate(this,function(){this.sortClick(columnData.column,index);}),columnData.label);link.render(td);}else{td.innerHTML=columnData.label;}}},this);},renderColumnScheme:function(parent){var colGroup=document.createElement('COLGROUP');var colspan=0;Logi.each(this.header,function(columnData,index){colspan++;var col=document.createElement('COL');if(columnData.width){col.style.width=typeof columnData.width=='number'?columnData.width+'px':columnData.width;}
colGroup.appendChild(col);});colGroup.colspan=colspan;parent.appendChild(colGroup);},rerender:function(){var fldList=[];Logi.each(this.rows,function(row){fldList.push({row:Delegate(row,row.render)});});this.templates.row.setData(fldList);this.templates.header.setData({row:Delegate(this,this.renderHeader)});this.templates.column_scheme.setData({column:Delegate(this,this.renderColumnScheme)});this.container.innerHTML='';if(this.options.pagination)this.options.pagination.isRendered=false;this.templates.main.render(this.container);},render:function(container,templates){if(this.isRendered){throw Error("Widget is already rendered.");}
this.container=Logi.DOM.Element.get(container);templates=templates||{};templates.main=templates.main||new Logi.UI.Template('<table class="'+this.options.gridCssClass+'">{{column_scheme}}<thead>{{header}}</thead><tfoot>{{pagination}}</tfoot><tbody>{{rows}}</tbody></table>');templates.row=templates.row||new Logi.UI.Template('<tr class="'+this.options.gridRowCssClass+'">{{row}}</tr>');templates.header=templates.header||new Logi.UI.Template('<tr class="'+this.options.gridHeaderCssClass+'">{{row}}</tr>');templates.column_scheme=templates.column_scheme||new Logi.UI.Template('{{column}}');templates.pagination=this.options.pagination?Delegate(this.options.pagination,this.options.pagination.render):Logi.emptyFunction;this.templates=templates;templates.main.setData({rows:templates.row,header:templates.header,pagination:templates.pagination,column_scheme:templates.column_scheme});this.rerender();this.isRendered=true;this.synchronizeValue(true);},validate:function(){Logi.each(this.rows,function(row){row.validate();},this);}},wt.valueBase);wt.Grid.Row=new Class({fields:undefined,__construct:function(options,fields){this.emptyValue={};options=options||{};options.cellCssClass=new Logi.DOM.CSS.ClassList(options.cellCssClass,'logi_widget_grid_row_cell');this.__callParent(options);this.fields=fields;},synchronizeValue:function(isWrite){if(isWrite){Logi.each(this.value,function(value,fieldName){var f=this.fields[fieldName];if(f){f.setValue(value);}},this);}else{Logi.each(this.fields,function(field,fieldName){if(typeof field.getValue=='function'){this.value[fieldName]=field.getValue();}},this);}},render:function(container,templates){if(this.isRendered){throw Error("Widget is already rendered.");}
this.container=Logi.DOM.Element.get(container);templates=templates||{};templates.row=templates.row||new Logi.UI.Template('<td class="'+this.options.cellCssClass+'">{{field}}</td>');var fldList=[];Logi.each(this.fields,function(field,name){fldList.push({field:Delegate(field,field.render)});});templates.row.setData(fldList);templates.row.render(this.container);this.isRendered=true;this.synchronizeValue(true);},validate:function(){Logi.each(this.fields,function(field,fieldName){field.validate();},this);}},wt.valueBase);wt.Action={};wt.Action.base=new Class({action:undefined,text:undefined,__construct:function(action,text,options){this.action=action;this.text=text;options=options||{};options.linkCssClass=new Logi.DOM.CSS.ClassList(options.linkCssClass,'logi_widget_action');this.__callParent(options);},render:function(container){this.container=Logi.DOM.Element.get(container);this.element=this.createDOMElement();Logi.DOM.Element.compatNode(this.element).addEventListener('click',this.action,true);this.container.appendChild(this.element);},createDOMElement:Logi.abstractFunction("Logi.UI.Widget.Action.base.createDOMElement is abstract. Please implement!")},wt.base);wt.Action.Link=new Class({createDOMElement:function(container){return Logi.DOM.Element.create('a',{href:'#',onclick:'return false;'},this.text);}},wt.Action.base);wt.Action.Button=new Class({createDOMElement:function(container){return Logi.DOM.Element.create('button',{onclick:'return false;'},this.text);}},wt.Action.base);wt.View={};wt.View.base=new Class({},wt.readonlyBase);wt.View.simple=new Class({element:undefined,__construct:function(options){this.__callParent(options);},validate:function(){return[this.element];},synchronizeValue:function(){this.element.innerHTML=this.value;},render:function(container){if(this.isRendered){throw Error("Widget is already rendered.");}
this.container=Logi.DOM.Element.get(container);this.element=this.createElement();this.container.appendChild(Logi.DOM.Element.create('div',{className:this.options.cssClass},this.element));this.isRendered=true;this.synchronizeValue(true);},createElement:function(){return Logi.DOM.Element.create('span');}},wt.View.base);wt.View.Integer=new Class({cleanupValue:function(){if(this.value.length)this.value=parseInt(this.value);}},wt.View.simple);wt.View.Decimal=new Class({cleanupValue:function(){if(this.value.length){this.value=parseFloat(this.value)
if(this.options.precision){this.value=this.value.toFixed(this.precision);}}}},wt.View.simple);wt.View.Text=new Class({synchronizeValue:function(){this.element.innerHTML=Logi.DOM.HTML.escape(this.value);}},wt.View.simple);wt.View.YesNo=new Class({__construct:function(options){options=options||{};options.yes=options.yes||'yes';options.no=options.no||'no';this.__callParent(options);},synchronizeValue:function(){this.element.innerHTML=Logi.DOM.HTML.escape(this.value===true||this.value===1||this.value==='1'?this.options.yes:this.options.no);}},wt.View.simple);wt.View.Date=new Class({__construct:function(options){options=options||{};options.format=options.format||'YYYY-mm-dd';this.__callParent(options);},synchronizeValue:function(){this.element.innerHTML='['+this.value+']'}},wt.View.simple);wt.View.Html=new Class({},wt.View.simple);wt.Field={};wt.Field.base=new Class({},wt.valueBase);wt.Field.simple=new Class({element:undefined,__construct:function(options){this.__callParent(options);},validate:function(){return[this.element];},synchronizeValue:function(isWrite){if(isWrite){this.element.value=this.value;}else{this.value=this.element.value;}},render:function(container){if(this.isRendered){throw Error("Widget is already rendered.");}
this.container=Logi.DOM.Element.get(container);this.element=this.createElement();this.container.appendChild(Logi.DOM.Element.create('div',{className:this.options.cssClass},this.element));this.isRendered=true;this.synchronizeValue(true);},createElement:Logi.abstractFunction("Logi.UI.Widget.Field.simple.createElement is abstract. Please implement!")},wt.Field.base);wt.Field.Intbox=new Class({isMandatory:undefined,minValue:undefined,maxValue:undefined,__construct:function(options,isMandatory,minValue,maxValue){options=options||{};options.cssClass=new Logi.DOM.CSS.ClassList(options.cssClass,'logi_widget_field_intbox');options.inputCssClass=new Logi.DOM.CSS.ClassList(options.inputCssClass,'logi_widget_field_intbox_input');this.__callParent(options);this.isMandatory=isMandatory;this.minValue=parseInt(minValue);this.maxValue=parseInt(maxValue);},createElement:function(){return Logi.DOM.Element.create('input',{type:'text',className:this.options.inputCssClass,value:typeof this.value=='undefined'?'':this.value});},validate:function(){var elValue=this.element.value;var intValue=parseInt(elValue);var el=[this.element];if(elValue.length&&String(intValue)!=elValue)throw{error:"Please enter an integer number.",elements:el}
if(this.maxValue!==null&&(this.isMandatory||elValue.length>0)&&intValue>this.maxValue)throw{error:"Please enter an integer number no bigger than "+this.maxValue+".",elements:el}
if(this.minValue!==null&&(this.isMandatory||elValue.length>0)&&intValue<this.minValue)throw{error:"Please enter an integer number no smaller than "+this.minValue+".",elements:el}
if(this.isMandatory&&elValue.length==0)throw{error:"Please enter an integer number.",elements:el}
return el;}},wt.Field.simple);wt.Field.Textbox=new Class({isMandatory:undefined,minLength:undefined,maxLength:undefined,__construct:function(options,isMandatory,minLength,maxLength){options=options||{};options.cssClass=new Logi.DOM.CSS.ClassList(options.cssClass,'logi_widget_field_textbox');options.inputCssClass=new Logi.DOM.CSS.ClassList(options.inputCssClass,'logi_widget_field_textbox_input');this.__callParent(options);this.isMandatory=isMandatory;this.minLength=parseInt(minLength);if(this.minLength<0)this.minLength=0;this.maxLength=parseInt(maxLength);},createElement:function(){var opts={type:'text',className:this.options.inputCssClass,value:typeof this.value=='undefined'?'':this.value};if(this.maxLength){opts.maxlength=this.maxLength;}
return Logi.DOM.Element.create('input',opts);},validate:function(){var elValue=this.element.value;var lenValue=elValue.length;var el=[this.element];if(this.maxLength&&lenValue>this.maxLength)throw{error:"The text is too long, maximum characters allowed are "+this.maxLength+".",elements:el}
if(this.minLength>0&&lenValue<this.minLength&&(this.isMandatory||lenValue>0))throw{error:(this.isMandatory?'Please':"Either leave empty or")+" enter at least "+this.minLength+" characters.",elements:el}
if(this.isMandatory&&lenValue==0)throw{error:"Please enter a text.",elements:el}
return el;}},wt.Field.simple);wt.Field.Textarea=new Class({__construct:function(options,isMandatory,minLength,maxLength){this.__callParent(options,isMandatory,minLength,maxLength);this.options.cssClass.removeClass('logi_widget_field_textbox');this.options.cssClass.addClass('logi_widget_field_textarea');this.options.inputCssClass.removeClass('logi_widget_field_textbox_input');this.options.inputCssClass.addClass('logi_widget_field_textarea_input');},createElement:function(){return Logi.DOM.Element.create('textarea',{className:this.options.inputCssClass},typeof this.value=='undefined'?'':this.value);}},wt.Field.Textbox);wt.Field.Htmlarea=new Class({render:function(container,templates){if(this.isRendered){throw Error("Widget is already rendered.");}
this.container=Logi.DOM.Element.get(container);var areaContainer=Logi.DOM.Element.create('div',{className:'Logi_Htmlarea'},null,this.container);this.logiarea=new Logi.HtmlArea(areaContainer,{imageDir:'img/logiarea',blankFile:'?ping'});this.isRendered=true;},synchronizeValue:function(isWrite){if(isWrite){this.logiarea.setValue(this.value);}else{this.value=this.logiarea.getValue();}},validate:function(){}},wt.valueBase);wt.Field.Checkbox=new Class({__construct:function(options){options=options||{};options.cssClass=new Logi.DOM.CSS.ClassList(options.cssClass,'logi_widget_field_checkbox');options.inputCssClass=new Logi.DOM.CSS.ClassList(options.inputCssClass,'logi_widget_field_checkbox_input');this.__callParent(options);},createElement:function(){return Logi.DOM.Element.create('input',{type:'checkbox',className:this.options.inputCssClass,value:1});},synchronizeValue:function(isWrite){if(isWrite){this.element.checked=this.value;}else{this.value=this.element.checked;}}},wt.Field.simple);wt.Field.LookupModel=new Class({__construct:function(id,text){this.id=id||'id';this.text=text||'text';},id:undefined,text:undefined});wt.Field.defaultLookupModel=new wt.Field.LookupModel;wt.Field.LookupData=new Class({__construct:function(data,model){this.model=model||wt.Field.defaultLookupModel;this.data=data;}});wt.Field.listBase=new Class({lookupData:undefined,listItemsDom:undefined,isMandatory:undefined,__construct:function(options,lookupData,isMandatory){this.isMandatory=isMandatory;this.__callParent(options);this.lookupData=lookupData;this.listItemsDom={};},setDefaultTemplates:Logi.abstractFunction("Logi.UI.Widget.Field.listBase.setDefaultTemplates is abstract. Please implement!"),createDOMElement:Logi.abstractFunction("Logi.UI.Widget.Field.listBase.createDOMElement is abstract. Please implement!"),render:function(container,templates){if(this.isRendered){throw Error("Widget is already rendered.");}
this.container=Logi.DOM.Element.get(container);templates=templates||{};this.setDefaultTemplates(templates);templates.main.setData({fields:templates.row});var fldList=[];if(!this.isMandatory){var field={};field[this.lookupData.model.text]='---';field[this.lookupData.model.id]='';fldList.push(this.createDOMElement(field));}
Logi.each(this.lookupData.data,function(field,name){fldList.push(this.createDOMElement(field));},this);templates.row.setData(fldList);templates.main.render(this.container);this.isRendered=true;this.synchronizeValue(true);}},wt.Field.base);wt.Field.listMultipleBase=new Class({__construct:function(options,lookupData,isMandatory){this.emptyValue={};this.__callParent(options,lookupData,isMandatory);},synchronizeValue:function(isWrite){if(isWrite){Logi.each(this.listItemsDom,function(checkbox,value){checkbox[this.checkedProperty]=false;},this);for(var i=0;i<this.value.length;i++){var dom=this.listItemsDom[this.value[i]];if(dom)dom[this.checkedProperty]=true;}}else{var v=[];Logi.each(this.listItemsDom,function(checkbox,value){if(checkbox[this.checkedProperty])v.push(value);},this);this.value=v;}},validate:function(){this.synchronizeValue(false);var el=this.listItemsDom;if(this.isMandatory&&this.value.length==0)throw{error:"Please select at least one item.",elements:el}
return el;}},wt.Field.listBase);wt.Field.listSingleBase=new Class({__construct:function(options,lookupData,isMandatory){this.emptyValue='';this.__callParent(options,lookupData,isMandatory);},synchronizeValue:function(isWrite){if(isWrite){Logi.each(this.listItemsDom,function(checkbox,value){checkbox[this.checkedProperty]=false;},this);var dom=this.listItemsDom[this.value];if(dom)dom[this.checkedProperty]=true;}else{this.value=undefined;Logi.each(this.listItemsDom,function(checkbox,value){if(checkbox[this.checkedProperty]){this.value=value;}},this);}},validate:function(){this.synchronizeValue(false);var el=this.listItemsDom;if(this.isMandatory&&(this.value===undefined||this.value.length==0))throw{error:"Please select one item.",elements:el}
return el;}},wt.Field.listBase);wt.Field.CheckboxList=new Class({__construct:function(options,lookupData,isMandatory){this.checkedProperty='checked';options=options||{};options.cssClass=new Logi.DOM.CSS.ClassList(options.cssClass,'logi_widget_field_checkboxlist');options.rowCssClass=new Logi.DOM.CSS.ClassList(options.rowCssClass,'logi_widget_field_checkboxlist_row');options.inputCssClass=new Logi.DOM.CSS.ClassList(options.inputCssClass,'logi_widget_field_checkboxlist_input');this.__callParent(options,lookupData,isMandatory);},setDefaultTemplates:function(templates){templates.main=templates.main||new Logi.UI.Template('<div class="'+this.options.cssClass+'">{{fields}}</div>');templates.row=templates.row||new Logi.UI.Template('<div class="'+this.options.rowCssClass+'">{{label}}{{field}}</div>');},createDOMElement:function(field){var cb=Logi.DOM.Element.create('input',{type:'checkbox',className:this.options.inputCssClass,value:field[this.lookupData.model.id]});var dom={label:Logi.DOM.Element.create('label',{},field[this.lookupData.model.text]),field:cb};this.listItemsDom[field[this.lookupData.model.id]]=cb;return dom;}},wt.Field.listMultipleBase);wt.Field.RadioButtonList=new Class({__construct:function(options,lookupData,isMandatory){this.emptyValue={};this.checkedProperty='checked';this.radioButtonName='logi_widget_field_radiobuttonlist_name_'+parseInt(Math.random()*10000);options=options||{};options.cssClass=new Logi.DOM.CSS.ClassList(options.cssClass,'logi_widget_field_radiobuttonlist');options.rowCssClass=new Logi.DOM.CSS.ClassList(options.rowCssClass,'logi_widget_field_radiobuttonlist_row');options.inputCssClass=new Logi.DOM.CSS.ClassList(options.inputCssClass,'logi_widget_field_radiobuttonlist_input');this.__callParent(options,lookupData,isMandatory);},setDefaultTemplates:function(templates){templates.main=templates.main||new Logi.UI.Template('<div class="'+this.options.cssClass+'">{{fields}}</div>');templates.row=templates.row||new Logi.UI.Template('<div class="'+this.options.rowCssClass+'">{{label}}{{field}}</div>');},createDOMElement:function(field){var cb=Logi.DOM.Element.create('input',{type:'radio',name:this.radioButtonName,className:this.options.inputCssClass,value:field[this.lookupData.model.id]});var dom={label:Logi.DOM.Element.create('label',{},field[this.lookupData.model.text]),field:cb};this.listItemsDom[field[this.lookupData.model.id]]=cb;return dom;}},wt.Field.listSingleBase);wt.Field.MultipleSelect=new Class({__construct:function(options,lookupData,isMandatory){this.checkedProperty='selected';options=options||{};options.cssClass=new Logi.DOM.CSS.ClassList(options.cssClass,'logi_widget_field_multipleselect');options.selectCssClass=new Logi.DOM.CSS.ClassList(options.selectCssClass,'logi_widget_field_multipleselect_select');this.__callParent(options,lookupData,isMandatory);},setDefaultTemplates:function(templates){templates.main=templates.main||new Logi.UI.Template('<div class="'+this.options.cssClass+'"><select size="5" multiple="multiple" class="'+this.options.selectCssClass+'">{{fields}}</select></div>');templates.row=templates.row||new Logi.UI.Template('{{option}}');},createDOMElement:function(field){var opt=new Option(field[this.lookupData.model.text],field[this.lookupData.model.id]);this.listItemsDom[field[this.lookupData.model.id]]=opt;return{option:opt};}},wt.Field.listMultipleBase);wt.Field.SingleSelect=new Class({__construct:function(options,lookupData,isMandatory){this.checkedProperty='selected';options=options||{};options.cssClass=new Logi.DOM.CSS.ClassList(options.cssClass,'logi_widget_field_singleselect');options.selectCssClass=new Logi.DOM.CSS.ClassList(options.selectCssClass,'logi_widget_field_singleselect_select');this.__callParent(options,lookupData,isMandatory);},setDefaultTemplates:function(templates){templates.main=templates.main||new Logi.UI.Template('<div class="'+this.options.cssClass+'"><select class="'+this.options.selectCssClass+'">{{fields}}</select></div>');templates.row=templates.row||new Logi.UI.Template('{{option}}');},createDOMElement:function(field){var opt=new Option(field[this.lookupData.model.text],field[this.lookupData.model.id]);this.listItemsDom[field[this.lookupData.model.id]]=opt;return{option:opt};}},wt.Field.listSingleBase);})();Logi.quickAccess('fw',Logi.UI.Widget.Field);
Logi.Type={};(function(){var tp=Logi.Type;tp.objectLocator=Logi.abstractFunction("Logi.Type.objectLocator should be implemented!");tp.base={};tp.create=function(typeName,fields){Logi.Type[typeName]=new tp.base.object({fields:fields});return Logi.Type[typeName];}
tp.base.base=new Class({views:undefined,name:undefined,__construct:function(settings){this.name=settings.name;},getView:function(view,metaInfo){var best=undefined;var bestLength=-1;if(this.views){for(var viewName in this.views){if(view.indexOf(viewName)==0&&bestLength<viewName.length){bestLength=viewName.length;best=this.views[viewName];}}}
best=best||tp.defaultView;return best(this,view,metaInfo);}});tp.base.field=new Class({label:undefined,mandatory:undefined,__construct:function(settings){settings=settings||{};this.__callParent(settings);this.mandatory=Boolean(settings.mandatory);this.label=settings.label||'';},getFieldCategories:function(){return[];}},tp.base.base);tp.base.object=new Class({fields:undefined,byCategory:undefined,__construct:function(settings){settings=settings||{};this.__callParent(settings);this.fields={};this.byCategory={};settings.fields=settings.fields||[];for(var i=0;i<settings.fields.length;i++){var field=settings.fields[i];var type=Logi.Type[field.type];if(typeof type!='function'){throw new Error("Type "+field.type+" is not supported");}
var f=new type(field);this.fields[f.name]=f;var cats=f.getFieldCategories();for(var j=0;j<cats.length;j++){var cat=cats[j];if(!(this.byCategory[cat]))this.byCategory[cat]=[];this.byCategory[cat].push(f);}}}},tp.base.base);tp.binding=function(name,types,binding){if(typeof binding!='function')throw"Logi.Type.binding error - function expected for third argument (binding)";if(!(types instanceof Array))types=[types];for(var i=0;i<types.length;i++){var type=types[i];if(typeof type=='string')type=Logi.Type[type];if(typeof type.prototype.views=='undefined')type.prototype.views={};type.prototype.views[name]=binding;}}
tp.defaultView=function(field,metaInfo){throw new Error("view for field "+field.name+" not set");}
tp.base.ranged=new Class({min:undefined,max:undefined,__construct:function(settings){this.__callParent(settings);var min=parseInt(settings.min);var max=parseInt(settings.max);if(!(isNaN(min)))this.min=min;if(!(isNaN(max)))this.max=max;}},tp.base.field)
tp.ObjectRef=new Class({__construct:function(settings){settings=settings||{};this.__callParent(settings);this.object=settings.object||'';}},tp.base.field);tp.TreeParent=new Class({},tp.ObjectRef);tp.Integer=new Class({},tp.base.ranged);tp.Text=new Class({},tp.base.ranged);tp.Html=new Class({},tp.Text);tp.Mail=new Class({},tp.Text);tp.Formula=new Class({},tp.Text);tp.Phone=new Class({},tp.Text);tp.Url=new Class({},tp.Text);tp.DateCreated=new Class({},tp.base.ranged);tp.LastModified=new Class({},tp.base.ranged);tp.Active=new Class({},tp.base.ranged);tp.Natural=new Class({},tp.base.ranged);tp.Sequence=new Class({},tp.Natural);tp.Id=new Class({},tp.Integer);tp.Boolean=new Class({},tp.base.field);tp.Active=new Class({},tp.Boolean);tp.Decimal=new Class({precision:undefined,__construct:function(settings){this.__callParent(settings);this.precision=settings.precision;}},tp.base.ranged);tp.ScalarList=new Class({},tp.base.field);tp.ScalarListRef=new Class({},tp.base.field);Logi.quickAccess('t',Logi.Type);tp.binding('/edit',['Integer','Natural','Decimal'],function(field,view,metaInfo){return new Logi.UI.Widget.Field.Intbox(field.mandatory,field.min,field.max);});tp.binding('/view',['Id','Integer','Natural','Sequence'],function(field,view,metaInfo){return new Logi.UI.Widget.View.Integer();});tp.binding('/view',['Text','Url','Mail','Phone','Formula'],function(field,view,metaInfo){return new Logi.UI.Widget.View.Text();});tp.binding('/view',['ObjectRef'],function(field,view,metaInfo){return new Logi.UI.Widget.View.Text();});tp.binding('/edit',['Text','Url','Mail','Phone'],function(field,view,metaInfo){return new Logi.UI.Widget.Field.Textbox(null,field.mandatory,field.min,field.max);});tp.binding('/edit',['Html'],function(field,view,metaInfo){return new Logi.UI.Widget.Field.Htmlarea(null,field.mandatory,field.min,field.max);});tp.binding('/edit/search/like',['Text'],function(field,view,metaInfo){var tb=new Logi.UI.Widget.Field.Textbox(null,field.mandatory,field.min,field.max);tb.synchronizeValue=function(isWrite){if(isWrite){this.element.value=this.value&&this.value.as;}else{this.value={as:this.element.value};}}
return tb;});tp.binding('/edit/textarea',['Text'],function(field,view,metaInfo){return new Logi.UI.Widget.Field.Textarea(null,field.mandatory,field.min,field.max);});tp.binding('/edit',['ObjectRef'],function(field,view,metaInfo){return new Logi.UI.Widget.Field.SingleSelect(metaInfo&&metaInfo.options,new Logi.UI.Widget.Field.LookupData((metaInfo&&metaInfo.data)||[],metaInfo&&metaInfo.model?new Logi.UI.Widget.Field.LookupModel(metaInfo.model.id,metaInfo.model.text):Logi.UI.Widget.Field.defaultLookupModel),field.mandatory);});tp.binding('/edit/dropdown',['Active'],function(field,view,metaInfo){return new Logi.UI.Widget.Field.SingleSelect(metaInfo&&metaInfo.options,new Logi.UI.Widget.Field.LookupData([{id:0,text:Logi.Language.term('NO')},{id:1,text:Logi.Language.term('YES')}],Logi.UI.Widget.Field.defaultLookupModel),true);});tp.binding('/edit/search',['ObjectRef'],function(field,view,metaInfo){return new Logi.UI.Widget.Field.SingleSelect(metaInfo&&metaInfo.options,new Logi.UI.Widget.Field.LookupData((metaInfo&&metaInfo.data)||[],metaInfo&&metaInfo.model?new Logi.UI.Widget.Field.LookupModel(metaInfo.model.id,metaInfo.model.text):Logi.UI.Widget.Field.defaultLookupModel),false);});tp.binding('/view',['Boolean','Active'],function(field,view,metaInfo){return new Logi.UI.Widget.View.YesNo();});tp.binding('/view',['Decimal'],function(field,view,metaInfo){return new Logi.UI.Widget.View.Decimal(field.precision);});tp.binding('/edit/search',['Integer','Natural'],function(field,view,metaInfo){return new Logi.UI.Widget.Field.Intbox(false,field.min,field.max,metaInfo);});tp.binding('/list',tp.base.object,function(field,view,metaInfo){return new Logi.UI.Widget.List(field);});(function(){var fieldBuilder=function(field,view,metaInfo){var fields={};Logi.each(metaInfo.fields,function(fieldInfo){if(typeof fieldInfo=='string'){fieldInfo={field:fieldInfo}}
if(fieldInfo.field){var currentView=fieldInfo.view||view;var sep;var f=fieldInfo.field;var o=field;while((sep=f.indexOf('__'))>-1){var obj=o.fields[f.substr(0,sep)];o=tp.objectLocator(obj.object);f=f.substr(sep+2);}
var fld=o.fields[f];var meta=fieldInfo.metaInfo;if(meta){meta=Logi.clone(meta);}else{meta={};}
meta.object=field;var w=fld.getView(currentView,meta);fields[fieldInfo.row||fieldInfo.field]={label:Logi.Language.term(fieldInfo.label||fld.label),widget:w};}else if(fieldInfo.callback){var w=fieldInfo.callback(gridRow);fields[fieldInfo.row]={label:Logi.Language.term(fieldInfo.label),widget:w};}else{var w=fieldInfo.widget;fields[fieldInfo.row]={label:Logi.Language.term(fieldInfo.label),widget:w};}},this);return fields;}
tp.binding('/edit/dialog',tp.base.object,function(field,view,metaInfo){return new Logi.UI.Widget.Dialog(null,fieldBuilder(field,view,metaInfo));});tp.binding('/edit/search',tp.base.object,function(field,view,metaInfo){return new Logi.UI.Widget.Dialog(null,fieldBuilder(field,view,metaInfo));});tp.binding('/view/dialog',tp.base.object,function(field,view,metaInfo){return new Logi.UI.Widget.Dialog(null,fieldBuilder(field,view,metaInfo));});})();tp.binding('/view/list',tp.base.object,function(field,view,metaInfo){var makeCreator=function(viewProperty,defaultView){return function(){var fields={};var gridRow=new Logi.UI.Widget.Grid.Row(null,fields);Logi.each(metaInfo.fields,function(fieldInfo){if(fieldInfo.field){var view=fieldInfo[viewProperty]||defaultView;var fld=field.fields[fieldInfo.field];var w=fld.getView(view,{object:field});fields[fieldInfo.column||fieldInfo.field]=w;}else if(fieldInfo.callback){var w=fieldInfo.callback(gridRow);fields[fieldInfo.column]=w;}else{var w=fieldInfo.widget;fields[fieldInfo.column]=w;}},this);return gridRow;}}
var viewCreator=makeCreator('view','/view');var headerInfo=[];for(var i=0;i<metaInfo.fields.length;i++){var fieldInfo=metaInfo.fields[i];var fld=field.fields[fieldInfo.field];if(fieldInfo.field){headerInfo.push({label:Logi.Language.term(fieldInfo.label||fld.label),column:fieldInfo.column||fieldInfo.field,sortable:fieldInfo.sortable||false,width:fieldInfo.width||null});}else{headerInfo.push({label:Logi.Language.term(fieldInfo.label||''),column:fieldInfo.column,width:fieldInfo.width||null});}}
return new Logi.UI.Widget.Grid.List(metaInfo.gridOptions,headerInfo,viewCreator);});})();
if(!Logi.UI.Widget)Logi.UI.Widget={};Logi.UI.Widget.Tree={};(function(){var tr=Logi.UI.Widget.Tree;tr.Model=new Class({__construct:function(id,text,parent,sequence,children,nodelete,isleaf){this.id=id||'id';this.text=text||'text';this.parent=parent||'parent';this.sequence=sequence||'sequence';this.children=children||'children';this.nodelete=nodelete||'nodelete';this.isleaf=isleaf||'isleaf';},id:undefined,text:undefined,parent:undefined,sequence:undefined,children:undefined,nodelete:undefined,isleaf:undefined,getText:function(node){return typeof this.text=='string'?node[this.text]:this.text.getter(node);},setText:function(node,value){typeof this.text=='string'?node[this.text]=value:this.text.setter(node,value);}});tr.defaultModel=new tr.Model;tr.Data=new Class({__construct:function(data,model,isList,options){options=options||{};options.newNodeText=options.newNodeText||Logi.Language.term('new node');options.cannotMoveFirstText=options.cannotMoveFirstText||Logi.Language.term('new node');options.cannotMoveLastText=options.cannotMoveLastText||Logi.Language.term('new node');options.cannotDeleteRootText=options.cannotDeleteRootText||Logi.Language.term("Cannot delete root element.");this.options=options;this.model=model||tr.defaultModel;if(isList){var s=this.transformListToTree(data);this.hashData=s.hash;this.treeData=s.tree;}else{}
this.insertedList={};this.updatedList={};this.deletedList=[];this.nextNewId=-1;},getParentNode:function(node){return this.hashData[node[this.model.parent]||0];},getDepth:function(node){var depth=0;while(node&&node[this.model.id]){depth++;node=this.hashData[node[this.model.parent]||0];}
return depth;},isFirstChild:function(node){return this.hashData[node[this.model.parent]||0][this.model.children][0]==node;},isLastChild:function(node){var cnodes=this.hashData[node[this.model.parent]||0][this.model.children];return cnodes[cnodes.length-1]==node;},transformListToTree:function(listData){var p=this.model.parent;var id=this.model.id;var c=this.model.children;var seq=this.model.sequence;treeData={};treeData[0]=[];Logi.each(listData,function(listItem){var p0=listItem[p]||0;if(!treeData[p0]){treeData[p0]=[];}
treeData[p0].push(listItem);});var sorter=function(i1,i2){return i1[seq]-i2[seq];};var hashData={};Logi.each(listData,function(listItem){if(!treeData[listItem[id]]){treeData[listItem[id]]=[];}
listItem[c]=seq===true?treeData[listItem[id]]:treeData[listItem[id]].sort(sorter);hashData[listItem[id]]=listItem;});var main=seq===true?treeData[0]:treeData[0].sort(sorter);var root={};root[c]=main;root[id]=root[p]=root[seq]=0;this.model.setText(root,'root');hashData[0]=root;return{tree:hashData[0],hash:hashData};},createNewNode:function(parentId){var chil=this.hashData[parentId][this.model.children];var newNode={};newNode[this.model.parent]=parentId;newNode[this.model.id]=this.nextNewId--;newNode[this.model.sequence]=chil.length;this.model.setText(newNode,this.options.newNodeText);newNode[this.model.children]=[];newNode[this.model.nodelete]=false;newNode[this.model.isleaf]=false;chil.push(newNode);this.hashData[newNode[this.model.id]]=newNode;this.setCreated(newNode);return newNode;},deleteNode:function(node){if(node[this.model.id]==0)throw this.options.cannotDeleteRootText;this.deleteChildNodesRecursive(node);var chil=this.hashData[node[this.model.parent]||0].children;for(var i=node[this.model.sequence];i<chil.length;i++){chil[i][this.model.sequence]--;chil[i-1]=chil[i];}
chil.length--;delete this.hashData[node[this.model.id]];},canDelete:function(node){if(node[this.model.nodelete]>0){return false;}
var c=node[this.model.children];for(var i=0;i<c.length;i++){if(!this.canDelete(c[i]))return false;}
return true;},deleteChildNodesRecursive:function(node){for(var i=0;i<node[this.model.children].length;i++){this.deleteChildNodesRecursive(node[this.model.children][i]);}
this.setDeleted(node);},setDeleted:function(node){var nid=node[this.model.id];if(nid>0){this.deletedList.push(nid);if(this.updatedList[nid]){delete this.updatedList[nid];}}else{if(this.insertedList[nid]){delete this.insertedList[nid];}}
delete this.hashData[nid];},setModified:function(node){if(node[this.model.id]>0)this.updatedList[node[this.model.id]]=node;},setCreated:function(node){this.insertedList[node[this.model.id]]=node;},moveUp:function(node){var seq=node[this.model.sequence];if(seq==0)throw this.options.cannotMoveFirstText;var chil=this.hashData[node[this.model.parent]||0][this.model.children];var prev=chil[seq-1];node[this.model.sequence]--;prev[this.model.sequence]++;chil[node[this.model.sequence]]=node;chil[prev[this.model.sequence]]=prev;this.setModified(node);this.setModified(prev);},moveDown:function(node){var seq=node[this.model.sequence];var chil=this.hashData[node[this.model.parent]||0][this.model.children];if(seq==chil.length-1)throw this.options.cannotMoveLastText;var next=chil[parseInt(seq)+1];node[this.model.sequence]++;next[this.model.sequence]--;chil[node[this.model.sequence]]=node;chil[next[this.model.sequence]]=next;this.setModified(node);this.setModified(next);},getChanges:function(){return{inserted:this.insertedList,updated:this.updatedList,deleted:this.deletedList}}});tr.View=new Class({__construct:function(dataObject,options){options=options||{};options.rootText=options.rootText||Logi.Language.term('root');options.modifyText=options.modifyText||Logi.Language.term("Modify text");options.selectCommandText=options.selectCommandText||Logi.Language.term("Select command");options.selectNodeText=options.selectNodeText||Logi.Language.term("Select an action for node ")
options.deleteNodeText=options.deleteNodeText||Logi.Language.term("Are you sure?")
options.expandDepth=typeof options.expandDepth=='undefined'?false:options.expandDepth;options.expandPlus=options.expandPlus||'+';options.expandMinus=options.expandMinus||'-';options.cssClass=options.cssClass||'logi_tree_view';options.checkboxCssClass=options.checkboxCssClass||'logi_tree_view_checkbox';options.itemCallback=options.itemCallback||Logi.emptyFunction;if(options.checkboxType!='radio')options.checkboxType='checkbox';this.__callParent(options);if(!(dataObject instanceof tr.Data)){throw Error("Logi.UI.Widget.Tree.View error - first argument is expected to be of type Logi.UI.Widget.Tree.Data!");}
this.dataObject=dataObject;this.model=dataObject.model;this.checkboxes={};},render:function(container){if(this.isRendered){throw Error("Widget is already rendered.");}
this.container=typeof container=='string'?document.getElementById(container):container;this.dom={};this.dom[0]=this.createListItem(this.dataObject.treeData,this.getChildren(this.dataObject.treeData[this.model.children],0),0);Logi.DOM.Element.setContent(this.dom[0].firstChild.lastChild,this.options.rootText);this.container.appendChild(Logi.DOM.Element.create('div',{className:this.options.cssClass},Logi.DOM.Element.create('ul',{},this.dom[0])));this.isRendered=true;},onToggleNode:function(event){if(this.ul.style.display=='none'){this.ul.style.display='';Logi.DOM.Element.setContent(this.expander,this.tree.options.expandMinus);}else{this.ul.style.display='none';Logi.DOM.Element.setContent(this.expander,this.tree.options.expandPlus);}
if(event){event.preventDefault();}},addSelectAllCheckbox:function(cbNode){Logi.DOM.Element.compatNode(cbNode).addEventListener('change',Delegate(this,function(){for(var cbNodeId in this.checkboxes){if(cbNodeId!=0){var cb=this.checkboxes[cbNodeId].dom;cb.checked=cbNode.checked;}};}),true);},createListItem:function(node,ulChildren,currentDepth){var spanChildren=[];var expander=Logi.DOM.Element.create('a',{href:'#',style:ulChildren.length?{}:{visibility:'hidden'}},this.options[this.options.expandDepth===false||this.options.expandDepth>currentDepth?'expandMinus':'expandPlus']);spanChildren.push(expander);var cbOptions={type:this.options.checkboxType,value:node[this.model.id],className:this.options.checkboxCssClass};if(this.options.checkboxConfirmFunction){if(!this.options.checkboxConfirmFunction(node,currentDepth)){cbOptions.style='visibility:hidden;';}}
var nodeInfo={'node':node,expander:expander};if(this.options.checkboxName!=null){cbOptions.name=this.options.checkboxName;var cbNode=Logi.DOM.Element.create('input',cbOptions,[]);if(node[this.model.id]==0){if(this.options.checkboxType=='radio'){cbNode.disabled=true;cbNode.style.visibility='hidden';}else{this.addSelectAllCheckbox(cbNode);}}
spanChildren.push(cbNode);nodeInfo.dom=cbNode;this.checkboxes[node[this.model.id]]=nodeInfo;}
var labelNode=Logi.DOM.Element.create('a',{href:'#',className:'logi_tree_view_label'},this.model.getText(node));Logi.DOM.Element.compatNode(labelNode).addEventListener('click',Delegate(this,function(event){this.options.itemCallback(node,this);event.preventDefault();}),true);spanChildren.push(labelNode);var mainSpan=Logi.DOM.Element.create('span',{},spanChildren);mainChildren=[mainSpan];var ulNodeProps={};if(!(this.options.expandDepth===false||this.options.expandDepth>currentDepth)){ulNodeProps={style:{display:'none'}};}
var ulNode=Logi.DOM.Element.create('ul',ulNodeProps,ulChildren);nodeInfo.ulNode=ulNode;mainChildren.push(ulNode);Logi.DOM.Element.compatNode(expander).addEventListener('click',Delegate({tree:this,expander:expander,ul:ulNode},this.onToggleNode),true);return Logi.DOM.Element.create('li',{},mainChildren);},getChildren:function(children,currentDepth){var id=this.model.id;var ch=this.model.children;var els=[];Logi.each(children,function(child){els.push(this.dom[child[id]]=this.createListItem(child,this.getChildren(child[ch]),currentDepth+1));},this);return els;}},Logi.UI.Widget.base);tr.SelectionView=new Class({__construct:function(dataObject,isMultipleSelection,options){options=options||{};options.checkboxName=options.checkboxName||'logi_tree_view_selection';options.checkboxType=isMultipleSelection?'checkbox':'radio';options.expandToSelection=options.expandToSelection?true:false;this.__callParent(dataObject,options);},getValue:function(){return this.getSelectedIds();},setValue:function(value){return this.setSelectedIds(value);},getSelectedIds:function(){var result=[];for(var id in this.checkboxes){if(id!=0&&this.checkboxes[id].dom.checked)result.push(id);}
return result;},setSelectedIds:function(idList){for(var id in this.checkboxes){this.checkboxes[id].dom.checked=false;}
var noExpandFn=function(id){this.checkboxes[id].dom.checked=true;};var doExpandFn=Delegate(this,function(id){var cNode=this.dataObject.getParentNode(this.checkboxes[id].node);var idName=this.model.id;while(cNode&&cNode[idName]){var ccb=this.checkboxes[cNode[idName]];var ul=ccb.ulNode;if(ul.style.display=='none'){this.onToggleNode.call({tree:this,expander:ccb.expander,ul:ccb.ulNode});}
cNode=this.dataObject.getParentNode(cNode);}
this.checkboxes[id].dom.checked=true;});Logi.each(idList,this.isRendered&&this.options.expandToSelection?doExpandFn:noExpandFn,this);}},tr.View);tr.Editor=new Class({__construct:function(dataObject,options){options=options||{};options.itemCallback=options.itemCallback||Delegate(this,this.handleEdit);options.editItemCallback=options.editItemCallback||Delegate(this,this.editTextValue);options.commandEditText=options.commandEditText||Logi.Language.term('Edit');options.commandDeleteText=options.commandDeleteText||Logi.Language.term('Delete');options.commandMoveUpText=options.commandMoveUpText||Logi.Language.term('Move Up');options.commandMoveDownText=options.commandMoveDownText||Logi.Language.term('Move Down');options.commandNewChildText=options.commandNewChildText||Logi.Language.term('New Child');options.commandCancelText=options.commandCancelText||Logi.Language.term('Cancel');options.maxDepth=options.maxDepth||false;options.disabledCommands=options.disabledCommands||[];options.buttonDesigner=options.buttonDesigner||Logi.emptyFunction;this.__callParent(dataObject,options);},editTextValue:function(node,onReady){var value=prompt(this.options.modifyText,this.model.getText(node));if(value!==null){this.model.setText(node,value);onReady(node);}},insertNode:function(node){var d=this.dom[node[this.model.id]]=this.createListItem(node,[],0);var par=this.dom[node[this.model.parent]||0];par.lastChild.appendChild(d);par.firstChild.firstChild.style.visibility='';},deleteNode:function(node){try{this.dataObject.deleteNode(node);var el=this.dom[node[this.model.id]];if(el.parentNode.childNodes.length==1){el.parentNode.previousSibling.firstChild.style.visibility='hidden';}
el.parentNode.removeChild(el);}catch(e){alert(e);Logi.UI.MessageBox.show("Error",e);}},handleEdit:function(node,tree){var buttons={'Edit':this.options.commandEditText,'Delete':this.options.commandDeleteText,'MoveUp':this.options.commandMoveUpText,'MoveDown':this.options.commandMoveDownText,'NewChild':this.options.commandNewChildText,'Cancel':this.options.commandCancelText};Logi.each(this.options.disabledCommands,function(command){delete buttons[command];});if(!node[this.model.id]){delete buttons['Edit'];delete buttons['Delete'];delete buttons['MoveUp'];delete buttons['MoveDown'];}else{if(node[this.model.isleaf]>0){delete buttons['NewChild'];}
if(!this.dataObject.canDelete(node)){delete buttons['Delete'];}
if(this.dataObject.isFirstChild(node)){delete buttons['MoveUp'];}
if(this.dataObject.isLastChild(node)){delete buttons['MoveDown'];}}
if(this.options.maxDepth!==false&&this.dataObject.getDepth(node)>=this.options.maxDepth){delete buttons['NewChild'];}
var buttonsHash=Logi.UI.MessageBox.show(this.options.selectCommandText,this.options.selectNodeText+this.model.getText(node),Delegate(this,function(action){this['handleAction'+action](node);}),buttons);this.options.buttonDesigner(buttonsHash);},updateNodeDom:function(node){Logi.DOM.Element.setContent(this.dom[node[this.model.id]].firstChild.firstChild.nextSibling,this.model.getText(node));this.dataObject.setModified(node);},handleActionEdit:function(node){this.options.editItemCallback(node,Delegate(this,this.updateNodeDom));},handleActionMoveUp:function(node){try{this.dataObject.moveUp(node);var el=this.dom[node[this.model.id]];el.parentNode.insertBefore(el,el.previousSibling);}catch(e){Logi.UI.MessageBox.show(Logi.Language.term("Error"),e);}},handleActionMoveDown:function(node){try{this.dataObject.moveDown(node);var el=this.dom[node[this.model.id]];el.parentNode.insertBefore(el.nextSibling,el);}catch(e){Logi.UI.MessageBox.show(Logi.Language.term("Error"),e);}},handleActionNewChild:function(node){newNode=this.dataObject.createNewNode(node[this.model.id]);this.insertNode(newNode);this.handleActionEdit(newNode);},handleActionDelete:function(node){Logi.UI.MessageBox.show(Logi.Language.term("Confirm delete"),this.options.deleteNodeText,Delegate(this,function(button){if(button=='yes'){this.deleteNode(node);}}),{yes:Logi.Language.term('Yes'),no:Logi.Language.term('No')});},handleActionCancel:function(node){}},tr.View);})();
if(typeof Logi=='undefined')Logi={};(function(){function innerXHTML(el){var nlTag='|div|p|table|tbody|tr|td|th|title|head|body|script|comment|li|meta|h1|h2|h3|h4|h5|h6|hr|ul|ol|option|select|';var tagNl='|html|head|body|p|th|style|';var regCmt=new RegExp();regCmt.compile("^<!--(.*)-->$");var regHyph=new RegExp();regHyph.compile("-$");function get_xhtml(node,lang,encoding,ndNl,inPre){var i;var tx='';var kids=node.childNodes;var kidsL=kids.length;var tagNm;var doNl=ndNl?true:false;var pagMode=true;for(i=0;i<kidsL;i++){var kid=kids[i];switch(kid.nodeType){case 1:{var tagNm=String(kid.tagName).toLowerCase();if(tagNm=='')break;if(tagNm=='meta'){var metaNm=String(kid.name).toLowerCase();if(metaNm=='generator')break;}
if(!ndNl&&tagNm=='body'){pagMode=false;}
if(tagNm=='!'){var bits=regCmt.exec(kid.tx);if(bits){var innerTx=bits[1];tx+=tidyCmt(innerTx);}}else{if(tagNm=='html'){tx='<?xml version="1.0" encoding="'+encoding+'"?>\n<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\n';}
if(nlTag.indexOf('|'+tagNm+'|')!=-1){if((doNl||tx!='')&&!inPre){tx+='\n';}else{doNl=true;}}
tx+='<'+tagNm;var attr=kid.attributes;var atLn=attr.length;var atVal;var atLang=false;var atXml=false;var atXmlns=false;var isAlt=false;for(j=0;j<atLn;j++){var atNm=attr[j].nodeName.toLowerCase();if(!attr[j].specified&&(atNm!='selected'||!kid.selected)&&(atNm!='style'||kid.style.cssText=='')&&atNm!='value')continue;if(atNm=='_moz_dirty'||atNm=='_moz_resizing'||tagNm=='br'&&atNm=='type'&&kid.getAttribute('type')=='_moz')continue;var valid_attr=true;switch(atNm){case"style":atVal=kid.style.cssText.toLowerCase();break;case"class":atVal=kid.className;break;case"http-equiv":atVal=kid.httpEquiv;break;case"noshade":case"checked":case"selected":case"multiple":case"nowrap":case"disabled":atVal=atNm;break;default:try{atVal=kid.getAttribute(atNm,2);}catch(e){valid_attr=false;}}
if(atNm=='lang'){atLang=true;atVal=lang;}
if(atNm=='xml:lang'){atXml=true;atVal=lang;}
if(atNm=='xmlns')atXmlns=true;if(valid_attr){if(!(tagNm=='li'&&atNm=='value')){tx+=' '+atNm+'="'+tidyAt(atVal)+'"';}}
if(atNm=='alt')isAlt=true;}
if(tagNm=='img'&&!isAlt)tx+=' alt=""';if(tagNm=='html'){if(!atLang)tx+=' lang="'+lang+'"';if(!atXml)tx+=' xml:lang="'+lang+'"';if(!atXmlns)tx+=' xmlns="http://www.w3.org/1999/xhtml"';}
if(kid.canHaveChildren||kid.hasChildNodes()){tx+='>';if(tagNl.indexOf('|'+tagNm+'|')!=-1){}
tx+=get_xhtml(kid,lang,encoding,true,inPre||tagNm=='pre'?true:false);tx+='</'+tagNm+'>';}else{if(tagNm=='style'||tagNm=='title'||tagNm=='script'){tx+='>';var innerTx;if(tagNm=='script'){innerTx=kid.tx;}else{innerTx=kid.innerHTML;}
if(tagNm=='style'){innerTx=String(innerTx).replace(/[\n]+/g,'\n');}
tx+=innerTx+'</'+tagNm+'>';}else{tx+=' />';}}}
break;}
case 3:{if(!inPre){if(kid.nodeValue!='\n'){tx+=tidyTxt(kid.nodeValue);}}else{tx+=kid.nodeValue;}
break;}
case 8:{tx+=tidyCmt(kid.nodeValue);break;}
default:break;}}
if(!ndNl&&!pagMode){tx=tx.replace(/<\/?head>[\n]*/gi,"");tx=tx.replace(/<head \/>[\n]*/gi,"");tx=tx.replace(/ <\/?body>[\n]*/gi,"");}
return tx;}
function tidyCmt(tx){tx=tx.replace(/--/g,"__");if(regHyph.exec(tx)){tx+=" ";}
return"<!--"+tx+"-->";}
function tidyTxt(tx){return String(tx).replace(/\n{2,}/g,"\n").replace(/\&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/\u00A0/g,"&nbsp;");}
function tidyAt(tx){return String(tx).replace(/\&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/\"/g,"&quot;");}
return get_xhtml(el);}
Logi.HtmlArea=new Class({__construct:function(container,settings,content){this.initSettings(settings);this.container=typeof container=='string'?document.getElementById(container):container;this.content=typeof content=='undefined'?this.container.innerHTML:content;this.container.innerHTML='';this.sourceView=false;var iframe=document.createElement('IFRAME');iframe.id=(this.container.id||"ifr_"+Math.random())+'_iframe';iframe.src=this.settings.blankFile||"logiarea.html";this.iframe=iframe;var compat=document.all?'IE':'W3C';var compatList=this.browserSpecific[compat];for(var ci in compatList){this[ci]=compatList[ci];}
this.attachIFrameLoadEvent();this.container.className+=' '+this.settings.areaCssClass;var toolbar=document.createElement('DIV');toolbar.className=this.settings.toolbarCssClass;this.addCommandRows(toolbar,this.settings.commands);this.toolbar=toolbar;this.container.appendChild(toolbar);var contentdiv=document.createElement('DIV');contentdiv.className=this.settings.iframeCssClass;contentdiv.appendChild(iframe);this.container.appendChild(contentdiv);},browserSpecific:{IE:{addEventListener:function(target,eventType,listener,context){target.attachEvent('on'+eventType,Delegate(context||this,listener));},attachIFrameLoadEvent:function(){this.ieLoad=function(){if(frames[this.iframe.id].document.readyState=='complete'){this.iframeLoaded();}else{setTimeout(Delegate(this,this.ieLoad),100);}};setTimeout(Delegate(this,this.ieLoad),100);},toggleSourceView:function(){this.sourceView=!this.sourceView;if(this.sourceView){this.iframe_body.innerText=innerXHTML(this.iframe_body);}else{this.iframe_body.innerHTML=this.iframe_body.innerText;}},getSelection:function(){var selection=this.iframe_document.selection;if(selection!=null){return selection.createRange();}},getHtmlFromSelection:function(){var range=this.getSelection();return range?range.text:'';},setHtmlToSelection:function(html){var range=this.getSelection();if(!range)return;if(typeof html=='string'){range.text=html;}else{range.pasteHTML(html.outerHTML);}},getValue:function(){if(this.iframe_body){return innerXHTML(this.iframe_body);}else{return this.content;}},iframeLoaded:function(){this.iframe_document=frames[this.iframe.id].document;this.iframe_body=this.iframe_document.documentElement.getElementsByTagName('BODY')[0];this.setValue(this.content);if(!this.readOnly){this.iframe_document.body.contentEditable=true;}}},W3C:{addEventListener:function(target,eventType,listener,context){target.addEventListener(eventType,Delegate(context||this,listener),true);},attachIFrameLoadEvent:function(){this.iframe.onload=Delegate(this,this.iframeLoaded);},toggleSourceView:function(){this.sourceView=!this.sourceView;if(this.sourceView){var htmlSrc=this.iframe_document.createTextNode(this.iframe_body.innerHTML);this.iframe_body.innerHTML="";this.iframe_body.appendChild(htmlSrc);}else{var htmlSrc=this.iframe_document.createRange();htmlSrc.selectNodeContents(this.iframe_body);this.iframe_body.innerHTML=htmlSrc.toString();}},getSelection:function(){var selection=this.iframe_document.defaultView.getSelection();return selection.getRangeAt(selection.rangeCount-1).cloneRange();},getHtmlFromSelection:function(){var range=this.getSelection();return range.toString();},setHtmlToSelection:function(html){var range=this.getSelection();if(typeof html=='string'){html=document.createTextNode(html);}
range.deleteContents();range.insertNode(html);},getValue:function(){return this.iframe_body.innerHTML;},iframeLoaded:function(){this.iframe_document=this.iframe.contentDocument;this.iframe_body=this.iframe_document.getElementsByTagName('BODY')[0];this.setValue(this.content);if(!this.readOnly){this.iframe_document.designMode="on";}}}},initSettings:function(settings){var defaultSettings=this.defaultSettings;for(var setting in settings){defaultSettings[setting]=settings[setting];}
this.settings=defaultSettings;},addCommand:function(toolbar,command){if('options'in command){var button=document.createElement('SELECT');if(command.css)button.className=command.css;opts=new Option(command.label,'');opts.selected=true;button.options.add(opts);var c=command.options;for(var i=0;i<c.length;i++){button.options.add(new Option(c[i].label,c[i].value));}
this.addEventListener(button,'change',function(){this.handleCommand(command.name,button.value);});}else{if('image'in command){var button=document.createElement('IMG');button.src=this.settings.imageDir+'/'+command.image;if("label"in command){button.title=button.alt=command.label;}}else if('label'in command){var button=document.createElement('BUTTON');button.innerHTML=command.label;}
if(command.name=='forecolor'||command.name=='hilitecolor'){var colorRows=this.defaultSettings.pallete;var container=document.createElement('TABLE');for(var cr=0;cr<colorRows.length;cr++){var colorRow=colorRows[cr];var row=container.insertRow(-1);for(var cc=0;cc<colorRow.length;cc++){var cell=row.insertCell(-1);cell.innerHTML=".";cell.style.color=cell.style.backgroundColor="#"+colorRow[cc];cell.style.height=cell.style.width='20px';}}
container.style.display='none';container.style.position='absolute';container.style.marginTop='28px';container.style.backgroundColor='#FFF';container.style.border='solid 2px black';var realbutton=button;button=document.createElement('SPAN');this.container.appendChild(container);button.appendChild(realbutton);this.addEventListener(realbutton,'click',function(){container.style.display=container.style.display=='block'?'none':'block';});this.addEventListener(container,'click',function(event){var cell=event.target||event.srcElement;container.style.display='none';if(cell.nodeName=='TD'){this.handleCommand(command.name,cell.style.backgroundColor);}});}else{this.addEventListener(button,'click',function(e){this.handleCommand(command.name,command.parameter);if(e.preventDefault)e.preventDefault();});}}
toolbar.appendChild(button);},addCommands:function(toolbar,commands){for(var i=0;i<commands.length;i++){this.addCommand(toolbar,commands[i]);}},addCommandRows:function(toolbar,commandRows){for(var i=0;i<commandRows.length;i++){var row=document.createElement('DIV');this.addCommands(row,commandRows[i]);toolbar.appendChild(row);}},defaultSettings:{readOnly:false,imageDir:'images',pallete:[["FFFFFF","FFCCCC","FFCC99","FFFF99","FFFFCC","99FF99","99FFFF","CCFFFF","CCCCFF","FFCCFF"],["CCCCCC","FF6666","FF9966","FFFF66","FFFF33","66FF99","33FFFF","66FFFF","9999FF","FF99FF"],["C0C0C0","FF0000","FF9900","FFCC66","FFFF00","33FF33","66CCCC","33CCFF","6666CC","CC66CC"],["999999","CC0000","FF6600","FFCC33","FFCC00","33CC00","00CCCC","3366FF","6633FF","CC33CC"],["666666","990000","CC6600","CC9933","999900","009900","339999","3333FF","6600CC","993399"],["333333","660000","993300","996633","666600","006600","336666","000099","333399","663366"],["000000","330000","663300","663333","333300","003300","003333","000066","330099","330033"]],areaCssClass:'Logi_Htmlarea',toolbarCssClass:'Logi_Htmlarea_Toolbar',iframeCssClass:'Logi_Htmlarea_Content',commands:[[{name:"toggleSourceView",label:"Source",parameter:''},{name:"bold",image:"bold.gif",label:"Bold",parameter:''},{name:"italic",image:"italic.gif",label:"Italic",parameter:''},{name:"underline",image:"underline.gif",label:"Underline",parameter:''},{name:"justifyleft",image:"left_just.gif",label:"Justify Left",parameter:''},{name:"justifycenter",image:"centre.gif",label:"Justify Center",parameter:''},{name:"justifyright",image:"right_just.gif",label:"Justify Right",parameter:''},{name:"justifyfull",image:"justifyfull.gif",label:"Justify Full",parameter:''},{name:"insertunorderedlist",image:"list.gif",label:"Unordered List",parameter:''},{name:"insertorderedlist",image:"numbered_list.gif",label:"Ordered List",parameter:''},{name:"superscript",image:"superscript.gif",label:"Superscript",parameter:''},{name:"subscript",image:"subscript.gif",label:"Subscript",parameter:''},{name:"image",image:"image.gif",label:"Insert Image",parameter:''},{name:"hyperlink",image:"hyperlink.gif",label:"Create Link",parameter:''},{name:"unlink",image:"unlink.gif",label:"Unlink",parameter:''}],[{name:"fontname",label:"Font",options:[{label:'Arial',value:'Arial, Helvetica, sans-serif'},{label:'Courier New',value:'Courier New, Courier, mono'},{label:'Times New Roman',value:'Times New Roman, Times, serif'},{label:'Verdana',value:'Verdana, Arial, Helvetica, sans-serif'}],parameter:'',css:"Logi_Htmlarea_Fontname"},{name:"fontsize",label:"Size",options:[{label:1,value:1},{label:2,value:2},{label:3,value:3},{label:4,value:4},{label:5,value:5},{label:6,value:6},{label:7,value:7}],parameter:'',css:"Logi_Htmlarea_Fontsize"},{name:"forecolor",image:"textcolor.gif",label:"Text color",parameter:''},{name:"hilitecolor",image:"bgcolor.gif",label:"Background color",parameter:''},{name:"outdent",image:"outdent.gif",label:"Outdent",parameter:''},{name:"indent",image:"indent.gif",label:"Indent",parameter:''},{name:"undo",image:"undo.gif",label:"Undo",parameter:''},{name:"redo",image:"redo.gif",label:"Redo",parameter:''}]]},specificCommandViews:{forecolor:{}},specificCommands:{toggleSourceView:function(){this.toggleSourceView();},hyperlink:function(parameter){var link=prompt("Please specify url:","http://");if(link){var text=prompt("Please specify link text:",this.getHtmlFromSelection());var target=prompt("Please specify target:","_blank");this.iframe_document.execCommand('unlink',false,null);var newlink=document.createElement('A');newlink.setAttribute('href',link);newlink.setAttribute('target',target);newlink.appendChild(document.createTextNode(text));this.setHtmlToSelection(newlink);}},image:function(parameter){var img=prompt("Please specify image url:","http://");if(img)this.iframe_document.execCommand('InsertImage',false,img);}},handleCommand:function(command,parameter){if(this.sourceView&&command!='toggleSourceView')return;if(command in this.specificCommands){this.specificCommands[command].call(this,parameter);}else{this.iframe_document.execCommand(command,false,parameter);}},setValue:function(value){this.content=value;if(this.iframe_body){this.iframe_body.innerHTML=value;}}});})();
Logi.UI.Widget.ReorderList=new Class({__construct:function(elementId,buttonUpId,buttonDownId){this.element=Logi.DOM.Element.compatNode(elementId);this.buttonUp=Logi.DOM.Element.compatNode(buttonUpId);this.buttonDown=Logi.DOM.Element.compatNode(buttonDownId);this.bindElement(this.buttonUp,'click','buttonUpClick');this.bindElement(this.buttonDown,'click','buttonDownClick');},validate:function(){return[this.element];},buttonUpClick:function(event){var st=this.element.scrollTop;if(this.element.selectedIndex>0){this.swap(this.element.selectedIndex-1,this.element.selectedIndex);this.element.selectedIndex--;}
this.element.scrollTop=st;},buttonDownClick:function(event){var st=this.element.scrollTop;if(this.element.selectedIndex>-1&&this.element.selectedIndex<this.element.options.length-1){this.swap(this.element.selectedIndex,this.element.selectedIndex+1);this.element.selectedIndex++;}
this.element.scrollTop=st;},swap:function(index1,index2){var o=this.element.options;var tmpText=o[index1].text;var tmpValue=o[index1].value;o[index1].text=o[index2].text;o[index1].value=o[index2].value;o[index2].text=tmpText;o[index2].value=tmpValue;},getValue:function(){var value=[];var o=this.element.options;for(var i=0;i<o.length;i++){value.push(o[i].value);}
return value;}},Logi.UI.Widget.base);
Logi.Tooltip=new Class({cssClass:undefined,tooltipDom:undefined,lastTooltip:undefined,__construct:function(cssClass){this.cssClass=cssClass||'tooltip';var body=Logi.DOM.Element.compatNode(document.getElementsByTagName('BODY')[0]);body.addEventListener('mouseover',Delegate(this,'tooltip'),true);this.tooltipDom=Logi.DOM.Element.create('DIV',{className:'logi_tooltip',style:{display:'none'}});body.appendChild(this.tooltipDom);},tooltip:function(event){if(this.lastTooltip==event.target)return;Logi.DOM.Element.hide(this.tooltipDom);if(Logi.DOM.Element.hasClass(event.target,this.cssClass)){this.tooltipDom.innerHTML=event.target.alt||event.target.title||Logi.DOM.Element.getText(event.target);this.lastTooltip=event.target;Logi.DOM.Element.show(this.tooltipDom);var cx=event.clientX+0;if(this.tooltipDom.parentNode.offsetWidth<cx+this.tooltipDom.offsetWidth){cx-=this.tooltipDom.offsetWidth;if(cx<0)cx=0;}
this.tooltipDom.style.left=cx+'px';this.tooltipDom.style.top=(event.clientY+24)+'px';}else{this.lastTooltip=null;}}});
Logi.History=Logi.History||{};Logi.History.Listener=Class({lastAddress:'',lastSuffix:'',lastPrevious:'',lastNext:'',lastLength:'',callback:null,__construct:function(callback){this.callback=callback;setInterval(Delegate(this,this.check),100);},getAddressPart:function(address){address=address||location.href;var sidx=address.indexOf('#');return sidx>-1?address.substr(sidx+1):'';},check:function(){var newAddress=location.href;var newSuffix;if(this.lastAddress!=newAddress){newSuffix=this.getAddressPart(newAddress);var navigationType=0;this.callback(newSuffix,navigationType,this.lastSuffix);this.lastAddress=newAddress;this.lastSuffix=newSuffix;this.lastLength=history.length;}}});Logi.History.MappingManager=new Class({commandExecutor:undefined,mapping:undefined,defaultMapping:undefined,__construct:function(mapping,defaultMapping,commandExecutor){this.commandExecutor=commandExecutor||Logi.emptyFunction;this.mapping=mapping||{};this.defaultMapping=defaultMapping;},getMapping:function(address){var handler=this.mapping[address];var arg='';var command=address;if(address.length==0&&this.defaultMapping){address=this.defaultMapping;}
if(address.length>0){if(typeof handler=='undefined'){for(var m in this.mapping){if(address.indexOf(m)==0){handler=this.mapping[m];arg=address.substr(m.length);command=m;break;}}}
if(typeof handler=='undefined'){handler=this.mapping[this.defaultMapping];}}
return{handler:handler,arg:arg,command:command};},refresh:function(){var address=location.href;var sidx=address.indexOf('#');var suffix=sidx>-1?address.substr(sidx+1):'';this.notify(suffix,0,suffix);},notify:function(newAddress,navigationType,oldAddress){var newMapping=this.getMapping(newAddress);var oldMapping=this.getMapping(oldAddress);this.handleNotification(newMapping,navigationType,oldMapping);},handleNotification:function(newMapping,navigationType,oldMapping){this.executeCommand(newMapping.handler,Logi.emptyFunction,newMapping.arg,navigationType,newMapping.command);},executeCommand:function(handler,callback,argument,navigationType,commandString){if(typeof handler!='undefined'){try{if(typeof handler=='function'){handler(callback,argument,navigationType,commandString);}else if(typeof handler=='string'){this.commandExecutor(handler,[callback,argument,navigationType,commandString]);}
(document.documentElement||document.body).scrollTop=0}catch(e){Logi.log(e);}}}});Logi.History.ContainerManager=new Class({container:undefined,idPrefix:undefined,activeContainer:undefined,__construct:function(container,idPrefix,mapping,defaultMapping,commandExecutor){this.__callParent(mapping,defaultMapping,commandExecutor);this.container=container;this.idPrefix=idPrefix;},handleNotification:function(newMapping,navigationType,oldMapping){var container=$el(this.idPrefix+newMapping.command);if(!container){container=Logi.DOM.Element.create('div',{id:this.idPrefix+newMapping.command},null,this.container);}
var callback=Delegate(this,function(html){container.innerHTML=html;if(this.activeContainer){Logi.DOM.Element.hide(this.activeContainer);}
Logi.DOM.Element.show(container);this.activeContainer=container;});this.executeCommand(newMapping.handler,callback,newMapping.arg,navigationType,newMapping.command);}});
Logi.UI.Autocomplete={};Logi.UI.Autocomplete.Manager=new Class({dataSource:undefined,textbox:undefined,dropdown:undefined,valueHolderElement:undefined,valueHolderCallback:undefined,__construct:function(dataSource,textbox,dropdown,options){this.textbox=Logi.DOM.Element.compatNode(textbox);this.dropdown=Logi.DOM.Element.compatNode(dropdown);this.dataSource=dataSource;this.listeners=[];this.valueHolderElement={};this.valueHolderCallback=Logi.emptyFunction;this.options=options||{};this.options.minTextLength=this.options.minTextLength||1;this.options.textboxFiller=this.options.textboxFiller||false;if(typeof options.valueHolder!='undefined'){var valueHolder=options.valueHolder;if(typeof valueHolder=='function'){this.valueHolderCallback=valueHolder;}else{this.valueHolderElement=Logi.DOM.Element.get(valueHolder);}}
this.textbox.addEventListener('keyup',Delegate(this,'boxType'),false);this.textbox.addEventListener('mouseup',Delegate(this,'boxClick'),false);this.dropdown.addEventListener('keyup',Delegate(this,'listType'),false);this.dropdown.addEventListener('mouseup',Delegate(this,'listClick'),false);},addChangeListener:function(listener){this.listeners.push(listener);},handleListSelection:function(){var txt=this.dropdown.options[this.dropdown.selectedIndex].text;this.valueHolderElement.value=this.dropdown.value;this.valueHolderCallback(this.dropdown.value);if(typeof this.options.textboxFiller=='function'){this.options.textboxFiller(this.textbox,txt);}else{this.textbox.value=txt;}
Logi.DOM.Element.addClass(this.textbox,'logi_autocomplete_valid');Logi.DOM.Element.removeClass(this.textbox,'logi_autocomplete_invalid');Logi.DOM.Element.hide(this.dropdown);Logi.DOM.Element.focus(this.textbox);for(var i=0;i<this.listeners.length;i++){this.listeners[i](this);}},listType:function(event){if(event.keyCode==13&&this.dropdown.selectedIndex>-1){event.stopPropagation();this.handleListSelection();}},listClick:function(event){if(this.dropdown.selectedIndex>-1){this.handleListSelection();}},boxClick:function(event){this.openCompletion();},openCompletionCallback:function(data){this.dropdown.options.length=0;for(var i in data){this.dropdown.options.add(new Option(data[i],i));}
if(this.dropdown.options.length>0){Logi.DOM.Element.show(this.dropdown);}else{Logi.DOM.Element.hide(this.dropdown);}
if(this.dropdown.options.length==1&&this.dropdown.options[0].text==this.textbox.value){this.valueHolderElement.value=this.dropdown.options[0].value;Logi.DOM.Element.addClass(this.textbox,'logi_autocomplete_valid');Logi.DOM.Element.removeClass(this.textbox,'logi_autocomplete_invalid');Logi.DOM.Element.hide(this.dropdown);}},openCompletionDefault:function(data){this.dropdown.options.length=0;for(var i in data){if(data[i].toLowerCase().indexOf(this.textbox.value.toLowerCase())==0){this.dropdown.options.add(new Option(data[i].replace(/ /g,'\u00A0'),i));}}
if(this.dropdown.options.length>0){Logi.DOM.Element.show(this.dropdown);}},openCompletion:function(){if(this.textbox.value.length>=this.options.minTextLength){if(typeof this.dataSource=='function'){if(this.timeouter)clearTimeout(this.timeouter);if(!this.dsTimeout)this.dsTimeout=Delegate(this,function(){this.dataSource(this.textbox.value,Delegate(this,this.openCompletionCallback));});this.timeouter=setTimeout(this.dsTimeout,250);}else{this.openCompletionDefault(this.dataSource);}}},boxType:function(event){if(event.keyCode==27){Logi.DOM.Element.hide(this.dropdown);return;}
if(event.keyCode<40&&event.keyCode!=32&&event.keyCode!=8)return;if(event.keyCode==40){if(this.dropdown.style.display!='none'){this.dropdown.selectedIndex=0;Logi.DOM.Element.focus(this.dropdown);}
return;}
Logi.DOM.Element.removeClass(this.textbox,'logi_autocomplete_valid');Logi.DOM.Element.addClass(this.textbox,'logi_autocomplete_invalid');if(this.options.autoInvalidate){this.valueHolderElement.value='';}
if(this.textbox.value.length<this.options.minTextLength){Logi.DOM.Element.hide(this.dropdown);this.dropdown.options.length=0;return;}
this.openCompletion();}});
(function(){var tile=new Class({actions:undefined,container:true,__construct:function(){this.actions=this.actions||{};},setArguments:Logi.emptyFunction,handleAction:function(action){if(!this.actions[action]){throw new Error('Action '+action+' not defined.');}
return this.actions[action].apply(this,Array.prototype.slice.apply(arguments,[1]));}});var ctile=new Class({templateSource:undefined,dataSource:undefined,metadataSource:undefined,template:undefined,data:undefined,metadata:undefined,loadResource:function(sourceName,resourceName,defaultLoader,onload){if(this[resourceName]!==undefined){return onload(this[resourceName]);}
var onloadWrapper=Delegate(this,function(result){this[resourceName]=result;onload(result);});var s=this[sourceName]instanceof Array?this[sourceName].join(':'):this[sourceName];switch(typeof s){case'function':return s(onloadWrapper);case'string':return defaultLoader(s,onloadWrapper)
case'undefined':default:return onload();}},setupTile:Logi.emptyFunction,serverTile:undefined,onload:Logi.emptyFunction,load:function(){this.loadResource('templateSource','template',Delegate(Site,'getHTML'),Delegate(this,function(template){this.loadResource('dataSource','data',Delegate(Site,'loadData'),Delegate(this,function(data){this.loadResource('metadataSource','metadata',Delegate(Site,'loadData'),Delegate(this,function(metadata){this.setupTile(template,data,metadata);}));}));}));},setupTile:Logi.abstractFunction("Site.ClientTile.setupTile is abstract. Please implement!")},tile);var setupDialogTile=function(template,data,metadata){this.widget=this.createWidget(template,data,metadata);this.widget.setValue(data);var tpl=false;if(template){tpl=this.widget.prepareCustomTemplate(template);}
var targetDiv;var container=this.container;if(typeof container=='object'){this.popup=Logi.UI.PopupWindowManager.open(container.title,'',container.options);targetDiv=this.popup.contentBar;}else{targetDiv=container===true?'content':container;Logi.DOM.Element.get(targetDiv).innerHTML='';}
this.widget.render(targetDiv,tpl);this.onload();}
var cftile=new Class({validate:Logi.emptyFunction,submitCallback:Logi.emptyFunction,__construct:function(){this.__callParent();this.actions.submit=this.submit;},submit:function(){try{this.validate();var data=this.getSubmitValue();Site.handleAction(this.serverAction,data,DelegateIterate(this,this.submitCallback));}catch(e){if(e.ghost){Logi.UI.Effects.ghostMessage(e.message||e.error);}else{Logi.UI.MessageBox.show(Logi.Language.term("Validation error"),e.message||e.error,function(){Logi.DOM.Element.focus(e.element||(e.elements&&e.elements[0]));});}
return false;}},validate:function(){this.widget.validate();},getSubmitValue:function(){return this.widget.getValue();},setupTile:setupDialogTile},ctile);var clftile=new Class({listContainer:undefined,__construct:function(listTile){this.__callParent();this.listTile=listTile;this.actions.filter=this.filter;},filter:function(){this.listTile.applyFilter();},setupTile:setupDialogTile},ctile);var cltile=new Class({filterTile:undefined,sortable:false,hasPaging:false,currentPage:1,totalPages:1,__construct:function(){this.__callParent();this.state={filter:null,sortBy:null,page:1};if(this.sortable)this.actions.sort=this.doSort;if(this.hasPaging)this.actions.page=this.goToPage;},simpleActionCreator:function(action,dataColumn,label){return Delegate(this,function(gridRow){return new Logi.UI.Widget.Action.Link(Delegate(this,function(){this.handleAction(action,gridRow.getValue()[dataColumn]);}),label);})},load:function(){if(!this.filterTile)return this.__callParent();var module=this.filterTile.module;var tile=this.filterTile.tile;this.filterTile=Site.Modules[module].Instances[tile]=new Site.Modules[module].Classes[tile](this);this.filterTile.load();},setupTile:function(template,data,metadata){if(!this.widget){this.widget=this.createWidget(template,data,metadata);if(this.sortable){this.widget.options.sortHandler=Delegate(this,this.doSort);}
if(this.hasPaging){this.widget.options.pagination=new Logi.UI.Widget.Grid.Pagination({colspan:2,pageContainerCssClass:'paging'},Delegate(this,this.goToPage));this.widget.options.pagination.setValue({current:this.currentPage,total:this.totalPages});}
this.widget.setValue(data);var container=(this.filterTile&&this.filterTile.listContainer)||this.container;Logi.DOM.Element.get(container).innerHTML='';this.widget.render(container,{main:new Logi.UI.Template('<div class="list"><table><thead>{{header}}</thead><tfoot>{{pagination}}</tfoot><tbody>{{rows}}</tbody></table></div>')});}else{this.widget.setValue(data);if(this.hasPaging){this.widget.options.pagination.setValue({current:this.currentPage,total:this.totalPages});}}},reload:function(){Site.handleAction(this.filterServerAction,this.state,Delegate(this,function(data){var data=json_decode(data);this.data=data.data;this.currentPage=data.current_page;this.totalPages=data.total_pages;this.setupTile(this.template,this.data,this.metadata);}));},doSort:function(grid,column,index,sortBy){var asc='+'+column;var desc='-'+column;this.state.sortBy=this.state.sortBy==asc?desc:asc;this.reload();},goToPage:function(pagintion,page){this.state.page=page;this.reload();},applyFilter:function(){this.state.filter=this.filterTile.widget.getValue();this.state.page=1;this.reload();}},ctile);var stile=new Class({__construct:function(){if(this.serverTile instanceof Array){this.serverTile=Logi.clone(this.serverTile);}
this.__callParent();},serverTile:undefined,onload:Logi.emptyFunction,load:function(){var container=this.container;var onload=Delegate(this,'onload');if(typeof container=='function'){container=container.call(this);}
if(typeof container=='object'){Site.loadInPopup(container.title,this.serverTile,onload,container.options);}else{Site.loadHTML(this.serverTile,onload,container===true?undefined:container);}}},tile);var sftile=new Class({validate:Logi.emptyFunction,isValid:function(){var data=Logi.Data.Form.serialize(this.htmlForm);return Site.validate(data,Delegate(this,this.validate));},submitCallback:Logi.emptyFunction,htmlForm:undefined,__construct:function(){this.__callParent();this.actions.submit=this.submit;},submit:function(){Site.submitForm(this.serverAction,this.htmlForm,Delegate(this,this.validate),DelegateIterate(this,this.submitCallback));}},stile);var slftile=new Class({listContainer:undefined,htmlForm:undefined,__construct:function(listTile){this.__callParent();this.listTile=listTile;this.actions.filter=this.filter;},filter:function(){this.listTile.applyFilter();}},stile);var sltile=new Class({filterTile:undefined,sortable:false,hasPaging:false,hasPageSizer:false,getFilterTile:Logi.emptyFunction,filterServerAction:undefined,state:undefined,__construct:function(){this.__callParent();this.state={filter:null,sortBy:null,page:1,pageSize:false};if(this.sortable)this.actions.sort=this.doSort;if(this.hasPaging)this.actions.page=this.goToPage;if(this.hasPageSizer)this.actions.pageSize=this.setPageSize;if(this.filterTile){}},doSort:function(sortBy){this.state.sortBy=sortBy;this.reload();},goToPage:function(page){this.state.page=page;this.reload();},setPageSize:function(size){this.state.pageSize=size;this.reload();},load:function(){if(!this.filterTile)return this.__callParent();var module=this.filterTile.module;var tile=this.filterTile.tile;if(!Site.Modules[module]){throw new Error("Module "+module+" not found!");}
if(!Site.Modules[module].Classes[tile]){throw new Error("Tile "+tile+" for module "+module+" not found!");}
this.filterTile=Site.Modules[module].Instances[tile]=this.createFilterInstance(Site.Modules[module].Classes[tile]);this.filterTile.load();},createFilterInstance:function(filterClass){return new filterClass(this);},applyFilter:function(){this.state.filter=Logi.Data.Form.serialize(this.filterTile.htmlForm);this.state.page=1;this.reload();},reload:function(){var container=(this.filterTile&&this.filterTile.listContainer)||this.container;if(container===true){container='content';}
var onload=Delegate(this,'onload');if(typeof container=='function'){container=container.call(this);}
if($el(container)){Site.handleAction(this.filterServerAction,this.state,function(html){$el(container).innerHTML=html;onload();});}else{Logi.log("Container ",container," is missing and reload operation for list is ignored!");}}},stile);var SitePrototype=new Class({server:undefined,Modules:undefined,__construct:function(server){this.server=server;this.Modules={};this.uploadForms=[];this.commands={};},addModule:function(moduleName,objects){this.Modules[moduleName]=objects;},addCommand:function(commandName,moduleName,command){this.commands[commandName]={command:command,module:moduleName};},handleMenuClick:function(module,action){scroll(0,0);this.handleModuleAction(module,action);},handleModuleAction:function(module,action,args){try{var a=this.Modules[module].Actions&&this.Modules[module].Actions[action];if(typeof a=='function'){return a(args);}
this.runTile(module,action,args);}catch(e){alert(e);}},setBookmark:function(bookmark){this.bookmark=bookmark;},getBookmark:function(){return this.bookmark;},runTile:function(module,tile,args){if(!this.Modules[module].Classes[tile]){throw new Error("Tile "+tile+" for module "+module+" is missing.");}
var i=new this.Modules[module].Classes[tile]();i.setArguments(args);this.Modules[module].Instances[typeof i.getTileId=='function'?i.getTileId():tile]=i;i.load();return i;},loadHTML:function(html,onload,parentContainer){if(html instanceof Array)html=html.join(':');Logi.Net.Ajax.request(this.server+'?html:'+html,null,function(response){Logi.DOM.Element.get(parentContainer||'content').innerHTML=response;if(typeof onload=='function')onload();},'get');},getHTML:function(html,onload){if(html instanceof Array)html=html.join(':');Logi.Net.Ajax.request(this.server+'?html:'+html,null,onload,'get');},loadData:function(data,onload){if(data instanceof Array)data=data.join(':');Logi.Net.JSON.request(this.server+'?data:'+encodeURI(data),null,onload,'get');},closeCurrentPopup:Logi.UI.PopupWindowManager.close,loadInPopup:function(title,html,onload,options){if(html instanceof Array)html=html.join(':');Logi.Net.Ajax.request(this.server+'?html:'+html,null,function(response){var popup=Logi.UI.PopupWindowManager.open(title,response,options);if(typeof onload=='function')onload(popup);},'get');},bindKeysToButton:function(form,mapping){var keyHandler=function(event){var btn=$el(mapping[event.keyCode]);if(btn){Logi.DOM.Event.simulateMouseClick(btn);event.preventDefault();}};elements=$el(form).elements;if(elements)for(var i=0;i<elements.length;i++){var el=elements[i];if(!el.disabled&&el.nodeName!='TEXTAREA'&&!Logi.DOM.Element.hasClass(el,'logi_autocomplete')){Logi.DOM.Element.compatNode(el).addEventListener('keypress',keyHandler,false);}}},validate:function(data,validateFunction){try{validateFunction(data);return true;}catch(e){if(e.ghost){Logi.UI.Effects.ghostMessage(e.message||e.error,{className:'logi_effect_ghost_message logi_effect_ghost_error_message'});}else{Logi.UI.MessageBox.show(Logi.Language.term("Validation error"),e.message||e.error,function(){Logi.DOM.Element.focus(e.element||(e.elements&&e.elements[0]));});};return false;}},handleAction:function(action,data,callback){var actionCallback=Logi.emptyFunction
if(typeof callback=='function'){actionCallback={success:callback}}else{actionCallback=Logi.clone(callback);}
if(typeof actionCallback.exception=='function'){var oldSuccess=actionCallback.success;actionCallback.success=function(response){if(typeof response=='string'&&response.charAt(0)=='@'){actionCallback.exception(response.substring(1));}else if(response=='false'){actionCallback.exception();}else{if(response.indexOf('Logi_Exception')>-1){Logi.UI.MessageBox.show('PHP Exception',response,null,{width:600});}
var r=response.length?Logi.Net.JSON.decode(response):null;oldSuccess(r);}}}
Logi.Net.Ajax.request(this.server+'?action:'+action,json_encode(data),actionCallback,'post');},submitForm:function(action,form,validator,callback){var data=Logi.Data.Form.serialize(form);if(this.validate(data,validator)){this.handleAction(action,data,callback);}},submitUploadForm:function(formRef,callback){this.uploadForms.push({formRef:formRef,callback:callback});this.checkUploadForms();},checkUploadForms:function(){if(this.uploadForms.length>0){var cform=this.uploadForms.shift();this.currentUploadFormCallback=cform.callback;$el(cform.formRef).submit();}},uploadReady:function(response){this.currentUploadFormCallback(response);this.checkUploadForms();},exec:function(clientCommand,args){var cmd=this.commands[clientCommand];if(!cmd||typeof cmd.command!='function'){Logi.log("Invalid command "+clientCommand);return false;}
try{return cmd.command.apply(Site.Modules[cmd.module],args||[]);}catch(e){Logi.log(e);return false;}},ClientFormTile:cftile,ClientListTile:cltile,ClientListFilterTile:clftile,ServerTile:stile,ServerFormTile:sftile,ServerListFilterTile:slftile,ServerListTile:sltile});Logi.Site={init:function(server){Site=new SitePrototype(server);}}
if(typeof Logi.Type.objectLocator=='function'&&Logi.Type.objectLocator.isAbstract){Logi.Type.objectLocator=function(objectName){var osplit=objectName.split('.');return Site.Modules[osplit[0]].Objects[osplit[1]];}}})();
