travelline=window.travelline||{};(function(){var TRACK_IMAGE='/stat/track.png';function getQuery(name){var results=new RegExp('[\\?&]'+name+'=([^&#]*)').exec(window.location.href);return results?results[1]:null;}
function selectOption(selectElem,value){for(var i=selectElem.options.length;--i>=0;){if(selectElem.options[i].value==value){selectElem.selectedIndex=i;break;}}}
function bindEvent(elem,event,callback){if(elem.addEventListener)
elem.addEventListener(event,callback,false);else
elem.attachEvent('on'+event,callback);}
var BookingFrame=function(){this.version=1;this.width=600;this.height=800;this.minHeight=400;this.theme=null;this.provider=null;this.profileKey=null;this.date=null;this.nights=null;this.adults=null;this.roomType=null;this.lng='ru';this.resizeCallback=null;this.intoElem=null;this.travellineHost='www.travelline.ru';this._frame=null;this._selector=null;this._scrollingTimer=null;this._resizerWorksFine=false;this._sameDomain=false;this._postMessageSupported=(typeof window.postMessage!='undefined');}
BookingFrame.prototype={embed:function(params){this._init(params);this._trackPageview();var match=/(opera)(?:.*version)?[ \/]([\w\.]+)/.exec(navigator.userAgent.toLowerCase());if(match&&match[2]<10)
this.version=1;var frame=this._getFrame();frame.setAttribute('width',this.width);frame.setAttribute('height',this.height);var bfctx=this;if(this.resizeCallback||this._postMessageSupported){frame.onload=function(){if(!bfctx._resizerWorksFine){bfctx._scrollingTimer=setTimeout(function(){frame.setAttribute('scrolling','auto');},1000);}}}
this.setProvider(this.provider);return this;},setProvider:function(provider){provider=provider||(this._selector&&this._selector.getDefault());if(provider){this.provider=provider
var url=this._getTravellineBaseUrl()+'/booking/hotel/'+this.provider;var query=this._getQueryString();if(!!query){url+='?'+query;}
this._selector&&this._selector.select(this.provider);var frame=this._getFrame();frame.setAttribute('src',url);}
return this;},setHeight:function(height){height=Math.max(height,this.minHeight);var frame=this._getFrame();this.height=height;frame.setAttribute('height',height);return this;},bindSelector:function(elem){this._selector=null;elem=this._getElem(elem);if(elem&&elem.tagName.toLowerCase()=='select'){this._selector=new ProviderSelector(this,elem);this._selector.select(this.provider);}
return this;},initFromQuery:function(map){for(var name in map){var value=getQuery(map[name]);if(value!==null)
this[name]=value;}
return this;},_hideScrolling:function(){if(this._scrollingTimer){clearTimeout(this._scrollingTimer);this._scrollingTimer=null;}
var frame=this._getFrame();frame.setAttribute('scrolling','no');},_init:function(params){if(params){for(var name in params){this[name]=params[name];}}
this._sameDomain=document.location.host==this.travellineHost;if(!this._eventsBinded){this._bindEvents();this._eventsBinded=true;}},_resize:function(height){height=parseInt(height,10);if(height>0){this._hideScrolling();this.setHeight(height);this._resizerWorksFine=true;}},_getTravellineBaseUrl:function(){var protocol=document.location.protocol;if(protocol!='https:')
protocol='http:';return protocol+'//'+this.travellineHost;},_getFrame:function(){if(!this._frame){var attrs={id:'tlBookingFrame',frameBorder:'no',border:'0',allowTransparency:'yes'};if(this.resizeCallback){attrs['scrolling']='no';}
var html='<iframe';for(var name in attrs){html+=' '+name+'="'+attrs[name]+'"';}
html+='></iframe>';var elem=this._getElem(this.intoElem);if(elem&&typeof elem.innerHTML!='undefined'){elem.innerHTML=html;}else{document.write(html);}
this._frame=document.getElementById('tlBookingFrame');}
return this._frame;},_getElem:function(elem){if(elem&&elem.constructor==String){elem=document.getElementById(elem.replace(/^#/,''));}
return elem;},_getProperty:function(name){return typeof(this[name])!='undefined'&&this[name]!==null?this[name]:this._getDefaultValue(name);},_getDefaultValue:function(name){var value=null;if(name=='date'||name=='nights'||name=='adults'||name=='lng'){value=getQuery(name);if(name=='date'&&value===null&&this._getProperty('roomType')){value='0';}}
else if(name=='roomType'){value=getQuery('roomType')||getQuery('room-type');}
return value;},_getQueryString:function(){var l=document.location;var enc=encodeURIComponent;var bfParams=[];bfParams.push('apiv='+enc(this.version));bfParams.push('hturl='+enc(l.protocol+'//'+l.host));if(this.resizeCallback){bfParams.push('frurl='+enc(l.protocol+'//'+l.host+'/'+this.resizeCallback.replace(/^\/+/,'')));}
var query=[];query.push('bfprms='+enc(bfParams.join('&')));var paramsPropsMap={'date':'date','nights':'nights','adults':'adults','lng':'lng','theme':'theme','ctx':'profileKey','room-type':'roomType'};for(var param in paramsPropsMap){var prop=paramsPropsMap[param];var value=this._getProperty(prop);if(value!==null){query.push(param+'='+enc(value));}}
return query.join('&');},_trackPageview:function(){var img=new Image();img.src=this._getTravellineBaseUrl()+TRACK_IMAGE
+'?l='+encodeURIComponent(document.location)
+'&r='+encodeURIComponent(document.referrer)
+'&t='+new Date().getTime();},_bindEvents:function(){var obj=this;if(this._postMessageSupported){var listener=function(event){if(event.origin==document.location.protocol+'//'+obj.travellineHost||/[\/\.]travelline\.ru$/.test(event.origin)){var data=null;eval('var data = '+event.data);if(data&&data.h){obj._resize(data.h);}}};bindEvent(window,'message',listener);}}}
var ProviderSelector=function(bookingFrame,elem){this._bf=bookingFrame;this._elem=elem;var ctx=this;bindEvent(this._elem,'change',function(){ctx._bf.setProvider(this.value);});};ProviderSelector.prototype={select:function(provider){if(!provider)
this._bf.setProvider(this.getDefault());else
selectOption(this._elem,provider);},getDefault:function(){if(this._elem.options.length){return this._elem.options[this._elem.selectedIndex].value;}
return null;}};travelline.Util={getQuery:getQuery};travelline.BookingFrameClass=BookingFrame;travelline.BookingFrame=new travelline.BookingFrameClass();})();