/*****
 * Copyright © FASTBOOKING  1999-2007
 * 20/02/2008
 *
 * Please do NOT modify this file
 * Please do NOT use the final IP adress for Fastbooking links:
 *   IP address may be changed at any time
 *
*/

var FBRESA = "http://www.fastbookings.biz/DIRECTORY/";
var FB_nb_day_delay = 7;



// following code is used to optimize booking access and a better client experience
var FB_book_image = new Image();
//FB_book_image.src = FBRESA + "trans.gif";

// Form: show arrival date
// this function to replace the traditional start function
// in this case no update is required every year.
function start() {
	var nbm = [ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ];
		
	build_year_select();

	MD = new Date();
		
	nday = MD.getDate();
	aday = MD.getDay();
	amois = MD.getMonth();
	ayear = takeYear(MD);
	cur_year = ayear;
			
	nday += FB_nb_day_delay;

	if(nday > nbm[amois])
	{   		
		nday -= nbm[amois];
		amois++;
		if(amois > 11) { 
			ayear++;
			amois = 0;
		} 
	}
		
	indexDay = nday - 1;
	indexMois = amois;
	indexYear = ayear - cur_year;
		
	if(indexDay < 0 || indexDay > 30)
		indexDay = 0;
	if(indexMois < 0 || indexMois > 11)
		indexMois = 0;
	if(indexYear < 0 || indexYear > 1)
		indexDay = 0;

	document.idForm.fromday.selectedIndex = indexDay;
	document.idForm.frommonth.selectedIndex = indexMois;
	document.idForm.fromyear.selectedIndex = indexYear;

	update_departure();
}

// standard booking function
function hhotelPTC(cname, lg, codeprice, codetrack, cluster)
{
	hhotelResa(cname, lg, codeprice, "", "", codetrack, cluster, "", "")
}

// standard promotion function
function hhotelPromo(cname, lg, theme)
{
	hhotelResa(cname, lg, "DYNPROMO", "", "", "", "", theme, "")
}

// reservation promotion function: To show one promotion
function hhotelOnePromo(cname, lg, codeprice, codetrack, cluster)
{
	hhotelResa(cname, lg, codeprice, "", "", codetrack, cluster, "", "style=DIRECTPROMO")
}

// reservation page WITHOUT the individual access
function hhotelNegociated(cname, lg, codeprice, codetrack, cluster)
{
	hhotelResa(cname, lg, codeprice, "", "", codetrack, cluster, "", "negociated=1");
}

// Main direct reservation function
function hhotelResaDirect(cname, lg, codeprice, firstroom, codetrack, firstdate)
{
	hhotelResa(cname, lg, codeprice, firstroom, firstdate, codetrack, "", "", "style=DIRECT");
}

// standard search availabilities in a group
function hhotelSearchGroup(cluster, lg, price, nights, title)
{
	hhotelSearch(cluster, lg, price, nights, title, "", "");
}

// standard search availabilities in a group for a partner
function hhotelSearchPartner(cluster, lg, price, codetrack, title)
{
	if (codetrack != "") args = "&from="+codetrack;
	else	args = "";
    hhotelSearch(cluster, lg, price, "", title, "", args);
}

// search by giving the initial date
function hhotelSearchPriceDate(cluster, price, nights, title, firstdate)
{
	// firstdate : format "YYMMDD"
	var args="";
	if (firstdate != "") args = "FirstDate="+firstdate;
	hhotelSearch(cluster, "", price, nights, title, "", args);
}

function hhotelSearchPriceDateTrack(cluster, lg, price, codetrack, nights, title, firstdate)
{
 var args="";
 if (codetrack != "") args = "from="+codetrack;
 if (firstdate != "") args += "&FirstDate="+firstdate;
 hhotelSearch(cluster, lg, price, nights, title, "", args);
}

// search availabilities for selected promotions
function hhotelSearchPromo(cluster, lg, theme)
{
	hhotelSearch(cluster, lg, "", "", "", theme, "");
}

// search availabilities with Extra Field
function hhotelSearchExtra(cluster, lg, price, codetrack, extratitle, extraval, extrashow)
{
	var args = "Extrafield=" + escape(extratitle) + ";" + extraval + ";" + extrashow;
	if (codetrack != "") args += "&from="+codetrack;
	hhotelSearch(cluster, lg, price, "", "", "", args);
}

// go to the cancel reservation page
function hhotelcancel(cname,lg)
{
	var waction = FBRESA + "cancel.phtml?state=77&Hotelnames="+cname;
	if (lg != "") waction += "&langue="+lg;
	window.open(waction,"reservation","toolbar=no,width=400,height=350,menubar=no,scrollbars=yes,resizable=yes,alwaysRaised=yes");
}

// go to the extract reservation page
function hhotelExtract(cname, lg)
{   
	var waction = FBRESA + "getresa.phtml?Hotelnames="+cname+"&langue="+lg;
	window.open(waction, 'getresa', 'toolbar=no,width=700,height=300,menubar=no,scrollbars=yes,resizable=yes,alwaysRaised=yes');
   return false;
}

// check interface
function hhotelcheckrates(cname, lg)
{
	var waction = FBRESA + "crs.phtml?clusterName="+cname;
	if (lg != "") waction += "&langue="+lg;
	waction += "&checkPromo=1";
	window.open(waction,"search","toolbar=no,width=800,height=550,menubar=no,scrollbars=yes,resizable=yes,alwaysRaised=yes");
}

// Fidelity program
var FB_code_interface = "";
var FB_profil = "";
function hhotelProfil(code_interface, profil)
{
	FB_code_interface = code_interface;
	FB_profil = profil;
}

// Main standard reservation function
function hhotelResa(cname, lg, codeprice, firstroom, firstdate, codetrack, cluster, theme, args)
{
	var waction = FBRESA+"preresa.phtml?Hotelnames="+cname;
	if (lg != "") waction += "&langue="+lg;
	if (firstroom != "") {
		waction += "&FirstRoomName="+firstroom;
		if (codeprice == "")
			codeprice = "DIRECT";
		}
	if (firstdate != "") {
		waction += "&FirstDate="+firstdate;
		if (codeprice == "")
			codeprice = "DIRECT";
		}
	if (codeprice != "") waction += "&FSTBKNGCode="+codeprice;
	if (codetrack != "") waction += "&FSTBKNGTrackLink="+codetrack;
	if (cluster != "") waction += "&clustername="+cluster;
	if (theme != "") waction += "&theme="+theme;
	if (args != "" && (args.indexOf("=")!= -1) ) waction += "&"+args;
	if (FB_profil != "") {
		waction += "&code="+FB_code_interface;
		waction += "&profil="+FB_profil;
	}
	waction += "&HTTP_REFERER="+escape(document.location.href);
	window.open(waction,"reservation","toolbar=no,width=400,height=350,menubar=no,scrollbars=yes,resizable=yes,alwaysRaised=yes");
}


// Main Search function
function hhotelSearch(cluster, lg, price, nights, title, theme, args)
{
	var waction = FBRESA + "crs.phtml?clusterName="+cluster;
	if (lg != "") waction += "&langue="+lg;
	if (price != "") waction += "&FSTBKNGCode="+price;
	if (nights != "") waction += "&nights="+nights;
	if (title != "") waction += "&title="+escape(title);
	if (theme != "") waction += "&theme="+theme;
	if (args != "" && (args.indexOf("=")!= -1) ) waction += "&"+args;
	if (FB_profil != "") {
		waction += "&code="+FB_code_interface;
		waction += "&profil="+FB_profil;
	}
	window.open(waction,"search","toolbar=no,width=800,height=550,menubar=no,scrollbars=yes,resizable=yes,alwaysRaised=yes");
}

// Main Search function for Multi Codes
function hhotelSearchMultCode(cluster, lg, clecode, title, codetrack)
{
	var waction = FBRESA + "crs.phtml?clusterName="+cluster;
	if (lg != "") waction += "&langue="+lg;
	if (clecode != "") waction += "&AccessCode="+clecode;
	if (title != "") waction += "&title="+escape(title);
	if (codetrack != "") waction += "&FSTBKNGTrackLink="+codetrack;
	waction += "&crossSelling=NO"; // CROSS SELLING DESACTIVATED
	if (FB_profil != "") {
		waction += "&code="+FB_code_interface;
		waction += "&profil="+FB_profil;
	}
	window.open(waction,"search","toolbar=no,width=800,height=550,menubar=no,scrollbars=yes,resizable=yes,alwaysRaised=yes");
}

// Main Search function for Cross Selling

function hhotelSearchCrossSell(cluster, lg, codetrack, crossSelling)
{
	var waction = FBRESA + "crs.phtml?clusterName="+cluster;
	if (lg != "") waction += "&langue="+lg;
	if (codetrack != "") waction += "&FSTBKNGTrackLink="+codetrack;
	if (crossSelling != "") waction += "&crossSelling="+crossSelling;
	if (FB_profil != "") {
		waction += "&code="+FB_code_interface;
		waction += "&profil="+FB_profil;
	}
	window.open(waction,"search","toolbar=no,width=800,height=550,menubar=no,scrollbars=yes,resizable=yes,alwaysRaised=yes");
}

// MAIN AVAILABILITY CHECK 
function hhotelDispopriceFHP(cname, lg, codetrack, year, month, day, nights, currency)
{
	var waction = FBRESA+"dispoprice.phtml?clusterName="+cname+"&Hotelnames="+cname;
	if (lg != "") waction += "&langue="+lg;
	if (codetrack != "") waction += "&FSTBKNGTrackLink="+codetrack;
	if (year != "") waction += "&fromyear="+year;
	if (month != "") waction += "&frommonth="+month;
	if (day != "") waction += "&fromday="+day;
	if (nights != "") waction += "&nbdays="+nights;
	if (currency != "") waction += "&CurrencyLabel="+currency;
	waction += "&showPromotions=3";
	if (FB_profil != "") {
		waction += "&code="+FB_code_interface;
		waction += "&profil="+FB_profil;
	}
	window.open(waction,"reservation","toolbar=no,width=750,height=600,menubar=no,scrollbars=yes,resizable=yes,alwaysRaised=yes");
}


///////////////////////////////////////////////////////////////////////////////////////
// Form functions
// Simple form validation (used for compatibility issues)
function hhotelDispoprice(myForm)
{
	hhotelFormValidation(myForm, 0);
}

// Form validation with control
function hhotelFormValidation(myForm, mandatoryCode){
	if (mandatoryCode == 1 && myForm.AccessCode.value == "") {
		alert("You must type in your code ID");
		return (false);
	}
	var languetype = typeof myForm.action;
	myForm.action = FBRESA + "dispoprice.phtml";
	window.open('','dispoprice', 'toolbar=no,width=800,height=550,menubar=no,scrollbars=yes,resizable=yes');
	myForm.submit();
	return (true);
}

// Form: update the selected hotel name
function hhotelFormUpdateHotelnames(myForm)
{
	menuNum = myForm.HotelList.selectedIndex;
	if (menuNum == null)
		return;
	myForm.Hotelnames.value = myForm.HotelList.options[menuNum].value;
}

// Form: show the cancel page
function hhotelFormCancel(myForm){
	var CName = myForm.Hotelnames.value;
	var languetype = typeof myForm.langue;
	var langue;
	if (languetype == "undefined")
		langue = "";
	else
		langue = myForm.langue.value;
	if (CName == null || CName == 'All' || CName == ''){ alert('Please select a hotel first'); return (false); }
	return hhotelcancel(CName, langue);
}

// Form: show the extract page
function hhotelFormExtract(myForm)
{   
	var CName = myForm.Hotelnames.value;
	var languetype = typeof myForm.langue;
	var langue;
	if (languetype == "undefined")
		langue = "";
	else
		langue = myForm.langue.value;
	if (CName == null || CName == 'All' || CName == ''){ alert('Please select a hotel first'); return (false); }
	return hhotelExtract(CName, langue);
}

// Form: show languages
function hhotelShowLang(lang) 
{
	hhotelShowLang__(this.document, lang);
}

function hhotelShowLangOpener(lang)
{
	hhotelShowLang__(window.opener.document, lang);
	window.close();
}

function hhotelShowLang__(mydoc, lang)
{
	mydoc.idForm.langue.value=lang;

	var imgLang = hhotelLang2Img(lang);
	if (imgLang != "") {
		var formFlag = mydoc.selLgFlag;
		if (formFlag != null)
			mydoc.selLgFlag.src= "fastbooking/flags/"+imgLang+".gif";
		var formFlag = mydoc.selLgTxt;
		if (formFlag != null)
			mydoc.selLgTxt.src= "fastbooking/flags/"+imgLang+"lg.gif";
	}
}

// FastBooking language and image code
var FBLangCode = new Array (
	"uk", "france", "germany", "spain", "portuguese", "italy", "nether", "russian",
	"dansk", "svensk", "islensk", "norsk", "turk", "hungria", "greek", "arab",
	"china", "coreen", "japan","croate","czech","poland");
var FBLangImg = new Array (
	"grandbret", "france", "germany", "spain", "portuguese", "italy", "nether", "russia",
	"denmark", "sweeden", "iceland", "norway", "turkey", "hungary", "greek", "arab",
	"china", "coreen", "japan","croate","czech","poland");

function hhotelLang2Img(lang)
{
	for(i = 0; i < FBLangCode.length; i++) {
		if (FBLangCode[i] == lang)
			break;
	}
	return FBLangImg[i];
}

function hhotelLangSelector()
{
	window.open('fastbooking/flags/langSelector.html', '', 'width=330,height=180');
}


var langcodes = new Array("en", "uk", "fr", "france", "de", "germany", "es", "spain ", "pt", "portuguese", "it", "italy", "nl", "nether", "ja", "japan ", "ko", "coreen", "zh", "china", "ar", "arab", "ru", "russian", "tr", "turk", "el", "greek", "hu", "hungria", "da", "dansk", "sv", "svensk", "is", "islensk", "no", "norsk", "hr", "croate", "cs", "czech", "pl", "poland", "iw", "hebrew");

function selectLang()
{
if(navigator.appName == "Microsoft Internet Explorer") UL = navigator.userLanguage.substring(0, 2);
else if(navigator.appName == "Netscape") UL = navigator.language;
else return;

for(i = 0; i < langcodes.length; i += 2)
	if(UL == langcodes[i])
		break;
		
lang = (i < langcodes.length) ? langcodes[i+1] : "uk";
hhotelShowLang(lang);
}



//
// build year select
function build_year_select() {
		
var cur_date = new Date();
var cur_year = takeYear(cur_date);
	
cur_y = new Option(cur_year, cur_year, true, true);
document.idForm.fromyear.options[0] = cur_y;
if(document.idForm.toyear != null) {
	cur_yb = new Option(cur_year, cur_year, true, true);
	document.idForm.toyear.options[0] = cur_yb;
}
	
next_y = new Option(cur_year + 1, cur_year + 1, false, false);
document.idForm.fromyear.options[1] = next_y;
next_yb = new Option(cur_year + 1, cur_year + 1, false, false);
if(document.idForm.toyear != null) {
	document.idForm.toyear.options[1] = next_yb;
	}
}
	
// check departure date to arrival date + 1 day (every time the arrival date is changed)
function check_departure() {
	
	if(document.idForm.today != null) {
		var nbm = [ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ];
		
		var ar_day = parseInt(document.idForm.fromday.value) + 1;
		var ar_month = parseInt(document.idForm.frommonth.value);
		var ar_year = parseInt(document.idForm.fromyear.value);
				
		if(ar_day > nbm[ar_month - 1]) {
			ar_day = 1;
			ar_month += 1;
			if(ar_month > 12) {
				ar_month = 1;
				ar_year += 1;
			}
		}
				
		var cur_date = new Date();
		var cur_year = takeYear(cur_date);
		
		document.idForm.today.selectedIndex = ar_day - 1;
		document.idForm.tomonth.selectedIndex = ar_month - 1;
		document.idForm.toyear.selectedIndex = ar_year - cur_year;
	}
}

// update departure : check 
function update_departure() {
	
	if(document.idForm.today != null) {
		
		var ar_day = parseInt(document.idForm.fromday.value) + 1;
		var ar_month = parseInt(document.idForm.frommonth.value);
		var ar_year = parseInt(document.idForm.fromyear.value);
				
		var de_day = parseInt(document.idForm.today.value) + 1;
		var de_month = parseInt(document.idForm.tomonth.value);
		var de_year = parseInt(document.idForm.toyear.value);
		
		if(de_year < ar_year) {
			check_departure();
		} else {
			if(de_year == ar_year) {
				if(de_month < ar_month) {
					check_departure();
				} else {
					if(de_month == ar_month) {
						if(de_day <= ar_day) {
							check_departure();
						}
					}
				}
			}
		}
				
	}
}

function takeYear(theDate)
{
        x = theDate.getYear();
        var y = x % 100;
        y += (y < 38) ? 2000 : 1900;
        return y;
}

// popup
function popup(url)
{
	window.open(url,"","toolbar=no,width=800,height=550,menubar=no,scrollbars=yes,resizable=yes,alwaysRaised=yes");
}
	
	var day_ar = [	"Dim",
					"Lun",
					"Mar",
					"Mer",
					"Jeu",
					"Ven",
					"Sam"];
	var month_ar = [	"Janvier",
					"Fevrier",
					"Mars",
					"Avril",
					"Mai",
					"Juin",
					"Juillet",
					"Aout",
					"Septembre",
					"Octobre",
					"Novembre",
					"Decembre"];
	var days_month_ar = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
	
	var old_mousedown_hdl;
	
	var g_day_element, g_month_element, g_year_element;
	var g_sync_elt;
	// initial delta from 
	var g_offset_x = 4;
	var g_offset_y = 8;
	
	//
	// 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;
				}
			}
		}
	}

	//
	// define a select element - value object
	function SelElement(elt) {
		this.elt = elt;
		this.value = parseInt(elt.options[elt.selectedIndex].value);
	}
	
	//
	// define a cal_sync_element (the html elements to synchronize with)
	function CalSyncElement(day_elt, month_elt, year_elt) {
		// day - month - year
		this.day = new SelElement(day_elt);
		this.month = new SelElement(month_elt);
		this.year = new SelElement(year_elt);
	}
	
	//
	// 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)
		{
			styleObjectStyle = styleObject.style;
			if(styleObjectStyle[property]) {
				styleObjectStyle[property] = value;
			}
		}
	
	}
	
	//
	// show the calendar
	function do_show_calendar() {
		if(getIdProperty("calendar_frame", "display") != 'block')
			setIdProperty("calendar_frame", "display", "block");
	}
	
	//
	// hide the modal dialog box
	function do_hide_calendar() {
		if(getIdProperty("calendar_frame", "display") == 'block')
			setIdProperty("calendar_frame", "display", "none");
	}
	
	//
	// function to open a calendar
	function show_calendar(a_event, src_elt, day_element, month_element, year_element) {
		
		// keep form element that will need to be synchronized
		g_sync_elt = new CalSyncElement(day_element, month_element, year_element);

		a_elt = document.getElementById("calendar");
		if(a_elt != null) {
			a_point = new calendarPos(src_elt);
			setIdProperty("calendar", "top", a_point.y + "px");
			setIdProperty("calendar", "left", a_point.x + src_elt.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() {

		// build the default selection val based on 
		if(g_sync_elt.month != undefined) {
			month_val = parseInt(g_sync_elt.month.value);
			if(month_val <= 9) {
				month_str = "0" + month_val;
			} else {
				month_str = String(month_val);
			}
			year_val = g_sync_elt.year.value;
			
			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();

		// this is the total number of entries in the select (from current month to december next year)
		select_month = cur_month;
		tot_month = 12 + (12 - cur_month);
		for(i = 0; i < tot_month; i++) {
			// label is month string followed by space followed by year
			label = month_ar[cur_month] + " ";
			label = label + cur_year;
			
			// 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 = val + cur_year;
			
			// create option obj
			if(val == select_str) {
				is_selected = true;
				select_month = cur_month;
			}
			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);
		
		if(((a_month + 1) == g_sync_elt.month.value) && (a_year == g_sync_elt.year.value))
			can_select = true;
		else
			can_select = false;

		// represent today's date
		today = new Date();
		today_day = today.getDate();
		today_month = today.getMonth();
		today_year = today.getFullYear();
			
		day_of_week = a_date.getDay();
		index_day = 1;
		inner_str = "<table class='cal_class'><tr>"
		inner_str = inner_str + build_day_line();
		inner_str = inner_str + "<\/tr><tr>";
		
		// first line
		for(i = 0; i < 7; i++) {
			str = "<td class='cal_td'>";
			if(i < day_of_week)
				str = str + "&nbsp;";
			else {
					active_day = ((a_year > today_year) || (a_month > today_month) || (index_day >= today_day)) ? true : false;
				if(active_day && can_select && (index_day == g_sync_elt.day.value))
					style_elt = " style='background-color: #aaaaaa;'";
				else
					style_elt = "";
				if(active_day) {
					str = str + "<span class='cal_text'" + style_elt + ">";
					str = str + "<a href='javascript:void(0);' onclick='do_select_day(";
					str = str + index_day;
					str = str + ")'>";
					str = str + index_day;
					str = str + "<\/a>";
					str = str + "<\/span>";
				} else {
					str = str + "<span style='text-decoration: line-through'>";
					str = str + index_day;
					str = str + "<\/span>";
				}
				index_day++;
			}
			str = str + "<\/td>";
			
			inner_str = inner_str + str;
		}
		inner_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 = inner_str + "<tr>";
			for(i = 0; i < 7; i++) {
				str = "<td class='cal_td'>";
				if(index_day > max_day)
					str = str + "&nbsp;";
				else {
					active_day = ((a_year > today_year) || (a_month > today_month) || (index_day >= today_day)) ? true : false;
					if(active_day && can_select && (index_day == g_sync_elt.day.value))
						style_elt = " style='background-color: #aaaaaa;'";
					else
						style_elt = "";
					if(active_day) {
						str = str + "<span class='cal_text'" + style_elt + ">";
						str = str + "<a href='javascript:void(0);' onclick='do_select_day(";
						str = str + index_day;
						str = str + ")'>";
						str = str + index_day;
						str = str + "<\/a>";
						str = str + "<\/span>";
					} else {
						str = str + "<span style='text-decoration: line-through'>";
						str = str + index_day;
						str = str + "<\/span>";
					}
					index_day++;
					if(index_day > max_day)
						do_loop = false;
				}
				str = str + "<\/td>";
				inner_str = inner_str + str;
			}
			inner_str = inner_str + "<\/tr>";
		}
		inner_str = 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 ct = day_ar.length;
		
		for(i = 0; i < ct; i++) {
			str = str + "<td class='cal_td'>";
			str = str + day_ar[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 val = document.calendar_form.calendar_month.value;
		a_month = parseInt(val.substr(0, 2), 10);
		a_year = parseInt(val.substr(2, 4), 10);
		
		// build the default selection val based on 
		if(g_sync_elt.month != undefined) {
			g_sync_elt.day.elt.value = day_index;
			g_sync_elt.month.elt.value = a_month;
			g_sync_elt.year.elt.value = a_year;
		}

		// this end the display calendar
		hide_calendar();
	}
	