var browser_type = navigator.appName;

function getClientWidth() {
	if(document.compatMode){
  	if(document.compatMode == 'CSS1Compat' && !window.opera){
    	return document.documentElement.clientWidth;
    }else{
    	return document.body.clientWidth;
    }
  }
}
function getClientScrollLeft() {
	if(document.compatMode){
  	if(document.compatMode == 'CSS1Compat' && !window.opera){
    	return document.documentElement.scrollLeft;
    }else{
    	return document.body.scrollLeft;
    }
  }
}

function launchCalendar(calForm, formName, event) {
	launchNextCalendar(null, calForm, formName, event);
}

function launchNextCalendar(prevForm, calForm, formName, event){
   eval('document.'+formName+'.currentCalForm.value = calForm');
   /*QH: whit that we obtein the selected date in the combo*/
   var month = '';
   var day = '';
   for (i=0;i
<document.getElementsByName (calForm + "Month").length;i=i+1)
	{
       var element=document.getElementsByName(calForm
	+ "Month")[i];
       if(element.tagName==
	'SELECT')
	    month=element.value; }
    for (j=0;j
	<document.getElementsByName(calForm + "Day").length;j=j+1)
    {
      var element = document.getElementsByName(calForm + "Day")[j];
	  if(element.tagName == 'SELECT')
	  day = document.getElementsByName(calForm + "Day")[j].value;
   }
   if ((formName == 'multiFlightSearchForm') || (month == '' && day == '')){
       month = document.getElementById(formName+"."+calForm + "Month").value;
       day = document.getElementById(formName+"."+calForm + "Day").value;
   }


   /*Create the DIV */
   var background = document.createElement("div");
   background.id="backgroundDiv";
   if(browser_type == 'Microsoft Internet Explorer'){
   /*This is made for desabling the background without generating a security information message poped up by the <iframe> we used before*/
	background.innerHTML="<table height='100%' width='100%'>&nbsp;</table>";
   }
   background.style.height = document.body.scrollHeight + 'px';
   background.style.width = document.body.scrollWidth + 'px';
   background.style.position = "absolute";
   background.style.top = 0;
   background.style.left = 0;
   background.style.zIndex=10000;
   background.onclick=function() {
      closeCalendarDiv(false);
   };

/*
 * ER#22784 - If the combos show DAY or MONTH, we set the current date and set a attribute so the date is not shown
 */
var highLigthDate = true; //if true, is needed to highligth the date in the calendar. We send this value via parameter to the calendar.jsp(view)


if(day <= 0 || month <= 0)
{

	if(prevForm == null){
		var currentDate = new Date();
		month = currentDate.getMonth()+1;
		day = currentDate.getDate();
		highLigthDate = false;
	}
	else{
		for (i=0;i<document.getElementsByName(prevForm + "Month").length;i=i+1)
   		{
       		var element = document.getElementsByName(prevForm + "Month")[i];
       		if(element.tagName == 'SELECT')
	    		month = element.value;
    	}
		for (j=0;j<document.getElementsByName(prevForm + "Day").length;j=j+1)
    	{
      		var element = document.getElementsByName(prevForm + "Day")[j];
	  		if(element.tagName == 'SELECT')
	  			day = document.getElementsByName(prevForm + "Day")[j].value;
   		}
   		if ((formName == 'multiFlightSearchForm') || (month == '' && day == '')){
       		month = document.getElementById(formName+"."+prevForm + "Month").value;
       		day = document.getElementById(formName+"."+prevForm + "Day").value;
   		}
		highLigthDate = true;

		if(day <= 0 || month <= 0)
		{

			var currentDate = new Date();
			month = currentDate.getMonth()+1;
			day = currentDate.getDate();
			highLigthDate = false;
		}
	
	}
}

   var calendarDiv = document.createElement("div");
   calendarDiv.id="calendarDiv";
   var redir="/common/calendar.jsp?qh_combo_month=" + month + '&qh_combo_day=' + day + '&qh_form_name=' + formName + '&qh_highLigth_date=' + highLigthDate;
   calendarDiv.innerHTML = "<iframe src='" + redir + "' height='175' width='425' frameborder = '0'></iframe>";
   calendarDiv.visibility = true;
   calendarDiv.style.zIndex=11000;
   calendarDiv.style.position = "absolute";

   /*We catch the mouse position to display the calendar DIV according that*/
   var xMousePosition;
   var yMousePosition;

   if (!event) var event = window.event;
    if (event.pageX || event.pageY)
    {
        xMousePosition = event.pageX;
        yMousePosition = event.pageY;
    }
    else if (event.clientX || event.clientY)
    {
        xMousePosition = event.clientX;
        yMousePosition = event.clientY;
    }

   calendarDiv.style.height = '175px';
   calendarDiv.style.width = '425px';

   var offset = 0;
   var browser_version = parseInt(navigator.appVersion);
   var clientWidthVal = getClientWidth();
   var clientScrollLeftVal = getClientScrollLeft();

   if(browser_type == 'Microsoft Internet Explorer' && (browser_version >= 4))
   {
      if (document.documentElement && document.documentElement.scrollTop)
      {
	     offset = document.documentElement.scrollTop;
      }
      else if (document.body)
      {
	     offset = document.body.scrollTop;
      }
      yMousePosition = yMousePosition + offset;
   }
	//IF CALENDAR WILL OPEN UP BEYOND BROWSER WIDTH ADJUST TO THE LEFT TAKING ANY LEFT SCROLL INTO CONSIDERATION// 
	if( xMousePosition + 425 >= clientWidthVal + clientScrollLeftVal ){
   		xMousePosition = clientWidthVal + clientScrollLeftVal - 450;
   }

   calendarDiv.style.top = yMousePosition + 20 + 'px';
   calendarDiv.style.left = xMousePosition - 50 + 'px';
   calendarDiv.style.border = "1px solid #000000";

   /*
    * This variable solves the problem that is rised in IE that considers combo boxes as native components
   */

   var selectBlocker = document.createElement("IFRAME");
   selectBlocker.id = "selectBlocker";
   //TS # 23844: begings here
   //selectBlocker.src = "javascript:void(0);";
   selectBlocker.src = "javascript:'';";
   //TS # 23844:ends here
   selectBlocker.height = '175px';
   selectBlocker.width = '425px';
   selectBlocker.style.position = "absolute";
   selectBlocker.style.top = yMousePosition + 20 + 'px';
   selectBlocker.style.left = xMousePosition - 50 + 'px';

   /*Create the BLUR */
   var backgroundBlur = document.createElement("div");
   backgroundBlur.id="backgroundDiv_Blur";
   backgroundBlur.visibility = true;
   backgroundBlur.style.background = "#CCC";
   backgroundBlur.style.zIndex=10500;
   backgroundBlur.style.position = "absolute";
   backgroundBlur.style.border = "1px solid #CCC";
   backgroundBlur.style.height = parseInt(calendarDiv.style.height) + 4 + 'px';
   backgroundBlur.style.width = parseInt(calendarDiv.style.width) + 4 + 'px';
   backgroundBlur.style.top = parseInt(calendarDiv.style.top) + 4 + 'px';
   backgroundBlur.style.left = parseInt(calendarDiv.style.left) + 4 + 'px';

   document.body.appendChild(selectBlocker);
   document.body.appendChild(background);
   document.body.appendChild(backgroundBlur);
   document.body.appendChild(calendarDiv);

   disabledSelects(true, false);

}


/*
 * This function have the responsability of disabling or enabling all the comboboxes (SELECT TAG) included in every page which calls the calendar
 */
function disabledSelects(disabled, fromView)
{
    var selectsArray;
    if(fromView)
    {
        selectsArray = parent.document.getElementsByTagName("SELECT");
    }
    else
    {
        selectsArray = document.getElementsByTagName("SELECT");
    }
    for(var i=0 ; i<selectsArray.length ; i++)
    {
        if(disabled)
        {
            selectsArray[i].disabled = true;
        }
        else
	 {
 	     selectsArray[i].disabled = false;
        }
    }
}



/*This method is used to remove the calendar from the viewer*/
function closeCalendarDiv(fromView){
   disabledSelects(false, fromView);
   if(fromView){
	/*That is because IE have an special way to remove the elements. Data from Microsoft web site.*/
	if(browser_type == 'Microsoft Internet Explorer'){
		selBlock = parent.document.getElementById("selectBlocker").outerHTML="  ";
		var backGrd = parent.document.getElementById("backgroundDiv").outerHTML="  ";
		var backGrdBlur = parent.document.getElementById("backgroundDiv_Blur").outerHTML="  ";
		var cal = parent.document.getElementById("calendarDiv").outerHTML="  ";
	}
	else{
		var selBlock = parent.document.getElementById("selectBlocker");
		var backGrd = parent.document.getElementById("backgroundDiv");
		var backGrdBlur = parent.document.getElementById("backgroundDiv_Blur");
		var cal = parent.document.getElementById("calendarDiv");
		parent.document.body.removeChild(selBlock );
		parent.document.body.removeChild(backGrd);
		parent.document.body.removeChild(backGrdBlur);
		parent.document.body.removeChild(cal);
	}
   }
   else{
	var selBlock = document.getElementById("selectBlocker");
	var backGrd = document.getElementById("backgroundDiv");
	var backGrdBlur = document.getElementById("backgroundDiv_Blur");
	var cal = document.getElementById("calendarDiv");
	document.body.removeChild(selBlock);
	document.body.removeChild(backGrd);
	document.body.removeChild(backGrdBlur);
	document.body.removeChild(cal);
   }
}


   /**
  	  Added leapYear() and updateReturnDate() functions for ER #9196.
      Chad Halsted
   **/

   function leapYear(theYear) {
      if ( ((theYear % 4 == 0) && (theYear % 100 != 0)) || (theYear % 400 == 0) ) {
	     return true;
      }
      else {
	     return false;
	  }
   }


   /**
      Set the return month and day to two days after the departure month and day.
	  [chalsted] ER #9196
   **/


function updateReturnDate(formName)
{
	// ER#22784. Start here - Disable updateReturnDate() functionality.
	return;
	// ER#22784. Start here
	var d = new Date();
	var	dYear = d.getFullYear();
	var dMonth;
	var dMonthElement;
	var dDay;
	var dDayElement;
	var rMon;
	var rMonElement;
	var rDy;
	var rDyElement;

	if(parent != null){
		dDayElement = getElement(parent.document.getElementById(formName.name + '.flightParams.flightDateParams.travelDay'),
			'.flightParams.flightDateParams.travelDay', formName);
		dDay = dDayElement.selectedIndex;
		dMonthElement = getElement(parent.document.getElementById(formName.name + '.flightParams.flightDateParams.travelMonth'),
			'.flightParams.flightDateParams.travelMonth', formName);
		dMonth = dMonthElement.selectedIndex;
		rDyElement = getElement(parent.document.getElementById(formName.name + '.returnDate.travelDay'),'.returnDate.travelDay', formName);
		rDy = rDyElement.selectedIndex;
		rMonElement = getElement(parent.document.getElementById(formName.name + '.returnDate.travelMonth'),'.returnDate.travelMonth', formName);
		rMon = rMonElement.selectedIndex;
	}
	else
	{
		dDayElement = getElement(document.getElementById(formName.name + '.flightParams.flightDateParams.travelDay'),
			'.flightParams.flightDateParams.travelDay', formName);
		dDay = dDayElement.selectedIndex;
		dMonthElement = getElement(document.getElementById(formName.name + '.flightParams.flightDateParams.travelMonth'),
			'.flightParams.flightDateParams.travelMonth', formName);
		dMonth = dMonthElement.selectedIndex;
		rDyElement = getElement(document.getElementById(formName.name + '.returnDate.travelDay'), '.returnDate.travelDay', formName);
		rDy = rDyElement.selectedIndex;
		rMonElement = getElement(document.getElementById(formName.name + '.returnDate.travelMonth'), '.returnDate.travelMonth', formName);
		rMon = rMonElement.selectedIndex;
	}

	//ER 22784 - If the departure day or month are not selected, we disable the return date update 
	if(dMonth == 12 || dDay == 31) return true;

	var today = new Date();
	var threeDaysInfuture = new Date();
	threeDaysInfuture.setDate(today.getDate() + 3);
	var	rYr = d.getFullYear();

// for next year
	if (rMonElement.selectedIndex < d.getMonth()){
		rYr = rYr+1;
	}

// for next year
	if (dMonthElement.selectedIndex < d.getMonth()){
		dYear = dYear+1;
	}
	rDate = new Date(rYr, rMon, rDy);
	dDate = new Date(dYear, dMonth, dDay+2);

// end of ER 12182 :
	var rYear  = dYear;
	var rMonth = '0';
	var rDay   = '0';

// 30 Days:  April-3 June-5 September-8 November-10
// 31 Days:  January-0, March-2, May-4, July-6, August-7, October-9, December-11
// 28 Days:  February-1

// For Months with 31 days
	if ( ( dMonth == '0' ||
		dMonth == '2' ||
		dMonth == '4' ||
		dMonth == '6' ||
		dMonth == '7' ||
		dMonth == '9' ||
		dMonth == '11' )){
		if (dDay == '29') {
			rDay = '0';
// If December, set month back to '0' for January
			if (dMonth == '11') {
				rMonth = '0';
			} else {
				rMonth = dMonth + 1;
			}
		} else if (dDay == '30') {
			rDay = '1';
// If December, set month back to '0' for January
			if (dMonth == '11') {
				rMonth = '0';
			} else {
				rMonth = dMonth + 1;
			}
		} else {
			rDay = dDay + 2;
			rMonth = dMonth;
		}
// For Months with 30 days
		} else if ((dMonth == '3' ||
				dMonth == '5' ||
				dMonth == '8' ||
				dMonth == '10' )) {
/* test for invalid dates */
		if (dDay == '30') {
			dDay = '30';
			eval (dDayElement.selectedIndex = dDay);
		}
		if (dDay == '28' || dDay == '29') {
			rDay = '0';
			rMonth = dMonth + 1;
		} else if (dDay == '30') {
			rDay = '1';
			rMonth = dMonth + 1;
		} else {
			rDay = dDay + 2;
			rMonth = dMonth;
		}
// For February, check for leapyear.
		}	else if (dMonth == '1') {
// Check to see if Feb 29, 30, or 31 is selected for NON-leapyear.
// If so, set departure date to Feb 28.
		if ((!leapYear(rYear) && dDay == '28') || dDay == '29' || dDay == '30') {
			dDay = dDay;
			eval (dDayElement.selectedIndex = dDay);
		}
		if ((leapYear(rYear) && dDay == '27') || (!leapYear(rYear) && dDay == '26') || dDay ==29 ) {
			rDay = '0';
			rMonth = dMonth + 1;
		} else if ((leapYear(rYear) && dDay == '28') || (!leapYear(rYear) && dDay == '27') || dDay == '30' || (!leapYear(rYear) && dDay == '28')) {
			rDay = '1';
			rMonth = dMonth + 1;
		} else {
			rDay = dDay + 2;
			rMonth = dMonth;
		}
	}
//check to see if on different page
	if(formName.dateChanged != null && formName.dateChanged.value == 'true')
		return;
//If departure date == today's date + 330 days, then return date == departure date
	var tlimDate = new Date(rYear, rMonth, rDay);
	var limitDate = new Date (today.getFullYear(), today.getMonth(), (today.getDate() + 331));
	if ( tlimDate > limitDate ){
		rDay = limitDate.getDate();
		rMonth = limitDate.getMonth();
	}
	if(rDyElement.changed == null && formName.changed == null){
		eval (rDyElement.selectedIndex = rDay);
	}
	if( rMonElement.changed == null && formName.changed == null){
		eval (rMonElement.selectedIndex = rMonth);
	}
	return;
}

function validateDate(theForm){
	var d = new Date();
	var	dYear = d.getFullYear();
	var formName = eval('document.' + theForm);
	var dMonth;
	var dDay;
	var dDayElement = getElement(document.getElementById(formName.name + '.flightParams.flightDateParams.travelDay'),
		'.flightParams.flightDateParams.travelDay', formName);
	dDay = dDayElement.selectedIndex;
	var dMonthElement = getElement(document.getElementById(formName.name + '.flightParams.flightDateParams.travelMonth'),
		'.flightParams.flightDateParams.travelMonth', formName);
	dMonth = dMonthElement.selectedIndex;
// For Months with 31 days
	if ( (dMonth == '0' ||
		dMonth == '2' ||
		dMonth == '4' ||
		dMonth == '6' ||
		dMonth == '7' ||
		dMonth == '9' ||
		dMonth == '11' )){
		if (dDay == '30' || dDay == '31') {
			dDay = '29';
//eval (dDayElement.selectedIndex = dDay);
		}
// For Months with 30 days
	}else if ((dMonth == '3' ||
		dMonth == '5' ||
		dMonth == '8' ||
		dMonth == '10' )) {
		if (dDay == '30' || dDay == '31') {
			dDay = '29';
			eval (dDayElement.selectedIndex = dDay);
		}
// For February, check for leapyear.
	}else if (dMonth == '1') {
		if ((!leapYear(dYear) && dDay == '28') || dDay == '29' || dDay == '30') {
			dDay = '27';
			eval (ddDayElement.selectedIndex = dDay);
		}
	}
}

function validateReturn(theForm){
	var d = new Date();
	var	dYear = d.getFullYear();
	var formName = eval('document.' + theForm);
	var dMonth = document.getElementById(formName.name + '.returnDate.travelMonth').selectedIndex;
	var dDay   = document.getElementById(formName.name + '.returnDate.travelDay').selectedIndex;
	var rDyElement = getElement(document.getElementById(formName.name + '.returnDate.travelDay'), '.returnDate.travelDay', formName);
	dDay = rDyElement.selectedIndex;
	var rMonElement = getElement(document.getElementById(formName.name + '.returnDate.travelMonth'), '.returnDate.travelMonth', formName);
	dMonth = rMonElement.selectedIndex;
// For Months with 31 days
	if ( (dMonth == '0' ||
		dMonth == '2' ||
		dMonth == '4' ||
		dMonth == '6' ||
		dMonth == '7' ||
		dMonth == '9' ||
		dMonth == '11' )){
		if (dDay == '30' || dDay == '31') {
			dDay = '29';
//eval (rDyElement.selectedIndex = dDay);
		}
// For Months with 30 days
	}else if ((dMonth == '3' ||
		dMonth == '5' ||
		dMonth == '8' ||
		dMonth == '10' )) {
		if (dDay == '30' || dDay == '31') {
			dDay = '29';
			eval (rDyElement.selectedIndex = dDay);
		}
// For February, check for leapyear.
	}else if (dMonth == '1') {
		if ((!leapYear(dYear) && dDay == '28') || dDay == '29' || dDay == '30') {
			dDay = '27';
			eval (rDyElement.selectedIndex = dDay);
		}
	}
}

function validateMulti(theForm, num){
	var d = new Date();
	var	dYear = d.getFullYear();
	var formName = eval('document.' + theForm);
	var dMonth = document.getElementById(formName.name+'.flightSearchParam' +num + '.flightDateParams.travelMonth').selectedIndex;
	var dDay = document.getElementById(formName.name+'.flightSearchParam'  +num + '.flightDateParams.travelDay').selectedIndex;
	var dMonthElement = document.getElementById(formName.name+'.flightSearchParam' +num + '.flightDateParams.travelMonth');
	if(!dMonthElement)
		dMonthElement = 'formName.departure' + num + 'Month';
	dMonth = dMonthElement.selectedIndex;
	var dDayElement = document.getElementById(formName.name+'.flightSearchParam' +num + '.flightDateParams.travelDay');
	if(!dDayElement)
		dDayElement = 'formName.departure' + num + 'Day';
	dDay = dDayElement.selectedIndex;
// For Months with 31 days
	if ( (dMonth == '0' ||
		dMonth == '2' ||
		dMonth == '4' ||
		dMonth == '6' ||
		dMonth == '7' ||
		dMonth == '9' ||
		dMonth == '11' )){
		if (dDay == '30' || dDay == '31') {
			dDay = '29';
//eval ('dDayElement.selectedIndex = dDay');
		}
// For Months with 30 days
	}else if ((dMonth == '3' ||
		dMonth == '5' ||
		dMonth == '8' ||
		dMonth == '10' )) {
		if (dDay == '30' || dDay == '31') {
			dDay = '29';
			eval (dDayElement.selectedIndex = dDay);
		}
// For February, check for leapyear.
	}else if (dMonth == '1') {
		if ((!leapYear(dYear) && dDay == '28') || dDay == '29' || dDay == '30') {
			dDay = '27';
			eval (dDayElement.selectedIndex = dDay);
		}
	}
}

function updateChangedDate(selectObject){
	selectObject.changed = true;
	if(selectObject.form.dateChanged)
		selectObject.form.dateChanged.value = true;
	}

function getElement(elem, elemName, formName){
	if(!elem)
	{
		if(elemName == '.flightParams.flightDateParams.travelDay')
			return formName.departureDay;
		else if(elemName == '.flightParams.flightDateParams.travelMonth')
			return formName.departureMonth;
		else if(elemName == '.returnDate.travelDay')
			return formName.returnDay;
		else if(elemName == '.returnDate.travelMonth')
			return formName.returnMonth;
	}
	return elem;
}
