var Register={validation:null,valid:false,form:null,captchaAdded:false,firstname:null,lastname:null,init:function(){Validation.addAllThese([["length-6","",{pattern:new RegExp("^[^ ].{4,}[^ ]$")}],["validate-fullDate","Selectati data nasterii",this.validateFullDate.bind(this)],["validate-education","Selectati cel putin o institutie educationala",this.validateEducation.bind(this)],["validate-edu-years","Selectati perioada corect",this.validateEduYears.bind(this)],["validate-myemail","Exista deja un cont asociat acestei adrese de email.",this.isMyEmailOk.bind(this)]]);
$(document.body).delegate("click",{"#whyShould":this.showWhyShouldMessage.bindAsEventListener(this),"#changeCaptcha":this.refreshCaptcha.bindAsEventListener(this),"#changeLocationHighSchool":this.changeHighschoolLocation.bindAsEventListener(this),"#changeLocation":this.changeAcademicLocation.bindAsEventListener(this),".autoComplete":this.autocompleteExamples.bindAsEventListener(this)});["Year","middleschool_start","highschool_start","university_start"].each(function(id){$(id).observe("change",this.autocompleteYearsInfo.bind(this))
}.bind(this));this.autocompleteYears("Year",$("Year").value);var communityTypes=new Array("middleschool_id","highschool_id","university_id");if($("company_id")){$("company_id").observe("autocomplete:only-selected",this.showRegisterDetails.bindAsEventListener(this));$("company_country_btn").observe("click",this.showCountrySelect);$("company_country").observe("change",this.hideCountrySelect);communityTypes.push("company_id")
}if($("military_id")){$("military_id").observe("autocomplete:only-selected",this.showRegisterDetails.bindAsEventListener(this));$("military_country_btn").observe("click",this.showCountrySelect);$("military_country").observe("change",this.hideCountrySelect);communityTypes.push("military_id")}document.observe("select:changed",this.handleSelectChange.bind(this));communityTypes.each(function(id){$(id).observe("click",this.handleSelectClick.bind(this))
}.bind(this));var handler=this.formalityChanged.bindAsEventListener(this);$$("#formality input").each(function(item){item.observe("click",handler)});$("signup").observe("submit",this.formSubmit.bindAsEventListener(this));$("lastname").observe("blur",this.whoSearchedMe.bindAsEventListener(this));$("firstname").observe("blur",this.whoSearchedMe.bindAsEventListener(this));$("captchaContainer").observe("submit",this.captchaValidate.bindAsEventListener(this));
$("middleschool_id").observe("autocomplete:only-selected",this.showRegisterDetails.bindAsEventListener(this));$("highschool_id").observe("autocomplete:only-selected",this.showRegisterDetails.bindAsEventListener(this));$("university_id").observe("autocomplete:only-selected",this.showRegisterDetails.bindAsEventListener(this));$("middleschool_country_btn").observe("click",this.showCountrySelect);$("highschool_country_btn").observe("click",this.showCountrySelect);
$("university_country_btn").observe("click",this.showCountrySelect);$("middleschool_country").observe("change",this.hideCountrySelect);$("highschool_country").observe("change",this.hideCountrySelect);$("university_country").observe("change",this.hideCountrySelect)},showCountrySelect:function(event){var selectbox=event.element().previous();var link=event.element();selectbox.show();link.hide()},hideCountrySelect:function(event){var id=event.element().previous(".equalWidthInput").identify();
var url=autocompletionAjax.getAutocompleteById(id).options.serviceUrl;url=url.split("&")[0];var countryId=$(event.element().identify()).value;autocompletionAjax.getAutocompleteById(id).serviceUrl=url+"&country_id="+countryId;autocompletionAjax.getAutocompleteById(id).reset();var selectbox=event.element();var link=event.element().next();selectbox.hide();link.innerHTML="Schimba tara ("+selectbox.options[selectbox.selectedIndex].innerHTML+")";
link.show()},showRegisterDetails:function(ev){var elem=ev.element().identify();$(elem+"_details").show()},whoSearchedMe:function(){var lastname=$("lastname").value.strip();var firstname=$("firstname").value.strip();if(this.lastname||this.firstname){if(this.lastname==lastname&&this.firstname==firstname){return}}this.lastname=lastname;this.firstname=firstname;if(this.lastname.length>2&&this.firstname.length>2){new Ajax.Updater("whoSearchedYou","/user/register/who-searched-you.ajax",{inlineLoader:"firstname",parameters:{firstname:this.firstname,lastname:this.lastname},onSuccess:function(tr){if(tr.responseText==""){$("whoSearchedYou").hide()
}else{$("whoSearchedYou").show()}}})}},isMyEmailOk:function(){var email=$("email").value.strip();var ret=null;var ajaxObject;ajaxObject=new Ajax.Updater("isMyEmailOk","/user/register/check-email-ok.ajax",{inlineLoader:"email",asynchronous:false,parameters:{email:email},options:{asynchronous:false},onSuccess:function(tr){ret=true},onFailure:function(tr){ret=false;$("email").title="Exista deja un cont asociat acestei adrese de email."
}});return ret},autocompleteYearsInfo:function(ev,elem,value){if(!ev){return}if(!elem||!value){elem=ev.element().identify().split("_")[0];value=ev.element().value}this.autocompleteYears(elem,value)},autocompleteYears:function(currentElement,value){var yearsMap={middleschool:{lap:7,length:8},highschool:{lap:15,length:4},university:{lap:19,length:4}};if(yearsMap[currentElement]){var selectedYear=parseInt($(currentElement+"_start").value)+yearsMap[currentElement]["length"];
this.generateYears(value,selectedYear,currentElement);return}for(var type in yearsMap){$(type+"_start").value=parseInt($("Year").value)+yearsMap[type]["lap"];var sYear=parseInt($(type+"_start").value)+yearsMap[type]["length"];this.generateYears($(type+"_start").value,sYear,type)}},generateYears:function(startYear,selectedYear,element){startYear=parseInt(startYear);selectedYear=parseInt(selectedYear);
var id=element+"_end";var yearsLabel=$("yearLabel").innerHTML.strip();var thisYear=new Date().getFullYear();$(id).select("option.dynamic-element").invoke("remove");for(var year=startYear+1;year<startYear+10&&year<=thisYear;year++){var optionText=year;if(3<=(year-startYear)&&(year-startYear)<=8){var diff=year-startYear;optionText=optionText+" ("+diff+" "+yearsLabel+")"}var option=new Element("option",{"class":"dynamic-element",value:year});
option.update(optionText);$(id).insert(option)}if(selectedYear>thisYear){$(id).value=9999}else{$(id).value=selectedYear}},validateFullDate:function(value,element){return element.up("p").select("select").all(function(item){return item.value})},validateEducation:function(value,element){if($("middleschool_id_value").value){return true}if($("highschool_id_value").value){return true}if($("university_id_value").value){return true
}return false},validateEduYears:function(value,element){if(!value){return false}var startYear=element.previous("select").getValue();if(!startYear){return false}if(startYear>value){return false}var schoolStage=element.identify().split("_")[0];switch(schoolStage){case"middleschool":if((startYear-6)<parseInt($("Year").getValue())){return false}break;case"highschool":if((startYear-14)<parseInt($("Year").getValue())){return false
}if($("middleschool_end").up("div").visible()&&$("middleschool_end").getValue()!=""&&$("middleschool_end").getValue()>$("highschool_start").getValue()){return false}break;case"university":if((startYear-18)<parseInt($("Year").getValue())){return false}if($("highschool_end").up("div").visible()&&$("highschool_end").getValue()!=""&&$("highschool_end").getValue()>$("university_start").getValue()){return false
}break}return true},formalityChanged:function(e){var elem=$("nameBeforeZone").down("input");if($("formality_maam").checked){$("nameBeforeZone").show();elem.enable();elem.focus()}else{$("nameBeforeZone").hide();elem.disable()}},checkCaptcha:function(field){var value=field.value.strip();if(!value.length){return false}var valid=false;if(field.next("span")){field.next("span").hide()}new Ajax.Request("/user/register/check-captcha.ajax",{method:"post",parameters:"security_code="+value,asynchronous:false,onSuccess:function(){valid=true
},onFailure:function(transport){if(!field.next("span")){field.insert({after:new Element("span",{"class":"validation-advice"}).update(transport.responseText)})}else{field.next("span").show()}}});return valid},captchaValidate:function(e){var field=$("captchaContainer").down("input");if(!this.checkCaptcha(field)){if(e!=null){e.stop()}return false}this.form.insert({bottom:new Element("p").insert(new Element("input",{type:"text",value:field.value.strip(),name:"security_code"})).hide()});
this.captchaAdded=true;$("signup").submit();if(e!=null){e.stop()}return false},formSubmit:function(e){this.valid=signupValidator.validate();e.stop();if(!this.valid){return false}if(this.captchaAdded){return true}this.setCombosVisibility(false);Dialog.Confirm.show("captchaContainer",{width:350,height:150,modal:true,title:"Introduceti codul de securitate",onSuccess:this.captchaValidate.bind(this),onFailure:function(){this.setCombosVisibilityTrue()
}.bind(this)});return false},setCombosVisibility:function(visible){var isIE5or6=navigator.appVersion.indexOf("MSIE 6.0;");if(isIE5or6>0){var elements=$("signup").select("select");elements.each(function(item){if(!item.hasClassName("profileConfSelect")){if(visible){item.show()}else{item.hide()}}})}},setCombosVisibilityTrue:function(){this.setCombosVisibility(true);return true},onFormValidate:function(valid,form){this.valid=valid;
this.form=form},refreshCaptcha:function(e){var captcha=e.element().up("p").previous("p").down("img");var captchaSrc=captcha.src;if(captchaSrc.indexOf("?")!=-1){captchaSrc=captchaSrc.replace(/\?cid=.+/,"")}captchaSrc+="?cid="+(new Date()).getTime();captcha.src=captchaSrc},handleSelectClick:function(e){var elem=e.element().up(".selectField");var startValue=e.element().up(".container").down("select").getValue();
if(elem){var selectId=elem.identify();switch(selectId){case"middleschool_id":case"highschool_id":case"university_id":this.autocompleteYearsInfo(Event.click,selectId,startValue)}}},selectDefaultCity:function(selectId){try{if(selectId.parent.identify()=="middleschool_city_id"&&SelectCollection.get("region_id").getValue()==1){SelectCollection.get("middleschool_city_id").selectIndex(1,false);SelectCollection.get("middleschool_city_id").selectIndex(1,false)
}}catch(e){}},handleSelectChange:function(e){var selectId=e.memo.id;var selectedValue=SelectCollection.get(selectId).getValue();var selectedText=SelectCollection.get(selectId).getText();switch(selectId){case"region_id":$("wrapperMiddleSchoolContainer").hide();$("wrapperHighSchoolContainer").hide();$("wrapperUniversityContainer").hide();case"highschool_region_id":case"university_region_id":if(!selectedValue){$(selectId).up(".pContainer").next().hide();
if(selectId=="highschool_region_id"){$("highschool_id").up(".pContainer").hide()}if(selectId=="university_region_id"){$("university_id").up(".pContainer").hide()}return}var nextSelectId=$(selectId).up(".pContainer").next().down("div").identify();SelectCollection.get(nextSelectId).updateAjax("/default/common/get-cities.ajax?regionId="+selectedValue,{onSuccess:function(){$(nextSelectId).up(".pContainer").show();
if(selectId=="region_id"){this.setEduSections()}else{if(selectId=="highschool_region_id"){$("highschool_id").up(".pContainer").hide()}else{$("university_id").up(".pContainer").hide()}}}.bind(this)},this.selectDefaultCity);break;case"middleschool_city_id":case"highschool_city_id":case"university_city_id":if(!selectedValue){if(selectId=="middleschool_city_id"){this.setEduSections()}else{if(selectId=="highschool_city_id"){$("highschool_id").up(".pContainer").hide();
SelectCollection.get("highschool_id").selectIndex(0)}else{$("university_id").up(".pContainer").hide();SelectCollection.get("university_id").selectIndex(0)}}return}new Ajax.Request("/user/register/get-communities.ajax",{inlineLoader:selectId,parameters:{cityId:selectedValue,onlyHighschools:((selectId=="highschool_city_id")?1:0),onlyUnis:((selectId=="university_city_id")?1:0)},onSuccess:function(transport){var response=transport.responseText.evalJSON();
switch(selectId){case"highschool_city_id":this.setEduSections(response,"HighSchool");break;case"university_city_id":this.setEduSections(response,"University");break;case"middleschool_city_id":this.setEduSections(response);break}$("wrapperMiddleSchoolContainer").show();$("wrapperHighSchoolContainer").show();$("wrapperUniversityContainer").show();if(selectId=="highschool_city_id"){$("highschool_id").up(".pContainer").show()
}if(selectId=="university_city_id"){$("university_id").up(".pContainer").show()}}.bind(this)});break;case"middleschool_id":case"highschool_id":case"university_id":var details;if((details=$(selectId).up(".pContainer").next(".details.after"))){if(selectedValue){details.show()}else{details.hide()}}break;case"seo_cities_schools":window.location.href="/scoli/"+selectedText;break;case"seo_cities_universities":window.location.href="/facultati/"+selectedText;
break;case"seo_cities_highschools":window.location.href="/licee/"+selectedText;break;case"seo_region_company":window.location.href="/companii/"+selectedText;break}},updatedSubsections:{},setEduSections:function(data,updateOnlySubsection){if(Object.isUndefined(data)){data={}}var sections=[{key:"MiddleSchool",selectId:"middleschool_id",containerId:"middleSchoolContainer"},{key:"HighSchool",selectId:"highschool_id",containerId:"highSchoolContainer"},{key:"University",selectId:"university_id",containerId:"universityContainer"}];
sections.each(function(item){if(updateOnlySubsection){if(item.key!=updateOnlySubsection){return}this.updatedSubsections[item.key]=true}else{if(this.updatedSubsections[item.key]){return}}var selector=SelectCollection.get(item.selectId);if(data[item.key]==null||data[item.key].length==0){$(item.containerId).hide();$(item.containerId).next(".show-initial").hide();$(item.containerId).next(".show-none").show();
selector.update({})}else{$(item.containerId).show();$(item.containerId).next(".show-initial").show();$(item.containerId).next(".show-none").hide();selector.update(data[item.key])}}.bind(this))},changeAcademicLocation:function(e){var elem=e.element();elem.up(".wrapper-container").down(".container").show();elem.up(".wrapper-container").down(".change-location").show();SelectCollection.get("university_region_id").selectIndex(SelectCollection.get("region_id").getSelectedIndex())
},changeHighschoolLocation:function(e){var elem=e.element();elem.up(".wrapper-container").down(".container").show();elem.up(".wrapper-container").down(".change-location").show();SelectCollection.get("highschool_region_id").selectIndex(SelectCollection.get("region_id").getSelectedIndex())},showWhyShouldMessage:function(e){var el=$("tooltip");Dialog.Confirm.show(el,{modal:true,closable:true,title:"De ce sa-mi dau datele corecte",width:300,height:80})
},autocompleteExamples:function(ev){var element=ev.element();var elems=element.readAttribute("rel").split("|");$(elems[1]+"_id").value=element.innerHTML;$(elems[1]+"_id_value").value=elems[0];$(elems[1]+"_id_details").setStyle({display:"block"});Event.stop(ev)}};function addInstitution(ev,rel){var tmp;var communityName="";var countryId=121;if(rel&&rel.length>1){tmp=rel.split("-")}else{if(!ev){return
}var elem=ev.element().identify();communityName=$(elem).value;countryId=ev.element().next().next().value;tmp=elem.split("_");tmp[1]=tmp[0];if(tmp[0]=="middleschool"){tmp[0]=1}else{if(tmp[0]=="highschool"){tmp[0]=2}else{if(tmp[0]=="university"){tmp[0]=5}else{if(tmp[0]=="military"){tmp[0]=19}else{tmp[0]=7}}}}}var institution_type=tmp[0];var institution_id=tmp[1];var data=$("signup").serialize(true);var dialogRegion=null;
var dialogCity=null;if(data["education["+institution_id+"_region_id]"]){dialogRegion=data["education["+institution_id+"_region_id]"]}else{dialogRegion=data["education[education_region_id]"]}if(data["education["+institution_id+"_city_id]"]){dialogCity=data["education["+institution_id+"_city_id]"]}else{dialogCity=data["education[education_city_id]"]}showAddCommunityDialog(countryId,communityName,institution_type,dialogRegion,dialogCity,function(newCommId){autocompletionAjax.getAutocompleteById(institution_id+"_id").reset();
$(institution_id+"_id_value").value=newCommId;$(institution_id+"_id_details").show()})}document.observe("dom:loaded",function(){Register.init();$(document.body).observe("autocomplete:addinstitution",addInstitution)});var Scriptaculous={Version:"1.8.1",require:function(libraryName){document.write('<script type="text/javascript" src="'+libraryName+'"><\/script>')},REQUIRED_PROTOTYPE:"1.6.0",load:function(){function convertVersionString(versionString){var r=versionString.split(".");
return parseInt(r[0])*100000+parseInt(r[1])*1000+parseInt(r[2])}if((typeof Prototype=="undefined")||(typeof Element=="undefined")||(typeof Element.Methods=="undefined")||(convertVersionString(Prototype.Version)<convertVersionString(Scriptaculous.REQUIRED_PROTOTYPE))){throw ("script.aculo.us requires the Prototype JavaScript framework >= "+Scriptaculous.REQUIRED_PROTOTYPE)}$A(document.getElementsByTagName("script")).findAll(function(s){return(s.src&&s.src.match(/scriptaculous\.js(\?.*)?$/))
}).each(function(s){var path=s.src.replace(/scriptaculous\.js(\?.*)?$/,"");var includes=s.src.match(/\?.*load=([a-z,]*)/);(includes?includes[1]:"builder,effects,dragdrop,controls,slider,sound").split(",").each(function(include){Scriptaculous.require(path+include+".js")})})}};Scriptaculous.load();function showAddCommunityDialog(countryId,name,type,region,city,afterHandler,closeHandler){var url="/community/dialog-add?countryId="+countryId+"&name="+name+"&type="+type+"&region="+region+"&city="+city;
Dialog.Confirm.ajax(url,{modal:true,title:"Adauga comunitate",zindex:10,width:560,height:480,id:"addCommunityWindow",onClose:function(){(closeHandler||Prototype.emptyFunction).wrap(function(base){if(!Object.isUndefined(SelectCollection)){SelectCollection.unregisterAllUnder("#addCommunityWindow")}AddCommunityDialog.deattachObservers();PhotoUploader.deattachObservers();base()})()},onSuccess:function(){PhotoUploader.deattachObservers();
AddCommunityDialog.deattachObservers();afterHandler(AddCommunityDialog.lastAddedId)}},{onComplete:function(tr){tr.responseText.evalScripts()}})}if(typeof SelectCollection=="undefined"){StringFilter=Class.create({initialize:function(values){this.lastSearchedString=null;this.lastResultSet=null;this.values=values},filter:function(str){var string=String(str).toLowerCase();var matched=[];if(string.length==0){this.lastSearchedString="";
return true}if(string==this.lastSearchedString){return false}var searchSet=this.values;if(string.indexOf(this.lastSearchedString)!=-1){}for(var i=0;i<searchSet.length;i++){matched[i]=this.values[i].indexOf(string)}this.lastSearchedString=string;return matched}});JsonFilterMethods={MAX_ITEMS:100,CLASS_LAST:"last",CLASS_FIRST:"first",CLASS_DISABLED:"disabled",CLASS_ACTIVE:"active",initialize:function(list,elements,defaultValue,parent){this.list=list;
this.update(elements);this.currentIndex=0;this.defaultValue=defaultValue;this.highlighted=null;this.parent=parent;this.errorText=elements.error||"Nu a fost gasit";this.titleText=elements.title||false;this.defaultText=elements["default"]||"";this.moreText=elements.more||"- Mai multe -";this.moreTitleText=elements.moreTitle||"Tastati pentru rezultate"},update:function(elements){this.initialized=false;
this.updated=false;this.initialItems=false;this.elements=elements;this.filterObject=null;this.currentItems=[]},_lazyUpdate:function(){if(this.updated){return}this.updated=true;var values=this.elements;this.errorText=values.error||this.errorText;this.titleText=values.title||this.titleText;this.defaultText=values["default"]||this.defaultText;this.moreText=values.more||this.moreText;this.moreTitleText=values.moreTitle||this.moreTitleText;
delete values.title;delete values.error;delete values["default"];delete values.more;delete values.moreTitle;this._elements=$H(values);if(navigator.userAgent.toLowerCase().indexOf("chrome")>-1&&this.parent.readAttribute("id").match(/region/)){var elemente=this._elements.values();var elementeTmp=this._elements.values();elemente.sort();this.options=elemente;this.values=new Array();for(var i=0;i<elemente.length;
++i){var indexof=elementeTmp.indexOf(elemente[i])+1;this.values.push(indexof)}}else{this.options=this._elements.values();this.values=this._elements.keys()}this.indexesLookup=this._getValueToIndexLookup(this.values);this.currentIndex=this.getIndexByValue(this.defaultValue);this.errorShown=false},_addInitialItems:function(){if(this.initialItems){return}this.initialItems=true;this._clear();this.titleText&&this.addDisabledItem(this.titleText);
this.defaultText&&this.addItemBulk({text:this.defaultText});this._addAllItems()},init:function(){if(this.initialized){return}this.initialized=true;this._lazyUpdate();this._addInitialItems();this.hideError()},reset:function(){this.initialized=false},refresh:function(){this.initialized=false;this.initialItems=false},_getFilter:function(){if(this.filterObject){return this.filterObject}var i;var values=[];
for(i=0;i<this.options.length;i++){values[i]=String(this.options[i]).toLowerCase()}this.filterObject=new StringFilter(values);return this.filterObject},_getValueToIndexLookup:function(values){var lookup={};for(var i=0;i<values.length;i++){lookup[values[i]]=i+1}return lookup},showError:function(text){this._clear();this.addDisabledItem(text||this.errorText);this.errorShown=true},showMore:function(){this.showError(this.moreTitleText||this.titleText)
},hideError:function(){this.errorShown=false},addItem:function(item){if(typeof item!="object"){return null}if(this.list.lastChild){this.list.lastChild.removeClassName(this.CLASS_LAST)}var li=this.addItemBulk(item,true);li.addClassName(this.CLASS_LAST);if(this.list.childNodes.length==1){li.addClassName(this.CLASS_FIRST)}return li},addDisabledItem:function(text){var li=this.addItemBulk({text:text,disabled:true});
li.addClassName(this.CLASS_DISABLED)},addItemBulk:function(item){var li=new Element("li");this.list.appendChild(li);item.text=typeof(item.text)=="undefined"?"":item.text.toString();item.value=typeof(item.value)=="undefined"?"":item.value.toString();li.update(item.text||item.value);li._value=item.value||"";li._text=item.text;if(item.meta){li._meta=item.meta}if(item.disabled||item.notIndexed){if(item.disabled){li._disabled=true
}li._index=-1}else{li._index=this.currentItems.length;this.currentItems.push(li)}return li},morph:function(items){this._clear();for(var i=0;i<items.length;i++){if(items[i].disabled){this.addDisabledItem(items[i].text)}else{this.addItemBulk(items[i])}}this.initialized=false},isOversized:function(){if(!this.options){return false}return this.options.length>this.MAX_ITEMS},_addAllItems:function(){var length=this.isOversized()?this.MAX_ITEMS:this.options.length;
for(var i=0;i<length;i++){this.addItemBulk({text:this.options[i],value:this.values[i]})}if(this.isOversized()){if(this.currentIndex>this.currentItems.length&&this.currentIndex<this.options.length){var li=this.addItemBulk({text:this.options[this.currentIndex-1],value:this.values[this.currentIndex-1]});this.setIndex(li._index)}this.addItemBulk({text:this.moreText,meta:"showMore"})}if(typeof(this.defaultValue)!="undefined"){this.setIndex(this.currentIndex)
}if(this.currentItems.length){this.currentItems[this.currentItems.length-1].addClassName(this.CLASS_LAST)}},_addAndMarkItems:function(indexes,markLength){var count=0;for(var i=0;i<indexes.length;i++){if(indexes[i]==-1){continue}this.addItemBulk({text:this.mark(this.options[i],indexes[i],markLength),value:this.values[i]});if(++count>this.MAX_ITEMS){return}}if(this.currentItems.length){this.currentItems[this.currentItems.length-1].addClassName(this.CLASS_LAST)
}},_clear:function(){delete this.currentItems;this.currentItems=[];this.list.update()},filter:function(string){string=String(string);var indexes=this._getFilter().filter(string);if(indexes===false){return}if(indexes===true){this.refresh();this.init();return}this.initialItems=false;this._clear();this._addAndMarkItems(indexes,string.length);if(this.size()==0){this.showError();return}this.setIndex(0);
this.hideError()},mark:function(string,position,length){var str=String(string).replace("<b>","").replace("<B>","").replace("</b>","").replace("</B>","");return str.slice(0,position)+"<b>"+str.slice(position,position+length)+"</b>"+str.slice(position+length)},unmark:function(string){return String(string).replace("<b>","").replace("<B>","").replace("</b>","").replace("</B>","")},next:function(){this.setIndex(this.currentIndex+1);
if(this.currentIndex>this.size()-1){this.setIndex(0)}return this.current("next")},previous:function(){this.setIndex(this.currentIndex-1);if(this.currentIndex<0){this.setIndex(this.size()-1)}return this.current("previous")},current:function(who){if(!this.currentItems.length||this.errorShown){return null}var current=this.currentItems[this.currentIndex];if(current._disabled){if(who=="previous"){return this.previous()
}else{return this.next()}}return current},highlight:function(index){if(typeof(index)=="undefined"){index=this.currentIndex}if(this.highlighted){this.highlighted.removeClassName(this.CLASS_ACTIVE)}if(!this.currentItems[index]){return}this.highlighted=this.currentItems[index];this.highlighted.addClassName(this.CLASS_ACTIVE)},getIndex:function(){return this.currentIndex},setIndex:function(index){this.currentIndex=index;
if(this.isOversized()){if(this.currentIndex>this.currentItems.length&&this.currentIndex<this.options.length){this.refresh()}}this.init();this.highlight()},getIndexByValue:function(value){this.init();if(this.indexesLookup[value]){return this.indexesLookup[value]}return 0},setIndexByValue:function(value){this.init();if(this.indexesLookup[value]){this.setIndex(this.indexesLookup[value])}else{this.setIndex(0)
}},getOption:function(index){if(!this.options){this.init()}if(index==-1){return this.defaultText}return this.options[index]},getOptions:function(index){if(!this.options){this.init()}if(index==-1){return this.defaultText}return this.options},getValue:function(index){if(!this.values){this.init()}if(index==-1){return""}return this.values[index]},getValues:function(){if(!this.values){this.init()}return this.values
},getCurrentItems:function(){return this.currentItems},size:function(){return this.currentItems.length},removeClass:function(index,className){var el=this.options[this.visibleIndexes[index]];if(el){el.removeClassName(className)}},addClass:function(index,className){var el=this.options[this.visibleIndexes[index]];if(el){el.addClassName(className)}}};JsonFilter=Class.create(JsonFilterMethods);SelectMethods={initialize:function(parent){this.active=false;
this.enabled=true;this.initialized=false;this.locked=false;this.lastSelectedText=null;this.lastSelectedValue=null;this.parent=parent;this.textInput=parent.select(".selector_input")[0];this.valueInput=parent.select(".result_input")[0];this.mainContainer=parent.select(".selector")[0];this.dropdownButton=parent.select(".selector_dropdown")[0];this.resultsContainer=parent.select(".results_container")[0];
this.list=parent.select(".results_container .result_list")[0];var options=selectsData[this.parent.identify()]||{};this.filter=new JsonFilter(this.list.down("ul"),options,this.getValue(),this.parent);this._setText(options[this.getValue()]||options["default"]||"");this._onClickHandler=this._onClick.bindAsEventListener(this);this._onClickPopupHandler=this._onClickPopup.bindAsEventListener(this);this._onHideHandler=this.hide.bindAsEventListener(this);
this.textInput.observe("keyup",this._onKeyUp.bindAsEventListener(this));this.textInput.observe("keydown",this._onKeyDown.bindAsEventListener(this));this.mainContainer.observe("click",this._onClickHandler);this.dropdownButton.observe("click",this._onClickHandler);this.resultsContainer.observe("click",this._onClickPopupHandler);this.resultsContainer.observe("mouseover",this._onMouseOver.bindAsEventListener(this));
var width=this.parent.getWidth();if(width>24){this.textInput.style.width=(this.parent.getWidth()-24)+"px"}},getValue:function(){return this.valueInput.value},getText:function(){return this.textInput.value},disable:function(){this.enabled=false;this.textInput.disable();this.textInput.addClassName("disabled")},enable:function(){this.enabled=true;this.textInput.enable();this.textInput.removeClassName("disabled")
},updateAjax:function(url,options,onReady){this._lock();new Ajax.Request(url,Object.extend({onComplete:function(tr){var options=tr.responseText.evalJSON();this._unlock();this.update(options);if(!Object.isUndefined(onReady)&&Object.isFunction(onReady)){onReady(this)}}.bind(this)},options))},update:function(options,initialValue){if(typeof(options)=="undefined"){options={}}var values={};var i=0;if(Object.isArray(options)){for(i=0;
i<options.length;i++){values[i]=options[i]}}else{if("getOptions" in options){options=options.getOptions();for(i=0;i<options.length;i++){values[i]=options[i]}}else{$H(options).each(function(pair){values[pair.key]=pair.value}.bind(this))}}this.filter.update(values);this._setText(this.filter.defaultText||options["default"]||"");if(typeof(initialValue)!="undefined"){this.selectValue(initialValue)}},insert:function(option){this._add(option);
this.filter.refresh()},markNext:function(){this.filter.next();this._render()},markPrevious:function(){this.filter.previous();this._render()},hide:function(ev){if(!this.active){return}this.active=false;if(ev){this._setText();this._setValue();this.filter.reset();this.filter.setIndexByValue(this.getValue())}document.stopObserving("click",this._onHideHandler);this.resultsContainer.hide()},show:function(){if(this.active||this.locked){return
}SelectCollection.hideAllActive();this.active=true;document.observe("click",this._onHideHandler);this.resultsContainer.absolutize();this.resultsContainer.show();this.filter.init();this.filter.highlight();if(this.getValue()==""){this._setText("")}this._getHeights();this._render()},fire:function(){this.parent.fire("select:changed",{id:this.parent.identify()})},getOptions:function(){return this.filter.getOptions()
},getSelectedIndex:function(){return this.filter.getIndex()},selectIndex:function(index,silent){this.filter.reset();this.filter.setIndex(index);this._selectEntry(silent)},selectValue:function(value,silent){var index=this.filter.getIndexByValue(value);if(index===false){index=0}this.selectIndex(index,silent)},_filter:function(string){string=String(string);this.filter.filter(string);this._render()},_lock:function(){if(this.locked){return
}this.locked=true;this.mainContainer.addClassName("locked")},_unlock:function(){if(!this.locked){return}this.locked=false;this.mainContainer.removeClassName("locked")},_onKeyDown:function(ev){if(this.active){switch(ev.keyCode){case Event.KEY_TAB:case Event.KEY_RETURN:this._selectEntry(false);this.active=false;ev.stop();return;case Event.KEY_ESC:this.hide();this.active=false;ev.stop();return;case Event.KEY_LEFT:case Event.KEY_RIGHT:return
}return}if(ev.keyCode==Event.KEY_TAB||ev.keyCode==Event.KEY_RETURN||(Prototype.Browser.WebKit>0&&ev.keyCode==0)){return}this.show()},_onKeyUp:function(ev){if(this.active){switch(ev.keyCode){case Event.KEY_UP:this.markPrevious();return;case Event.KEY_DOWN:this.markNext();return}var string=String(this.getText());this._filter(string);return}},_onMouseOver:function(ev){var element=ev.findElement("li");
if(!element||element.hasClassName(this.filter.CLASS_DISABLED)){return}this.filter.setIndex(element._index)},_onClick:function(ev){if(ev.element().hasClassName(this.filter.CLASS_DISABLED)){return}if(this.active){this.filter.reset();this.hide()}else{this.textInput.select();this.show()}ev.stop()},_onClickPopup:function(ev){if(ev.element().hasClassName(this.filter.CLASS_DISABLED)){return}if(ev.findElement("#"+this.parent.identify()+" .results_container")){this._selectEntry(false)
}},_selectEntry:function(silent){var selected=this.filter.current();if(!selected){return false}if(selected&&selected._meta=="showMore"){this.filter.showMore();this.active=false;this._render();this.textInput.select();return true}this.filter.reset();this.filter.setIndexByValue(selected._value);this._setText(this.filter.unmark(selected._text.strip()));this._setValue(selected._value);if(!silent){this.fire()
}this.hide();return true},_setText:function(text){if(typeof(text)!="undefined"){this.textInput.value=this.lastSelectedText=text}else{this.textInput.value=this.lastSelectedText}},_setValue:function(value){if(typeof(value)!="undefined"){this.valueInput.value=this.lastSelectedValue=value}else{this.valueInput.value=this.lastSelectedValue}},_render:function(){this._setListDimensions();var index=this.filter.getIndex();
if(index==0){this.list.scrollTop=0;return}this.list.scrollTop=this.heights[index]-this.listHeight},_setListDimensions:function(){this.textInput.style.width=(this.parent.getWidth()-24)+"px";var height=this.list.down("ul").getHeight();if(height>this.listHeight){height=this.listHeight}this.list.style.height=height+"px";this.resultsContainer.style.width=this.parent.getWidth()+"px"},_getHeights:function(){if(this.initialized){return
}var elements=this.filter.getCurrentItems();this.heights=[];this.heights[0]=elements[0].getHeight();for(var i=1;i<elements.length;i++){this.heights[i]=this.heights[i-1]+elements[i].getHeight()}this.listHeight=this.list.getHeight()-2;var MAX_HEIGHT=Math.max(parseInt(document.viewport.getHeight()/3),100);if(this.listHeight>MAX_HEIGHT){this.listHeight=MAX_HEIGHT}this.initialized=true},_add:function(option){this.filter.addItem(option)
}};Select=Class.create(SelectMethods);SelectCollection={initialized:false,init:function(){if(this.initialized){return}this.initialized=true;this.selects=new Hash();this.update()},update:function(){if(!this.initialized){this.init();return}$$(".selectField").each(function(element){this.register(element.identify())}.bind(this));this.selects.each(function(select){if(!$(select.key)){this.unregister(select.key)
}}.bind(this))},get:function(id){return this.selects.get(id)},register:function(id){if(this.selects.get(id)){return}this.selects.set(id,new Select($(id)))},unregister:function(id){this.selects.unset(id)},unregisterAllUnder:function(selector){$$(selector+" .selectField").each(function(element){this.unregister(element.identify())}.bind(this))},hideAllActive:function(){this.selects.each(function(select){if(select.value.active){select.value.hide()
}}.bind(this))},cleanup:function(){try{this.selects.each(function(select){this.unregister(select.key)}.bind(this));delete (selectsData)}catch(e){}}}}var Validator=Class.create();Validator.prototype={initialize:function(className,error,test,options){if(typeof test=="function"){this.options=$H(options);this._test=test}else{this.options=$H(test);this._test=function(){return true}}this.error=error||"Validation failed.";
this.className=className},test:function(v,elm){return(this._test(v,elm)&&this.options.all(function(p){return Validator.methods[p.key]?Validator.methods[p.key](v,elm,p.value):true}))}};Validator.methods={pattern:function(v,elm,opt){return Validation.get("IsEmpty").test(v)||opt.test(v)},minLength:function(v,elm,opt){return v.length>=opt},maxLength:function(v,elm,opt){return v.length<=opt},min:function(v,elm,opt){return v>=parseFloat(opt)
},max:function(v,elm,opt){return v<=parseFloat(opt)},notOneOf:function(v,elm,opt){return $A(opt).all(function(value){return v!=value})},oneOf:function(v,elm,opt){return $A(opt).any(function(value){return v==value})},is:function(v,elm,opt){return v==opt},isNot:function(v,elm,opt){return v!=opt},equalToField:function(v,elm,opt){return v==$F(opt)},notEqualToField:function(v,elm,opt){return v!=$F(opt)},include:function(v,elm,opt){return $A(opt).all(function(value){return Validation.get(value).test(v,elm)
})}};var Validation=Class.create();Validation.prototype={initialize:function(form,options){this.options=Object.extend({onSubmit:true,stopOnFirst:false,immediate:false,focusOnError:true,useTitles:false,onFormValidate:function(result,form){},onElementValidate:function(result,elm){}},options||{});this.form=$(form);if(this.options.onSubmit){Event.observe(this.form,"submit",this.onSubmit.bind(this),false)
}if(this.options.immediate){var useTitles=this.options.useTitles;var callback=this.options.onElementValidate;Form.getElements(this.form).each(function(input){Event.observe(input,"blur",function(ev){Validation.validate(Event.element(ev),{useTitle:useTitles,onElementValidate:callback})})})}},onSubmit:function(ev){if(!this.validate()){Event.stop(ev)}},validate:function(){var result=false;var useTitles=this.options.useTitles;
var callback=this.options.onElementValidate;if(this.options.stopOnFirst){result=Form.getElements(this.form).all(function(elm){return Validation.validate(elm,{useTitle:useTitles,onElementValidate:callback})})}else{result=Form.getElements(this.form).collect(function(elm){return Validation.validate(elm,{useTitle:useTitles,onElementValidate:callback})}).all()}if(!result&&this.options.focusOnError){var el=Form.getElements(this.form).findAll(function(elm){return $(elm).hasClassName("validation-failed")
}).first();if(el&&el.visible()&&el.getAttribute("type")!="hidden"){el.focus()}delete el}this.options.onFormValidate(result,this.form);return result},reset:function(){Form.getElements(this.form).each(Validation.reset)}};Object.extend(Validation,{validate:function(elm,options){options=Object.extend({useTitle:false,onElementValidate:function(result,elm){}},options||{});elm=$(elm);var cn=elm.classNames();
return result=cn.all(function(value){var test=Validation.test(value,elm,options.useTitle);options.onElementValidate(test,elm);return test})},test:function(name,elm,useTitle){var v=Validation.get(name);var prop="__advice"+name.camelize();try{if(Validation.isVisible(elm)&&!v.test($F(elm),elm)){if(!elm[prop]){var advice=Validation.getAdvice(name,elm);if(advice==null){var errorMsg=useTitle?((elm&&elm.title)?elm.title:v.error):v.error;
advice='<span class="validation-advice" id="advice-'+name+"-"+Validation.getElmID(elm)+'" style="display:none">'+errorMsg+"</span>";switch(elm.type.toLowerCase()){case"checkbox":case"radio":var p=elm.parentNode;if(p){new Insertion.Bottom(p,advice)}else{new Insertion.After(elm,advice)}break;default:new Insertion.After(elm,advice)}advice=Validation.getAdvice(name,elm)}if(true||typeof Effect=="undefined"){advice.style.display=""
}else{new Effect.Appear(advice,{duration:1})}}elm[prop]=true;elm.removeClassName("validation-passed");elm.up().addClassName("error");elm.addClassName("validation-failed");return false}else{var advice=Validation.getAdvice(name,elm);if(advice!=null){advice.hide()}elm[prop]="";elm.up().removeClassName("error");elm.removeClassName("validation-failed");elm.addClassName("validation-passed");return true}}catch(e){throw (e)
}},isVisible:function(elm){while(elm.tagName!="BODY"){if(!$(elm).visible()){return false}elm=elm.parentNode}return true},getAdvice:function(name,elm){return $("advice-"+name+"-"+Validation.getElmID(elm))||$("advice-"+Validation.getElmID(elm))},getElmID:function(elm){return elm.id?elm.id:elm.name},reset:function(elm){elm=$(elm);var cn=elm.classNames();cn.each(function(value){var prop="__advice"+value.camelize();
if(elm[prop]){var advice=Validation.getAdvice(value,elm);advice.hide();elm[prop]=""}elm.up().removeClassName("error");elm.removeClassName("validation-failed");elm.removeClassName("validation-passed")})},add:function(className,error,test,options){var nv={};nv[className]=new Validator(className,error,test,options);Object.extend(Validation.methods,nv)},addAllThese:function(validators){var nv={};$A(validators).each(function(value){nv[value[0]]=new Validator(value[0],value[1],value[2],(value.length>3?value[3]:{}))
});Object.extend(Validation.methods,nv)},get:function(name){return Validation.methods[name]?Validation.methods[name]:Validation.methods._LikeNoIDIEverSaw_},methods:{_LikeNoIDIEverSaw_:new Validator("_LikeNoIDIEverSaw_","",{})}});Validation.add("IsEmpty","",function(v){return((v==null)||(v.length==0))});Validation.addAllThese([["required","This is a required field.",function(v){return !Validation.get("IsEmpty").test(v)
}],["validate-number","Please enter a valid number in this field.",function(v){return Validation.get("IsEmpty").test(v)||(!isNaN(v)&&!/^\s+$/.test(v))}],["validate-digits","Please use numbers only in this field. please avoid spaces or other characters such as dots or commas.",function(v){return Validation.get("IsEmpty").test(v)||!/[^\d]/.test(v)}],["validate-alpha","Please use letters only (a-z) in this field.",function(v){return Validation.get("IsEmpty").test(v)||/^[a-zA-Z]+$/.test(v)
}],["validate-alphanum","Please use only letters (a-z) or numbers (0-9) only in this field. No spaces or other characters are allowed.",function(v){return Validation.get("IsEmpty").test(v)||!/\W/.test(v)}],["validate-date","Please enter a valid date.",function(v){var test=new Date(v);return Validation.get("IsEmpty").test(v)||!isNaN(test)}],["validate-email","Please enter a valid email address. For example fred@domain.com .",function(v){return Validation.get("IsEmpty").test(v)||/\w{1,}[@][\w\-]{1,}([.]([\w\-]{1,})){1,3}$/.test(v)
}],["validate-url","Please enter a valid URL.",function(v){return Validation.get("IsEmpty").test(v)||/^(http|https|ftp):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(:(\d+))?\/?/i.test(v)}],["validate-date-au","Please use this date format: dd/mm/yyyy. For example 17/03/2006 for the 17th of March, 2006.",function(v){if(Validation.get("IsEmpty").test(v)){return true}var regex=/^(\d{2})\/(\d{2})\/(\d{4})$/;
if(!regex.test(v)){return false}var d=new Date(v.replace(regex,"$2/$1/$3"));return(parseInt(RegExp.$2,10)==(1+d.getMonth()))&&(parseInt(RegExp.$1,10)==d.getDate())&&(parseInt(RegExp.$3,10)==d.getFullYear())}],["validate-currency-dollar","Please enter a valid $ amount. For example $100.00 .",function(v){return Validation.get("IsEmpty").test(v)||/^\$?\-?([1-9]{1}[0-9]{0,2}(\,[0-9]{3})*(\.[0-9]{0,2})?|[1-9]{1}\d*(\.[0-9]{0,2})?|0(\.[0-9]{0,2})?|(\.[0-9]{1,2})?)$/.test(v)
}],["validate-selection","Please make a selection",function(v,elm){return elm.options?elm.selectedIndex>0:!Validation.get("IsEmpty").test(v)}],["validate-one-required","Please select one of the above options.",function(v,elm){var p=elm.parentNode;var options=p.getElementsByTagName("INPUT");return $A(options).any(function(elm){return $F(elm)})}],["validate-future-date","Please use a future date.",function(v){var ymd=v.gsub("-","/");
var choosedDate=new Date(ymd);var theTime=new Date();if(choosedDate.getTime()<theTime.getTime()){return false}return true}]]);
