$(document).ready(function(){CatalogEngine=new CatalogEngine()});function CatalogEngine(){this.construct()}CatalogEngine.prototype.constructor=CatalogEngine;CatalogEngine.prototype={awaitingResponse:false,daysPerMonth:new Array(31,28,31,30,31,30,31,31,30,31,30,31),debug:false,forms:null,language:"eng",construct:function(){if(this.debug){console.log("CatalogEngine.construct()");tmp=new Date();console.log("Time: "+tmp.toLocaleTimeString()+" "+tmp.getMilliseconds())}currentDate=new Date();nextDate=new Date((currentDate.getTime()+24*60*60*1000));minDateAllowed=(currentDate.getHours()<2)?currentDate.getDate():nextDate.getDate();this.startFromDate=new Date(currentDate.getFullYear(),currentDate.getMonth(),minDateAllowed,0,0,0);this.endToDate=new Date(this.startFromDate.getFullYear()+1,11,31,23,59,59);this.forms=$("form.catalog-engine");this.setForms(true)},controlDate:function(index,fromDate,toDate){if(this.debug){}rtn={enabled:true,every:false,price:null,priceText:"",stock:null,stockText:"",controlText:"",cssClass:"",dayAndTime:false,dayTimeAndLanguage:false,maxQuantity:false,timePrice:false};if(arguments.length==2||typeof(arguments[2])=="undefined"){rtn=this.controlDefaultDateRange(fromDate,rtn)}else{enabled=true;every=0;count=0;date=new Date(fromDate.getFullYear(),fromDate.getMonth(),fromDate.getDate());for(null;date<=toDate;null){rtn=this.controlDate(index,date);enabled=(!rtn.enabled)?false:rtn.enabled;every+=(rtn.enabled)?1:0;count++;date=new Date(date.getFullYear(),date.getMonth(),date.getDate()+1)}rtn.enabled=enabled;rtn.every=(every==0||every==count)}return rtn},controlDefaultDateRange:function(date,rtn){if(rtn.enabled){if(this.startFromDate>date||this.endToDate<date){rtn.enabled=false;rtn.price=0;rtn.priceText=null;rtn.stock=0;rtn.stockText=null;rtn.controlText=translation.date_not_valid;rtn.cssClass="disabled"}}return rtn},controlForm:function(index){if(this.debug){console.log("CatalogEngine.controlForm("+index+")")}form=this.forms[index];date=new Date(form.y.val(),parseInt(form.m.val(),10)-1,form.d.val(),0,0,0);duration=form.duration.val();resort_id=$("#catalog-resort",form).val();current_resort_id=form.current_resort_id;resort=form.suggest.resort.getSelectedOption();messages=new Array();if(!resort_id){messages.push(translation.alert_ski_resort)}else{if(duration<catalog.countries[resort.country_id]["min_duration"]||duration>catalog.countries[resort.country_id]["max_duration"]){messages.push(translation.alert_duration)}}controlDate=this.controlDate(index,date);if(!controlDate.enabled){messages.push(controlDate.controlText)}if(messages.length==0){if(current_resort_id&&current_resort_id!=resort_id){return window.confirm(translation.alert_ski_resort_change)}}for(i=0;i<messages.length;i++){this.setStatusMessage(index,messages[i],"error",false,0,(i==0))}return(messages.length==0)},drawCountriesFlags:function(index,enabled){var CatalogEngine=this;form=this.forms[index];form.flags=$(".catalog-countries",form);form.flags.attr("ctp:replacement","catalog-resort");for(var cny in catalog.countries){span=$('<span title="'+catalog.countries[cny][1]+'" class="catalog-country '+cny+'" bpsr:country="'+cny+'"></span>');form.flags.append(span);if(enabled){span.click(function(){index=$(this).parents("form.catalog-engine").attr("bpsr:index");country_id=$(this).attr("bpsr:country");country_id=country_id!="none"?country_id:"";form=CatalogEngine.forms[index];form.flags.children().removeClass("selected");$(this).addClass("selected");form.suggest.resort.setData({country_id:country_id});form.suggest.resort.search_in_current_options=false;resort_option=form.suggest.resort.getSelectedOption();if(country_id!=""&&resort_option.country_id!=country_id){form.suggest.resort.setSelected("")}form.suggest.resort.draw();form.suggest.resort.show();form.resort.focus();form.resort.select();CatalogEngine.updateDurationSelect(index,country_id)}).mouseover(function(){$(this).addClass("hover")}).mouseout(function(){$(this).removeClass("hover")})}}},drawProviderOption:function(index,option){cssClass=index%2>0?'class="colored" ':"";return $('<div index="'+index+'" value="'+option.id+'" title="'+this.getTitle(option)+'"'+cssClass+">"+option.formattedName+(index>0?" - <em>"+option.address+"</em>":"")+"</div>")},drawResortOption:function(index,option){cssClass=index%2>0?'class="colored" ':"";return $('<div index="'+index+'" value="'+option.id+'" title="'+this.getTitle(option)+'"'+cssClass+">"+option.formattedName+' <span class="flag"></span></div>')},drawSuggestiveFields:function(index){if(this.debug){console.log("CatalogEngine.drawSuggestiveFields("+index+")");tmp=new Date();console.log("Time: "+tmp.toLocaleTimeString()+" "+tmp.getMilliseconds())}var CatalogEngine=this;this.forms[index].suggest={resort:null,provider:null};this.forms[index].suggest.resort=new SuggestiveField();this.forms[index].suggest.resort.drawOption=this.drawResortOption;this.forms[index].suggest.resort.get=this.getResorts;this.forms[index].suggest.resort.search=this.searchResort;this.forms[index].suggest.resort.setData({index:index},false);this.forms[index].suggest.resort.setLanguage(this.language);this.forms[index].suggest.resort.translation.result=translation.resort;this.forms[index].suggest.resort.translation.results=translation.resorts;this.forms[index].suggest.resort.associate("#catalog-resort");this.forms[index].suggest.resort.set(false);this.forms[index].suggest.resort.callback=function(resort_id,option){index=this.getData("index");if(option){CatalogEngine.updateDurationSelect(index,option.country_id)}}},getResorts:function(){rtn=resorts;rtn.sort(this.sort);return rtn},searchResort:function(options,type,txt){if(this.debug){console.log("CatalogEngine.searchResort()")}rtn=new Array();country_id=this.getData("country_id");if(type=="id"&&txt!=""){for(var i=0;i<options.length;i++){if(options[i].id==txt){rtn.push(options[i]);i=options.length}}delete (i)}else{if(txt==""){for(var i=0;i<options.length;i++){if(options[i]&&options[i].name!=null&&options[i].name!=undefined&&(!country_id||options[i].country_id==country_id)){opt=options[i];opt.formattedName=opt.name;rtn.push(opt)}}delete (i)}else{tmp=new Array();reg=this.setRegExp(txt.setSpaces());for(var i=0;i<options.length;i++){if(!country_id||options[i].country_id==country_id){if(options[i]&&options[i].name!=null&&options[i].name!=undefined){pos=options[i].name.search(reg);if(pos!=-1){if(undefined==tmp[parseInt(pos,10)]){tmp[pos]=new Array()}opt=options[i];opt.formattedName=opt.name.replace(reg,"<b>$1</b>");tmp[parseInt(pos,10)].push(opt)}}}}delete (i);index=new Array();for(k in tmp){index.push(k)}index.sort(sortIntegerAsc);rtn=new Array();for(var i=0;i<index.length;i++){for(j=0;j<tmp[index[i]].length;j++){rtn.push(tmp[index[i]][j])}}delete (i)}}fName="<span>"+rtn.length+" "+(rtn.length<2?translation.resort:translation.resorts);fName+=(country_id?" - "+catalog.countries[country_id][1]:"");fName+="</span>";rtn.unshift({id:null,name:null,country:null,className:null,cleanedName:"",formattedName:fName});return rtn},setField:function(field){if(this.debug){console.log("CatalogEngine.setField() ");tmp=new Date();console.log("Time: "+tmp.toLocaleTimeString()+" "+tmp.getMilliseconds())}if(field!=undefined&&field.length>0){field.attr("ctp:processing","0");field.keydown(function(e){field=$(this);rtn=(field.attr("ctp:processing")!="1");if(rtn&&e.which>47){type=field.attr("ctp:typevalue");signed=field.attr("ctp:signedvalue");switch(type){case"integer":rtn=false;if(e.which==14||e.which==27||(e.which>=48&&e.which<=57)||(e.which>=96&&e.which<=105)||(signed=="1"&&(e.which==56||e.which==109))||(e.which>=111&&e.which<=146)){rtn=true}break;case"float":rtn=false;if(e.which==14||e.which==27||(e.which>=48&&e.which<=57)||(e.which>=96&&e.which<=105)||e.which==190||e.which==110||e.which==188||(signed=="1"&&(e.which==56||e.which==109))||(e.which>=111&&e.which<=146)){rtn=true}break}}return rtn});field.bind("change keyup",function(e){force=(arguments[1]=="force");field=$(this);if(field.attr("ctp:processing")!="1"){field.attr("ctp:processing","1");val=field.val();intialval=val;min=field.attr("ctp:minvalue");min=min!=undefined&&!isNaN(min)?parseFloat(min,10):min;max=field.attr("ctp:maxvalue");max=max!=undefined&&!isNaN(max)?parseFloat(max,10):max;step=field.attr("ctp:stepvalue");step=step!=undefined?parseFloat(step,10):step;type=field.attr("ctp:typevalue");signed=field.attr("ctp:signedvalue");signed=(signed!=undefined&&signed==1);zerovalue=field.attr("ctp:zerovalue");zerovalue=(zerovalue!=undefined&&zerovalue==1);zerofilling=field.attr("ctp:zerofillvalue");zerofilling=zerofilling!=undefined?parseInt(zerofilling,10):0;defaultvalue=field.attr("ctp:defaultvalue");if(type=="integer"||type=="float"){separator=(val.indexOf(",")>-1)?",":".";val=val.replace(",",".");decimal="";pointPosition=val.indexOf(".");if(type=="float"&&pointPosition>-1){val=val.substr(0,pointPosition+3);i=val.length>pointPosition+2?pointPosition+2:val.length-1;for(i;i>pointPosition;i--){if(val.charAt(i)=="0"){decimal+=(val.charAt(i)=="0"?"0":"")}else{break}}decimal=(i==pointPosition?".":"")+decimal}val=type=="integer"?parseInt(val,10):parseFloat(val,10);if(isNaN(val)){if(zerovalue){val=0}else{if(defaultvalue!=undefined){val=defaultvalue}else{if(min!=undefined){val=min}else{val=0}}}}if(!(zerovalue&&val==0)){val=min!=undefined&&val<min?min:val}val=max!=undefined&&val>max?max:val;if(!signed&&val<0){if(defaultvalue!=undefined){val=defaultvalue}else{if(min!=undefined){val=min}else{val=0}}}val=addZero((val+decimal).replace(/\./,separator),zerofilling,separator);if(val!=intialval){field.val(val)}}callback=field.attr("ctp:callback");if(callback){eval(callback)}field.attr("ctp:processing","0")}})}},setForms:function(enabled){if(this.debug){console.log("CatalogEngine.setForms()");tmp=new Date();console.log("Time: "+tmp.toLocaleTimeString()+" "+tmp.getMilliseconds())}var CatalogEngine=this;for(var i=0;i<this.forms.length;i++){form=$(this.forms[i]);form.attr("bpsr:index",i).submit(function(event){return CatalogEngine.controlForm($(this).attr("bpsr:index"))});$(this.forms[i]).find("fieldset.hidden").removeClass("hidden");this.forms[i].current_resort_id=form.find("input#catalog-current-resort").val();this.forms[i].y=form.find("select#catalog-date-y");this.forms[i].m=form.find("select#catalog-date-m");this.forms[i].d=form.find("select#catalog-date-d");this.forms[i].resort=form.find("select#catalog-resort");this.forms[i].duration=form.find("select#catalog-duration");this.defaultDuration=this.forms[i].duration.attr("ctp:default");this.setField(this.forms[i].y);this.setField(this.forms[i].m);this.setField(this.forms[i].d);this.setField(this.forms[i].duration);this.forms[i].selectedDate=new Date(this.forms[i].y.val(),parseInt(this.forms[i].m.val(),10)-1,this.forms[i].d.val());this.forms[i].Calendar=new Calendar({cssClass:"calendar",weekStartDay:6,offsetX:205});this.forms[i].Calendar.setControlFunction(function(index,type,fromDate,toDate,day){return CatalogEngine.controlDate(index,fromDate)});this.forms[i].Calendar.setUpdateFunction(function(index,type,date){CatalogEngine.updateDateSelects(index,date);CatalogEngine.updateMonthSelect(index,date.getFullYear())});this.forms[i].calendarOpener=$(this.forms[i]).find("span.calendar-opener, select#catalog-date-m, select#catalog-date-d, select#catalog-date-y");this.forms[i].calendarAnchor=this.forms[i].calendarOpener;this.forms[i].calendarOpener.click(function(e){e.stopPropagation();index=$(this).parents("form.catalog-engine").attr("bpsr:index");CatalogEngine.forms[index].Calendar.setIndex(index);CatalogEngine.forms[index].Calendar.setType("from");CatalogEngine.forms[index].Calendar.setOpener(this);CatalogEngine.forms[index].Calendar.setAnchor(CatalogEngine.forms[index].calendarAnchor);CatalogEngine.forms[index].Calendar.setSelectedDate(CatalogEngine.forms[index].selectedDate);CatalogEngine.forms[index].Calendar.display(true)});this.forms[i].y.change(function(){CatalogEngine.updateDateSelects($(this).parents("form.catalog-engine").attr("bpsr:index"),null);CatalogEngine.updateMonthSelect($(this).parents("form.catalog-engine").attr("bpsr:index"),$(this).val())});this.forms[i].m.change(function(){CatalogEngine.updateDateSelects($(this).parents("form.catalog-engine").attr("bpsr:index"),null)});this.forms[i].d.change(function(){CatalogEngine.updateDateSelects($(this).parents("form.catalog-engine").attr("bpsr:index"),null)});this.language=$(this.forms[i]).attr("ctp:language");this.drawSuggestiveFields(i,enabled);this.drawCountriesFlags(i,enabled);this.forms[i].messageDelayTimeOut=false;this.forms[i].messageDelayed=new Array();this.forms[i].status=$('<div class="align-center"></div>');this.forms[i].status.appendTo("body").css({position:"absolute",top:($(this.forms[i]).offset().top+$(this.forms[i]).outerHeight()+10)+"px",left:($(this.forms[i]).offset().left)+"px",width:($(this.forms[i]).outerWidth())+"px"});this.updateMonthSelect(i,this.forms[i].selectedDate.getFullYear());this.updateDateSelects(i,this.forms[i].selectedDate)}tmp=new Date()},setResortMap:function(index,src){if(this.debug){console.log("CatalogEngine.setResortMap("+index+","+src+")")}if(this.forms[index].map){this.forms[index].map.fadeOut(500,function(){$(this).remove()})}this.forms[index].map=$('<img class="catalog-resort-map" />');$(this.forms[index].map).attr("src",src+"?"+new Date().getTime()).css({position:"absolute",display:"none",top:($("form.catalog-engine").outerHeight()+$("form.catalog-engine").offset().top+10)+"px"}).appendTo("body").load(function(){$(this).data({width:$(this).outerWidth(),height:$(this).outerHeight()}).css({left:(($("body").width()-$(this).outerWidth())/2)+"px"}).click(function(){img=$(this);if(img.hasClass("thumbnail")){img.animate({width:img.data("width"),height:img.data("height"),left:(($("body").width()-$(this).data("width"))/2)+"px",top:($("form.catalog-engine").outerHeight()+$("form.catalog-engine").offset().top+10)+"px","border-width":"2px"}).removeClass("thumbnail")}else{w=img.data("width")/6;h=img.data("height")/6;img.animate({width:w,height:h,left:($("form.catalog-engine").offset().left+$("form.catalog-engine").outerWidth()-w-10)+"px",top:($("form.catalog-engine").offset().top+$("form.catalog-engine").outerHeight()-h-10)+"px","border-width":"1px"}).addClass("thumbnail")}}).fadeIn(500)}).error(function(){$(this).hide()});$(window).resize(function(){$(".catalog-resort-map").each(function(index,img){img=$(img);if(!img.hasClass("thumbnail")){img.css({left:(($("body").width()-img.data("width"))/2)+"px"})}else{img.css({left:($("form.catalog-engine").offset().left+$("form.catalog-engine").outerWidth()-110)+"px"})}})})},setStatusMessage:function(index,message,className,hide,delay,replace){var CatalogEngine=this;var index=index;var hide=hide;delay=!isNaN(delay)?delay:0;if(replace){this.forms[index].status.empty();if(this.forms[index].messageDelayTimeOut){window.clearTimeout(this.forms[index].messageDelayTimeOut);this.forms[index].messageDelayTimeOut=false;this.forms[index].messageDelayed={}}}if(!this.forms[index].messageDelayTimeOut){this.forms[index].status.append('<div class="form-status '+className+'">'+message+"</div>");this.forms[index].status.stop(true,true).fadeIn(1000);if(hide||this.forms[index].messageDelayed.length>0){this.forms[index].messageDelayTimeOut=window.setTimeout(function(){CatalogEngine.forms[index].messageDelayTimeOut=false;if(hide){CatalogEngine.forms[index].status.fadeOut(1000)}if(CatalogEngine.forms[index].messageDelayed.length>0){message=CatalogEngine.forms[index].messageDelayed.shift();CatalogEngine.setStatusMessage(index,message[0],message[1],message[2],message[3],message[4])}},parseInt(delay,10)+2000)}}else{this.forms[index].messageDelayed.push(new Array(message,className,hide,delay,replace))}},updateDateSelects:function(index,selectedDate){if(this.debug){console.log("CatalogEngine.updateDateSelects("+index+")")}var CatalogEngine=this;ySelect=this.forms[index].y;mSelect=this.forms[index].m;dSelect=this.forms[index].d;if(typeof(selectedDate)!="object"||selectedDate==null){y=parseInt($(ySelect).val(),10);m=parseInt($(mSelect).val(),10);d=parseInt($(dSelect).val(),10);h=0;min=0}else{y=selectedDate.getFullYear();m=selectedDate.getMonth()+1;d=selectedDate.getDate();h=selectedDate.getHours();min=selectedDate.getMinutes()}hidden=0;switch(m){case 1:case 3:case 5:case 7:case 8:case 10:case 12:hidden=0;break;case 4:case 6:case 9:case 11:hidden=1;break;case 2:hidden=((y%4)==0&&(y%100)!==0||(y%400)==0)?2:3;break}options=dSelect.children("option");optionsLength=options.length;newOptionsLength=31-hidden;if(d>newOptionsLength){d=newOptionsLength}if(optionsLength>newOptionsLength){for(i=optionsLength-1;i>=newOptionsLength;i--){$(options[i]).remove()}}else{if(optionsLength<newOptionsLength){for(i=optionsLength;i<newOptionsLength;i++){opt=document.createElement("option");opt=new Option((i+1),(i+1),false,false);opt.innerHTML=i+1;dSelect.append(opt)}}}options=dSelect.children("option");for(i=0;i<options.length;i++){control=this.controlDate(index,new Date(y,m-1,i+1,0,0,0));text="";if(typeof(control.priceText)=="string"&&control.priceText.length>0){control.priceText=control.priceText.replace('"',"&quote;");text+=control.priceText+" "}if(typeof(control.controlText)=="string"&&control.controlText.length>0){control.controlText=control.controlText.replace('"',"&quote;");text+="("+control.controlText+")"}options[i].className=control.cssClass;options[i].setAttribute("title",(!control.enabled)?text:"");options[i].disabled=(!control.enabled)?true:false}ySelect.val(y);mSelect.val(m<10?"0"+m:m);dSelect.val(d<10?"0"+d:d);selectedDate=new Date(y,m-1,d,h,min);if(typeof(this.forms[index].Calendar)=="object"&&this.forms[index].Calendar!=null){this.forms[index].selectedDate=selectedDate;this.forms[index].Calendar.setSelectedDate(selectedDate)}control=this.controlDate(index,selectedDate);if(!control.enabled){this.setStatusMessage(index,control.controlText,"error",true,10000,true)}else{this.forms[index].status.fadeOut()}return true},updateDurationSelect:function(index,country_id){if(this.debug){console.log("CatalogEngine.updateDurationSelect("+index+","+country_id+")")}min=catalog.countries[country_id][2];max=catalog.countries[country_id][3];value=$(this.forms[index].duration).val();value=value<min||value>max?7:value;$(this.forms[index].duration).empty();for(i=min;i<=max;i++){if(i==6){txt=this.defaultDuration;option_value=7;i++}else{txt=i+" "+label_day;option_value=i}selected=i==value?' selected="selected"':"";$(this.forms[index].duration).append($('<option value="'+option_value+'"'+selected+' class="align-right">'+txt+"</option>"))}},updateMonthSelect:function(index,year){if(this.debug){console.log("CatalogEngine.updateMonthSelect("+index+","+year+")")}options=$(this.forms[index].m).children("option");for(i=0;i<options.length;i++){control=this.controlDate(index,new Date(year,i,1,0,0,0),new Date(year,i,this.daysPerMonth[i],0,0,0));text="";if(typeof(control.controlText)=="string"&&control.controlText.length>0){control.controlText=control.controlText.replace('"',"&quote;");text=control.controlText}options[i].className=control.cssClass;options[i].setAttribute("title",(!control.enabled&&control.every)?text:"");options[i].disabled=(!control.enabled&&control.every)}}};
