// JavaScript include for layer messages
// Projekt: touropa.com
// (c)2006 ISO Software Systeme GmbH


/* GLOBAL VARIABLES */

var is_ie = ( /msie/i.test(navigator.userAgent) && !/opera/i.test(navigator.userAgent) );	

var msgShow = false;
var confirmed = false;
var entryParam = "";
var shoppingCart = false;
var relocateURL = "";
var relocateURL2 = "";
var copyHints = true;

function showElement(elementPtr) {
	elementPtr.style.visibility = "visible";
}
function hideElement(elementPtr)  {
	elementPtr.style.visibility = "hidden";
}
function getAbsoluteObjectPosition(myObj) {
	var scrollLeft = 0, scrollTop = 0;
	var is_div = /^div$/i.test(myObj.tagName);
	
	if (is_div && myObj.scrollLeft)
		scrollLeft = myObj.scrollLeft;
		
	if (is_div && myObj.scrollTop)
		scrollTop = myObj.scrollTop;
		
	var pos = { 
		x: (myObj.offsetLeft - scrollLeft), 
		y: (myObj.offsetTop - scrollTop) 
	};
	
	if (myObj.offsetParent) {
		var tmp = this.getAbsoluteObjectPosition(myObj.offsetParent);
		pos.x += tmp.x;
		pos.y += tmp.y;
	}
	return pos;
}

function isSquareWithinSquare(squareA, squareB) {
	// check if squareB conflicts with squareA
	
	// top left of squareB points into squareA
	if( squareB.left > squareA.left && squareB.left < squareA.right && squareB.top > squareA.top && squareB.top < squareA.bottom )
		return true;
		
	// top right of squareB points into squareA
	if( squareB.right > squareA.left && squareB.right < squareA.right && squareB.top > squareA.top && squareB.top < squareA.bottom )
		return true;
	
	// bottom right of squareB points into squareA
	if( squareB.right > squareA.left && squareB.right < squareA.right && squareB.bottom > squareA.top && squareB.bottom < squareA.bottom )
		return true;
	
	// bottom left of squareB points into squareA
	if( squareB.left > squareA.left && squareB.left < squareA.right && squareB.bottom > squareA.top && squareB.bottom < squareA.bottom )
		return true;
	
	return false;
}

function toggleSelects(layerElement) {
	var layerContent = layerElement;
	if(is_ie) layerContent = layerElement.firstChild.nextSibling;
	else layerContent = layerElement.firstChild.nextSibling.nextSibling.nextSibling;
	var layerPos = getAbsoluteObjectPosition(layerContent);
	var squareLayer = { left: layerPos.x, right: layerPos.x + layerContent.offsetWidth, top: layerPos.y, bottom: layerPos.y + layerContent.offsetHeight };
	
	var selectelements = document.getElementsByTagName("select");
	for(var i=0; i<selectelements.length; i++) {
		var selectBox = selectelements[i];
		var selectPos = getAbsoluteObjectPosition(selectBox);
		var squareSelect = { left: selectPos.x, right: selectPos.x + selectBox.offsetWidth, top: selectPos.y, bottom: selectPos.y + selectBox.offsetHeight };
		if( isSquareWithinSquare(squareLayer, squareSelect) ) {
			if(selectBox.style.visibility == "visible" || selectBox.style.visibility == "") {
				hideElement(selectBox);
			} else {
				showElement(selectBox);
			}
		}	
	}
}


/* MESSAGE LAYER METHODS */

/**
* Funktion fuer das einblenden von Fehlermeldungen:
* ruft Layer auf mit Texthinweis
*/
function showAlertLayer(){

	 if (document.forms[0] && document.forms[0].karenz && document.forms[0].karenz.value == "true")
	 {
	 	// hide close button
		document.getElementById('alertLayer_btn_close').style.visibility="hidden";
	 }
	
     document.getElementById("alertLayer").style.visibility = "visible";     
}

/**
* Funktion f?r das ausblenden Fehleranzeige 
* @param boolean
* @param die Url die geladen werden soll
*/

function closeAlertLayer(){
  
  document.getElementById("alertLayer").style.visibility = "hidden";
}

/* CONFIRMATION LAYER METHODS */

function showConfirmAlertMsg(entry){
	
	entryParam = entry;
	msgShow = true;
    document.getElementById("confirmAlertLayer").style.visibility = "visible";
}

function closeConfirmAlertMsg(){

	document.getElementById("confirmAlertLayer").style.visibility = "hidden";
	submitcount = 0;   
	msgShow = false;
}

function sendConfirmAlertMsg () {
		
	msgShow = false;
	confirmed = true;

	document.getElementById("confirmAlertLayer").style.visibility = "hidden";
	
	if(entryParam != "ibe.blockSendBuchung") {	
		sendForm(entryParam);	
	} else {
		forwardSendBuchung();
	}
}

/* DELETE LAYER METHODS */

function showDeleteAlertMsg(entry, sc) {
	
	entryParam = entry;
	msgShow = true;
	
	shoppingCart = sc;
	
    document.getElementById("deleteAlertLayer").style.visibility = "visible";
}

function closeDeleteAlertMsg() {

	document.getElementById("deleteAlertLayer").style.visibility = "hidden";
	submitcount = 0;   
	msgShow = false;
}

function sendDeleteAlertMsg() {
		
	msgShow   = false;
	confirmed = true;

	document.getElementById("deleteAlertLayer").style.visibility = "hidden";
	
	if (!shoppingCart) 
	{
		changeTravelDuration(entryParam);	
	} else 
	{
		changeTravelDurationSC(entryParam);
	}
}


/* FORWARD LAYER METHODS */

function showForwardAlertMsg(myURL){
	
	relocateURL = myURL;
	msgShow = true;
    document.getElementById("forwardAlertLayer").style.visibility = "visible";
}

function closeForwardAlertMsg(){

	document.getElementById("forwardAlertLayer").style.visibility = "hidden";
	submitcount = 0;   
	msgShow = false;
}

function sendForwardAlertMsg () {
		
	msgShow = false;
	confirmed = true;

	document.getElementById("forwardAlertLayer").style.visibility = "hidden";
	
	document.location.href = relocateURL;
}

/* CONFIRM FORWARD LAYER METHODS */

function showForwardConfirmMsg(myURL){
	
	relocateURL = myURL;
	msgShow = true;
    document.getElementById("forwardConfirmLayer").style.visibility = "visible";
}

function closeForwardConfirmMsg(){

	document.getElementById("forwardConfirmLayer").style.visibility = "hidden";
	submitcount = 0;   
	msgShow = false;
}

function sendForwardConfirmMsg () {
		
	msgShow = false;
	confirmed = true;

	document.getElementById("forwardConfirmLayer").style.visibility = "hidden";
	
	document.location.href = relocateURL;
}


function showForwardConfirmMsg2(myURL, myURL2){
	
	relocateURL2 = myURL2;
	relocateURL = myURL;
	msgShow = true;
    document.getElementById("forwardConfirmLayer2").style.visibility = "visible";
}

function closeForwardConfirmMsg2(){

	document.getElementById("forwardConfirmLayer2").style.visibility = "hidden";
	submitcount = 0;   
	msgShow = false;
	if(relocateURL != "none") {
		showForwardConfirmMsg3(relocateURL);
	}
}

function sendForwardConfirmMsg2 () {
		
	msgShow = false;
	confirmed = true;

	document.getElementById("forwardConfirmLayer2").style.visibility = "hidden";
	
	document.location.href = relocateURL2;
}

// new functions for mask-sized layer
function showForwardConfirmMsg3(myURL){
	var elementPtr = document.getElementById("forwardConfirmLayer3");
	relocateURL = myURL;
	msgShow = true;
	
	// determine content size and adjust layer size
	var currentId = determineCurrentContentBox();
	if(!currentId && document.getElementById("ElFlightContentBox")) {
		// check if we are on the flight resultslist
		currentId = "ElFlightContentBox";
	}
	var contentSize = determineSize(currentId);
	var layerSize = determineSize("layer");
	if(contentSize && layerSize) {
		// stretch layer to content size
		var modificator = 10;
		if(is_ie && /msie 6\.0/i.test(navigator.userAgent)) {
			// modification for IE 6 only
			modificator = 25;
		}
		if(contentSize.h < layerSize.h) {
			// dynamic packaging case - increase the content size to the layer minimum size
			// subtract divider size
			var subtractor = 0;
			var dividerId = determineCurrentDividerBox();
			if(dividerId) {
				var dividerSize = determineSize(dividerId);
				if(dividerSize) {
					subtractor = dividerSize.h + 25;
				}
			}
			document.getElementById(currentId).style.height = (layerSize.h - subtractor) + "px";
		} else {
			// process layer modification 
			document.getElementById("layer").style.height = (contentSize.h + modificator) + "px";
		}
		
		// IE 6 only - Check if Layer width is wide enough
		// or on flight resultlist
		if(contentSize.w > layerSize.w) {
			document.getElementById("layer").style.width = contentSize.w + "px";
		} 
		
		// reposition error textbox on page
		var errorPosPtr = document.getElementById("pageerrortext");
		if(errorPosPtr) {
// ie6 problem - no absolute positioning			
//			errorPosPtr.style.position = "absolute";
//			errorPosPtr.style.bottom = "0px";
//			errorPosPtr.style.right = "10px";
		}
		
		// copy hints into layer if we have copyhints allowed
		var hintsPosPtr = document.getElementById("hinweis");
		if(errorPosPtr && hintsPosPtr && copyHints) {
			hintsPosPtr.innerHTML = "" + errorPosPtr.innerHTML;
		}

		// check if we have error messages in the resultlist
		var errorElSize = determineSize("pageerrortextinel");
		if(errorElSize) {
			if(!is_ie) {
				document.getElementById("layer").style.top = (document.getElementById("layer").offsetTop + errorElSize.h) + "px"; 
				document.getElementById("close").style.top = (document.getElementById("close").offsetTop + errorElSize.h + 2) + "px"; 
			} else {
				// grab content box
				if(document.getElementById("ELBox")) {
					var elBox = getAbsoluteObjectPosition(document.getElementById("ELBox"));
					document.getElementById("layer").style.top = (elBox.y + 10) + "px"; 
					document.getElementById("close").style.top = (elBox.y - 5) + "px";
				}
			}
		}
		
		// check if we are on the resultlist flight
		// ElNavHor.height -- ignore
		// ElFlightContentBox.x//height//width//y
		var elemElFlightBox = document.getElementById("ElFlightContentBox");
		if(elemElFlightBox) {
			var elBox = getAbsoluteObjectPosition(elemElFlightBox);
			var elSize = determineSize("ElFlightContentBox");
			var modificatorW = 16;
			var modificatorH = 20;
			if(is_ie && /msie 6\.0/i.test(navigator.userAgent)) {
				// modification for IE 6 only
				modificatorW = 0;
				modificatorH = 0;
			}
			document.getElementById("layer").style.left = (elBox.x + 0) + "px"; 
			document.getElementById("layer").style.top = (elBox.y + 0) + "px"; 
			document.getElementById("layer").style.width = (elSize.w - modificatorW) + "px";
			document.getElementById("layer").style.height = (elSize.h - modificatorH) + "px";
			document.getElementById("close").style.top = (elBox.y - 15) + "px";
		}
		
	}
	
	toggleFooterButton();
	toggleSelects(elementPtr);
    elementPtr.style.visibility = "visible";
}

function closeForwardConfirmMsg3(){
	var elementPtr = document.getElementById("forwardConfirmLayer3");
	toggleFooterButton();
	toggleSelects(elementPtr);
    elementPtr.style.visibility = "hidden";

    submitcount = 0;   
	msgShow = false;
//	if(relocateURL != "none") {
//		showForwardConfirmMsg(relocateURL);
//	}
}

function sendForwardConfirmMsg3 () {
	msgShow = false;
	confirmed = true;

	var elementPtr = document.getElementById("forwardConfirmLayer3");
	toggleFooterButton();
	toggleSelects(elementPtr);
    elementPtr.style.visibility = "hidden";

	document.location.href = relocateURL;
}

function toggleFooterButton() {
	var buttonPtr = determineFooterButton();
	if(buttonPtr) {
		if(buttonPtr.style.visibility == "visible" || buttonPtr.style.visibility == "") {
			hideElement(buttonPtr);
		} else {
			showElement(buttonPtr);
		}
	}
}

function determineFooterButton() {
	// navigate down to the button
	var currentId = determineCurrentFooterBox();
	if(currentId) {
		var currentPtr = document.getElementById(currentId);
		var buttonPtr = null;
		if(is_ie) buttonPtr = currentPtr.firstChild.nextSibling;
		else buttonPtr = currentPtr.firstChild.nextSibling.nextSibling.nextSibling;
		if(/floatRight/i.test(buttonPtr.className)) {
			if(is_ie) buttonPtr = buttonPtr.firstChild;
			else buttonPtr = buttonPtr.firstChild.nextSibling;
			return buttonPtr;
		}
	}
}

/* Helper Methods */
function determineSize(elementId) {
	var elementPtr = document.getElementById(elementId);
	// only allow elements with a size of minimum 1px
	if(elementPtr && elementPtr.offsetHeight > 0 && elementPtr.offsetWidth > 0) {
		var elemSize = { w: elementPtr.offsetWidth, h: elementPtr.offsetHeight };
		return elemSize;
	}
}

function determineCurrentFooterBox() {
	var tmpList = new Array();
	tmpList.push("SchnBookingFooterNav");
	tmpList.push("BstBookingFooterNav");
	tmpList.push("ElFooterNav");
	tmpList.push("ElBeraterFooterNav");
	tmpList.push("ElBeraterFooterNavBgColor0601");
	tmpList.push("ElFooterNavBgColor0402");
	for(var idx in tmpList) {
		var tmpElemPtr = document.getElementById(tmpList[idx]);
		if(tmpElemPtr) return tmpList[idx];
	}	
}

function determineCurrentContentBox() {
	var tmpList = new Array();
	tmpList.push("Schn2BookingContentBox");
	tmpList.push("SchnBookingContentBox");
	tmpList.push("BstBookingContentBox");
	tmpList.push("ElBeraterContentBox");
	tmpList.push("ElContentBox");
	tmpList.push("Schn2PauschalBookingContentBox");
	for(var idx in tmpList) {
		var tmpElemPtr = document.getElementById(tmpList[idx]);
		if(tmpElemPtr) return tmpList[idx];
	}		
}
function determineCurrentNavBox() {
	var tmpList = new Array();
	tmpList.push("SchnBookingNav");
	tmpList.push("BstBookingNav");
	tmpList.push("ElBeraterNav");
	tmpList.push("ElNav");
	for(var idx in tmpList) {
		var tmpElemPtr = document.getElementById(tmpList[idx]);
		if(tmpElemPtr) return tmpList[idx];
	}		
}
function determineCurrentDividerBox() {
	var tmpList = new Array();
	tmpList.push("BstBookingDivider");
//	tmpList.push("SchnBookingDivider"); // deactivated in jspd
	for(var idx in tmpList) {
		var tmpElemPtr = document.getElementById(tmpList[idx]);
		if(tmpElemPtr) return tmpList[idx];
	}		
}

function autoResizeContentBox() {
	var navSize = determineSize(determineCurrentNavBox());
	var contentSize = determineSize(determineCurrentContentBox());
	resizeBoxes(navSize, contentSize, determineCurrentContentBox());
}
function resizeBoxes(pointA, pointB, pointBId) {
	if(pointA && pointB) {
		if(pointA.h > pointB.h) {
			// stretch content
			document.getElementById(pointBId).style.height = pointA.h + "px";
		}
	}
}
