GetSiteRoot();
function GetSiteRoot() {
    if (typeof BookingRoot == 'undefined') {
        var scripts = document.getElementsByTagName('script');
        for (i = 0; i < scripts.length; i++) {
            if (scripts[i].src != null) {
                var temp = scripts[i].src.split('/');
                if (temp.pop() == 'BookingInterface.js' && temp.pop() == 'clientscript') {
                    BookingRoot = temp.join('/');
                    return;
                }
            }
        }
        alert('Booking not properly initializied!');
    }
}

function DynamicLoadCSS(filename) {	
	var html_doc = document.getElementsByTagName('head')[0];
	var css = document.createElement('link');
	css.type = 'text/css';
	css.rel = 'stylesheet';
	css.href = filename;
	html_doc.appendChild(css);
	return false;
}

function ToggleScrollbars(cond) {

	var isToggled = false;
	if (document.getElementsByTagName) {
		var htmls = document.getElementsByTagName('html');
		if (htmls.length > 0) {
			htmls[0].style.overflow = cond ? 'auto' : 'hidden';
			isToggled = true;
		}
	}
	
	if(document.body.scroll==null)
		document.body.style.overflow = cond ? 'auto' : 'hidden';
	else
		document.body.scroll = cond ? 'yes' : 'no';
}

var BookingDialogBox = {

	oldBodyOverflow : null,
	layer : null,
	content : null,
	overlay : null,
	loader : null,
	closeBtn : null,
	iframe : null,
	status : 0,
	url : '',
	
	init : function(){
	
		//učitaj potrebni CSS
		DynamicLoadCSS(BookingRoot + '/clientscript/BookingDialogBox/BookingDialogBox.css');
	
		//elements & properties	
		this.layer = document.createElement('div');
		this.layer.className = 'BookingDialogBox_box';
		this.layer.style.display = 'none';
		document.body.appendChild(this.layer);

	 	this.closeBtn = document.createElement('div');	//close dialog button 
	 	this.layer.appendChild(this.closeBtn);
	 	this.closeBtn.className =  'BookingDialogBox_closeBtn';
		this.closeBtn.innerHTML =  'Close';

		//IE hack
		//if((!window.ActiveXObject) ? false : ((window.XMLHttpRequest) ? 5 : 4))
		//this.closeBtn.className = 'BookingDialogBox_closeBtnIE';

		//holds the loaded content
  		this.content = document.createElement('div');
  		this.content.className = 'BookingDialogBox_content';
		this.layer.appendChild(this.content);
		
		//overlay
		this.overlay = document.createElement('div');	
		this.overlay.className = 'BookingDialogBox_overlay';	
		this.overlay.style.display = 'none';	
		document.body.appendChild(this.overlay);
		
		this.loader = document.createElement('div');	//loading notice
		this.loader.className = 'BookingDialogBox_loader';
		this.loader.style.display = 'none';	
		document.body.appendChild(this.loader);
	},
	
	//show overly and loader before content is loaded	
	loading : function(){
	
		ToggleScrollbars(false);
		/*
		//hide body overflow
		this.oldBodyOverflow = document.body.style.overflow;
		if (!this.oldBodyOverflow) this.oldBodyOverflow = 'visible';
		document.body.style.overflow = 'hidden';
		*/
		
		//overlay visible
		this.overlay.style.display = 'block';
		
		this.loader.style.display = 'block';
		
		fadeElement(this.loader, 0.6, 500);                                                 
	},

	show : function(url) {
		if (this.status == 2)
			return;
			
		//loading
		this.status = 1;
		
		//create iframe
	 	var d = new Date();
		this.iframe = document.createElement('iframe'); 	
		this.iframe.name = 'box_iframe' +  d.getTime(); 	//must be unique name
		this.iframe.frameBorder = 0;
		this.iframe.src = url;						// start loading iframe content
		
		/* IE 7 only */
		this.iframe.allowTransparency = true;
		this.iframe.style.backgroundColor = 'transparent';
	
		this.content.innerHTML = '';				// remove all prevoius content
		this.content.appendChild(this.iframe);		// insert iframe
	 	
	 	this.loading();
	 	
	 	var obj = this;
	 	var loaded = function(){
		 	//user can cancel loading by clicking on the overlay
			if(obj.status == 1){			
				obj.status = 2;							//loaded
				obj.render();				 			
			}
	 	}
		setTimeout(loaded, 800);
	},
	
	close : function() {
	
		//hides dialog
		this.content.innerHTML = '';
		
		this.overlay.style.display = 'none';		//hide overlay
		this.loader.style.display = 'none';			//hide loader
		this.layer.style.display = 'none';			//hide layer
		this.status = 0;							//hidden
		
		ToggleScrollbars(true);
		//document.body.style.overflow = this.oldBodyOverflow;
	},
	
	render : function() {
	
		//loader hidden
		this.loader.style.display = 'none';
		this.iframe.className = 'BookingDialogBox_iframe';
	 	
        //layer visible
		this.layer.style.display = 'block';
		
		fadeElement(this.layer, 1, 700);		
	}	
}

/*********************************************
	WINDOW ONLOAD  				     
*********************************************/
function bind_event(dom, type, handle) {
    if (dom.addEventListener)
        dom.addEventListener(type, handle, false);
    else if (dom.attachEvent)
        dom.attachEvent("on" + type, handle);
}

bind_event(window, 'load', function() {

    BookingDialogBox.init();
	
    bind_event(document, 'keyup', function(e) {
        if (!e) var e = window.event

		var code = null;
        if (e.keyCode) code = e.keyCode;
        else if (e.which) code = e.which;

        //esc is pressed
        if (code == 27)
            BookingDialogBox.close();
    });

    bind_event(BookingDialogBox.closeBtn, 'click', function() {
        BookingDialogBox.close();
    });
    
    bind_event(BookingDialogBox.content, 'click', function() {
        if (BookingDialogBox.status != 2)
            BookingDialogBox.close();
    });
});

// element fading, uses time intervals for smooth animation
function fadeElement(el, finalOpacity, duration) {
		
	var fop = finalOpacity != null ? finalOpacity : 1;
	var opacity = 0;
	var dur = duration != null ? duration : 250;
	var timeLeft = dur;
	var last = new Date().getTime();
	
	function f() {
		var t = new Date().getTime();
		var elapsed = t - last;
		last = t;
		
		if(timeLeft <=  elapsed || opacity >= fop){
			el.style.opacity = fop;
			el.style.filter = 'alpha(opacity=' + (fop * 100) + ')';
			return;
		}
		timeLeft -= elapsed;
		opacity = 1 - timeLeft/dur;
		el.style.opacity = opacity;
		el.style.filter = 'alpha(opacity=' + (opacity * 100) + ')';

		setTimeout(f, 33);
 	};
  	f();
}


//funkcije za otvaranje booking prozora
//funkcije za otvaranje booking prozora
//funkcije za otvaranje booking prozora

var ShowPageStyle = {
	MagicBox : 1,
	NewWindow: 2,
	NewPopup: 3,
	ReplaceCurrent: 4
}

function ShowPage(sURL, nStyle, nWidth, nHeight) {

    if (nStyle == ShowPageStyle.MagicBox) {
	
        //zbog komunikacije iframea s glavnim prozorom treba poslati href hotelske stranice u iframe
        //iz hrefa se izdvoji samo dio prije znaka '#'
        sURL += '#' + encodeURIComponent(top.location.href.split('#').shift());

        //ovo je sa boxom
        BookingDialogBox.show(sURL);

    }
    else if (nStyle == ShowPageStyle.NewWindow) {
        //ovo je u novom tabu
        //postavljamo opener na null da bi kasnije mogli detektirat
        //jeli stranica otvorena u Popupu ili nije	
        var oWin = window.open(sURL, '_blank');
        if (oWin) {
            if (oWin.focus) oWin.focus();
            oWin.opener = null;
        }
        oWin = null;
    }
    else if (nStyle == ShowPageStyle.NewPopup) {
    
        //ovo je u popupu
        page = window.open(sURL, '', 'height=' + nHeight + ',width=' + nWidth + ',toolbar=0,scrollbars=1,location=0,statusbar=0,menubar=0,resizable=1');
        
    }
    else if (nStyle == ShowPageStyle.ReplaceCurrent) {
    
        //zamjenjujemo trenutačnu
        location.href = sURL;
        
    }
}

function OpenNextPage(sURL) {
    if (window != top) {
        
        //ako je prozor u iframeu i ako je u URLu hash, znaci da je otvoren magicbox
        //i da moramo signalizirat glavnom prozoru da napravi resize iframea
        var top_href = window.location.href.split('#')[1];
        
        if (!top_href) {
            //alert("Detektiran pogresni poziv Bookingu. Nedostaje Hash dio!");
            ShowPage(sURL, ShowPageStyle.ReplaceCurrent);
        }
        else {
		    //sljedeća stranica isto mora znati koji joj je top prozor
            ShowPage(sURL + '#' + top_href, ShowPageStyle.ReplaceCurrent);
        }
    }
    else {

        var bIsPopup = false;

        //detektiranje popupa
        //u FFu se jednostavno pogleda jeli toolbar aktivan ili nije
        //i IEu doduse moramo koristiti HACK sa window.opener kojeg smo kod otvaranja postavili
        //na null ako nije popup
        bIsPopup = (window.toolbar != null && window.toolbar.visible == false);
        bIsPopup = bIsPopup || (window.opener != null && window.opener != window.self);

        if (bIsPopup) {
            //ako se iz popupa otvara sljedeca stranica
            //popup se zatvara, i stranica se otvara u novom prozoru
            ShowPage(sURL, ShowPageStyle.NewWindow);
            window.close();
        }
        else {
            //inače je stranica u normalnom browseru
            ShowPage(sURL, ShowPageStyle.ReplaceCurrent);
        }
    }
}

//funkcije za pristup bookingu
//funkcije za pristup bookingu
//funkcije za pristup bookingu

var Page = {
    Start: function(nHotelCode, nLanguageID, nServiceType, sSalesChannel, bSendInquiry, nReferralID, sRefferalSite) {

        var strPage = BookingRoot + '/e-booking/' + 'start.aspx'
        strPage += '?HotelCode=' + nHotelCode;
        strPage += '&nLanguageID=' + nLanguageID;
        strPage += '&ServiceType=' + nServiceType;

        if (sSalesChannel != null && sSalesChannel != '')
            strPage += '&SalesChannel=' + sSalesChannel;

        if (bSendInquiry == true)
            strPage += '&PosaljiUpit=true';

        if (nReferralID != null && sRefferalSite != null) {
            strPage += '&ReferralID=' + nReferralID.toString();
            strPage += '&ReferralSite=' + sRefferalSite.toString();
        }

        return strPage;
    },
    ViewCancel: function(sResCode, nServiceType, nLanguageID, sSalesChannel) {

        var strPage = BookingRoot + '/e-booking/' + 'viewcancel.aspx';

        strPage += '?nResCode=' + sResCode;

        if (nServiceType != null)
            strPage += '&ServiceType=' + nServiceType;

        if (nLanguageID != null)
            strPage += '&nLanguageID=' + nLanguageID;

        if (sSalesChannel != null && sSalesChannel != '')
            strPage += '&SalesChannel=' + sSalesChannel;

        return strPage;
    },
    Offer: function(nHotelCode, nChainCode, nLanguageID, sStartDate, sEndDate, nNumOfAdults, nServiceType, sSalesChannel, bSendInquiry, nReferralID, sRefferalSite) {

        var strPage = BookingRoot + '/e-booking/' + 'offer.aspx';

        if (nHotelCode > 0)
            strPage += '?HotelCode=' + nHotelCode;
        else if (nChainCode > 0)
            strPage += '?ChainCode=' + nChainCode;

        strPage += '&StartDate=' + sStartDate;
        strPage += '&EndDate=' + sEndDate;
        strPage += '&NumOfAdults=' + nNumOfAdults;
        strPage += '&nLanguageID=' + nLanguageID;
        strPage += '&ServiceType=' + nServiceType;

        if (sSalesChannel != null && sSalesChannel != '')
            strPage += '&SalesChannel=' + sSalesChannel;

        if (bSendInquiry == true)
            strPage += '&PosaljiUpit=true';

        if (nReferralID != null && sRefferalSite != null) {
            strPage += '&ReferralID=' + nReferralID.toString();
            strPage += '&ReferralSite=' + sRefferalSite.toString();
        }

        return strPage;
    },
    Reservation: function(nHotelCode, nLanguageID, nServiceType, sSalesChannel, bSendInquiry, sStartDate, sEndDate, nNumOfAdults, nSelectedService, nReferralID, sRefferalSite, sAccessCode) {

        var strPage = BookingRoot + '/e-booking/' + 'reservation.aspx';

        if (nHotelCode != null && nSelectedService == null)
            strPage += '?HotelCode=' + nHotelCode.toString();
        else if (nHotelCode == null && nSelectedService != null)
            strPage += '?SelectedService=' + nSelectedService.toString();
        else {
            strPage += '?HotelCode=' + nHotelCode.toString();
            strPage += '&SelectedService=' + nSelectedService.toString();
        }

        strPage += '&ServiceType=' + nServiceType.toString();
        
        if (nLanguageID != null)
            strPage += '&nLanguageID=' + nLanguageID.toString();
        
        if (sSalesChannel != null && sSalesChannel != '')
            strPage += '&SalesChannel=' + sSalesChannel;

        if (bSendInquiry == true)
            strPage += '&PosaljiUpit=true';

        if (sStartDate != null && sEndDate != null && nNumOfAdults != null) {
            strPage += '&StartDate=' + sStartDate;
            strPage += '&EndDate=' + sEndDate;
            strPage += '&NumOfAdults=' + nNumOfAdults.toString();
        }

        if (nReferralID != null && sRefferalSite != null) {
            strPage += '&ReferralID=' + nReferralID.toString();
            strPage += '&ReferralSite=' + sRefferalSite.toString();
        }

        if (sAccessCode != null)
            strPage += '&AccessCode=' + sAccessCode;

        return strPage;
    },
    Overview: function(sValuta, bShowPrices, bShowActions, nHotelCode, nLanguageID, nServiceType, sSalesChannel, bSendInquiry, nReferralID, sRefferalSite) {

        if (nHotelCode == null && nLanguageID == null && nServiceType == null) {
            var strPage = BookingRoot + '/e-booking/' + 'overview.aspx'
            strPage += '?Valuta=' + sValuta;

            if (bShowPrices)
                strPage += '&ShowPrices=true';

            if (bShowActions)
                strPage += '&ShowActions=true';

            return strPage;
        }
        else {
            var strPage = BookingRoot + '/e-booking/' + 'overview.aspx'
            strPage += '?HotelCode=' + nHotelCode;
            strPage += '&nLanguageID=' + nLanguageID;
            strPage += '&ServiceType=' + nServiceType;
            strPage += '&Valuta=' + sValuta;

            if (bShowPrices)
                strPage += '&ShowPrices=true';

            if (bShowActions)
                strPage += '&ShowActions=true';

            if (sSalesChannel != null && sSalesChannel != '')
                strPage += '&SalesChannel=' + sSalesChannel;

            if (bSendInquiry == true)
                strPage += '&PosaljiUpit=true';

            if (nReferralID != null && sRefferalSite != null) {
                strPage += '&ReferralID=' + nReferralID.toString();
                strPage += '&ReferralSite=' + sRefferalSite.toString();
            }

            return strPage;
        }
    }
}

function GetLanguageId(sLanguage)
{	
	var nLanguageID = 2;
	switch (sLanguage)
	{
	    case 'hr':
	        nLanguageID = 1;
	    break;
	    case 'en':
	        nLanguageID = 2;
	    break;
	    case 'fr':
	        nLanguageID = 3;
	    break;
	    case 'it':
	        nLanguageID = 4;
	    break;
	    case 'sl':
	        nLanguageID = 5;
	    break;
	    case 'es':
	        nLanguageID = 6;
	    break;
	    case 'de':
	        nLanguageID = 7;
	    break;
	    case 'cz':
	        nLanguageID = 8;
	    break;
		case 'ba':
	        nLanguageID = 9;
	    break;
		case 'sr':
	        nLanguageID = 10;
	    break;
	    default:
            nLanguageID = 2;
    }
	
	return nLanguageID;
}

/*
function stopPropagation() {
	var e = window.event;
	if (e) {
		//e.cancelBubble is supported by IE - this will kill the bubbling process.
		e.cancelBubble = true;
		e.returnValue = false;
		//e.stopPropagation works only in Firefox.
		if (e.stopPropagation) {
			e.stopPropagation();
			e.preventDefault();
		}
	}
}
*/

function MakeReservation(nHotelCode, sLanguage, sSalesChannel, bSendInquiry, sStartDate, sEndDate, nNumOfAdults, nSelectedService, nReferralID, sRefferalSite)
{	
	var nLangID = GetLanguageId(sLanguage);
	var sURL = Page.Reservation(nHotelCode, nLangID, 1, sSalesChannel, bSendInquiry, sStartDate, sEndDate, nNumOfAdults, nSelectedService, nReferralID, sRefferalSite);
	ShowPage(sURL, ShowPageStyle.MagicBox);
	//stopPropagation();
}

function StartBooking(nHotelCode, sLanguage, sSalesChannel, bSendInquiry, nReferralID, sRefferalSite)
{	
	var nLangID = GetLanguageId(sLanguage);
	var sURL = Page.Start(nHotelCode, nLangID, 1, sSalesChannel, bSendInquiry, nReferralID, sRefferalSite);
	ShowPage(sURL, ShowPageStyle.MagicBox);
	//stopPropagation();
}

function OverviewPrices(sValuta, bShowPrices, bShowActions, nHotelCode, sLanguage, sSalesChannel, bSendInquiry, nReferralID, sRefferalSite) {
    var nLangID = GetLanguageId(sLanguage);
    var sURL = Page.Overview(sValuta, bShowPrices, bShowActions, nHotelCode, nLangID, 1, sSalesChannel, bSendInquiry, nReferralID, sRefferalSite);
    ShowPage(sURL, ShowPageStyle.MagicBox);
	//stopPropagation();
}

function ViewReservation(sResCode, sLanguage, sSalesChannel)
{
	var nLangID = GetLanguageId(sLanguage);
	var sURL = Page.ViewCancel(sResCode, 1, nLangID, sSalesChannel);
	ShowPage(sURL, ShowPageStyle.MagicBox);
	//stopPropagation();
}

function MakeOfferForHotel(nHotelCode, sLanguage, sSalesChannel, bSendInquiry, sStartDate, sEndDate, nNumOfAdults, nReferralID, sRefferalSite)
{	
	var nLangID = GetLanguageId(sLanguage);
	var sURL = Page.Offer(nHotelCode, null, nLangID, sStartDate, sEndDate, nNumOfAdults, 1, sSalesChannel, bSendInquiry, nReferralID, sRefferalSite);
	ShowPage(sURL, ShowPageStyle.MagicBox);
	//stopPropagation();
}

function MakeOfferForChain(nChainCode, sLanguage, sSalesChannel, bSendInquiry, sStartDate, sEndDate, nNumOfAdults, nReferralID, sRefferalSite)
{	
	var nLangID = GetLanguageId(sLanguage);
	var sURL = Page.Offer(null, nChainCode, nLangID, sStartDate, sEndDate, nNumOfAdults, 1, sSalesChannel, bSendInquiry, nReferralID, sRefferalSite);
	ShowPage(sURL, ShowPageStyle.MagicBox);
	//stopPropagation();
}

