/**
 * SUBMODAL v1.6
 * Used for displaying DHTML only popups instead of using buggy modal windows.
 *
 * By Subimage LLC
 * http://www.subimage.com
 *
 * Contributions by:
 * 	Eric Angel - tab index code
 * 	Scott - hiding/showing selects for IE users
 *	Todd Huss - inserting modal dynamically and anchor classes
 *
 * Up to date code can be found at http://submodal.googlecode.com
 */

// Popup code
var gPopupMask = null;
var gPopupContainer = null;
//var gPopFrame = null;
var gReturnFunc;
var gPopupIsShown = false;
//var gDefaultPage = "/loading.html";
var gHideSelects = false;
var gReturnVal = null;

var gTabIndexes = new Array();
// Pre-defined list of tags we want to disable/enable tabbing into
var gTabbableTags = new Array("A","BUTTON","TEXTAREA","INPUT","IFRAME");	

// If using Mozilla or Firefox, use Tab-key trap.
if (!document.all) {
	document.onkeypress = keyDownHandler;
}

/**
 * Initializes popup code on load.	
 */
function initPopUp() {
	// Add the HTML to the body
	theBody = document.getElementsByTagName('BODY')[0];
	popmask = document.createElement('div');
	popmask.id = 'popupMask';
	popcont = document.createElement('div');
	popcont.id = 'popupContainer';
	popcont.innerHTML = '' +
		'<div id="wrap-lightbox">' +
			'<div id="wrap-lightbox-bar">' +
				'<div id="wrap-lightbox-bar-text">Room Info & Bedding Configuration</div>' +
				'<div id="wrap-lightbox-bar-closetext">Close</div>' +
				'<div id="wrap-lightbox-bar-closebutton"><input type="button" name="close" value="" class="wrap-lightbox-bar-closebutton" onclick="hidePopWin(false);" id="popCloseBox" /></div>' +
			'</div>' +
			'<div id="wrap-lightbox-shadow">' +
				'<div id="wrap-lightbox-shadow-left"></div>' +
				'<div id="wrap-lightbox-shadow-center"></div>' +
				'<div id="wrap-lightbox-shadow-right"></div>' +
			'</div>' +
			'<div id="wrap-lightbox-content">' +
				'<div id="wrap-lightbox-content-container">' +
					'<div id="wrap-lightbox-content-roominfo">Room Info</div>' +
					'<div id="wrap-lightbox-content-line1">&nbsp;</div>' +
					'<div id="wrap-lightbox-content-type">Deluxe Suite</div>' +
					'<div id="wrap-lightbox-content-description">I accept the booking conditions of Need to Escape and authorise Need to Escape to process above reservation and to charge my credit card for the ammount according to the payment payment conditions specified above. Click Here to see booking conditions.</div>' +
					'<div id="wrap-lightbox-content-configuration">Bedding Configuration</div>' +
					'<div id="wrap-lightbox-content-line2">&nbsp;</div>' +
					'<div id="wrap-lightbox-content-text1">Choose bedding configuration</div>' +
					'<div id="wrap-lightbox-content-text2">Bedding Available</div>' +
					'<div id="wrap-lightbox-content-checkbed1"><input name="bed" type="radio" value="2_bed" /></div>' +
					'<div id="wrap-lightbox-content-bed1img">&nbsp;</div>' +
					'<div id="wrap-lightbox-content-text3">Or</div>' +
					'<div id="wrap-lightbox-content-checkbed2"><input name="bed" type="radio" value="3_bed" /></div>' +
					'<div id="wrap-lightbox-content-bed2img">&nbsp;</div>' +
					'<div id="wrap-lightbox-content-bed1text">2 King Bed</div>' +
					'<div id="wrap-lightbox-content-bed2text">2 King Bed + 2 Single Bed</div>' +
					'<div id="wrap-lightbox-content-submit"><input name="RiSubmit" type="submit" value="" class="wrap-lightbox-content-submit" /></div>' +
				'</div>' +
			'</div>' +
		'</div>';
	theBody.appendChild(popmask);
	theBody.appendChild(popcont);
	
	gPopupMask = document.getElementById("popupMask");
	gPopupContainer = document.getElementById("popupContainer");
	// Hari
	//gPopFrame = document.getElementById("popupFrame");	
	
	// check to see if this is IE version 6 or lower. hide select boxes if so
	// maybe they'll fix this in version 7?
	var brsVersion = parseInt(window.navigator.appVersion.charAt(0), 10);
	if (brsVersion <= 6 && window.navigator.userAgent.indexOf("MSIE") > -1) {
		gHideSelects = true;
	}
	
	// Add onclick handlers to 'a' elements of class submodal or submodal-width-height
	var elms = document.getElementsByTagName('a');
	for (i = 0; i < elms.length; i++) {
		if (elms[i].className.indexOf("submodal") == 0) { 
			// var onclick = 'function (){showPopWin(\''+elms[i].href+'\','+width+', '+height+', null);return false;};';
			// elms[i].onclick = eval(onclick);
			elms[i].onclick = function(){
				// default width and height
				var width = 400;
				var height = 200;
				// Parse out optional width and height from className
				params = this.className.split('-');
				if (params.length == 3) {
					width = parseInt(params[1]);
					height = parseInt(params[2]);
				}
				showPopWin(this.href,width,height,null); return false;
			}
		}
	}
}
addEvent(window, "load", initPopUp);

 /**
	* @argument width - int in pixels
	* @argument height - int in pixels
	* @argument url - url to display
	* @argument returnFunc - function to call when returning true from the window.
	* @argument showCloseBox - show the close box - default true
	*/
function showPopWin(width, height, returnFunc, showCloseBox) {
	// show or hide the window close widget
	if (showCloseBox == null || showCloseBox == true) {
		document.getElementById("popCloseBox").style.display = "block";
	} else {
		document.getElementById("popCloseBox").style.display = "none";
	}
	gPopupIsShown = true;
	disableTabIndexes();
	gPopupMask.style.display = "block";
	gPopupContainer.style.display = "block";
	// calculate where to place the window on screen
	
	centerPopWin(width, height);
	
	// Hari
	//var titleBarHeight = parseInt(document.getElementById("popupTitleBar").offsetHeight, 10);
	var titleBarHeight = 0;

	gPopupContainer.style.width = width + "px";
	gPopupContainer.style.height = (height+titleBarHeight) + "px";
	
	setMaskSize();
	
	// need to set the width of the iframe to the title bar width because of the dropshadow
	// some oddness was occuring and causing the frame to poke outside the border in IE6
	// Hari
	//gPopFrame.style.width = parseInt(document.getElementById("popupTitleBar").offsetWidth, 10) + "px";
	//gPopFrame.style.height = (height) + "px";
	
	// set the url
	// Hari
	//gPopFrame.src = url;
	
	gReturnFunc = returnFunc;
	// for IE
	if (gHideSelects == true) {
		hideSelectBoxes();
	}
	
	window.setTimeout("setPopTitle();", 600);
}

//
var gi = 0;
function centerPopWin(width, height) {
	if (gPopupIsShown == true) {
		if (width == null || isNaN(width)) {
			width = gPopupContainer.offsetWidth;
		}
		if (height == null) {
			height = gPopupContainer.offsetHeight;
		}
		
		//var theBody = document.documentElement;
		var theBody = document.getElementsByTagName("BODY")[0];
		//theBody.style.overflow = "hidden";
		var scTop = parseInt(getScrollTop(),10);
		var scLeft = parseInt(theBody.scrollLeft,10);
	
		setMaskSize();
		
		//window.status = gPopupMask.style.top + " " + gPopupMask.style.left + " " + gi++;
		
		// Hari
		//var titleBarHeight = parseInt(document.getElementById("popupTitleBar").offsetHeight, 10);
		var titleBarHeight = 0;
		
		var fullHeight = getViewportHeight();	// 523
		var fullWidth = getViewportWidth();		// 1024
		
		gPopupContainer.style.top = (scTop + ((fullHeight - (height+titleBarHeight)) / 2)) + "px";
		gPopupContainer.style.left =  (scLeft + ((fullWidth - width) / 2)) + "px";
		//alert(fullWidth + " " + width + " " + gPopupContainer.style.left);
	}
}
// Hari
//addEvent(window, "resize", centerPopWin);
//addEvent(window, "scroll", centerPopWin);
//window.onscroll = centerPopWin;


/**
 * Sets the size of the popup mask.
 *
 */
function setMaskSize() {
	var theBody = document.getElementsByTagName("BODY")[0];
			
	var fullHeight = getViewportHeight();
	var fullWidth = getViewportWidth();
	
	// Determine what's bigger, scrollHeight or fullHeight / width
	if (fullHeight > theBody.scrollHeight) {
		popHeight = fullHeight;
	} else {
		popHeight = theBody.scrollHeight;
	}
	
	if (fullWidth > theBody.scrollWidth) {
		popWidth = fullWidth;
	} else {
		popWidth = theBody.scrollWidth;
	}
	
	if(BrowserDetect.browser == 'Firefox')
	{
		popHeight = popHeight + 20;
	}
	
	gPopupMask.style.height = popHeight + "px";
	gPopupMask.style.width = popWidth + "px";
}

/**
 * @argument callReturnFunc - bool - determines if we call the return function specified
 * @argument returnVal - anything - return value 
 */
function hidePopWin(callReturnFunc) {
	gPopupIsShown = false;
	var theBody = document.getElementsByTagName("BODY")[0];
	theBody.style.overflow = "";
	restoreTabIndexes();
	if (gPopupMask == null) {
		return;
	}
	gPopupMask.style.display = "none";
	gPopupContainer.style.display = "none";
	if (callReturnFunc == true && gReturnFunc != null) {
		// Set the return code to run in a timeout.
		// Was having issues using with an Ajax.Request();
		// Hari
		//gReturnVal = window.frames["popupFrame"].returnVal;
		gReturnVal = null;
		window.setTimeout('gReturnFunc(gReturnVal);', 1);
	}
	// Hari
	//gPopFrame.src = gDefaultPage;
	
	// display all select boxes
	if (gHideSelects == true) {
		displaySelectBoxes();
	}
}

/**
 * Sets the popup title based on the title of the html document it contains.
 * Uses a timeout to keep checking until the title is valid.
 */
function setPopTitle() {
	return;
	// Hari
	window.setTimeout("setPopTitle();", 10);
	//if (window.frames["popupFrame"].document.title == null) {
	//	window.setTimeout("setPopTitle();", 10);
	//} else {
	//	document.getElementById("popupTitle").innerHTML = window.frames["popupFrame"].document.title;
	//}
}

// Tab key trap. iff popup is shown and key was [TAB], suppress it.
// @argument e - event - keyboard event that caused this function to be called.
function keyDownHandler(e) {
    if (gPopupIsShown && e.keyCode == 9)  return false;
}

// For IE.  Go through predefined tags and disable tabbing into them.
function disableTabIndexes() {
	if (document.all) {
		var i = 0;
		for (var j = 0; j < gTabbableTags.length; j++) {
			var tagElements = document.getElementsByTagName(gTabbableTags[j]);
			for (var k = 0 ; k < tagElements.length; k++) {
				gTabIndexes[i] = tagElements[k].tabIndex;
				tagElements[k].tabIndex="-1";
				i++;
			}
		}
	}
}

// For IE. Restore tab-indexes.
function restoreTabIndexes() {
	if (document.all) {
		var i = 0;
		for (var j = 0; j < gTabbableTags.length; j++) {
			var tagElements = document.getElementsByTagName(gTabbableTags[j]);
			for (var k = 0 ; k < tagElements.length; k++) {
				tagElements[k].tabIndex = gTabIndexes[i];
				tagElements[k].tabEnabled = true;
				i++;
			}
		}
	}
}


/**
 * Hides all drop down form select boxes on the screen so they do not appear above the mask layer.
 * IE has a problem with wanted select form tags to always be the topmost z-index or layer
 *
 * Thanks for the code Scott!
 */
function hideSelectBoxes() {
  var x = document.getElementsByTagName("SELECT");

  for (i=0;x && i < x.length; i++) {
    x[i].style.visibility = "hidden";
  }
}

/**
 * Makes all drop down form select boxes on the screen visible so they do not 
 * reappear after the dialog is closed.
 * 
 * IE has a problem with wanting select form tags to always be the 
 * topmost z-index or layer.
 */
function displaySelectBoxes() {
  var x = document.getElementsByTagName("SELECT");

  for (i=0;x && i < x.length; i++){
    x[i].style.visibility = "visible";
  }
}