
var Mohawk={version:'0.1',UI:{selection:false,selectables:[]},Utils:{},DOM:{},url:URL.js,XHR:function(){var XHR=null;if(window.XMLHttpRequest){XHR=new XMLHttpRequest();}else if(window.ActiveXObject){XHR=new ActiveXObject('Microsoft.XMLHTTP');}else{alert('XMLHttpRequest is disabled in your browser');return false;}
return XHR;}};var IE=typeof(window.ActiveXObject)!='undefined';var FF=navigator.userAgent.match('Gecko')!=null;var OPERA=typeof(window.opera)!='undefined';var WEBKIT=navigator.userAgent.match('WebKit')!=null;if(WEBKIT){FF=false;}
var BTN_LEFT=IE?1:0;var BTN_MIDDLE=IE?4:1;var BTN_RIGHT=2;function is_scalar(variable){return['number','string','boolean'].has(typeof(variable));}
function is_numeric(variable){return(typeof(variable)=='number')||(typeof(variable)=='string'&&variable*1+''==variable);}
function empty(variable){if(variable===0||variable==='0'||variable===''||variable===false||variable===null||typeof(variable)=='undefined'){return true;}
if(variable instanceof Array){return!variable.length;}
if(variable instanceof Object){return!variable.keys().length;}
return false;};function extend(target,source,directly){if(target.prototype&&!directly){extend(target.prototype,source);}else{if(typeof(target.base)=='undefined'){target.base={};}
for(var i in source){if(typeof(target[i])!='undefined'){if(typeof(target.base[i])=='undefined'){target.base[i]=target[i];}}
target[i]=source[i];}}};Function.prototype.parse=function(){var source=this.toSource instanceof Function?this.toSource():this.toString();var regex=new RegExp('\\(?\\s*function\\s*([a-z$_][a-z$_0-9]*)?\\s*\\(\\s*([^\\)]*)\\s*\\)\\s*\\{([^\x01]*)\\}\\s*\\)?\\s*','img');var m=null;if(m=regex.exec(source)){return{name:m[1],params:m[2].split(new RegExp('\\s*,\\s*')),body:m[3]};}else{return null;}};var ObjectInterface={exists:function(key){return typeof(this[key])!='undefined';},get:function(key,default_value){if(typeof(this[key])!='undefined'){return this[key];}else{return default_value?default_value:'';}},has:function(value){for(var i in this){if(value==this[i]){return true;}}
return false;},key:function(value){for(var i in this){if(value==this[i]){return i;}}
return false;},keys:function(){var keys=[];for(var i in this){if(typeof(Object.prototype[i])=='undefined'){keys.push(i);}}
return keys;},values:function(){var values=[];var obj=this;obj.forEach(function(){values.push(this);});return values;},forEach:function(action){for(var i in this){if(typeof(Object.prototype[i])=='undefined'){var value=action.call(this[i],i,this[i]);if(value===false){break;}}}},clone:function(){var clone={};var obj=this;this.forEach(function(key){clone[key]=obj[key];});return clone;}};var ArrayInterface={keys:function(){var keys=[];for(var i in this){if(typeof(Object.prototype[i])=='undefined'&&typeof(Array.prototype[i])=='undefined'){keys.push(i);}}
return keys;},last:function(){return this.slice(-1)[0];},pull:function(value){for(var i in this){if(value==this[i]){this.splice(i,1);}}},forEach:function(action){for(var i=0;i<this.length;i++){var value=action.call(this[i],i,this[i]);if(value===false){break;}}},binSearch:function(value){var l=0;var r=this.length-1;if(this[l]>value){return l;}
if(this[r]<value){return r+1;}
do{var m=Math.round((r+l)/2);if(m==l||m==r||this[m]==value){break;}else if(this[m]<value){l=m;}else{r=m;}}while(true);return m;},intersect:function(array,sorted){if(!sorted){this.sort();array.sort();}
var i=0,j=0;var unique=[];while(i<this.length&&j<array.length){if(this[i]<array[j]){i++;}else if(this[i]>array[j]){j++;}else{unique.push(this[i]);i++;j++;}}
return unique;},divide:function(num){var length=Math.ceil(this.length/num);var chunks=[];for(var i=0;i<num;i++){chunks.push(this.slice(i*length,(i+1)*length));}
return chunks;}};extend(Object,ObjectInterface);extend(Array,ArrayInterface);Object.combine=function(keys,values){var obj={};for(var i=0;i<keys.length;i++){obj[keys[i]]=values[i];}
return obj;};var MathInterface={sign:function(x){return x==0?0:(x>0?1:-1);},rand:function(min,max){if(!max){min=0;max=min;}
return Math.round(Math.random()*(max-min))+min;},round:function(num,precision){if(!precision||precision<0){return Math.base.round(num);}else{var base=Math.pow(10,precision);return Math.base.round(num*base)/base;}}};extend(Math,MathInterface);var NumberInterface={toHex:function(){if(this==0){return'0';}
var hex='';var digits=['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'];var d=this;var pow=Math.floor(Math.log(d)/Math.log(16));var base=Math.pow(16,pow);for(var i=pow;i>=0;i--){var q=Math.floor(d/base);d-=q*base;hex+=digits[q];base/=16;}
return hex;}};extend(Number,NumberInterface);RegExp.quote=function(str){var regexp=new RegExp('([\\<\\>\\/\\?\\.\\$\\^\\[\\]\\*\\+\\\\])','g');return str.replace(regexp,'\\$1');};var Class=function(object){return this.extend(object);};var Singletone=function(object){var class_interface=new Class(object);var instance=new class_interface();return instance;};Class.prototype={self:null,parent:null,extend:function(descendant){var child=Class.method(descendant.__construct||(this.prototype&&this.prototype.__construct?this.prototype.__construct:function(){}),'Class.setSelf(this); var self = this.self; var parent = this.parent; this.static = arguments.callee; var static = this.static; ');var methods=descendant.keys();child.prototype.parent={};for(var i in this.prototype){if(this.prototype[i]instanceof Function){child.prototype.parent[i]=Class.method(this.prototype[i]);}else{child.prototype.parent[i]=this.prototype[i];}
if(i!='parent'){if(this.prototype[i]instanceof Function){child.prototype[i]=Class.method(this.prototype[i],!methods.has(i)?'if (parent && parent.parent) {parent = parent.parent};'+Class.label:'');}else{child.prototype[i]=this.prototype[i];}}}
if(typeof(child.base)=='undefined'){child.base={};}
for(var i in this){if(typeof(child[i])=='undefined'){child[i]=this[i];}}
for(var i in descendant){if(descendant[i]instanceof Function){child.prototype[i]=Class.method(descendant[i],'var __function__ = "'+i+'"; var self = this.self; var parent = this.parent; var static = this.static; '+Class.label+'if (self) {try {parent.self = self} catch (e) {}}');}else{child.prototype[i]=descendant[i];}}
child.extend=this.extend;return child;}};Class.extend=Class.prototype.extend;Class.label='Class.here();';Class.here=function(){};Class.method=function(action,add){var source=action.parse();var f=function(){};if(source){if(source.body.indexOf(Class.label)>0){source.body=source.body.replace(Class.label,add||'');}else{source.body=(add||'')+source.body;}
var str='f = function ('+source.params.join(',')+') {'+source.body+'};';eval(str);}else{f=false;}
return f;};Class.setSelf=function(object){var base=object;do{object.self=base;object=object.parent;}while(object&&object.parent);};document.loaders=[];document.callLoaders=function(){if(document.loaded){while(document.loaders.length){var loader=document.loaders.shift();if(loader instanceof Function){loader.call(document);}}}};if(FF){document.addEventListener('DOMContentLoaded',function(){document.loaded=true;document.callLoaders.call(document);},false);}else if(WEBKIT){function callLoaders(){if(['loaded','complete'].has(document.readyState)){document.loaded=true;document.callLoaders.call(document);}else{setTimeout(callLoaders,0);}}
setTimeout(callLoaders,0);}else{document.onreadystatechange=function(){if(['loaded','complete'].has(document.readyState)){document.loaded=true;document.callLoaders();}};}
document.addLoader=function(action){if(document.loaded){action.call(document);}else{if(!document.loaders.has(action)){document.loaders.push(action);}}};Mohawk.included=[];function include(path){var first=path.substr(0,path.indexOf('.'));var url=Mohawk.url;if(typeof(URL[first])!='undefined'){url=URL[first];path=path.substr(path.indexOf('.')+1);}
var include_path=url+path.replace(new RegExp('\\.','g'),'/')+'.js';if(!Mohawk.included.has(include_path)){var XHR=Mohawk.XHR();XHR.open('GET',include_path,false);XHR.setRequestHeader('Pragma','no-cache');XHR.setRequestHeader('Expires','-1');XHR.send(null);eval(XHR.responseText);Mohawk.included.push(include_path);delete(XHR);}}
window.Pixel=new Class({x:0,y:0,__construct:function(x,y){if(typeof x!='undefined'){if(typeof y!='undefined'){self.x=x||0;self.y=y||0;}else{self.x=x.x;self.y=x.y;}}},inside:function(rect){return self.x>=rect.start.x&&self.x<=rect.end.x&&self.y>=rect.start.y&&self.y<=rect.end.y;},toString:function(){return[self.x,self.y].toString();}});window.Rect=new Class({start:null,end:null,__construct:function(start,end){if(start&&end){self.start=start;self.end=end;}else{self.start=new Pixel;self.end=new Pixel;}},toString:function(){return[self.start.toString(),self.end.toString()].toString();}});Rect.fromNode=function(node){var start=node.coordinates();return new Rect(start,new Pixel(start.x+node.offsetWidth,start.y+node.offsetHeight));}
Mohawk.Template=new Singletone({vars:{},keywords:['end','else'],assign:function(name,value){if(self.keywords.has(name)){alert(name+' is a keyword');}
self.vars[name]=value;},transform:function(text){var init='';self.vars.forEach(function(name){init+='var '+name+' = self.vars["'+name+'"];';});var variable='[a-z_][a-z_0-9]*(?:\\[[^\\]]*\\]|\\.[a-z_][a-z_0-9]*)*';var modifier='[a-z_][a-z_0-9]*(?:\\.[a-z_][a-z_0-9]*)*';var condition='[^\\}]+';text=text.replace(new RegExp('\"','g'),'\\\"');text=text.replace(new RegExp('\\n','g'),'\\n');text=text.replace(new RegExp('\\{%for\\s+('+variable+') in ('+variable+')\\}','gmi'),'"; for (var __k__ in $2) {'+'if (typeof Object.prototype[__k__] != \'undefined\' || typeof Array.prototype[__k__] != \'undefined\') continue; var $1 = $2[__k__]; __s__ += "');text=text.replace(new RegExp('\\{%for\\s+('+variable+') in ('+variable+')\\s+=>\\s+('+variable+')\\}','gmi'),'"; for (var $3 in $2) {'+'if (typeof Object.prototype[$3] != \'undefined\' || typeof Array.prototype[$3] != \'undefined\') continue; var $1 = $2[$3]; __s__ += "');text=text.replace(new RegExp('\\{%if\\s+('+condition+')\\}','gmi'),'"; if ($1) {__s__ += "');text=text.replace(new RegExp('\\{%elseif\\s+('+condition+')\\}','gmi'),'"; } else if ($1) {__s__ += "');text=text.replace(new RegExp('\\{%else\\}','gmi'),'"; } else { __s__ += "');text=text.replace(new RegExp('\\{%end\\}','gmi'),'"; } __s__ += "');text=text.replace(new RegExp('\\{%('+variable+')\\|('+modifier+')\\}','gmi'),'" + $2($1) + "');text=text.replace(new RegExp('\\{%('+variable+')\\}','gmi'),'" + $1 + "');eval(init+'__s__ = "'+text+'"');return __s__;}});Mohawk.NodeEffectInterface={show:function(effect){if(this.style.visibility=='hidden'){this.style.visibility='visible';if(effect instanceof Function){effect.call(this,this,this.show);}}},hide:function(effect){if(this.style.visibility!='hidden'){if(effect instanceof Function){effect.call(this,this,this.hide);}else{this.style.visibility='hidden';}}},display:function(effect,display){this.style.display=display?display:(this._display?this._display:'block');if(effect instanceof Function){effect.call(this,this,this.display);}},collapse:function(effect){if(this.style.display!='none'){if(effect instanceof Function){effect.call(this,this,this.collapse);}else{this._display=this.style.display;this.style.display='none';}}},toggleDisplay:function(effect){if(e.offsetWidth==0){this.display(effect);}else{this.collapse(effect);}},remove:function(effect){if(this.parentNode){if(effect instanceof Function){effect(this,this.remove);}else{this.parentNode.removeChild(this);}}},setOpacity:function(opacity){if(IE){this.style.filter='Alpha(Opacity="'+(opacity*100)+'")';}else{this.style.opacity=opacity;}},getOpacity:function(opacity){if(IE){}else{return this.style.opacity;}}};Mohawk.Effects=new Singletone({opacity_delay:10,opacity_step:0.025,blink_delay:100,blink_number:3,_stop:false,moving:null,opacity:function(object,start,end,finalize,current){self=Mohawk.Effects;if(typeof current=='undefined'){current=start;object._opacity=object.getOpacity();}
current+=self.opacity_step*Math.sign(end-start);object.setOpacity(current);if(Math.sign(end-start)!=0&&(Math.sign(end-start)==Math.sign(end-current)||!Math.sign(end-current))){setTimeout(function(){self.opacity(object,start,end,finalize,current)},self.opacity_delay);}else{object.setOpacity(end);if(finalize instanceof Function){finalize.call(object);object.setOpacity(object._opacity);}}},appear:function(object,finalize){Mohawk.Effects.opacity(object,0,1,finalize);},vanish:function(object,finalize){Mohawk.Effects.opacity(object,1,0,finalize);},blink:function(object,finalize,start,counter){self=Mohawk.Effects;if(typeof counter=='undefined'){counter=0;start=!['hidden','off'].has(object.style.visibility);}
counter++;if(counter<self.blink_number*2){object.style.visibility=(counter+start)%2?'hidden':'visible';setTimeout(function(){self.blink(object,finalize,start,counter)},self.blink_delay);}else{object.style.visibility=start?'visible':'hidden';if(finalize instanceof Function){finalize.call(object);}}},move:function(e,x,y,step_x,step_y,acc_x,acc_y,finalize,offset){var self=Mohawk.Effects;var cur_x=e.offsetLeft;var cur_y=e.offsetTop;if(!offset){var temp=document.createElement('DIV');temp.style.left='0px';temp.style.top='0px';temp.style.position='absolute';e.parentNode.appendChild(temp);offset=new Pixel(temp.offsetLeft,temp.offsetTop);temp.remove();}
if(!x&&x!==0){x=cur_x;}
if(!y&&y!==0){y=cur_y;}
if(!step_x){step_x=1;}
if(!step_y){step_y=1;}
if(!acc_x){acc_x=1;}
if(!acc_y){acc_y=1;}
self._move(e,x,y,step_x,step_y,acc_x,acc_y,finalize,offset);},_move:function(e,x,y,step_x,step_y,acc_x,acc_y,finalize,offset){var self=Mohawk.Effects;var cur_x=e.offsetLeft;var cur_y=e.offsetTop;var moved_x=false;if(Math.abs(cur_x-x)>=step_x){e.style.left=(cur_x+Math.sign(x-cur_x)*step_x)+'px';moved_x=true;}else{e.style.left=x-offset.x+'px';}
var moved_y=false;if(Math.abs(cur_y-y)>=step_y){e.style.top=(cur_y+Math.sign(y-cur_y)*step_y)+'px';moved_y=true;}else{e.style.top=y-offset.y+'px';}
if(moved_x||moved_y){self.moving=setTimeout(function(){self._move(e,x,y,step_x*acc_x,step_y*acc_y,acc_x,acc_y,finalize,offset)},1);}else{if(finalize instanceof Function){finalize.call(e);}}},stop:function(){clearTimeout(self.moving);}});Mohawk.EventInterface={preventDefault:function(){if(this.button==BTN_RIGHT){if(OPERA){no_ctmenu=window.no_ctmenu;if(!no_ctmenu){no_ctmenu=document.createElement('input');no_ctmenu.type='button';document.body.appendChild(no_ctmenu);}
no_ctmenu.style.position='fixed';no_ctmenu.style.top=this.clientY-2+'px';no_ctmenu.style.left=this.clientX-2+'px';no_ctmenu.style.width='5px';no_ctmenu.style.height='5px';no_ctmenu.style.opacity=0;no_ctmenu.style.zIndex=10000;}}
if(typeof this.returnValue!='undefined'){this.returnValue=false;}else{if(window._preventDefault instanceof Function){window._preventDefault.call(this);}}
return false;},stopPropagation:function(){if(typeof this.cancelBubble!='undefined'){this.cancelBubble=true;}else{if(window._stopPropagation instanceof Function){window._stopPropagation.call(this);}}
return false;},cursor:function(){var x=0,y=0;if(this.pageX||this.pageY){x=this.pageX;y=this.pageY;}else if(this.clientX||this.clientY){x=this.clientX+document.scrollLeft();y=this.clientY+document.scrollTop();}else if(this.screenX||this.screenY){x=this.screenX;y=this.screenY;}
return new Pixel(x,y);},wheel:function(){var delta=0;if(this.wheelDelta){delta=event.wheelDelta/120;}else if(this.detail){delta=-this.detail/3;}
return delta;},key:function(){return this.keyCode||this.which||null;},element:function(){return this.srcElement||this.currentTarget;}};if(window.Event){window._preventDefault=window.Event.prototype.preventDefault;window._stopPropagation=window.Event.prototype.stopPropagation;if(FF){delete(Mohawk.EventInterface.preventDefault);}
extend(window.Event,Mohawk.EventInterface);}
Mohawk.NodeClassInterface={getClasses:function(){return this.className?this.className.split(new RegExp('\\s+')):[];},hasClass:function(className){var classes=this.getClasses();for(var i=0;i<arguments.length;i++){if(classes.has(arguments[i])){return true;}}
return false;},addClass:function(className,test){for(var i=0;i<arguments.length;i++){if(!this.hasClass(arguments[i])){this.className+=' '+arguments[i];}}},removeClass:function(className){var classes=this.getClasses();for(var i=0;i<arguments.length;i++){classes.pull(arguments[i]);}
this.className=classes.join(' ');},replaceClass:function(find,replace){var classes=this.getClasses();if((key=classes.key(find))!==false){classes[key]=replace;this.className=classes.join(' ');}else{this.addClass(replace);}},flipClass:function(className){for(var i=0;i<arguments.length;i++){if(this.hasClass(arguments[i])){this.removeClass(arguments[i]);}else{this.addClass(arguments[i]);}}},copyClassesTo:function(element){var classes=this.getClasses();classes.forEach(function(){element.addClass(this);});},setClassesTo:function(element){element.className=this.className;}};Mohawk.NodeEventInterface={_events:null,addEvent:function(event,action,useCapture){var source=action.parse();var $event=source.params[0]||'event';source.body='if (IE) {extend('+$event+', Mohawk.EventInterface)};'+source.body;action=new Function(source.params,source.body);var hash=action.toString();if(!this._events){this._events=new Object;}
if(!this._events[event]){this._events[event]=[];}
if(!this._events[event][hash]){this._events[event][hash]=action;if(!useCapture){useCapture=false;}
if(this.addEventListener){this.addEventListener(event,action,useCapture);}else if(this.attachEvent){this.attachEvent('on'+event,action);}}
return action;},removeEvent:function(event,action,useCapture){var source=action.parse();var $event=source.params[0]||'event';source.body='if (IE) {extend('+$event+', Mohawk.EventInterface)};'+source.body;action=new Function(source.params,source.body);var hash=action.toString();if(this._events[event]&&this._events[event][hash]){action=this._events[event][hash];}
if(!useCapture){useCapture=false;}
if(this.removeEventListener){this.removeEventListener(event,action,useCapture);}else if(this.detachEvent){this.detachEvent('on'+event,action);}
if(this._events[event]&&this._events[event][hash]){delete(this._events[event][hash]);}}};Mohawk.NodeStructureInterface={coordinates:function(){var x=0,y=0;var element=this;while(element){x+=element.offsetLeft;y+=element.offsetTop;element=element.offsetParent;}
return new Pixel(x,y);},isDescendantOf:function(node){var parent=this.parentNode;while(parent){if(parent==node){return true;}
parent=parent.parentNode;}
return false;},isAncestorOf:function(node){var parent=node.parentNode;while(parent){if(parent==this){return true;}
parent=parent.parentNode;}
return false;},removeChildren:function(){while(this.firstChild){this.removeChild(this.firstChild);}},firstTag:function(tag){if(typeof tag=='undefined'){tag=false;}
var current=this.firstChild;while(current&&(!current.tagName||(tag&&current.tagName.toLowerCase()!=tag.toLowerCase()))){current=current.nextSibling;}
return current;},nextTag:function(tag){if(typeof tag=='undefined'){tag=false;}
var current=this.nextSibling;while(current&&(!current.tagName||(tag&&current.tagName.toLowerCase()!=tag.toLowerCase()))){current=current.nextSibling;}
return current;},ancestorTag:function(tag){if(typeof tag=='undefined'){tag=false;}
var current=this.parentNode;while(current&&(!current.tagName||(tag&&current.tagName.toLowerCase()!=tag.toLowerCase()))){current=current.parentNode;}
return current;},previousTag:function(tag){if(typeof tag=='undefined'){tag=false;}
var current=this.previousSibling;while(current&&(!current.tagName||(tag&&current.tagName.toLowerCase()!=tag.toLowerCase()))){current=current.previousSibling;}
return current;},replace:function(node){this.parentNode.replaceChild(node,this);},insertFirst:function(node){this.insertBefore(node,this.firstChild);},insertAfter:function(node,before){this.insertBefore(node,before.nextSibling);},getElementsByClassName:function(class_name){var elements=this.getElementsByTagName('*');var found=[];for(var i=0;i<elements.length;i++){if(elements[i].hasClass&&elements[i].hasClass(class_name)){found.push(elements[i]);}}
return found;},getElementsByLang:function(lang){var elements=this.getElementsByTagName('*');var found=[];for(var i=0;i<elements.length;i++){if(elements[i].lang==lang){found.push(elements[i]);}}
return found;},setHTML:function(html){this.innerHTML=html;Mohawk.DOM.enchaseDocumentNodes(this);},prependHTML:function(html){this.innerHTML=html+this.innerHTML;Mohawk.DOM.enchaseDocumentNodes(this);},appendHTML:function(html){this.innerHTML+=html;Mohawk.DOM.enchaseDocumentNodes(this);}};Mohawk.DOM=new Singletone({ELEMENT_NODE:1,TEXT_NODE:3,CDATA_SECTION_NODE:4,DOCUMENT_NODE:9,enchaseNode:function(node){if(![self.ELEMENT_NODE,self.DOCUMENT_NODE].has(node.nodeType)){return;}
if(node._enchased instanceof Function&&node._enchased()===true){return;}
node._cloneNode=node.cloneNode;node.cloneNode=function(flag){var clone=this._cloneNode(flag);self.enchaseNode(clone);return clone;};node._getElementsByTagName=node.getElementsByTagName;node.getElementsByTagName=function(tag){var collection=node._getElementsByTagName(tag);collection.forEach=ObjectInterface.forEach;return collection;};switch(node.nodeName.toUpperCase()){case'TABLE':node._insertRow=node.insertRow;node.insertRow=function(index){var row=IE?this._insertRow(index):HTMLTableElement.prototype.insertRow.call(this,index);self.enchaseNode(row);return row;};node._createTHead=node.createTHead;node.createTHead=function(){var thead=IE?this._createTHead():HTMLTableElement.prototype.createTHead.call(this);self.enchaseNode(thead);return thead;};node._createTFoot=node.createTFoot;node.createTFoot=function(){var tfoot=IE?this._createTFoot():HTMLTableElement.prototype.createTFoot.call(this);self.enchaseNode(tfoot);return tfoot;};break;case'TR':node._insertCell=node.insertCell;node.insertCell=function(index){var cell=IE?this._insertCell(index):HTMLTableRowElement.prototype.insertCell.call(this,index);self.enchaseNode(cell);return cell;};break;case'FORM':if(typeof Mohawk.FormsInterface!='undefined'){extend(node,Mohawk.FormsInterface);}
break;}
extend(node,Mohawk.NodeClassInterface);extend(node,Mohawk.NodeEventInterface);extend(node,Mohawk.NodeStructureInterface);if(Mohawk.NodeEffectInterface instanceof Object){extend(node,Mohawk.NodeEffectInterface);}
node._enchased=function(){return true;};},enchaseDocument:function(){if(document._document_enchased){return;}
document._document_enchased=true;document._createElement=document.createElement;document.createElement=function(tag_name){if(typeof Document=='undefined'){var element=document._createElement(tag_name);}else{var element=(Document.prototype.createElement||document._createElement).call(document,tag_name);}
self.enchaseNode(element);return element;};document._getElementById=document.getElementById;document.getElementById=function(id){if(typeof Document=='undefined'){var element=document._getElementById(id);}else{var element=(Document.prototype.getElementById||document._getElementById).call(document,id);}
if(element){self.enchaseDocumentNodes(element);}
return element;};document.scrollLeft=function(){return self.pageXOffset||(document.documentElement&&document.documentElement.scrollLeft)||(document.body&&document.body.scrollLeft);};document.scrollTop=function(){return self.pageYOffset||(document.documentElement&&document.documentElement.scrollTop)||(document.body&&document.body.scrollTop);};document.size=function(){var w=0,h=0;var win=window.window;if(win.self.innerHeight){w=win.self.innerWidth;h=win.self.innerHeight;}else if(win.document.documentElement&&win.document.documentElement.clientWidth){w=win.document.documentElement.clientWidth;h=win.document.documentElement.clientHeight;}else if(win.document.body){w=win.document.body.clientWidth;h=win.document.body.clientHeight;}
return{width:w,height:h};};self.enchaseNode(document);if(typeof document.defaultView=='undefined'){document.defaultView={};}
if(typeof document.defaultView.getComputedStyle=='undefined'){document.defaultView.getComputedStyle=function(element,pseudoElement){return element.currentStyle;};}},enchaseDocumentNodes:function(node){if(node){self.enchaseNode(node);}
var all=(node||document.body).getElementsByTagName('*');if(all.forEach instanceof Function){all.forEach(function(){self.enchaseNode(this);});}else{for(var i=0;i<all.length;i++){self.enchaseNode(all[i]);}}}});Mohawk.DOM.event=function(event){event=event||window.event;extend(event,Mohawk.EventInterface);return event;};Mohawk.DOM.enchaseDocument();document.addLoader(function(){Mohawk.DOM.enchaseDocumentNodes();});window.ID=function(id){return document.getElementById(id);};Mohawk.Utils.IniParser=new Class({parse:function(source){source=source+'\n';var pos=0;var data={};var buffer='';var status=static.STAT_NL;var key='';while(pos<source.length){var cur=source.slice(pos,pos+1);switch(status){case static.STAT_NL:if(cur==';'){status=static.STAT_COM;}else if(cur.match(new RegExp('\\w'))){status=static.STAT_KEY;buffer+=cur;}else if(cur.match(new RegExp('\\s'))){}else{status=static.STAT_ERR;buffer='';}
break;case static.STAT_COM:case static.STAT_ERR:if(cur.match(new RegExp('\\r\\n|\\n|\\r'))){status=static.STAT_NL;}else{}
break;case static.STAT_KEY:if(cur.match(new RegExp('\\w'))){buffer+=cur;}else if(cur==' '||cur==' '){status=static.STAT_END_KEY;key=buffer;buffer='';}else if(cur=='='){status=static.STAT_VAL;key=buffer;buffer='';}else{status=static.STAT_ERR;key='';buffer='';}
break;case static.STAT_END_KEY:if(cur=='='){status=static.STAT_VAL;}else if(cur==' '||cur==' '){}else{status=static.STAT_ERR;key='';}
break;case static.STAT_VAL:if(cur==' '){if(buffer){buffer+=cur;}else{}}else if(cur.match(new RegExp('\\r\\n|\\n|\\r'))){status=static.STAT_NL;if(buffer){data[key]=buffer.rtrim();buffer='';}
key='';}else if(cur=='"'){status=static.STAT_STR;}else if(cur==';'){status=static.STAT_COM;if(buffer){data[key]=buffer;buffer='';}
key='';}else{buffer+=cur;}
break;case static.STAT_STR:if(cur=='"'){status=static.STAT_END_VAL;data[key]=buffer;}else if(cur=='\\'){status=static.STAT_ESC;}else{buffer+=cur;}
break;case static.STAT_ESC:status=static.STAT_STR;if(cur.match(new RegExp('["\\\\]'))){buffer+=cur;}else{buffer+='\\'+cur;}
break;case static.STAT_END_VAL:if(cur.match(new RegExp('\\r\\n|\\n|\\r'))){status=static.STAT_NL;data[key]=buffer;buffer='';key='';}else if(cur==';'){status=static.STAT_COM;data[key]=buffer;buffer='';key='';}else if(cur==' '||cur==' '){}else{status=static.STAT_ERR;buffer='';key='';}
break;default:self.error('Unknown status = '+status);}
if(typeof(Console)!=='undefined'){Console.log([cur,status,pos]);}
pos++;}
return data;},error:function(str){alert(str);}});Mohawk.Utils.IniParser.STAT_KEY='key';Mohawk.Utils.IniParser.STAT_VAL='value';Mohawk.Utils.IniParser.STAT_END_KEY='endkey';Mohawk.Utils.IniParser.STAT_END_VAL='endvalue';Mohawk.Utils.IniParser.STAT_STR='string';Mohawk.Utils.IniParser.STAT_ESC='escape';Mohawk.Utils.IniParser.STAT_COM='comment';Mohawk.Utils.IniParser.STAT_ERR='error';Mohawk.Utils.IniParser.STAT_NL='newline';var StringInterface={trim:function(){return this.rtrim().ltrim();},ltrim:function(){return this.replace(new RegExp('^\\s+'),'');},rtrim:function(){return this.replace(new RegExp('\\s+$'),'');},pad:function(length,chr,right){var str=this;var size=length-this.length;chr=chr||' ';for(var i=0;i<size;i++){str=right?str.concat(chr):chr.concat(str);}
return str;},ucfirst:function(){if(!this.length){return'';}
var first=this.slice(0,1);return first.toUpperCase()+this.slice(1,this.length);},htmlspecialchars:function(){var str=this.valueOf();str=str.replace(/&/g,'&amp;');str=str.replace(/</g,'&lt;');str=str.replace(/>/g,'&gt;');return str;},nl2br:function(){return this.replace(/\r\n|\n\r|\n|\r/g,'<br />');},wordwrap:function(width,str){var len=0;var wrapped='';if(str==undefined){str='\n';}
for(var i=0;i<this.length;i++){var char=this.substr(i,1);if(char.match(/\s/)){len=0;}else{len++;}
if(len>width){wrapped=wrapped.concat(str);len=1;}
wrapped=wrapped.concat(char);}
return wrapped;}};extend(String,StringInterface);Mohawk.Loader=new Singletone({css:[],css_default_url:URL.css+'mohawk/',addCss:function(url){if(!url.match(new RegExp('^(http://|/)','i'))){url=self.css_default_url+url;}
if(document.loaded){self.importCss(url);}else{if(!self.css.has(url)){self.css.push(url);}}},loadCss:function(){self.css.forEach(function(){self.importCss(this);});},importCss:function(src){var link=document.createElement('LINK');link.href=src;link.type='text/css';link.rel='stylesheet';document.getElementsByTagName('HEAD')[0].appendChild(link);},js:[],js_default_url:URL.home+'system/js/',addJs:function(url){url=url||'';if(!url.match(new RegExp('^(http://|/)','i'))){url=Mohawk.js_url+url;}
if(document.loaded){self.loadJs(url);}else{if(!self.js.has(url)){self.js.push(url);}}},loadJs:function(){self.js.forEach(function(){var script=document.createElement('SCRIPT');script.type='text/javascript';script.src=this;document.getElementsByTagName('HEAD')[0].appendChild(script);});},extendLanguage:function(lng){lng.keys().forEach(function(){var key=this.toString();var str=lng[key].toString();lng[key.ucfirst()]=str.ucfirst();lng[key.toUpperCase()]=str.toUpperCase();lng[key.toLowerCase()]=str.toLowerCase();});extend(window.LNG,lng);},includeLanguage:function(path){var include_path=URL.lang+ENV.language+'/'+path+'.ini';if(!Mohawk.included.has(include_path)){var XHR=Mohawk.XHR();XHR.open('GET',include_path,false);XHR.send(null);try{var parser=new Mohawk.Utils.IniParser();var lng=parser.parse(XHR.responseText);self.extendLanguage(lng);}catch(e){alert(e.message);}
Mohawk.included.push(include_path);delete(XHR);}},includeTemplate:function(path){var include_path=URL.html+path.replace(new RegExp('\\.','g'),'/')+'.tmpl';if(!Mohawk.included.has(include_path)){var XHR=Mohawk.XHR();XHR.open('GET',include_path,false);XHR.send(null);var str=XHR.responseText;str=str.replace(new RegExp('"','g'),'\\"');str=str.replace(new RegExp('([\n\r]+)','g'),'" + "\\n');str='"'+str+'"';var name=path.substr(path.lastIndexOf('.')+1).toUpperCase();name=name.replace(new RegExp('\\W','g'),'_');eval('window.'+name+' = '+str);Mohawk.included.push(include_path);delete(XHR);}}});window.LNG={};document.addLoader(function(){Mohawk.Loader.loadCss();Mohawk.Loader.loadJs();});Mohawk.Observer=new Singletone({events:{},add:function(type,action){if(!(self.events[type]instanceof Array)){self.events[type]=[];}
self.events[type].push(action);},remove:function(type,action){if(self.events[type]instanceof Array){var source=action.toString();var i=0;while(i<self.events[type].length){if(self.events[type][i].toString()==source){self.events[type].pull(self.events[type][i]);}else{i++;}}}},fire:function(type){if(!self.events[type]){return;}
var args=[];for(i=1;i<arguments.length;i++){args.push(arguments[i]);}
if(self.events[type]instanceof Array){self.events[type].forEach(function(){this.apply(null,args);});}}});var DOM=Mohawk.DOM;var Loader=Mohawk.Loader;var Template=Mohawk.Template;Template.assign('URL',URL);var Effects=Mohawk.Effects;var Observer=Mohawk.Observer;
Mohawk.FormsInterface={getData:function(){var data={};for(var i=0;i<this.elements.length;i++){var element=this.elements[i];if(element&&element.name){if(!element.disabled){switch(element.type){case'checkbox':case'radio':if(!element.checked){break;}
default:switch(element.tagName.toLowerCase()){case'select':if(element.multiple){if(data.exists(element.name)){if(!(data[element.name]instanceof Array)){data[element.name]=[data[element.name]];}}else{data[element.name]=[];}
for(var j=0;j<element.options.length;j++){if(element.options[j].selected){data[element.name].push(element.options[j].value);}}
break;}
default:if(data.exists(element.name)){if(!(data[element.name]instanceof Array)){data[element.name]=[data[element.name]];}
data[element.name].push(element.value);}else{data[element.name]=element.value;}}}}}}
return data;},setData:function(data,name){var form=this;var changed=[];if(typeof name=='undefined'){name='';}
function set_data(data,name,keys){if(data instanceof Object){if(data instanceof Array){for(var i=0;i<data.length;i++){set_data(data[i],name?name:i,name?(keys?keys.concat(i):[i]):[]);}}else{for(var i in data){if(typeof Object.prototype[i]!='undefined'){continue;}
set_data(data[i],name?name:i,name?(keys?keys.concat(i):[i]):[]);}}}else{var element_name=name+(keys.length?'['+keys.join('][')+']':'');if(typeof form[element_name]=='undefined'){element_name=name+(keys.length>1?'['+keys.slice(0,-1).join('][')+']':'')+'[]';if(typeof form[element_name]=='undefined'){return false;}}
var element=form[element_name];if(!element.length||element.tagName){element=[element];}
for(var i=0;i<element.length;i++){if(!element[i].tagName){continue;}
switch(element[i].tagName.toLowerCase()){case'select':if(element[i].multiple){for(var j=0;j<element[i].options.length;j++){if(element[i].options[j].value==data){element[i].options[j].selected=true;changed.push(element[i].options[j]);}else if(!changed.has(element[i].options[j])){element[i].options[j].selected=false;}}
break;}
case'input':if(element[i].type=='checkbox'||element[i].type=='radio'){if(element[i].value==data){element[i].checked=true;changed.push(element[i]);}else if(!changed.has(element[i])){element[i].checked=false;}
break;}
default:element[i].value=data;}
if(typeof(element[i].onchange)!='undefined'&&element[i].onchange instanceof Function){element[i].onchange();}}}
return true;}
set_data(data,name,[]);},createInput:function(type,name,value,options){switch(type){default:case'hidden':case'text':case'password':case'checkbox':if(IE){var input=document.createElement('<input name="'+name+'">');}else{var input=document.createElement('INPUT');input.name=name;}
input.type=type;input.value=value;break;case'textarea':if(IE){var input=document.createElement('<textarea name="'+name+'">');}else{var input=document.createElement('TEXTAREA');input.name=name;}
input.value=value;break;case'select':if(IE){var input=document.createElement('<select name="'+name+'">');}else{var input=document.createElement('SELECT');input.name=name;}
options.forEach(function(i){if(typeof(options[i])=='undefined'){return;}
var option=document.createElement('OPTION');option.value=i;option.innerHTML=options[i];if(value==option.value){option.selected=true;}
input.appendChild(option);});break;}
return input;}};window.FormsInterface=Mohawk.FormsInterface;Mohawk.XML=new Singletone({empty_elements:['br','img','link','meta','input','hr'],inline_elements:['a','abbr','acronym','b','basefont','bdo','big','br','cite','code','dfn','em','font','i','img','input','kbd','label','q','s','samp','select','small','span','strike','strong','sub','sup','textarea','tt','u','var','applet','button','del','iframe','ins','map','object','script'],toObject:function(node){switch(node.nodeType){case Mohawk.DOM.TEXT_NODE:case Mohawk.DOM.CDATA_SECTION_NODE:return node.nodeValue;case Mohawk.DOM.ELEMENT_NODE:var data=null;for(var i=0;i<node.attributes.length;i++){if(node.attributes[i].nodeName!='_key'){data[node.attributes[i].nodeName]=node.attributes[i].nodeValue;}}
var allow_text_nodes=true;node.normalize();for(var i=0;i<node.childNodes.length;i++){var child=self.toObject(node.childNodes[i]);if(child instanceof Object){if(!(data instanceof Object)){data={};}
if(data.exists(child.name)){if(!(data[child.name]instanceof Array)){data[child.name]=[data[child.name]];}
data[child.name].push(child.content);}else if(node.childNodes[i].getAttribute('_key')!=null){data[child.name]=[child.content];}else{data[child.name]=child.content;}
allow_text_nodes=false;}else if(allow_text_nodes){data=child;}}
return{name:node.nodeName,content:data};case Mohawk.DOM.DOCUMENT_NODE:var data=self.toObject(node.documentElement);return data.content;default:}},escape:function(str){str=str.replace('&','&amp;');var table={62:'gt',60:'lt',160:'nbsp',169:'copy',8212:'mdash',8482:'trade',8482:'trade',8222:'bdquo',171:'laquo',8220:'ldquo',8222:'lsaquo',8249:'lsquo',187:'raquo',8221:'rdquo',8250:'rsaquo',8217:'rsquo',8218:'sbquo'};table.forEach(function(code){str=str.replace(new RegExp(String.fromCharCode(code),'g'),'&'+this+';');});return str;},clean:function(str){str=str.replace(new RegExp('^[\\s]+','gm'),' ');str=str.replace(new RegExp('[\\s]+$','gm'),' ');return str;},toHtml:function(node,padding,pad_with,exclude_name,first){if(!padding){padding='\n';}
if(!pad_with){pad_with='\t';}
switch(node.nodeType){case Mohawk.DOM.TEXT_NODE:case Mohawk.DOM.CDATA_SECTION_NODE:var value=self.escape(node.nodeValue);value=self.clean(value);return value;case Mohawk.DOM.ELEMENT_NODE:var tag=node.nodeName.toLowerCase();var str='';if(!exclude_name){var str=(!first&&!self.inline_elements.has(tag)?padding:'')+'<'+tag;for(var i=0;i<node.attributes.length;i++){if(node.attributes[i].nodeValue==''||node.attributes[i].nodeValue==null){continue;}
if(node.attributes[i].nodeValue.toString().match(new RegExp('^(_moz|apple|contentEditable)','i'))){continue;}
if(node.attributes[i].nodeName.match(new RegExp('^(_moz|apple|contentEditable)','i'))){continue;}
var value=self.escape(node.attributes[i].nodeValue.toString());str+=' '+node.attributes[i].nodeName+'="'+value+'"';}
if(!node.childNodes.length&&self.empty_elements.has(tag)){str+=' />';}else{str+='>';}}
var padding_closing='';if(tag=='pre'){str+=node.innerHTML;}else{node.normalize();var padding_children=!exclude_name?padding+pad_with:padding;var first_child=true;for(var i=0;i<node.childNodes.length;i++){var child=node.childNodes[i];var value=self.toHtml(child,padding_children,pad_with,false,exclude_name&&first_child);str+=value;if(value){first_child=false;}
if(![Mohawk.DOM.TEXT_NODE,Mohawk.DOM.CDATA_SECTION_NODE].has(child.nodeType)&&child.nodeName&&!self.inline_elements.has(child.nodeName.toLowerCase())){padding_closing=padding;}}}
if(node.childNodes.length||!self.empty_elements.has(tag)){str+=!exclude_name?(padding_closing+'</'+tag+'>'):'';}
return str;case Mohawk.DOM.DOCUMENT_NODE:return self.toHtml(node.documentElement,padding,pad_with,exclude_name,not_first);default:return'XML: unsupported type of node '+node.nodeType;}}});window.XML=Mohawk.XML;Mohawk.Ajax=new Class({XHR:null,caller:null,url:'',method:'',overwrite_method:true,data:'',charset:'UTF-8',sync:true,xml:'',text:'',type:'',data:{},__construct:function(url,method){self.url=url;self.method=method||static.METHOD_GET;self.type=static.TYPE_XML;self.XHR=Mohawk.XHR();},responseHandler:function(){},errorHandler:function(){},send:function(data){if(typeof self.XHR=='object'){self.XHR.onreadystatechange=function(){self.procedure.apply(self);};self.method=self.method.toUpperCase()
switch(self.method){default:case static.METHOD_GET:var url_with_data=self.url+(self.url.match(new RegExp('\\?'))?'&':'?')+static.prepare(data);self.XHR.open(static.METHOD_GET,url_with_data,self.sync);var get=true;break;case static.METHOD_POST:case static.METHOD_PUT:case static.METHOD_DELETE:case static.METHOD_OPTIONS:case static.METHOD_HEAD:self.XHR.open(self.overwrite_method?static.METHOD_POST:self.method,self.url,self.sync);var get=false;break;}
self.XHR.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset='+self.charset);self.XHR.setRequestHeader('X-Request-Method',self.method);self.XHR.setRequestHeader('Accept',self.type);if(get){if(window.XMLHttpRequest){self.XHR.send(null);}else{self.XHR.send();}}else{var query=static.prepare(data);self.XHR.send(query);}
if(window.Console){var hash=window.Console.hash(data);hash=hash.replace(new RegExp('<','g'),'&lt;');hash=hash.replace(new RegExp('>','g'),'&gt;');var report='Ajax query : '+self.method+' <a href="'+self.url+'">'+self.url+'</a><br />'
+'Data: <pre>'+hash+'</pre>'
+'Query: '+query;window.Console.log(report);}}else{self.error('XMLHttpRequest is not initialized');}},procedure:function(){var error=false;switch(self.XHR.readyState){case static.STATE_UNINITIALIZED:break;case static.STATE_LOADED:if(self.XHR.status==static.HTTP_OK){if(self.XHR.responseXML){self.xml=self.XHR.responseXML;}else{if(self.type==static.TYPE_XML&&self.errorHandler instanceof Function){error=true;self.errorHandler.call(self);}}}else{if(self.errorHandler instanceof Function){error=true;self.errorHandler(self);}}
self.text=self.XHR.responseText;if(window.Console){var data=self.XHR.responseText;data=data.replace(new RegExp('<','g'),'&lt;');data=data.replace(new RegExp('>','g'),'&gt;');var report='Ajax query received from: <a href="'+self.url+'">'+self.url+'</a>';window.Console.log(report);window.Console.log2('Data',data);}
switch(self.type){case static.TYPE_JSON:eval('self.data = '+self.text);break;case static.TYPE_XML:self.data=Mohawk.XML.toObject(self.xml);break;}
if(!error){self.responseHandler(self);}
break;default:}},error:function(message){if(window.Console){window.Console.log(message,'error');}}});Mohawk.Ajax.HTTP_OK=200;Mohawk.Ajax.HTTP_NOT_FOUND=404;Mohawk.Ajax.STATE_UNINITIALIZED=0;Mohawk.Ajax.STATE_OPEN=1;Mohawk.Ajax.STATE_SENT=2;Mohawk.Ajax.STATE_RECEIVING=3;Mohawk.Ajax.STATE_LOADED=4;Mohawk.Ajax.METHOD_GET='GET';Mohawk.Ajax.METHOD_POST='POST';Mohawk.Ajax.METHOD_PUT='PUT';Mohawk.Ajax.METHOD_DELETE='DELETE';Mohawk.Ajax.METHOD_HEAD='HEAD';Mohawk.Ajax.METHOD_OPTIONS='OPTIONS';Mohawk.Ajax.TYPE_XML='text/xml';Mohawk.Ajax.TYPE_JSON='text/json';Mohawk.Ajax.TYPE_TEXT='text/text';Mohawk.Ajax.escape=function(str){if(typeof str=='string'){if(OPERA){str=str.replace(new RegExp('\r','g'),'');}
str=str.replace(new RegExp('%','g'),'%'+'25');str=str.replace(new RegExp('\n','g'),'%'+'0A');str=str.replace(new RegExp('\r','g'),'%'+'0D');str=str.replace(new RegExp('&','g'),'%'+'26');str=str.replace(new RegExp('#','g'),'%'+'23');str=str.replace(new RegExp('\\+','g'),'%'+'2B');}
return str;};Mohawk.Ajax.prepare=function(data,prefix){var query='';switch(typeof data){case'object':if(data instanceof Array){for(var i=0;i<data.length;i++){if(typeof Array.prototype[i]!='undefined'){continue;}
query+=(query.length?'&':'');switch(typeof data[i]){case'object':query+=Mohawk.Ajax.prepare(data[i],prefix?prefix+'['+i+']':i);break;case'string':case'number':case'boolean':query+=(prefix?prefix+(!prefix.match(new RegExp('\\[\\]$'))?'[]':'')+'=':i+'=')+Mohawk.Ajax.prepare(data[i],prefix?prefix+'['+i+']':i);break;}}}else{for(var i in data){if(typeof Object.prototype[i]!='undefined'){continue;}
query+=(query.length?'&':'');switch(typeof data[i]){case'object':if(data[i]==null){query+=prefix?prefix+(!prefix.match(new RegExp('\\[\\]$'))?'['+i+']':'')+'=':i+'=';}else{query+=Mohawk.Ajax.prepare(data[i],prefix?prefix+(!prefix.match(new RegExp('\\[\\]$'))?'['+i+']':''):i);}
break;case'string':case'number':case'boolean':query+=(prefix?prefix+(!prefix.match(new RegExp('\\[\\]$'))?'['+i+']':'')+'=':i+'=')+Mohawk.Ajax.prepare(data[i],prefix?prefix+'['+i+']':i);break;}}}
break;case'string':case'number':case'boolean':query=prefix?Mohawk.Ajax.escape(data):data;break;}
return query;};Mohawk.Ajax.parse_url=function(url){var chunks=url.split('&');var data={};chunks.forEach(function(){var tuple=this.split('=');var m;if(m=tuple[0].match(new RegExp('([a-z][a-z_0-9]*)((?:\\[[a-z_0-9]*\\])*)','i'))){var rec=data;var last=m[1].toString();if(m[2]){var keys=m[2].slice(1,-1).split('][');keys.unshift(m[1]);last=keys.pop();var prev_rec,prev_key;keys.forEach(function(){var key=this.toString();if(!(rec[key]instanceof Object)){rec[key]={};}
prev_rec=rec;prev_key=key;rec=rec[key];});}
if(last==''){if(!(rec instanceof Array)){prev_rec[prev_key]=[];}
prev_rec[prev_key].push(tuple[1]);}else{rec[last]=tuple[1];}}});return data;};window.Ajax=Mohawk.Ajax;
