var RETURN_CAL_VISIBLE;
//var CURRENT_DATE = new Date();
var s = new Date();
var DISABLED_DAYS_OF_WEEK = [ ];
var calendarOutbound = null;
var calendarReturn = null;
var hiddentext;
var operacount=1;
var HBACURRENT_DATE=false



//when a day is clicked in the calendar
function Calendar_DateChanged(calendar)
{
	if (calendar.dateClicked){
		if (calendar.calId == 'outbound'){
			if (calendarReturn != null)
				refreshReturnCalendar();
		}
	}
}
function dateStatusHandler(date, y,	m, d)
{
	return (dateIsDisabled(date, y,	m, d));
}
function dateStatusHandlerReturn(date, y, m, d)
{
	return (dateIsDisabledReturn(date, y, m, d));
}
function dateIsDisabled(date, y, m,	d)
{

	return (dateIsInThePast(date, y, m,	d) || dayIsInTheFutureOutBound(date, y, m, d));
}
function dateIsDisabledReturn(date,	y, m, d)
{
	return (dateForReturn(date,	y, m, d) || dayIsInTheFuture(date, y, m, d));
}


//checks so the calendar only shows dates from today and foreward
function dateIsInThePast(date, y, m, d)
{
	//var	currentShortDate  =	new	Date(CURRENT_DATE.getFullYear(), CURRENT_DATE.getMonth(), CURRENT_DATE.getDate());
	var	currentShortDate  =	new	Date(START_DATE.getFullYear(), START_DATE.getMonth(), START_DATE.getDate());
	var	calendarShortDate =	new	Date(date.getFullYear(), date.getMonth(), date.getDate());
	return (calendarShortDate <	currentShortDate);
}

//calculates the start date for return calendar
/*function dateForReturn(date, y,	m, d)
{
	var	strHiddenValue = document.getElementById(getHiddenOutboundId()).value;
	var	currentShortDate;
	if (strHiddenValue.length >	0){
		currentShortDate  =	new	Date(strHiddenValue.substring(0,4),	(strHiddenValue.substring(5,7) - 1), strHiddenValue.substring(8,10));
	}else{
	currentShortDate  =	new	Date(CURRENT_DATE.getFullYear(), CURRENT_DATE.getMonth(), CURRENT_DATE.getDate());
	}
	var	calendarShortDate =	new	Date(date.getFullYear(), date.getMonth(), date.getDate());
	return (calendarShortDate <	currentShortDate);
}*/

function dateForReturn(date, y,m, d)
{
	var	strHiddenValue = document.getElementById(getHiddenOutboundId()).value;
	var	currentShortDate;
	if (strHiddenValue.length >	0)
	{
		currentShortDate  =	new	Date(strHiddenValue.substring(0,4),	(strHiddenValue.substring(5,7) - 1), strHiddenValue.substring(8,10) );
		//currentShortDate.setDate(currentShortDate.getDate()+ Minimumdays);	
		
		if(EnforceSundayRule==true)   		
		{	
		//To get nearest sunday
		s= new Date(currentShortDate.getFullYear(),currentShortDate.getMonth(),currentShortDate.getDate(),0,0,0);// added on 7th may-07 for nearest sunday	
		var SoW=s.getDay();
		if(SoW==0)
    s.setDate(s.getDate() - (SoW + 6) % 7 + 13);
    else
     s.setDate(s.getDate() - (SoW + 6) % 7 + 6);
			//if(currentShortDate.getDate()+ Minimumdays < s.getDate())
			currentShortDate.setDate(currentShortDate.getDate()+ Minimumdays);
			if(currentShortDate < s)
				currentShortDate= new Date(s.getFullYear(),s.getMonth(),s.getDate());
			//else
				//currentShortDate.setDate(currentShortDate.getDate()+ Minimumdays);
		}
		else
			currentShortDate.setDate(currentShortDate.getDate()+ Minimumdays);		
	}
	else
	{
		
		currentShortDate  =	new	Date(CURRENT_DATE.getFullYear(), CURRENT_DATE.getMonth(), CURRENT_DATE.getDate());
		if(HBACURRENT_DATE!=false)
		currentShortDate.setDate(currentShortDate.getDate()+ 1);
		else
		currentShortDate.setDate(currentShortDate.getDate());
		
	
	}
	var calendarShortDate =	new	Date(date.getFullYear(), date.getMonth(), date.getDate());
	
	
	return (calendarShortDate <	currentShortDate);
}

//checks so the calendar only shows 361, the variable FUTURE_DATE is set in CEPTravelTypeSelector.ascx.cs
function dayIsInTheFuture(date, y, m, d)
{
	
	//var	stopShortDate =	new	Date(date.getFullYear(), date.getMonth(), date.getDate());
	var	strHiddenValue = document.getElementById(getHiddenOutboundId()).value;
	var	currentShortDate;
	var Maxdays;
	
	if (strHiddenValue.length >	0 && StopTravelPeriod!=false && Maximumdays > 0)
	{
		 Maxdays = new Date(strHiddenValue.substring(0,4),	(strHiddenValue.substring(5,7) - 1), strHiddenValue.substring(8,10) );
			 Maxdays.setDate(Maxdays.getDate()+ Maximumdays);
		 
		 var StopTravelDate = new	Date(FUTURE_DATE.getFullYear(), FUTURE_DATE.getMonth(), FUTURE_DATE.getDate());
		 if (StopTravelDate>Maxdays)
		    currentShortDate =new Date(Maxdays.getFullYear(),Maxdays.getMonth(),Maxdays.getDate());
		    else 
		     currentShortDate  =	new	Date(FUTURE_DATE.getFullYear(), FUTURE_DATE.getMonth(), FUTURE_DATE.getDate());
	}
	 else if (strHiddenValue.length >0 && StopTravelPeriod == false && Maximumdays > 0)
	{
	       Maxdays = new Date(strHiddenValue.substring(0,4),	(strHiddenValue.substring(5,7) - 1), strHiddenValue.substring(8,10) );
			 Maxdays.setDate(Maxdays.getDate()+ Maximumdays); 
			 currentShortDate =new Date(Maxdays.getFullYear(),Maxdays.getMonth(),Maxdays.getDate());
	}
	else
	{
		currentShortDate  =	new	Date(FUTURE_DATE.getFullYear(), FUTURE_DATE.getMonth(), FUTURE_DATE.getDate());
	}
	var stopShortDate=new Date(date.getFullYear(),date.getMonth(),date.getDate());
	
	return (stopShortDate >	currentShortDate);
}

function dayIsInTheFutureOutBound(date, y, m, d)
{
	var currentShortDate =new	Date(FUTURE_DATE.getFullYear(), FUTURE_DATE.getMonth(), FUTURE_DATE.getDate());
	
	var stopShortDate=new Date(date.getFullYear(),date.getMonth(),date.getDate());
	
	return (stopShortDate >	currentShortDate);
}

function stringToDate(dateString)
{
	var	y	 = dateString.substr(0,	4);
	var	m	 = dateString.substr(5,	2);
	var	d	 = dateString.substr(8,	2);
	var	date = new Date(y, (m -	1),	d);
	return date;
}

function dateToString(date)
{
	var	y	 = date.getFullYear();
	var	m	 = date.getMonth();
	var	d	 = date.getDate();
	if (m == 0)	
		m =	12;	
	else if	(m < 10) m = "0"+ m;
	if (d <	10)	d =	"0"+ d;
	var	date = y +"-"+ m +"-"+ d;
	return date;
}

//helper function, returns a string representing the date, month is returnet as the actual number not the index ie. january == 1 not 0
function getRealDateToString(date)
{
	var	y	 = date.getFullYear();
	var	m	 = date.getMonth() + 1;
	var	d	 = date.getDate();
	if (m == 0)	
		m =	12;	
	else if	(m < 10) m = "0"+ m;
	if (d <	10)	d =	"0"+ d;
	var	date = y +"-"+ m +"-"+ d;
	return date;
}

//function is called from calendar dropdowns switches month in calendar
//if outbound calendar is changed, so is return calendar
function setCalendarDate(calendar, dateString, showDayCalendar, select)
{
	if (!showDayCalendar){
		if (select.id == getSelectOutboundId()){
			setDropDown(document.getElementById(getSelectReturnId()), dateString)
			disableOptions(document.getElementById(getSelectReturnId()), document.getElementById(getSelectReturnId()).selectedIndex)
		}else if(select.id == getSelectReturnId())
			checkDisableOptions(select);
		return;
	}
	var	currentDate		= stringToDate(dateString);
	var	strDateString =	dateString.substr(0,7)
	var	strHiddenValue = document.getElementById(calendar.txtHidden).value.substr(0,7)
	if (strDateString == strHiddenValue){		
		calendar.setSelected = true;
		calendar.setDate(stringToDate(document.getElementById(calendar.txtHidden).value));
	}else{
		calendar.setSelected = false;
		calendar.setDate(currentDate);
	}
	if(calendar.calId == 'outbound'){
		if (calendarReturn != null){
			if (document.getElementById(calendarReturn.txtHidden).value.length > 0)
				return;
			calendarReturn.setSelected = false;
			if (document.getElementById(calendarOutbound.txtHidden).value.length > 0){
				if (stringToDate( document.getElementById(calendarOutbound.txtHidden).value)  >= calendarOutbound.date){
				setDropDown(document.getElementById(getSelectReturnId()), document.getElementById(calendarOutbound.txtHidden).value);
				calendarReturn.setDate(stringToDate( document.getElementById(calendarOutbound.txtHidden).value));
				return;
				}
			}
				setDropDown(document.getElementById(getSelectReturnId()), getRealDateToString(calendarOutbound.date));
				calendarReturn.setDate(calendarOutbound.date);
				
				
				
		}
	}
}

//initialize outbound calendar
function initOutboundCalendar(){
	calendarOutbound.flatCallback =	Calendar_DateChanged;
	calendarOutbound.weekNumbers = false;
	calendarOutbound.setDateStatusHandler(dateStatusHandler);
	calendarOutbound.txtHidden = getHiddenOutboundId();
	calendarOutbound.calId = 'outbound';
	//calendarOutbound.disableDayArr = BLOCKED_OUT_DAYS;
	calendarOutbound.disableDayArr = Outbound_BLOCKED_OUT_DAYS;
	calendarOutbound.create(document.getElementById('calendar_outbound'));
	if(document.getElementById(calendarOutbound.txtHidden).value.length > 0){
		calendarOutbound.setSelected = true;
		calendarOutbound.setDate(stringToDate(document.getElementById(calendarOutbound.txtHidden).value));
		setDropDown( document.getElementById(getSelectOutboundId()),document.getElementById(calendarOutbound.txtHidden).value);
	}
}

//initialize return calendar
function initReturnCalendar(){ 		
	calendarReturn.flatCallback	= Calendar_DateChanged;
	calendarReturn.weekNumbers = false;
	calendarReturn.setDateStatusHandler(dateStatusHandlerReturn);
	calendarReturn.txtHidden = getHiddenReturnId();
	calendarReturn.calId = 'return';
	//calendarReturn.disableDayArr = BLOCKED_OUT_DAYS;
	calendarReturn.disableDayArr = Return_BLOCKED_OUT_DAYS;
	calendarReturn.create(document.getElementById('calendar_return'));
	if(document.getElementById(calendarReturn.txtHidden).value.length > 0){
		calendarReturn.setSelected = true;
		calendarReturn.setDate(stringToDate(document.getElementById(calendarReturn.txtHidden).value));
		setDropDown( document.getElementById(getSelectReturnId()),document.getElementById(calendarReturn.txtHidden).value);
	}else{
		calendarReturn.setSelected = false;
		var obj = document.getElementById(getSelectOutboundId()).options
		calendarReturn.setDate(stringToDate(obj[obj.selectedIndex].value));
		setDropDown( document.getElementById(getSelectReturnId()),obj[obj.selectedIndex].value);	
	}
}

//refreshes the returncalendar this is to disable dates when outboundcalendar is clicked
function refreshReturnCalendar(){

	var tmpReturnDate;
	if (document.getElementById(calendarReturn.txtHidden).value.length > 0){
	
		tmpReturnDate = stringToDate(document.getElementById(calendarReturn.txtHidden).value);
		var tmpOutboundDate = new Date( calendarOutbound.date.getFullYear(), calendarOutbound.date.getMonth(),calendarOutbound.date.getDate());
			
			if (tmpReturnDate >= tmpOutboundDate){
				var	strHiddenRetValue = document.getElementById(calendarReturn.txtHidden).value.substr(0,7);
				var strRetdate = getRealDateToString(calendarReturn.date).substr(0,7);
				if (strRetdate == strHiddenRetValue){
					calendarReturn.setSelected = true;
					//calendarReturn.refresh();
					var retyearval=document.getElementById(calendarReturn.txtHidden).value.substr(0,4);
					var retmonthval=document.getElementById(calendarReturn.txtHidden).value.substr(5,2);
					var dateval=document.getElementById(calendarReturn.txtHidden).value.substr(8,2);
					  if(dateIsDisabledReturn(tmpReturnDate,retyearval,retmonthval,dateval))
					  {
					     calendarReturn.setSelected= false;
					     document.getElementById(calendarReturn.txtHidden).value = '';
					     if (document.getElementById(calendarOutbound.txtHidden).value.length > 0)
					     {
				if (stringToDate( document.getElementById(calendarOutbound.txtHidden).value)  >= calendarOutbound.date)
				{
				setDropDown(document.getElementById(getSelectReturnId()), document.getElementById(calendarOutbound.txtHidden).value);
				calendarReturn.setDate(stringToDate( document.getElementById(calendarOutbound.txtHidden).value));
				return;
				 }
					  }
					  }
					  
					     else
					     {
					     calendarReturn.setSelected = true;
					     
					calendarReturn.setDate(stringToDate(document.getElementById(calendarReturn.txtHidden).value));
					}
				
					calendarReturn.refresh();
				}
			}else{
				calendarReturn.setSelected = false;
				document.getElementById(calendarReturn.txtHidden).value = '';
				calendarReturn.setDate( new Date( calendarOutbound.date.getFullYear(), calendarOutbound.date.getMonth(),01));
				setDropDown(document.getElementById(getSelectReturnId()), getRealDateToString( calendarOutbound.date))	
				calendarReturn.refresh();
			}
	}else{
		if( new Date( calendarOutbound.date.getFullYear(), calendarOutbound.date.getMonth(),01) > new Date( calendarReturn.date.getFullYear(), calendarReturn.date.getMonth(),01)){
		calendarReturn.setDate( new Date( calendarOutbound.date.getFullYear(), calendarOutbound.date.getMonth(),01));
		setDropDown(document.getElementById(getSelectReturnId()), getRealDateToString( calendarOutbound.date))
		}
		tmpReturnDate = null; 
		
		calendarReturn.refresh();
		return;
	}	
	
}

//sets the correct month for the calendar dropdowns
function setDropDown(obj, dateString){
	var tmpSet = dateString.substring(0,7)+ '-01'
	var selid = obj.selectedIndex;
	for(var i = 0;obj.options.length > i; i++ ){
		obj.options[i].disabled = false;
		if (obj.options[i].value == tmpSet){
			selid = i;
		}
	}
	obj.options[obj.selectedIndex].selected = false;
	obj.options[selid].selected = true;
}

//sets the correct month for the calendar dropdowns
function disableOptions(obj, index){
	for(var i = 0;obj.options.length > i; i++ ){
		obj.options[i].className = '';
		if (i < index)
			obj.options[i].className = 'disabled';
	}
}

//sets the correct month for the calendar dropdowns
function checkDisableOptions(obj){
	if (obj.options[0].className == 'disabled'){
		var firstEnabled = -1;
		for(var i = 0;obj.options.length > i; i++ ){
			if (obj.options[i].className != 'disabled'){
				if (firstEnabled == -1)
					firstEnabled = i
			}
		}
		if(obj.selectedIndex < firstEnabled){
			obj.options[obj.selectedIndex].selected = false;
			obj.options[firstEnabled].selected = true;
		}
	}
}

//sets the Returcalendar, hiddenreturn value to null
//and hides the returncalendar
function hideReturnCalendar(){
	if (RETURN_CAL_VISIBLE){
	document.getElementById(calendarReturn.txtHidden).value = '';
	calendarReturn = null;
	document.getElementById('calendar_return').innerHTML = '';
	document.getElementById('returnCalendarContainer').style.display = 'none';
	RETURN_CAL_VISIBLE = false;
	}
}
//initialize the returncalendar and make it visible
function showReturnCalendar(){
	if (!RETURN_CAL_VISIBLE){
	calendarReturn = new Calendar(1, null, Calendar_DateChanged, null);
	initReturnCalendar();
	document.getElementById('returnCalendarContainer').style.display = 'block';
	RETURN_CAL_VISIBLE = true;
	}
}

function SetupCalenderPart2DontshowCalendar()
{
	var outboundSelect = document.getElementById(getSelectOutboundId());
	var returnSelect = document.getElementById(getSelectReturnId());
	var outboundHidden = document.getElementById(getHiddenOutboundId());
	var returnHidden = document.getElementById(getHiddenReturnId());
	setDropDown(outboundSelect, outboundHidden.value);
	disableOptions(returnSelect, outboundSelect.selectedIndex);
	setDropDown(returnSelect, returnHidden.value);
	checkDisableOptions(returnSelect);
}

function SetupCalenderPart2showCalendar()
{
	if(Calendar.is_opera && operacount==1)
	{
	operacount=0; 
	calendarOutbound = new Calendar(1, null, Calendar_DateChanged, null)
	initOutboundCalendar()
	if (RETURN_CAL_VISIBLE){
	calendarReturn = new Calendar(1, null, Calendar_DateChanged, null)
	initReturnCalendar()
	}else{
	document.getElementById('returnCalendarContainer').style.display = 'none';
	}
	}
	else if(!Calendar.is_opera)
	{
	calendarOutbound = new Calendar(1, null, Calendar_DateChanged, null)
	initOutboundCalendar()
	if (RETURN_CAL_VISIBLE){
	calendarReturn = new Calendar(1, null, Calendar_DateChanged, null)
	initReturnCalendar()
	}else{
	document.getElementById('returnCalendarContainer').style.display = 'none';
	}
	
	}
	
	
}
