var cfeInterface=new Class({type:"interface",options:{instanceID:0,spacer:false,defaultSelect:1},initialize:function(original,opt){this.setOptions(this.options,opt);this.o=original;this.l=$E("label[for="+this.o.id+"]").removeProperty("for");this.l.addClass("for_"+this.o.getProperty("id")+" js"+this.type+"L").addEvents({"mouseover":this.hover.bind(this),"mouseout":this.unhover.bind(this),"click":this.clicked.bind(this)})||false;this.o.setStyle("display","none");this.a=new Element("span",{"class":"js"+this.type,"events":{"mouseover":this.hover.bind(this),"mouseout":this.unhover.bind(this),"click":this.clicked.bind(this)}}).injectBefore(this.o);this.initializeAdvanced.bind(this)();this.build.bind(this)();},initializeAdvanced:function(){},hover:function(){this.a.addClass("js"+this.type+"H");this.l?this.l.addClass("js"+this.type+"LH"):"";},unhover:function(){this.a.removeClass("js"+this.type+"H");this.l?this.l.removeClass("js"+this.type+"LH"):"";}});cfeInterface.implement(new Options,new Events);var customSelector=cfeInterface.extend({type:"Selector",initialize:function(original,opt){$extend(this.options,{size:opt.size||4,scrolling:opt.scrolling||true});this.parent(original,opt);},initializeAdvanced:function(){this.origOptions=this.o.getChildren();this.kind=[];this.selectedID=0;if(this.options.size>this.origOptions.length||this.options.scrolling!=true){this.options.size=this.origOptions.length;}},build:function(){var i=this.options.instanceID;this.a.addClass("jsSelector"+i);this.a.setStyle("display","block");this.aWidth=this.o.getStyle("width").toInt()||this.a.getStyle("width").toInt();var borders=this.a.getStyle("border");if(borders.border){var bw=borders.border.toInt();this.aBorder={"top":bw,"right":bw,"bottom":bw,"left":bw}}else{this.aBorder={"top":this.a.getStyle("border-top").toInt(),"right":this.a.getStyle("border-right").toInt(),"bottom":this.a.getStyle("border-bottom").toInt(),"left":this.a.getStyle("border-left").toInt()}}this.a.setStyle("display","inline");this.arrow=new Element("img",{"class":"jsSelectorArrow","src":this.options.spacer}).injectInside(this.a);this.gfxWidth=this.arrow.getSize().size.x;this.activeElement=new Element("span",{"class":"jsOption"}).setText(this.origOptions[0].getText()).injectBefore(this.arrow);this.activeElement.setStyle("padding-right",this.aWidth-this.activeElement.getSize().size.x-this.gfxWidth+2);var tmph=window.ie?this.a.getSize().size.y:this.a.getSize().size.y;this.gfxHeight=window.ie?((tmph-this.aBorder.top-this.aBorder.bottom-1)*this.options.size)-this.options.size-(this.options.size-1):(tmph-this.aBorder.top-this.aBorder.bottom)*this.options.size;var containerWidth=this.a.getSize().size.x-this.aBorder.left-this.aBorder.right;this.container=new Element("div",{"class":"jsSelectorContainerWrapper jsSelectorContainerWrapper"+i,"styles":{"display":"none","overflow":"hidden","width":containerWidth}}).injectInside(document.body);this.containerContentTop=new Element("div",{"class":"jsSelectorContainerTop","styles":{"overflow":"hidden","width":this.options.scrolling?containerWidth-this.gfxWidth-this.aBorder.left-this.aBorder.right-2:"100%","float":"left","display":"inline"}}).injectInside(this.container);this.containerContent=new Element("div",{"class":"jsSelectorContainer","styles":{"height":this.gfxHeight,"overflow":"hidden","width":this.options.scrolling?containerWidth-this.gfxWidth-this.aBorder.left-this.aBorder.right-2:"100%","float":"left","display":"inline"}}).injectInside(this.container);this.origOptions.each(function(el,i){new Element("div",{"class":"jsOption jsOption"+i,"events":{"mouseover":this.selectOption.pass([i,true,true],this),"mouseout":this.selectOption.pass([i,true,true],this),"click":this.selectOption.pass(i,this)}}).setText(el.getText()).injectInside(this.containerContent);if(el.selected){this.selectedID=i;}}.bind(this));this.aOptions=this.containerContent.getChildren();if(this.options.scrolling){this.scrollerWrapper=new Element("div",{"class":"jsSelectorScrollerWrapper","styles":{"width":this.gfxWidth,"height":this.gfxHeight,"float":"right","display":"inline","padding-right":this.a.getStyle("padding-right")}}).injectInside(this.container);this.scrollerTop=new Element("img",{"class":"jsSelectorScrollTop","width":this.gfxWidth,"src":this.options.spacer,"events":{"click":function(){var scrol=this.containerContent.getSize().scroll.y;this.slider.set(scrol-5>0?scrol-5:0);}.bind(this),"mouseover":function(){this.addClass("jsSelectorScrollTopH");},"mouseout":function(){this.removeClass("jsSelectorScrollTopH");},"mousedown":function(){this.addClass("jsSelectorScrollTopA");},"mouseup":function(){this.removeClass("jsSelectorScrollTopA");}}});this.scrollerBottom=new Element("img",{"class":"jsSelectorScrollBottom","width":this.gfxWidth,"src":this.options.spacer,"events":{"click":function(){var scrol=this.containerContent.getSize().scroll.y;this.slider.set(scrol+5<this.sliderSteps?scrol+5:this.sliderSteps);}.bind(this),"mouseover":function(){this.addClass("jsSelectorScrollBottomH");},"mouseout":function(){this.removeClass("jsSelectorScrollBottomH");},"mousedown":function(){this.addClass("jsSelectorScrollBottomA");},"mouseup":function(){this.removeClass("jsSelectorScrollBottomA");}}});this.scrollerBack=new Element("div").setStyle("height",this.gfxHeight-2*this.scrollerTop.getStyle("height").toInt());this.scrollerKnob=new Element("img",{"class":"jsSelectorScroller","width":this.gfxWidth,"src":this.options.spacer,"events":{"mouseover":function(){this.addClass("jsSelectorScrollerH");},"mouseout":function(){this.removeClass("jsSelectorScrollerH");},"mousedown":function(){this.addClass("jsSelectorScrollerA");},"mouseup":function(){this.removeClass("jsSelectorScrollerA");}}});this.scrollerBack.adopt(this.scrollerKnob);this.scrollerWrapper.adopt(this.scrollerTop).adopt(this.scrollerBack).adopt(this.scrollerBottom);}this.selectOption.attempt(this.selectedID||this.options.defaultSelect-1,this);},selectOption:function(index,stayOpenAfterSelect,highlightOnly,focusOnElement){index=index.limit(0,this.origOptions.length-1);this.highlighted?this.highlighted.removeClass("jsOptionH"):"";this.highlighted=this.aOptions[index];this.highlighted.addClass("jsOptionH");this.highlightedID=index;if(focusOnElement&&this.options.scrolling){this.scrollToSelectedItem(this.highlightedID);}if(highlightOnly!=true){var selectit=this.origOptions[index];selectit.selected="selected";this.selectedID=index;this.activeElement.setText(selectit.getText()).setStyle("padding-right",0).setStyle("padding-right",this.aWidth-this.activeElement.getSize().size.x-this.gfxWidth+2);stayOpenAfterSelect?"":this.clicked.attempt("hide",this);}},scrollToSelectedItem:function(index,onlyIfNotVisible){this.slider.set((this.sliderSteps/(this.aOptions.length-this.options.size))*index);},selectOptionByKey:function(key){if(!this.kind[key]){this.kind[key]=[];this.origOptions.each(function(el,i){if(el.getText().charAt(0).toLowerCase()==key){this.kind[key][this.kind[key].length]=i;}}.bind(this));}if($defined(this.kind[key][0])){var ind=this.kind[key].indexOf(this.highlightedID);this.selectOption(this.kind[key][ind+1]?this.kind[key][ind+1]:this.kind[key][0],true,false,true);}},clicked:function(action){if(this.container.getStyle("display")=="block"||action=="hide"){this.container.setStyle("display","none");window.removeEvents("keyup","click");}else{this.container.setStyles({"display":"block","position":"absolute","top":this.a.getTop()+this.a.getSize().size.y-this.aBorder.bottom,"left":this.a.getLeft()});if(window.ie){this.container.setStyle("left",this.a.getLeft()+2);}if(this.options.scrolling){this.sliderSteps=this.containerContent.getSize().scrollSize.y-(this.options.size*this.containerContent.getSize().scrollSize.y/this.aOptions.length);this.slider=new Slider(this.scrollerBack,this.scrollerKnob,{steps:this.sliderSteps,mode:"vertical",onChange:function(step){this.containerContent.scrollTo(false,step);}.bind(this)}).set(0);this.scrollToSelectedItem(this.selectedID);}window.addEvent("keyup",function(event){var event=new Event(event).preventDefault();switch(event.key){case"up":this.scrollToSelectedItem(this.highlightedID-1,true);this.selectOption(this.highlightedID-1,true);break;case"down":this.scrollToSelectedItem(this.highlightedID+1,true);this.selectOption(this.highlightedID+1,true);break;case"enter":this.selectOption(this.highlightedID);break;default:this.selectOptionByKey(event.key);break;}}.bind(this));window.addEvent("click",function(event){var event=new Event(event);if(!(this.a.hasChild(event.target)||this.container.hasChild(event.target)||this.l==event.target)){this.clicked("hide");}}.bind(this));}}});var customCheckbox=cfeInterface.extend({type:"Checkbox",build:function(){this.a.adopt(new Element("img",{"src":this.options.spacer}));this.o.checked?this.a.addClass("jsCheckboxA"):"";},hover:function(){this.parent();this.a.addClass(this.o.checked?"jsCheckboxHA":"");},unhover:function(){this.parent();this.a.removeClass("jsCheckboxHA").removeClass(this.o.checked!=true?"jsCheckboxA":"");},clicked:function(){this.fireEvent("mouseout");if(this.o.checked){this.o.removeProperty("checked");this.a.removeClass("jsCheckboxA").removeClass("jsCheckboxHA").addClass("jsCheckboxH");}else{this.o.checked=true;this.a.addClass("jsCheckboxA jsCheckboxHA");}}});var customText=new Class({type:"Text",initialize:function(original,opt){this.setOptions(this.options,opt);this.o=original.addEvents({"focus":this.focuss.bind(this),"blur":this.blurr.bind(this),"mouseover":this.hover.bind(this),"mouseout":this.unhover.bind(this)});this.p=this.o.getParent();this.l=$E("label[for="+this.o.id+"]");this.l.addClass("for_"+this.o.getProperty("id")+" js"+this.type+"L").addEvents({"mouseover":this.hover.bind(this),"mouseout":this.unhover.bind(this)})||false;},hover:function(){this.l?this.l.addClass("js"+this.type+"LH"):"";},unhover:function(){this.l?this.l.removeClass("js"+this.type+"LH"):"";},focuss:function(){this.p.addClass("js"+this.type+"F");},blurr:function(){this.p.removeClass("js"+this.type+"F");}});customText.implement(new Options,new Events);var customImage=new Class({type:"Image",initialize:function(original,opt){this.setOptions(this.options,opt);this.o=original.addEvents({"mouseover":this.hover.bind(this),"mouseout":this.unhover.bind(this)});},hover:function(){this.oSrc=this.o.src;var tmpSrc=this.oSrc;var ind=tmpSrc.lastIndexOf(".");var nSrc=tmpSrc.substring(0,ind)+"H"+tmpSrc.substring(ind);this.o.src=nSrc;},unhover:function(){this.o.src=this.oSrc;}});customImage.implement(new Options,new Events);var customTextarea=customText.extend({type:"Textarea"});var customRadiobutton=cfeInterface.extend({type:"Radiobutton",initializeAdvanced:function(){this.elName=this.o.getProperty("name").replace("]","").replace("[","-");},build:function(){this.a.addClass("cfe_radiogroup_"+this.elName).adopt(new Element("img",{"src":this.options.spacer}));this.o.checked?this.a.addClass("jsRadiobuttonA"):"";this.a.input=this.o;},hover:function(){this.parent();this.a.addClass(this.o.checked?"jsRadiobuttonHA":"");},unhover:function(){this.parent();this.a.removeClass("jsRadiobuttonHA").removeClass(this.o.checked!=true?"jsRadiobuttonA":"");},clicked:function(){$$(".cfe_radiogroup_"+this.elName).each(function(el){el.input.removeProperty("checked");el.removeClass("jsRadiobuttonH");el.removeClass("jsRadiobuttonHA").removeClass(el.input.checked!=true?"jsRadiobuttonA":"");}.bind(this));this.o.checked="true";this.a.addClass("jsRadiobuttonA jsRadiobuttonHA");}});var customFormElements=new Class({initialize:function(options){this.setOptions({scope:false,check:true,radio:true,selectboxes:true,text:true,textarea:true,image:true,spacer:"gfx/spacer.gif"},options);this.options.check?this.initializeCheckboxes.bind(this)():"";this.options.radio?this.initializeRadiobuttons.bind(this)():"";this.options.selectboxes?this.initializeSelectboxes.bind(this)():"";this.options.text?this.initializeTextfields.bind(this)():"";this.options.textarea?this.initializeTextareas.bind(this)():"";this.options.image?this.initializeImages.bind(this)():"";},initializeSelectboxes:function(){$ES("select",this.options.scope||document.body).each(function(el,i){new customSelector(el,{"instanceID":i,"spacer":this.options.spacer,"scrolling":false});}.bind(this));},initializeTextfields:function(){$ES("input[type=text]",this.options.scope||document.body).each(function(el,i){new customText(el,{"instanceID":i,"spacer":this.options.spacer});}.bind(this));},initializeImages:function(){$ES("input[type=image]",this.options.scope||document.body).each(function(el,i){new customImage(el,{"instanceID":i,"spacer":this.options.spacer});}.bind(this));},initializeTextareas:function(){$ES("textarea",this.options.scope||document.body).each(function(el,i){new customTextarea(el,{"instanceID":i,"spacer":this.options.spacer});}.bind(this));},initializeCheckboxes:function(){$ES("input[type=checkbox]",this.options.scope||document.body).each(function(el,i){new customCheckbox(el,{"instanceID":i,"spacer":this.options.spacer});}.bind(this));},initializeRadiobuttons:function(){$ES("input[type=radio]",this.options.scope||document.body).each(function(el,i){new customRadiobutton(el,{"instanceID":i,"spacer":this.options.spacer});}.bind(this));}});customFormElements.implement(new Options,new Events);
