 /**This file holds customize calendar feature
 * @author Vivek Mohan
 * @version 1.0.0.2
 * @created 5/22/2009
 */
	var day_ar = [
					[
						"Sun",
						"Mon",
						"Tue",
						"Wed",
						"Thu",
						"Fri",
						"Sat"
					],
					[
						"Dim",
						"Lun",
						"Mar",
						"Mer",
						"Jeu",
						"Ven",
						"Sam"
					],

					[
					"Dom",
					"Lun",
					"Mar",
					"Mie",
					"Jue",
					"Vie",
					"Sab"
					],
					[
					"Dom",				
					"Lun",
					"Mar",
					"Mer",
					"Gio",
					"Ven",
					"Sab"
					],
					[
					"Son",
					"Mon",
					"Die",
					"Mit",
					"Don",
					"Fre",
					"Sam"
					]
				];
	var month_ar = 	[
						[	
							"January",
							"February",
							"March",
							"April",
							"May",
							"June",
							"July",
							"August",
							"September",
							"October",
							"November",
							"December"
						],
						[	
							"Janvier",
							"Février",
							"Mars",
							"Avril",
							"Mai",
							"Juin",
							"Juillet",
							"Août",
							"Septembre",
							"Octobre",
							"Novembre",
							"Décembre"
						],
	
						[
						"Enero",
						"Febrero",
						"Marzo",
						"Abril",
						"Mayo",
						"Junio",
						"Julio",
						"Agosto",
						"Septiembre",
						"Octubre",
						"Noviembre",
						"Diciembre"
						],
						
						[	
						"Gennaio", 
						"Febbraio",
						"Marzo",
						"Aprile",
						"Maggio",
						"Giugno",
						"Luglio",
						"Agosto",
						"Settembre",
						"Ottobre",
						"Novembre",
						"Dicembre"
						],

						[
						"Januar",
						"Februar",
						"März",
						"April",
						"Mai",
						"Juni",
						"Juli",
						"August",
						"September",
						"Oktober",
						"November",
						"Dezember"
						]
					];

	var days_month_ar = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
	
	var old_mousedown_hdl;
	
	var g_date_elt;
	var g_xml_date_elt;

	// initial delta from 
	var g_offset_x = 4;
	var g_offset_y = -40;
	
	var year_val;
	var month_val;
	var day_val;
	// calendar language
	var g_lg;
	var g_default_days = 7;
	// set flag to calculate difference b/w arrival date and departure date vivek
	var Cal_flag;
	// set flag for checkout date vivek
	var Check_out_flag;
	// calendarPos
function calendarPos(obj) {
		this.x = g_offset_x;
		this.y = g_offset_y;
		if(obj) {
			//obj
			if (obj.offsetParent)
			{
				this.x += obj.offsetLeft;
				this.y += obj.offsetTop;

				while (obj = obj.offsetParent)
				{
					this.x += obj.offsetLeft;
					this.y += obj.offsetTop;
				}
			}
		}
	}
	

	function initCalendar(lg, date_element, xml_date_element)
	{
		g_date_elt = date_element;
		g_xml_date_elt = xml_date_element;
		g_lg = lg;
		
		var a_date = new Date(date_element.value);
		var a_year = a_date.getFullYear();
		var a_month = a_date.getMonth();
		var a_day = a_date.getDate();
		var newdate = new Date(a_year, a_month, a_day+g_default_days);
		a_year = newdate.getFullYear();
		a_month = newdate.getMonth()+1;
		a_day = newdate.getDate();
		if(a_month<10)
			a_month = "0"+a_month;
		if(a_day<10)
			a_day = "0"+a_day;
		//alert(a_year+"/"+a_month+"/"+a_day);

		if(date_element.value == "")
		{
			switch(g_lg)
			{
				case "":
				case "en" : g_date_elt.value = a_year+"/"+a_month+"/"+a_day; break;
				default : g_date_elt.value = (a_day)+"/"+a_month+"/"+a_year; break;
			}
		}
		if(xml_date_element.value == "")
		{
			g_xml_date_elt.value = a_year+"-"+a_month+"-"+a_day;
		}

	}
	
	// show the calendar
	function do_show_calendar() {
		if(getIdProperty("calendar_frame", "display") != 'block')
			setIdProperty("calendar_frame", "display", "block");
		
		if (window.navigator.userAgent.indexOf('Linux') != -1)
		{	
			if (document.getElementById("flashMap"))
			{
				document.getElementById("flashMap").style.display = 'none';
			}
		}
	}
	
	//
	// hide the modal dialog box
	function do_hide_calendar() {
		if(getIdProperty("calendar_frame", "display") == 'block')
			setIdProperty("calendar_frame", "display", "none");
			
		if (window.navigator.userAgent.indexOf('Linux') != -1)
		{	
			if (document.getElementById("flashMap"))
			{
				document.getElementById("flashMap").style.display = 'table-cell';
			}
		}			
	}
	
	//
	// function to open a calendar
	function show_calendar(a_event, elmt_id, xml_date_element) {
		
		// keep form element that will need to be synchronized
		var imgSrc = elmt_id;
		g_xml_date_elt = xml_date_element;
		a_elt = document.getElementById("calendar");
		if(a_elt != null)
		{
			a_point = new calendarPos(imgSrc);
			setIdProperty("calendar", "top", a_point.y + "px");
		// uncomment this line
		//	setIdProperty("calendar", "left", a_point.x + imgSrc.width + "px");
		// remove this line
		if(imgSrc.width==16)
			setIdProperty("calendar", "left", a_point.x - 100 + "px");
		else
			setIdProperty("calendar", "left", a_point.x + imgSrc.width + "px");
			// show the calendar frame
			do_show_calendar();
			
			
			// build month-year selector
			build_month_select();
		
			var iframe = document.getElementById("iframe");
			iframe.style.width = a_elt.offsetWidth;
			iframe.style.height = a_elt.offsetHeight;
			iframe.style.left = a_elt.offsetLeft;
			iframe.style.top = a_elt.offsetTop;
			
			// add a mouse down event handler 
			// if addEventListener is define -> DOM compliant event handling is possible
			if(document.addEventListener)
			{
				document.addEventListener("mousedown", track_mouse_down, true);
			}

			else if(document.attachEvent)
			{
				// attach event is available only in IE
				cal_content = document.getElementById("calendar");
				cal_content.attachEvent("onmousedown", track_mouse_downie);
				document.attachEvent("onmousedown", track_hide_calendar);
			}

			else
			{
				// this is our last chance (hope we never use it)
				old_mousedown_hdl = document.onmousedown;
				document.onmousedown = track_mouse_down;
			}
		}
	}
	
	//
	// to hide the calendar
	function hide_calendar() {
		do_hide_calendar();
		// remove all kind of event handler previously created
		if(document.removeEventListener)
			document.removeEventListener("mousedown", track_mouse_down, true);
		else if(document.detachEvent) {
			cal_content = document.getElementById("calendar");
			cal_content.detachEvent("onmousedown", track_mouse_downie);
			document.detachEvent("onmousedown", track_hide_calendar);
		}
		else
			document.onmousedown = old_mousedown_hdl;
	}
	
	//
	// track mouse down while calendar is displayed
	function track_mouse_down(evt) {
		// while mouse in this element -> show calendar
		cal_elt = document.getElementById("calendar");
		tgt = evt.target;
		if(tgt == cal_elt)
			return;
		// loop through hierarchy and let displayed if in calendar element.
		if(tgt.offsetParent) {
			while (tgt = tgt.offsetParent) {
				if(tgt == cal_elt)
					return;
			}
		}
		// if calendar element not found in hierarchy -> hide it
		hide_calendar();
	}
	
	//
	// track mouse down while calendar is displayed
	function track_mouse_downie(evt) {
		evt.cancelBubble = true;
	}
	
	//
	// track mouse down while calendar is displayed
	function track_hide_calendar(evt) {
		hide_calendar();
	}
	
	//
	// build month select
	function build_month_select() {

		var date_val = g_xml_date_elt.value;

		if(date_val == "")
		{
			var a_date = new Date();
			var a_year = a_date.getFullYear();
			var a_month = a_date.getMonth() + 1;
			var a_day = a_date.getDate();
			var my_date;

			if(a_month < 10)
				a_month = "0"+a_month;
			if(a_day < 10)
				a_day = "0"+a_day;

			my_date = a_year+'-'+a_month+'-'+a_day;
			g_xml_date_elt.value=my_date;
		}

		date_val = g_xml_date_elt.value;

		var date_ar = date_val.split("-");
		
		year_val = parseInt(date_ar[0], 10);
		month_val = parseInt(date_ar[1], 10);
		day_val = parseInt(date_ar[2], 10);

		if(month_val < 10)
		{
			month_str = "0" + month_val;
		}
		else
		{
			month_str = String(month_val);
		}
		//year_val = date_ar[0];

		select_str = month_str + year_val;

		// first empty the current select
		document.calendar_form.calendar_month.options.length = 0;
		
		// 
		// determine start and end period from current date (from current month to december next year.
		
		var current_date = new Date();
		var cur_year = current_date.getFullYear();
		var cur_month = current_date.getMonth();

		for(i = 0; i <= 12; i++)
		{
			// label is month string followed by space followed by year
			var month_ar_label = selectLabels(month_ar);
			label = month_ar_label[cur_month] + " " + cur_year;
			//alert(label);

			// val is a string : 2 digits month + 4 digits year
			if(cur_month < 9)
				val = "0" + (cur_month  + 1);
			else
				val = String(cur_month  + 1);
			val+=cur_year;
	
			// create option obj
			if(val == select_str)
			{
				is_selected = true;
			}
			else
			{
				is_selected = false;
			}
			
			a_option = new Option(label, val, false, is_selected);
			// append option to select
			document.calendar_form.calendar_month.options[i] = a_option;
			
			// next month
			cur_month++;
			if(cur_month == 12)
			{
				cur_month = 0;
				cur_year++;
			}
		}
		build_days_array(month_val - 1, year_val);
	}
	
	//
	// build days array
	function build_days_array(a_month, a_year)
	{
		// build a date object for first day of this month and year
		a_date = new Date(a_year, a_month, 1, 1, 1, 1);

		var selected_month = a_month+1;
		var selected_year = a_year;

		day_of_week = a_date.getDay();
		index_day = 1;

		inner_str = "<table class='cal_class'><tr>"
		inner_str+= build_day_line();
		inner_str+= "<\/tr><tr>";
		// first line
		// disable calendar date as per checkin date vivek
		var checkin_year;
		var checkin_month;
		var checkin_day;
		if(Check_out_flag == true)
		{
			if (document.getElementById('arrdate2_txt')!=null)
				var check_in_date = document.getElementById('arrdate2_txt').value;
			else
				var check_in_date = document.getElementById('arrdate_txt').value;

			check_in_date = check_in_date.split('/');
			// if date format is changed(dd/mm/YY)
			if(check_in_date[0].length==2)
			{
				temp = check_in_date[0];
				check_in_date[0] = check_in_date[2];
				check_in_date[2] = temp;
			}
			// find check in year,month,day
			checkin_year = check_in_date[0];
			checkin_month = check_in_date[1];
			checkin_day = check_in_date[2];
		}

		for(i = 0; i < 7; i++)
		{
			str = "<td class='cal_td'>";
			if(i < day_of_week)
			{
				str+="x";
			}
			else 
			{
				index_day = "0"+index_day;
				
				style_elt = "";
				style_elt = validateDate(index_day, selected_month, selected_year,checkin_day,checkin_month,checkin_year);

				if(style_elt == "onDate" || style_elt == "todayDate")
				{
					str+="<a href='javascript:void(0);' onclick='do_select_day("+index_day+")' class='"+style_elt+"'>";
					str+=index_day;
					str+="<\/a>";
				}
				else
				{
					str+="<a class='"+style_elt+"'>"+index_day+"</a>";
				}
				index_day++;
			}
			str+= "<\/td>";
			
			inner_str+= str;
		}
		inner_str+="<\/tr>";
		
		do_loop = true;

		max_day = days_month_ar[a_month];
		if((a_year % 4 == 0) && (a_month == 1))
		{
			max_day++;
		}
	
		while(do_loop)
		{
			inner_str+= "<tr>";
			for(i = 0; i < 7; i++)
			{
				str = "<td class='cal_td'>";
				if(index_day > max_day)
				{
					str+="x";
				}
				else
				{
					if(index_day < 10)
					{
						index_day = "0"+index_day;
					}
					
					style_elt = "";
					style_elt = validateDate(index_day, selected_month, selected_year,checkin_day,checkin_month,checkin_year);

					if(style_elt == "onDate" || style_elt == "todayDate")
					{
						str+="<a href='javascript:void(0);' onclick='do_select_day("+index_day+")' class='"+style_elt+"'>";
						str+=index_day;
						str+="<\/a>";
					}
					else
					{
						str+="<a class='"+style_elt+"'>"+index_day+"</a>";
					}

					index_day++;

					if(index_day > max_day)
					{
						do_loop = false;
					}
				}
				str+="<\/td>";
				inner_str+= str;
			}
			
			inner_str+= "<\/tr>";
		}
		inner_str+= "<\/table>";

		daynums_elt = document.getElementById("cal_days");
		daynums_elt.innerHTML = inner_str;
	}

	// build calendar day line
	function build_day_line()
	{
		var str = "";
		var day_ar_label = selectLabels(day_ar);
		var ct = day_ar_label.length;

		for(i = 0; i < ct; i++) {
			str = str + "<td class='cal_td'>";
			str = str + day_ar_label[i];
			str = str + "<\/td>";
		}
		return str;
	}
	
	//
	// do calendar select change
	function do_month_change() {
		//
		// first get select selection
		var val = document.calendar_form.calendar_month.value;
		a_month = parseInt(val.substr(0, 2), 10);
		a_year = parseInt(val.substr(2, 4), 10);
		build_days_array(a_month - 1, a_year);
	}
	
	//
	// do next month
	function do_next_month() {
		// next selection
		var idx = document.calendar_form.calendar_month.selectedIndex;
		if(idx < (document.calendar_form.calendar_month.options.length - 1)) {
			document.calendar_form.calendar_month.selectedIndex = ++idx;
			do_month_change();
		}
	}
	
	//
	// do prev month
	function do_prev_month() {
		// next selection
		var idx = document.calendar_form.calendar_month.selectedIndex;
		if(idx > 0) {
			document.calendar_form.calendar_month.selectedIndex = --idx;
			do_month_change();
		}
	}
	
	//
	// do select day
	function do_select_day(day_index) {
		// this is the selected day
		var my_date;

		if(day_index<10)
			day_index = "0"+day_index;

		var val = document.calendar_form.calendar_month.value;

		a_month = parseInt(val.substr(0, 2), 10);
		if(a_month<10)
			a_month = "0"+a_month;
		a_year = parseInt(val.substr(2, 4), 10);
		a_day = day_index;

		var defaultDate = a_year+'/'+a_month+'/'+a_day;

		switch(g_lg)
		{
			case "en" : my_date = defaultDate; break;
			default   : my_date = a_day+'/'+a_month+'/'+a_year; break;
		}

		g_date_elt.value = my_date;
		g_xml_date_elt.value = a_year+'-'+a_month+'-'+a_day;
		if(Cal_flag==true)// calculate no of nights vivek
			CalculateNoNights();
		hide_calendar();
	}
	
	// get a property for an element given its id
	function getIdProperty(id, property)
	{
		var styleObject = document.getElementById( id );
		if (styleObject != null)
		{
			styleObject = styleObject.style;
			if (styleObject[property])
			{
				return styleObject[ property ];
			}
		}
		return null;
	}

	// set a property to an element given its id
	function setIdProperty( id, property, value )
	{
		var styleObject = document.getElementById( id );
		if (styleObject != null)
		{
			styleObject = styleObject.style;
			styleObject[ property ] = value;
		}
	
	}
	
	function validateDate(s_day, s_month, s_year,checkin_day,checkin_month,checkin_year)
	{
		var today = new Date();
		var today_day = today.getDate();
		var today_month = today.getMonth()+1;
		var today_year = today.getFullYear();
		var style_date = "onDate";
		// if click on check out date
		if(Check_out_flag == true)
		{
			if(s_year <= checkin_year)
			{
				if(s_month < checkin_month)
				{
					style_date = "offDate";
				}
				else if(s_month == checkin_month)
				{
					if(s_day <= checkin_day)
					{
						style_date = "offDate";
					}
					if(s_day-1 == checkin_day)
					{
						style_date = "todayDate";
					}
				}
			}
			if(s_year < checkin_year)
				style_date = "offDate";
			return style_date;
		}
		// set day currentday+7 if coming from CHT
		//if(Cal_flag== true)
		//{
	//		new_s_day = s_day-7;
	//	}
	//	else
			new_s_day = s_day;
		if(s_year <= today_year)
		{
			if(s_month < today_month)
			{
				style_date = "offDate";
			}
			else if(s_month == today_month)
			{
				if(new_s_day < today_day)
				{
					style_date = "offDate";
				}
				if(new_s_day == today_day)
				{
					style_date = "todayDate";
				}
			}
		}
		return style_date;
	}
	
	function selectLabels(labelArray)
	{	
		switch(g_lg)
		{
			case "fr" : label_array = labelArray[1]; break;
			case "es" : label_array = labelArray[2]; break;
			case "it" : label_array = labelArray[3]; break;
			case "de" : label_array = labelArray[4]; break;
			case "en" : 
			default : label_array = labelArray[0]; break;
		}
		return label_array;
	}
