﻿//Helper JavaScripts
//==================
/*
   * This file contains script extractions from the default.aspx page

   js/scriptaculous/lib/prototype.js > extension / improvement by DD[Clemens]
   line 544
	   return '[' + this.map(Object.inspect).join(', ') + ']';
	is replaced with
      return this.map(Object.inspect).join('-');
*/

//=== [Global Variables] ============================================

// browser / operating system
var os_win = (navigator.appVersion.indexOf('Win') != -1)?true:false;
var ie = (document.styleSheets && document.all)?true:false;
var gecko = (document.getElementById && !document.all)?true:false;

// Geolocation xml-container
var xmlGeo;

// Today we have the .. .. ....
var ToDay = new Date();


var AllGeo;
var MySearchViewState;
var MyBookViewState;
var MyCurrentRegion;
var MyCurrentViewState;

var regTimeOut = false;

var idlanguage;


//=== [Functions       ] ============================================

//Does what it says: returns all elements with the same css class name;
function getElementsByClassName( oClassNames, oElm, strTagName )
{
	var arrElements = (strTagName == "*" && document.all)? document.all : oElm.getElementsByTagName(strTagName);
	var arrReturnElements = new Array();
	var arrRegExpClassNames = new Array();
	if(typeof oClassNames == "object"){
		for(var i=0; i<oClassNames.length; i++){
			arrRegExpClassNames.push(new RegExp("(^|\\s)" + oClassNames[i].replace(/\-/g, "\\-") + "(\\s|$)"));
		}
	}
	else{
		arrRegExpClassNames.push(new RegExp("(^|\\s)" + oClassNames.replace(/\-/g, "\\-") + "(\\s|$)"));
	}
	var oElement;
	var bMatchesAll;
	for(var j=0; j<arrElements.length; j++){
		oElement = arrElements[j];
		bMatchesAll = true;
		for(var k=0; k<arrRegExpClassNames.length; k++){
			if(!arrRegExpClassNames[k].test(oElement.className)){
				bMatchesAll = false;
				break;
			}
		}
		if(bMatchesAll){
			arrReturnElements.push(oElement);
		}
	}
	return (arrReturnElements)
}





// ========== SEARCH Functions ==============





//SLIDE IT Functionality ******************************************
//*****************************************************************
var endPosX, endPosY;
var dimx, Dimx, dimy, Dimy;
var scrollFactor = (os_win) ? ((ie) ? (3/35) : 0.3) : (0.6);

function startSliderX(objNr, viewMode)
{
	$("LastViewMode").value = $("ViewMode").value;
	$("ViewMode").value = viewMode;

	endPosX=0;
	for (var i=0;i<=objNr;i++)
	{
		endPosX -= parseInt($("dvContent_"+i).style.width);
	}
	if (gecko)
	{
		$("dvContentInner").style.left = endPosX + "px";
	}
	else
	{
		//$("dvContentInner").style.left = endPosX + "px"; //
		slideItX();
	}
}

function slideItX(){
	timeX = setTimeout("slideItX()", 0);
	dimx = Math.round(Dimx+=((endPosX)-Dimx)*scrollFactor);
	$("dvContentInner").style.left = dimx + "px";
	if (endPosX == dimx)
	   clearTimeout(timeX);
}

function startSliderY(objNr)
{
	endPosY = 0;
	for (var i=0;i<=objNr;i++)
	{
		endPosY -= parseInt($("dvControl_"+i).style.height);
	}
	slideItY();
}

function slideItY()
{
	timeY = setTimeout("slideItY()", 0);
	dimy = Math.round(Dimy+=((endPosY)-Dimy)*scrollFactor);
	$("dvControlsInner").style.top = dimy + "px";
	if (endPosY == dimy) clearTimeout(timeY);
}
//------------------------------------------------------------------
//==================================================================







//Custom Error Messages ********************************************
//******************************************************************
//G_var
errorIcons = new Array ("Info", "Warning", "Error");

function redimErrorMsg()
{
	var y;
	if (self.innerHeight) // all except Explorer
	{
		y = self.innerHeight;
	}
	else if (document.documentElement && document.documentElement.clientHeight) // Explorer 6 Strict Mode
	{
		y = document.documentElement.clientHeight;
	}
	else if (document.body) // other Explorers
	{
		y = document.body.clientHeight;
	}
	$("dvErrorMsgOuter").style.height = y + "px";
}

function showErrorMsg(icon, headline, text)
{
	$("dvErrorMsgInner").innerHTML = "<h1>" + headline + "<\/h1><p>" + text + "<\/p><div class=\"btn\"><img src=\"/images/button/darkLeft.gif\" alt=\"\" \/><a href=\"#\" onclick=\"resetErrorMsg();return false;\" class=\"darkBlue\">OK<\/a><img src=\"/images/button/darkRight.gif\" alt=\"\" \/><br clear=\"all\" \/><\/div>";
	$("dvErrorMsgOuter").style.display = "block";
	$("iconError").src = "/images/errorMsg/icon" + errorIcons[parseInt(icon)] + ".gif";
}

function resetErrorMsg()
{
	$("dvErrorMsgInner").innerHTML = "";
	$("dvErrorMsgOuter").style.display = "none";
}
//------------------------------------------------------------------
//==================================================================






//Image Gallery helper functions	*********************************
//****************************************************************
//showGallery: first version included "cnt" as first parameter...
function showGallery(idprovider)
{
   var vm = $("ViewMode").value;
   var targetID_hotel = $("dvContent_4inner");
   var targetID_gal = $("dvContent_5inner");

	setScrollLabel (0, "", 0);
  setScrollLabel (1, "", 0);
	setScrollLabel (2, "", 0);
	setScrollLabel (3, "", 0);

   var url_hotel = "/handler/Provider_Info.ashx";
	var url_gal = "/handler/Provider_Gallery.ashx";
	var params = "IDProvider="+idprovider + "&IDLanguage=" + idlanguage; // + "&cnt="+cnt


   MyCurrentViewState.setPane(3);
   MyCurrentViewState.setConfig(0);
   MyCurrentViewState.SaveViewState();

	// Ajax.Updater seems to have some problem with passing the correct values??
	//... but let's give it another try anyway...
	var detail = new Ajax.Updater (
		targetID_hotel,
		url_hotel,
		{
			method: "get",
			parameters: params
		}
	);

	var gallery = new Ajax.Updater (
		targetID_gal,
		url_gal,
		{
			method: "get",
			parameters: params,
			onComplete:slideToGallery
		}
	);

	function slideToGallery()
	{
		var galleryPicContainer = $("dvGalleryInner");
		galleryPicCount = galleryPicContainer.getElementsByTagName("img").length;
		$("btnPrevGalPic").style.display = "block";
		$("btnNextGalPic").style.display = "block";
		startSliderX(3, 5);
		if (vm == "2" || vm == "3") {
			setScrollLabel(2, "", 1);
		} else if (vm == "4") {
			setScrollLabel(3, "", 1);
		}
	}
}


function setGalleryImage(picID)
{
   //TODO: Url to be replaced with DomainURL
   $("GalleryPic").src = picID;
}


function scrollGalleryPics(direction)
{
   if (direction == 1)
   {
	   if (parseInt($("dvGalleryInner").style.left)<0)
	   {
		   $("dvGalleryInner").style.left = (parseInt($("dvGalleryInner").style.left) + 50) + "px";
		}
	}
	else
	{
	   if ( -parseInt($("dvGalleryInner").style.left)/50  < galleryPicCount-5)
	   {
		   $("dvGalleryInner").style.left = (parseInt($("dvGalleryInner").style.left) - 50) + "px";
		}
	}
}










function showHotelDetails(idprovider)
{

	var targetID = $("dvContent_4inner");
	var url = "http://www.nethotels.com/ProviderEdit.ashx";
	var params = "IDProvider="+idprovider + "&IDLanguage=" + idlanguage; //+ "&cnt="+cnt;


//	alert(url + "?" + params);

	var test = new Ajax.Request(
	   url,
	   {
		   method:'get',
		   parameters: params
		   ,onComplete: fillHotelDetail
	   }
   );

	function fillHotelDetail(originalRequest)
	{
	   targetID.innerHTML = originalRequest.responseText;
	}
}

function hideGalBtn()
{
	$("btnPrevGalPic").style.display = "none";
	$("btnNextGalPic").style.display = "none";
}

function showSecretTip ()
{
	var targetID = $("dvContent_0inner");
	var url = "/helper/secretTip.aspx";
	var secretTip = new Ajax.Updater (
		targetID,
		url,
		{
			method: "get"
		});
}

function showMeta (pageName)
{
	var targetID = $("dvContent_0inner");
	var url;

	//var url = "http://cmsnh.nethotels.com/article.asp?IDArticle=10161";
	//var param = "lang="+$("Language.Value").value;

	//parameters:param,

	var secretTip = new Ajax.Updater (
		targetID,
		url,
		{
			method: "get",
			onComplete:function(){startSliderX(-1, 0);}
		});
}






//GALLERY inner parts; method > Ajax.Request
/*
//	url = "/handler/Provider_Gallery.ashx";
//	params = "idprovider="+idprovider;

//	var detail = new Ajax.Request(
//	   url,
//	   {
//		   method:'get',
//		   parameters: params
//		   ,onComplete: fillHotelDetail
//	   }
//   );
//
//
//	function fillHotelDetail(originalRequest)
//	{
//	   alert(originalRequest.responseText);
//	   targetID.innerHTML = originalRequest.responseText;
//	}

	//url = "/helper/Gallery.aspx";
//	url = "/handler/Provider_Gallery.ashx";
//	params = "idprovider="+idprovider; // + "&cnt="+cnt;
//
//	var gallery = new Ajax.Request(
//	   url,
//	   {
//		   method:'get',
//		   parameters: params
//		   ,onComplete: fillImageGallery //slideToGallery
//	   }
//   );
//
//
//	function fillImageGallery(originalRequest)
//	{
//	   targetID.innerHTML = originalRequest.responseText;
//	   slideToGallery();
//	}

*/

//Image Gallery helper functions	*********************************
//****************************************************************














//FORM field updaters *******************************************
//***************************************************************

function requestHotel(idprovider)
{
	bookHotel(idprovider); // request and book is the same
}


function bookHotel(idprovider)
{

	var targetID_service = $("dvContent_4inner");

	var url = "http://www.nethotels.com/handler/Callback.aspx";



	var params_service = "";
	params_service += "idprovider=" + idprovider + "&action=Provider_Service&IDLanguage=" + idlanguage;


  if (arguments.length == 2)
  {
     params_service += "&idservice=" + arguments[1];
	}

   alert(url + "?" + params_service);

	var summary = new Ajax.Updater (
		targetID_service,
		url,
		{
			method: "get",
			parameters: params_service
		}
	);


}


function refreshSummary(direction)
{


	$("SummaryCalender.direction").value = direction;
	// die folgenden variablen abhängig davon, ob einzelzimmer, doppelzimmer oder beides ausgesucht wurden
	// mit 0 bzw. leer ("") ionitialisieren


	var RoomCount = $("Room_0_Count").options[$("Room_0_Count").selectedIndex].value;
	var RoomType = $("Room_0_Type").options[$("Room_0_Type").selectedIndex].value;

	if (MyBookViewState == null)
	{
	   MyBookViewState = new BookViewState();
	}

	MyBookViewState.ReadService(RoomType);
	MyBookViewState.Quantity = RoomCount;
//	alert(MyBookViewState.SerializeService());

	var url = "/provider_service.ashx";
	var prm = MyBookViewState.SerializeService();

   var strDDF = $("MyCalPrevDate").innerHTML;
   var strDDT = $("MyCalNextDate").innerHTML;
   var ddARRAY;
   if (direction < 0)
   {
      ddARRAY = strDDF.split(",");
      prm = prm + "StartYear=" + ddARRAY[0] + "&StartMonth=" + ddARRAY[1] + "&";
   }
   else if (direction > 0)
   {
      ddARRAY = strDDT.split(",");
      prm = prm + "StartYear=" + ddARRAY[0] + "&StartMonth=" + ddARRAY[1] + "&";
   }



	prm = prm +  "IDLanguage=" + MyCurrentViewState.IDLanguage;

	//alert(url + "?" + prm);


	var tgt = $("dvContent_5inner");

	var refreshService = new Ajax.Updater (
		tgt,
		url,
		{
			method: "get",
			parameters: prm
		}
	);

	//,onComplete:showSummaryCalendar


	return;




	//var singleroomCount = $("Room_0_Count").options[$("Room_0_Count").selectedIndex].value;
	//var singleroomType = $("Room_0_Type").options[$("Room_0_Type").selectedIndex].value;

	//var doubleroomCount = $("Room_1_Count").options[$("Room_1_Count").selectedIndex].value;
	//var singleroomType = $("Room_0_Type").options[$("Room_0_Type").selectedIndex].value;
	//var doubleroomType = $("Room_1_Type").options[$("Room_1_Type").selectedIndex].value;

	$("Rooms.SingleRooms").value = singleroomCount;
	$("Rooms.DoubleRooms").value = doubleroomCount;
	$("Rooms.SingleRoomType").value = singleroomType;
	$("Rooms.DoubleRoomType").value = doubleroomType;

	var targetID = $("dvContent_5inner");
	var url = "/helper/Summary.aspx";
	var datefrom = new Date($("DateFrom").value);
	var strDatefrom = datefrom.getDate() + "." + datefrom.getMonth() + "." + datefrom.getFullYear();
	var dateto = new Date($("DateTo").value);
	var strDateto = dateto.getDate() + "." + dateto.getMonth() + "." + dateto.getFullYear();
	var pars = new Array();
	pars[0]= "idprovider="+$("idprovider").value;
	pars[1]= "cnt="+$("cnt").value;
	pars[2]= "sr="+$("Rooms.SingleRooms").value;
	pars[3]= "dr="+$("Rooms.DoubleRooms").value;
	pars[4]= "srt="+$("Rooms.SingleRoomType").value;
	pars[5]= "drt="+$("Rooms.DoubleRoomType").value;
	pars[6]= "DateFrom="+strDatefrom;
	pars[7]= "DateTo="+strDateto;
	pars[8]= "Nights="+$("Nights").value;
	var params = pars.join("&");

	var gallery = new Ajax.Updater (
		targetID,
		url,
		{
			method: "get",
			parameters: params,
			onComplete:showSummaryCalendar
		}
	);
}

function showSummaryCalendar()
{


	refreshSummary(0);
	return;



	var calTargetID = "dvSummaryCalendar";
	var calUrl = "/helper/Summary.Calendar.aspx";


	var datefrom = new Date($("DateFrom").value);
	var strDatefrom = datefrom.getDate() + "." + datefrom.getMonth() + "." + datefrom.getFullYear();
	var dateto = new Date($("DateTo").value);
	var strDateto = dateto.getDate() + "." + dateto.getMonth() + "." + dateto.getFullYear();
	var calPars = new Array();


	calPars[0]= "idprovider="+$("idprovider").value;
	calPars[1]= "cnt="+$("cnt").value;
	calPars[2]= "sr="+$("Rooms.SingleRooms").value;
	calPars[3]= "dr="+$("Rooms.DoubleRooms").value;
	calPars[4]= "srt="+$("Rooms.SingleRoomType").value;
	calPars[5]= "drt="+$("Rooms.DoubleRoomType").value;
	calPars[6]= "DateFrom="+strDatefrom;
	calPars[7]= "DateTo="+strDateto;
	calPars[8]= "Nights="+$("Nights").value;
	calPars[9]= "direction="+$("SummaryCalender.direction").value;
	// direction = -1 ... previous month
	// direction = 0  ... no change in calendar
	// direction = 1  ... next month
	var calParams = calPars.join("&");
	var summaryCalendar = new Ajax.Updater (
		calTargetID,
		calUrl,
		{
			method: "get",
			parameters: calParams,
			onComplete: finishSummaryCalendar
		}
	);
	function finishSummaryCalendar(originalRequest) {
		calendarContainerSummary = $("dvSummaryCalendar");
		calendarDaysSummary = calendarContainerSummary.getElementsByClassName("available");
		calendarDaysLengthSummary = calendarDaysSummary.length;

		//alert(calendarDaysLengthSummary);
	}
}





var checkinDateSummary = new Date(1900, 0, 1);
var checkoutDateSummary = new Date(1900, 0, 1);
var calendarContainerSummary;
var calendarDaysSummary;
var calendarDaysLengthSummary;

function setExtendedCalendar(cYear, cMonth, cDay, obj)
{
	$("CalDate.CalenderMode").value = 'byDate';
	$("SummaryCalender.direction").value = 0;
	var datum = new Date(cYear, cMonth-1, cDay);
	var url = "/LocalDate.ashx";
	var params = "cYear="+cYear+"&cMonth="+cMonth+"&cDay="+cDay + "&IDLanguage=" + MyCurrentViewState.IDLanguage;;

	//alert(datum);
	//return;


	if (checkinDateSummary && !checkoutDateSummary && datum>checkinDateSummary)
	{
		checkoutDateSummary = datum;
		$("DateTo").value = datum;

		MyBookViewState.DateTo(cYear, cMonth, cDay);

		objCheckout = obj;
		var co = Date.UTC( checkoutDateSummary.getFullYear(), checkoutDateSummary.getMonth(), checkoutDateSummary.getDate(), 0, 0, 00 );
		var ci = Date.UTC( checkinDateSummary.getFullYear(),  checkinDateSummary.getMonth(),  checkinDateSummary.getDate(),  0, 0, 00 );
		$("DurationOfStay").value = (co-ci)/86400000;
		$("Nights").value = $("DurationOfStay").value;





		showSummaryCalendar()

	}
	else
	{
		checkinDateSummary = datum;
		$("DateFrom").value = datum;

		MyBookViewState.DateFrom(cYear, cMonth, cDay);

		objCheckin = obj;
		new Ajax.Updater(
			$("tdCheckinTextSummary"),
			url,
			{
				method:"get",
				parameters:params
			}
		);
//					calendarDaysSummary = calendarContainerSummary.getElementsByTagName("div");
//					calendarDaysLengthSummary = calendarDaysSummary.length;
		for (var i=0;i<calendarDaysLengthSummary;i++){
			calendarDaysSummary[i].style.backgroundImage = "url(/images/shim.gif)";
		}
		obj.style.backgroundImage = "url(/images/controls/bgDayChosen.gif)";
		checkoutDateSummary = "";
		objCheckout = "";
		$("tdCheckoutTextSummary").innerHTML = "";
		if ($("CalDate.CalenderMode").value == "byDate") {
			$("DurationOfStay").value = "";
			$("Nights").value = "";
		}
	}
}


//----------------------------------------------------------------
//================================================================


function MyAlert(txt)
{
   if (MyCurrentViewState != null && MyCurrentViewState.DebugMode == 1)
   {
      showErrorMsg(1, "Info", txt);
   }
}




//FORM field updaters *******************************************
//***************************************************************
function clearField(obj, defaultVal)
{
	if (obj.value == defaultVal)
	{
		obj.value = "";
	}
}

function setField(obj, defaultVal)
{
	if (obj.value == "")
	{
		obj.value = defaultVal;
	}
}
//---------------------------------------------------------------
//===============================================================

function doOpenGoogleMap(id, dm, w, h, idorg)
{
	var gglUrl = "http://www.nethotels.com/ShowHotel.asp?IDProvider=" + id + "&amp;Domain=" + dm + "&amp;IDOrg=" + idorg;
	var winstring = "width=" + w + ",height=" + h + ",scrolling=0";
	var WW = window.open(gglUrl, "ProviderMap", winstring);
	WW.focus();
}