/** JavaScript Document LasVegas.com Redesign Global JS File.
 *	This is the global JS elements that are needed for 2 or
 *	files on the site, with the exception of the hotel widget.
 *	All hotel search function are located in hotelwidget.js.
 *
 **/

function getElem(_elemID) {
	return document.getElementById(_elemID);
};

function getString(_str) {
	return _str;
};

function setDefaultDepartureDate() {
	var depDate = new Date();
	depDate.setDate(depDate.getDate() + 8);
	document.getElementById("inpCheckInDate").value = formatDate(depDate);
};

function setDefaultReturnDate() {
	var retDate = new Date();
	var depDate = new Date();
	depDate = parseDate(document.getElementById("inpCheckInDate").value);
	retDate.setMonth(depDate.getMonth() - 1);
	retDate.setDate(depDate.getDate() + 2);
	document.getElementById("inpCheckOutDate").value = formatDate(retDate);
};
//Date Functions
function parseDate(dateStr) {
	var reg = new RegExp("[a-zA-Z]");
	while(dateStr.match(reg)) {
		dateStr = dateStr.replace(reg, "");
	}
	var d = dateStr.split(/[^\d]+/);
	var now = new Date();
	var dt = new Date(dateStr);
	if(d.length<2) return now;
	if(d[0].length==0 || d[0]>12) return now;
	if(d[1].length==0 || d[1]>31) return now;
	if(d[2].length<3) d[2]=fixYear(dt.getYear());
	return new Date( d[2] , d[0] , d[1]);
};

function pad(value) {
	if(value<10) value="0"+(value*1);
	return value;
};

function formatDate(date) {
	if(isNaN(date)) return "";
	return pad(date.getMonth()+1)+"/"+pad(date.getDate())+"/"+fixYear(date.getYear(date));
};

function fixYear(year) {
	if(year<100) year+=2000;
	if(year<2000) year+=1900;
	return year;
};


function validateUSDate(strValue){
	var objRegExp = new RegExp(/^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/);
    if(!objRegExp.test(strValue)) {
    	return false; 
    } else {
    	var strSeparator = strValue.substring(2, 3); 
        var arrayDate = strValue.split(strSeparator); 
        var arrayLookup = {'01':31, '03':31, '04':30, '05':31, '06':30, '07':31, '08':31, '09':30, '10':31, '11':30, '12':31}; 
        var intDay = parseInt(arrayDate[1], 10); 
		var intMonth = (parseInt(arrayDate[0], 10) + 1);
		if(intMonth < 10) {
			intMonth = "0" + intMonth;
		}
		if(arrayLookup[intMonth] != null) {
        	if(intDay <= arrayLookup[intMonth] && intDay != 0) {
            	return true; 
            }
        }
        intMonth = parseInt(intMonth, 10);
        if(intMonth == 2) {
           	var intYear = parseInt(arrayDate[2]); 
           	if(intDay > 0 && intDay < 29) {
           		return true; 
           	}
           	else if(intDay == 29) {
            	if((intYear % 4 == 0) && (intYear % 100 != 0) || (intYear % 400 == 0)) {
                	return true; 
            	}
        	}
    	}
    }
	return false;
};

function reformatDateField(el) {
	var now = new Date();
	var date = parseDate(el.value);
	if(el.value=='' || isNaN(date)) date = now;
	el.value=formatDate(date);
	return date;
};
//End Date Functions
//Calendar Functions
function displaySearchCalendar(srcEventElement) {
	var UseDoubleCalendar = true;
	
	var _currentCheckinDate = getElem("inpCheckInDate").value; 
	var _currentCheckoutDate = getElem("inpCheckOutDate").value; 
	var srcEventElement; 
  
	var _tmpCheckinDateObj = new Date(_currentCheckinDate);
	var _tmpCheckoutDateObj = new Date(_currentCheckoutDate);
		
	if (_tmpCheckinDateObj == "NaN" || _tmpCheckinDateObj == "Invalid Date") {
		_tmpCheckinDateObj = new Date();
		  var _day, _month; 
		  var indate = new Date(); 
		  _month = (indate.getMonth() + 1) + ""; 
		  if (_month.length == 1) {
			 _month = "0" + _month; 
			 }
		  _day = indate.getDate() + ""; 
		  if (_day.length == 1) {
			 _day = "0" + _day; 
			 }
		getElem("inpCheckInDate").value = _month + "/" + _day + "/" + indate.getFullYear();
		  _currentCheckinDate = getElem("inpCheckInDate").value;
	}
	_2digitYear = _tmpCheckinDateObj.getFullYear();
	if (_tmpCheckinDateObj.getFullYear() < 2000) {
		
		getElem("inpCheckInDate").value = (_tmpCheckinDateObj.getMonth() + 1) + "/" + _tmpCheckinDateObj.getDate() + "/" + (_2digitYear + 100);
		_currentCheckinDate = getElem("inpCheckInDate").value;
		_tmpCheckinDateObj = new Date(_currentCheckinDate);
	}
		
	if (_tmpCheckoutDateObj == "NaN" || _tmpCheckoutDateObj == "Invalid Date") {
		_tmpCheckoutDateObj = YAHOO.widget.DateMath.add(_tmpCheckinDateObj, YAHOO.widget.DateMath.DAY, 2);
		var _day, _month; 
		indate = YAHOO.widget.DateMath.add(_tmpCheckinDateObj, YAHOO.widget.DateMath.DAY, 2);
		_month = (indate.getMonth() + 1) + ""; 
			
		if (_month.length == 1) {
			_month = "0" + _month; 
		}
		_day = indate.getDate() + ""; 
		
		if (_day.length == 1) {
			_day = "0" + _day; 
		}

		getElem("inpCheckOutDate").value = _month + "/" + _day + "/" + indate.getFullYear();
		_currentCheckoutDate = getElem("inpCheckOutDate").value;
	}
	_2digitYear = _tmpCheckoutDateObj.getFullYear();
	if (_tmpCheckoutDateObj.getFullYear() < 2000) {
		
		getElem("inpCheckOutDate").value = (_tmpCheckoutDateObj.getMonth() + 1) + "/" + _tmpCheckoutDateObj.getDate() + "/" + (_2digitYear + 100);
		_currentCheckoutDate = getElem("inpCheckOutDate").value;
		
		_tmpCheckoutDateObj = new Date(_currentCheckoutDate);
	}
	if (srcEventElement.indexOf("img") > - 1) {
		var _oldID = srcEventElement.replace("img", "inp"); 
		_oldID = _oldID.replace("anchor", "inp"); 
		srcEventElement = getElem(_oldID); 
	} else {
		srcEventElement = getElem(srcEventElement);
	}

	call = null;
	getElem("callContainerControls").style.display = "none";
	getElem("callContainer").innerHTML = "";
		
    if (this.call == null) {
    	if (UseDoubleCalendar == true) {
        	call = new YAHOO.widget.Calendar2up("call", "callContainer"); 
          	call.wireEvent("onSelect", hotelSearchDateSelected); 
			
          	if (srcEventElement.id.toLowerCase().indexOf("checkin") > - 1) {
	      		call.pages[0].addRenderer(_currentCheckinDate, call.pages[0].renderCellStyleSelected); 
	        	call.pages[1].addRenderer(_currentCheckinDate, call.pages[1].renderCellStyleSelected); 
	        	call.pages[0].minDate = YAHOO.widget.DateMath.add(new Date(), YAHOO.widget.DateMath.DAY, 0); 
	        	call.pages[1].minDate = YAHOO.widget.DateMath.add(new Date(), YAHOO.widget.DateMath.DAY, 0); 
	        	getElem("calendarTitle").innerHTML = CheckInCalendarMessage; 
				call.setMonth(_tmpCheckinDateObj.getMonth());
				call.setYear(_tmpCheckinDateObj.getFullYear());
            } else {
	            call.pages[0].addRenderer(_currentCheckoutDate, call.pages[0].renderCellStyleSelected); 
	            call.pages[1].addRenderer(_currentCheckoutDate, call.pages[1].renderCellStyleSelected); 
	            call.pages[0].minDate = YAHOO.widget.DateMath.add(new Date(_currentCheckinDate), YAHOO.widget.DateMath.DAY, 1); 
	            call.pages[1].minDate = YAHOO.widget.DateMath.add(new Date(_currentCheckinDate), YAHOO.widget.DateMath.DAY, 1); 
			  	call.setMonth(_tmpCheckoutDateObj.getMonth());
				call.setYear(_tmpCheckoutDateObj.getFullYear());
				   
	            getElem("calendarTitle").innerHTML = CheckOutCalendarMessage; 
            }
        }
			
	    call.render();
		hideSearchElements();
	    getElem("callContainerControls").style.display = ""; 
	    getElem("callContainerControls").style.position = "absolute"; 
	    call.eventSourceElement = srcEventElement.id; 
	}
		 
	_eventXPos = findXPos(srcEventElement); 
	_eventYPos = findYPos(srcEventElement); 
	_callendarWidth = getElem("callContainerControls").style.width; 
	_callendarHeight = getElem("callContainerControls").style.height; 
	_maxScreenWidth = document.body.offsetWidth; 
	_maxScreenHeight = document.body.clientHeight; 
	//alert("XPos: " + _eventXPos + "\nYPos: " + 	_eventYPos + "\nCal Width: " + _callendarWidth + "\nCal Height: " + _callendarHeight + "\nMax Screen W: " + _maxScreenWidth + "\nMax Screen H: " + _maxScreenHeight);
	if ((_eventXPos + parseInt(_callendarWidth)) > _maxScreenWidth) {
		_eventXPos = _maxScreenWidth - parseInt(_callendarWidth);
		
	}
	if ((_eventYPos + parseInt(_callendarHeight)) > _maxScreenHeight) {
		_eventYPos = _maxScreenHeight - parseInt(_callendarHeight);
		
	}
	
	var ua = navigator.userAgent.toLowerCase();
   	var isOpera = (ua.indexOf('opera') > -1);
   	var isSafari = (ua.indexOf('safari') > -1);
   	var isIE = (window.ActiveXObject);
	
	if (window.ActiveXObject) {

		if(ua.indexOf('msie 7.0') > -1) {
			getElem("callContainerControls").style.top = (_eventYPos + 23) + "px" ;
			getElem("callContainerControls").style.left = (_eventXPos) + "px";
		} else if(ua.indexOf('msie 6.0') > -1) {
			getElem("callContainerControls").style.top = (_eventYPos + 23) + "px" ;
			getElem("callContainerControls").style.left = (_eventXPos) + "px";
		}
	} else if(ua.indexOf('safari') > -1 && !ua.indexOf('mozilla') > -1) {

		getElem("callContainerControls").style.top = (_eventYPos + 23) + "px";
		getElem("callContainerControls").style.left = (_eventXPos) + "px";
	} else if(ua.indexOf('mozilla') > -1  && !ua.indexOf('safari') > -1) {

		getElem("callContainerControls").style.top = (_eventYPos + 23) + "px";
		getElem("callContainerControls").style.left = (_eventXPos) + "px";
	} else {

		getElem("callContainerControls").style.top = (_eventYPos + 23) + "px" ;
		getElem("callContainerControls").style.left = (_eventXPos) + "px";
	}
		
	mouseoverSearch(); 
	setCalenderShown(true); 
};
   
function hideSearchCalendar() {
	call = null;
    getElem("callContainerControls").style.display = "none";
    getElem("callContainer").innerHTML = "";
    var elementsToHide = document.getElementsByTagName("select");
            
    for (x = 0; x < elementsToHide.length; x++) {
    	elementsToHide[x].style.visibility = "";
    }
};
function setCalenderShown(_value) {
	calenderShown = _value;
};

function hotelSearchDateSelected() {
	var dateParts = call.selectedDates[0].toString().split(","); 
	var _day = dateParts[2], _month = dateParts[1], _year = dateParts[0]; 
	var _dateSetType = "inpCheckInDate"; 
	if (call.eventSourceElement.toLowerCase().indexOf("checkin") > - 1) {
		_dateSetType = "inpCheckInDate"; 
	}
	if (call.eventSourceElement.toLowerCase().indexOf("checkout") > - 1) {
		_dateSetType = "inpCheckOutDate";
	}
	var _inputField = getElem(_dateSetType); 
	if (_month.length == 1) {
		_month = "0" + _month; 
	}
	if (_day.length == 1) {
		_day = "0" + _day; 
	}
	_inputField.value = _month + "/" + _day + "/" + _year; 
	var _currentCheckinDate = new Date(getElem("inpCheckInDate").value); 
	var _currentCheckoutDate = new Date(getElem("inpCheckOutDate").value); 
	if (YAHOO.widget.DateMath.before(_currentCheckoutDate, _currentCheckinDate) == false && YAHOO.widget.DateMath.before(_currentCheckinDate, _currentCheckoutDate) == false) {
		var newOverrideDate = YAHOO.widget.DateMath.add(_currentCheckinDate, YAHOO.widget.DateMath.DAY, 2); 
		getElem("inpCheckOutDate").value = (newOverrideDate.getMonth() + 1) + "/" + newOverrideDate.getDate() + "/" + newOverrideDate.getFullYear(); 
	}
	if (YAHOO.widget.DateMath.before(_currentCheckoutDate, _currentCheckinDate) == true) {
		var newOverrideDate = YAHOO.widget.DateMath.add(_currentCheckinDate, YAHOO.widget.DateMath.DAY, 2); 
	    getElem("inpCheckOutDate").value = (newOverrideDate.getMonth() + 1) + "/" + newOverrideDate.getDate() + "/" + newOverrideDate.getFullYear(); 
	}
	var elementsToShow = document.getElementsByTagName("select"); 
	for (x = 0; x < elementsToShow.length; x++) {
		elementsToShow[x].style.visibility = ""; 
	}
	getElem("callContainerControls").style.display = "none"; 
	getElem("callContainer").innerHTML = ""; 
	call = null; 
};
function hideSearchElements() {
	var elementsToHide = document.getElementsByTagName("select");
        
    for (x = 0; x < elementsToHide.length; x++) {
    	elementsToHide[x].style.visibility = "hidden";
    }
};
function findXPos(obj) {
	var curleft = 0;
    if (obj.offsetParent) {
		while (1) {
            curleft += obj.offsetLeft;
            if (!obj.offsetParent) {
                break;
            }
            obj=obj.offsetParent;
        }
    } else if (obj.x) {
        curleft += obj.x;
    }
    return curleft;
};

function findYPos(obj) {
    var curtop = 0;
    if (obj.offsetParent) {
        while (1) {
            curtop += obj.offsetTop;
            if (!obj.offsetParent) {
                break;
            }
            obj=obj.offsetParent;
        }
    } else if (obj.y) {
        curtop += obj.y;
    }
    return curtop;
};

var contenthover = null; 
function pageResize() { 
	var srcEventElement; 
	srcEventElement = null; 
	if (srcEventElement != null) { 
		_eventXPos = findXPos(srcEventElement); 
		_eventYPos = findYPos(srcEventElement); 
		_callendarWidth = getElem("callContainerControls").style.width; 
		_callendarHeight = getElem("callContainerControls").style.height; 
		_maxScreenWidth = document.body.offsetWidth; 
		_maxScreenHeight = document.body.clientHeight; 
					
		if ((_eventXPos + parseInt(_callendarWidth)) > _maxScreenWidth) { 
			_eventXPos = _maxScreenWidth - parseInt(_callendarWidth); 
		} 
		if ((_eventYPos + parseInt(_callendarHeight)) > _maxScreenHeight) { 
			_eventYPos = _maxScreenHeight - parseInt(_callendarHeight); 
		} 
		if (window.ActiveXObject) {

			if(ua.indexOf('msie 7.0') > -1) {
				getElem("callContainerControls").style.top = (_eventYPos + 23) + "px";
				getElem("callContainerControls").style.left = (_eventXPos) + "px";
			} else if(ua.indexOf('msie 6.0') > -1) {
				getElem("callContainerControls").style.top = (_eventYPos + 23) + "px";
				getElem("callContainerControls").style.left = (_eventXPos) + "px";
			}
		} else if(ua.indexOf('safari') > -1 && !ua.indexOf('mozilla') > -1) {

			getElem("callContainerControls").style.top = (_eventYPos + 23) + "px";
			getElem("callContainerControls").style.left = (_eventXPos) + "px";
		} else if(ua.indexOf('mozilla') > -1  && !ua.indexOf('safari') > -1) {

			getElem("callContainerControls").style.top = (_eventYPos + 23) + "px";
			getElem("callContainerControls").style.left = (_eventXPos) + "px";
		} else {

			getElem("callContainerControls").style.top = (_eventYPos + 23) + "px" ;
			getElem("callContainerControls").style.left = (_eventXPos) + "px";
		}
	} 
};

function mouseoverSearch() { 
	contenthover = true; 
};

function mouseoutSearch() { 
	contenthover = false; 
};

function hideAllShowSearchCalendars() { 
	if (contenthover == false) { 
		hideSearchCalendar();
	} 
};

document.onclick = hideAllShowSearchCalendars; 
window.onresize = pageResize; 
//End Calendar Functions
// Cookie JS.

function makeCookie(str, value, path, expdate) {
	document.cookie = str +  "=" + value + "; expires=" + expdate + "; path=" + path + "; domain=lasvegas.com;";	
};

function get_cookie ( cookie_name )
{
  var results = document.cookie.match ( '(^|;) ?' + cookie_name + '=([^;]*)(;|$)' );

  if ( results )
    return ( unescape ( results[2] ) );
  else
    return null;
};

// END Cookie JS
// 
function closeDivErrorMessage() {
	document.getElementById("ErrorMessageDiv").innerHTML = "";
	document.getElementById("ErrorMessageDiv").className = "emptyCell";
};

function createErrorMessage(errorMes) {
	var ErrorMessage = "" + errorMes + "<br /><a href='javascript:void(0)' onclick='closeDivErrorMessage()'>close message</a></p>";
	document.getElementById("ErrorMessageDiv").className = "errorMessage";
	document.getElementById("ErrorMessageDiv").innerHTML = ErrorMessage;
};