
var modalDialog=new Class({Implements:[Events,Options],options:{container:null,id_dialog:'m_box',id_over:'m_over'},initialize:function(options){this.setOptions(options);this.content=$(this.options.container);var _overlay=new Element('div',{'id':this.options.id_over,'html':'&#160;'}).inject(this.content);;var _dialog=new Element('div',{'id':this.options.id_dialog,'html':'<div id="m_box_title">&#160;</div><div id="m_box_text">&#160;</div><div class="buttons"><button id="m_box_ok">'+_L['BTN_YES']+'</button><button id="m_box_cancel">'+_L['BTN_NO']+'</button></div>'}).inject(this.content);this.dialog=$(_dialog);this.overlay=$(_overlay);this.message=$('m_box_text');this.title=$('m_box_title');this.button_ok=$('m_box_ok');this.button_cancel=$('m_box_cancel');this._hide();this.bound={hide:this._hide.bind(this),show:this._show.bind(this),overlay:this._overlay.bind(this)};},test:function(){this.button_ok.addEvent('click',this.bound.hide);},alert:function(message,title,callback){this._show(message,title,null,'alert',function(result){if(callback)callback(result);});},confirm:function(message,title,callback){this._show(message,title,null,'confirm',function(result){if(callback)callback(result);});},_show:function(message,title,value,type,callback){var hide=this._hide();this._overlay('show');switch(type){case'alert':alert(message);break;case'confirm':this.message.set('html',message.trim().replace(/\n/g,'<br/>'));this.title.set('html',title=title.trim()||'&#160;');this.button_ok.removeEvents('click','mouseup','keydown');this.button_ok.addEvents({'mouseup':function(){if(callback){callback(true);callback=$empty;}},'click':this.bound.hide,'keydown':function(e){if(e.code==13){}
if(e.code==27)this.button_cancel.click();}});this.button_cancel.removeEvents('click','mouseup','keydown');this.button_cancel.addEvents({'mouseup':function(){if(callback){callback(false);callback=$empty;}},'click':this.bound.hide,'keydown':function(e){if(e.code==13)this.button_ok.click();if(e.code==27)this.button_cancel.click();}});break;}
this.dialog.setStyle('display','block');this._setPosition();this.dialog.setStyle('opacity',1);},_hide:function(){this.dialog.setStyles({'opacity':0,'display':'none'});this._overlay('hide');},_overlay:function(status){switch(status){case'show':this.overlay.setStyles({'opacity':'0.5','height':this.content.getCoordinates().height,'display':'block'});break;case'hide':this.overlay.setStyles({'opacity':'0','display':'none'});break;}},_setPosition:function(){if(Browser.Engine.trident)this.dialog.setStyle('width','400px');var top=((this.content.getSize().y/2)-(this.dialog.getSize().y/2));var left=((this.content.getSize().x/2)-(this.dialog.getSize().x/2));this.dialog.setStyles({'top':top,'left':left});}});var Tips=new Class({Implements:[Events,Options],options:{onShow:function(tip){tip.setStyle('visibility','visible');},onHide:function(tip){tip.setStyle('visibility','hidden');},title:'title',text:function(el){return el.get('rel')||el.get('href');},showDelay:100,hideDelay:100,className:null,offset:{x:16,y:16},fixed:false},initialize:function(){var params=Array.link(arguments,{options:Object.type,elements:$defined});if(params.options&&params.options.offsets)params.options.offset=params.options.offsets;this.setOptions(params.options);this.container=new Element('div',{'class':'tip'});this.tip=this.getTip();if(params.elements)this.attach(params.elements);},getTip:function(){return new Element('div',{'class':this.options.className,styles:{visibility:'hidden',display:'none',position:'absolute',top:0,left:0,'z-index':10000}}).adopt(new Element('div',{'class':'tip-top'}),this.container,new Element('div',{'class':'tip-bottom'})).inject(document.body);},attach:function(elements){var read=function(option,element){if(option==null)return'';return $type(option)=='function'?option(element):element.get(option);};$$(elements).each(function(element){var title=read(this.options.title,element);var t=title.split('::');var text='';if(t.length>1){title=t[0].trim();text=t[1].trim();}else{text=read(this.options.text,element);}
element.erase('title').store('tip:native',title).retrieve('tip:title',title);element.retrieve('tip:text',text);var events=['enter','leave'];if(!this.options.fixed)events.push('move');events.each(function(value){element.addEvent('mouse'+value,element.retrieve('tip:'+value,this['element'+value.capitalize()].bindWithEvent(this,element)));},this);},this);return this;},detach:function(elements){$$(elements).each(function(element){['enter','leave','move'].each(function(value){element.removeEvent('mouse'+value,element.retrieve('tip:'+value)||$empty);});element.eliminate('tip:enter').eliminate('tip:leave').eliminate('tip:move');if($type(this.options.title)=='string'&&this.options.title=='title'){var original=element.retrieve('tip:native');if(original)element.set('title',original);}},this);return this;},elementEnter:function(event,element){$A(this.container.childNodes).each(Element.dispose);['title','text'].each(function(value){var content=element.retrieve('tip:'+value);if(!content)return;this[value+'Element']=new Element('div',{'class':'tip-'+value}).inject(this.container);this.fill(this[value+'Element'],content);},this);this.timer=$clear(this.timer);this.timer=this.show.delay(this.options.showDelay,this,element);this.tip.setStyle('display','block');this.position((!this.options.fixed)?event:{page:element.getPosition()});},elementLeave:function(event,element){$clear(this.timer);this.tip.setStyle('display','none');this.timer=this.hide.delay(this.options.hideDelay,this,element);},elementMove:function(event){this.position(event);},position:function(event){var size=window.getSize(),scroll=window.getScroll(),tip={x:this.tip.offsetWidth,y:this.tip.offsetHeight},props={x:'left',y:'top'},obj={};for(var z in props){obj[props[z]]=event.page[z]+this.options.offset[z];if((obj[props[z]]+tip[z]-scroll[z])>size[z])obj[props[z]]=event.page[z]-this.options.offset[z]-tip[z];}
this.tip.setStyles(obj);},fill:function(element,contents){if(typeof contents=='string')element.set('html',contents);else element.adopt(contents);},show:function(el){this.fireEvent('show',[this.tip,el]);},hide:function(el){this.fireEvent('hide',[this.tip,el]);}});var CustomSelect=new Class({Implements:[Events,Options],options:{onChange:$empty,onSelect:$empty,onShow:$empty,onHide:$empty,theme:'aqua',max_lines:10,line_height:20},box:null,select:null,selectbox:null,selectedIndex:null,currentElement:null,currentText:null,width:null,display:false,has_scrolling:false,initialize:function(select,options){this.setOptions(options);this.select=select;this.width=this.select.getWidth();this.select.setStyle('display','none');this.build_selectbox();this.box.addEvent('mousedown',function(e){if(this.display){this.hide();}else{this.show();this.box.focus();}
e.stop();}.bind(this));this.select.addEvent('change',function(e){e.stop();this.selectbox.getElements('li').each(function(li){if(li.getProperty('index')==this.select.selectedIndex)
this.change_item.run(li,this);}.bind(this))}.bind(this));window.document.addEvent('click',function(e){var obj=e.target;while(obj.parentNode&&obj!=this.box)obj=obj.parentNode;if(obj!=this.box)this.hide();}.bind(this));},set_current:function(id){this.selectbox.getElements('li').each(function(li){if(li.getProperty('index')==id-1)
this.change_item.run(li,this);}.bind(this))},hide:function(){if(this.display){this.selectbox.setStyle('display','none');this.display=false;this.box.removeClass('focused');this.selectbox.getElements('li').each(function(li){if(li.getProperty('index')==this.select.selectedIndex){this.unselect_lis();this.currentElement=li.addClass('selected');;}}.bind(this));this.fireEvent('onHide',this.currentElement);}},show:function(){if(!this.display){this.fireEvent('onShow',this.currentElement);this.selectbox.setStyle('display','block');this.display=true;this.box.addClass('focused');this.has_scrolling=this.selectbox.getScrollSize().y>this.selectbox.getHeight();}},build_selectbox:function(){this.box=new Element('a',{'class':this.options.theme,'href':'#','styles':{'width':this.width+'px'}}).inject(this.select,'after');this.box_div=new Element('div').inject(this.box);this.selectbox=new Element('ul',{'class':this.options.theme}).inject(this.box);this.selectedIndex=this.select.selectedIndex;if(this.selectbox.getWidth()<this.width)
this.selectbox.setStyle('width',this.width+'px');this.build_options();this.box.addEvent((Browser.Engine.trident||Browser.Engine.webkit)?'keydown':'keypress',this.change_item_on_keyup.bind(this));this.box.addEvent('focus',function(){this.box.addClass('focused');}.bind(this));this.box.addEvent('blur',function(){this.box.removeClass('focused');}.bind(this));},build_options:function(){this.select.getElements('option').each(function(option){var li=new Element('li').set('text',option.get('text')).inject(this.selectbox).setProperty('index',option.index);if(option.hasClass('ttips'))li.addClass('ttips').setProperty('title',option.title);if(option.selected){this.currentElement=li.addClass('selected');this.currentText=option.get('text');}
li.addEvent('mousedown',function(e){e.stop();this.change_item.run(li,this);this.hide();}.bind(this));}.bind(this));if(this.select.options.length>this.options.max_lines){var height=this.options.line_height*this.options.max_lines;this.selectbox.setStyles({'height':height+'px','overflow-y':'auto'});}
this.toggle_selection();this.box_div.set('text',this.currentText);},rebuild:function(){this.selectbox.getElements('li').each(function(li){li.dispose();});this.build_options();},toggle_selection:function(){this.selectbox.getElements('li').each(function(li){li.addEvent('mouseenter',function(){this.unselect_lis();this.currentElement=li.addClass('selected');this.selectedIndex=this.currentElement.getProperty('index');this.fireEvent('onSelect',this.currentElement);}.bind(this));}.bind(this));},unselect_lis:function(){this.selectbox.getElements('li').each(function(li){li.removeClass('selected');});},change_item:function(li){this.unselect_lis(this.selectbox);this.selectedIndex=li.getProperty('index');this.currentElement=li;this.currentElement.addClass('selected');this.box.getElement('div').set('text',this.currentElement.get('text'));this.select.selectedIndex=this.selectedIndex;if(this.has_scrolling){console.log('has scrolling')}
this.fireEvent('onChange',[this.currentElement,this.select.options[this.selectedIndex].get('value')]);},change_item_on_keyup:function(e){if(e.key=='tab'||e.key=='esc'||e.key=='enter'){this.hide();return true;}
if((e.key=='up'||e.key=='down')&&e.alt){this.display?this.hide():this.show();return true;}
var li=null;if(e.key=='up'||e.key=='left'){li=this.change_element_by_method('getPrevious');}else if(e.key=='down'||e.key=='right'){li=this.change_element_by_method('getNext');}else if(e.code==36||e.code==33){li=this.change_element_by_method('getFirst',true);}else if(e.code==35||e.code==34){li=this.change_element_by_method('getLast',true);}else{li=this.change_element_by_char(e.key);}
if(li!=null){this.fireEvent('onSelect',li);this.change_item.run(li,this);}},change_element_by_method:function(method,from_child){return from_child?this.currentElement.getParent()[method]():this.currentElement[method]();},change_element_by_char:function(key){var length=this.selectbox.getElements('li').length;var li=null;var patt=new RegExp('^'+key,'i');var i=0;var el=this.currentElement;while((el=el.getNext()||el.getParent().getFirst())&&li==null){i++;if(i>length){break;}
if(patt.test(el.get('text'))){li=el;}}
return li;}});