/********************************************************************************************************************************************************************************
 * Declaracion de la variable del calendario																											*
 ********************************************************************************************************************************************************************************/
var MV_Calendar = new Array();


/********************************************************************************************************************************************************************************
 * Constructor del calendario																													*
 ********************************************************************************************************************************************************************************/
function MVCalendar_Create(id) {
	MV_Calendar[id] = {'CalendarHTML':null, 'Date':new Date(), 'ElementPicker':null, 'DateISO':true, 'MinDate':new Date(1900, 01, 01), 'MaxDate':new Date(2099, 12, 31), 'RePaint':true, 'Top':null, 'Left':null, 'DrawPrevMonth':true, 'DrawNextMonth':true, 'AddMonth':null, 'LessMonth':null, 'LessMonthImage':'http://ofertas.muchoviaje.com/billetesavion/images/imagenes2008/flechaL.png', 'AddMonthImage':'http://ofertas.muchoviaje.com/billetesavion/images/imagenes2008/flechaR.png', 'SelectDay':null, 'ComplementShowCalendarCustom':null, 'DateSeparator':'-'}
}


/********************************************************************************************************************************************************************************
 * Funciones de pintado del calendario																											*
 ********************************************************************************************************************************************************************************/


/**
  * Crea la tabla del calendario
  * @param id String Identificador de calendario
  */
function MVCalendar_CreateTable(id) {
	var table = "";
	table += "<table border=\"0\" cellpadding=\"0\" cellspacing=\"4\" align=\"center\">";
	table += MVCalendar_CreateTableHeader(id);
	table += MVCalendar_CreateWeekDays(id);
	table += MVCalendar_CreateDays(id);
	table += "</table>";
	
	return table;
}


/**
  * Crea la cabecera del calendario
  * @param id String Identificador de calendario
  */
function MVCalendar_CreateTableHeader(id) {
	var table = "";
	
	table += "<tr>";
	
	//Comprobamos si debemos o no pintar el enlace para retroceder un mes
	if(MV_Calendar[id]['DrawPrevMonth'] == false) {
		table += "<td class=\"MV_Calendar_Title\"></td>";
	} else {
		if((MV_Calendar[id]['Date'].getFullYear() == MV_Calendar[id]['MinDate'].getFullYear() && MV_Calendar[id]['Date'].getMonth() > MV_Calendar[id]['MinDate'].getMonth()) || MV_Calendar[id]['Date'].getFullYear() > MV_Calendar[id]['MinDate'].getFullYear()) {
			table += "<td class=\"MV_Calendar_Title\" ><a href=\"javascript:MVCalendar_LessMonth('" + id + "')\"><img src=\"" + MV_Calendar[id]['LessMonthImage'] + "\" class=\"MV_Calendar_DaysImg\" alt=\"<\" /></td>";
		} else {
			table += "<td class='MV_Calendar_Title'></td>";
		}
	}
	//Pintamos en nombre del mes y el aņo
	//table=table + "<td></td>"
	table=table +  "<td colspan='5' class='MV_Calendar_Title' >" + MVCalendar_MonthName(MV_Calendar[id]['Date'].getMonth() + 1) + " " + MV_Calendar[id]['Date'].getFullYear() + "</td>";
	//alert(table)
	
	//Comprobamos si debemos o no pintar el enlace para avanzar un mes
	if(MV_Calendar[id]['DrawNextMonth'] == false) {
		table += "<td class=\"MV_Calendar_Title\"></td>";
	} else {
		if((MV_Calendar[id]['Date'].getFullYear() == MV_Calendar[id]['MaxDate'].getFullYear() && MV_Calendar[id]['Date'].getMonth() < MV_Calendar[id]['MaxDate'].getMonth()) || MV_Calendar[id]['Date'].getFullYear() < MV_Calendar[id]['MaxDate'].getFullYear()) {
			table += "<td class=\"MV_Calendar_Title\"><a href=\"javascript:MVCalendar_AddMonth('" + id + "')\"><img src=\"" + MV_Calendar[id]['AddMonthImage'] + "\" class=\"MV_Calendar_DaysImg\" alt=\">\" /></td>";
		} else {
			table += "<td class=\"MV_Calendar_Title\"></td>";
		}
	}
	
	table += "</tr>";
	
	return table;
}


function MVCalendar_CreateWeekDays(id) {
	var tr = "";
	tr += "<tr>";
	tr += "<td class=\"MV_Calendar_TitleWeekDay\">L</td>";
	tr += "<td class=\"MV_Calendar_TitleWeekDay\">M</td>";
	tr += "<td class=\"MV_Calendar_TitleWeekDay\">X</td>";
	tr += "<td class=\"MV_Calendar_TitleWeekDay\">J</td>";
	tr += "<td class=\"MV_Calendar_TitleWeekDay\">V</td>";
	tr += "<td class=\"MV_Calendar_TitleWeekEnd\">S</td>";
	tr += "<td class=\"MV_Calendar_TitleWeekEnd\">D</td>";
	tr += "</tr>";
	
	return tr;
}


function MVCalendar_CreateDays(id) {
	var tr = "";
	var i;
	var j;
	var dayCount = 1;
	var nextMonthDay = 1;
	var prevMonthDay = 1;
	var firstDayOfWeek = 1;
	var myDate = new Date(MV_Calendar[id]['Date'].getFullYear(), MV_Calendar[id]['Date'].getMonth(), 1);
	
	firstDayOfWeek = myDate.getDay();
	if(firstDayOfWeek == 0) {
		firstDayOfWeek = 7;
	}

	prevMonthDay = MVCalendar_DayOfMonth(myDate.getMonth(),myDate.getFullYear())
	prevMonthDay -= firstDayOfWeek - 2;
	
	for(i = 0; i < 6; i++) {
		tr += "<tr>";
		for(j = 0; j < 7; j++) {
			if (((j + 1) == firstDayOfWeek || firstDayOfWeek == null) && dayCount <= MVCalendar_DayOfMonth(myDate.getMonth() + 1,myDate.getFullYear())) {
				myDate.setDate(dayCount);
				if(MVCalendar_IsSmallDate(MV_Calendar[id]['MinDate'], myDate) || MVCalendar_IsBigDate(MV_Calendar[id]['MaxDate'], myDate)) {
					tr += "<td width=\"20\" height=\"20\" class=\"MV_Calendar_BehindDays\"><label>" + dayCount + "</label></td>";
				} else {
					tr += "<td width=\"20\" height=\"20\" class=\"MV_Calendar_Days\"><a href=\"javascript:MVCalendar_SelectDay('" + id + "', '" + myDate.getFullYear() + "', '" + MVCalendar_TwoDigit((myDate.getMonth() + 1)) + "', '" + MVCalendar_TwoDigit(dayCount) + "')\" class=\"MV_Calendar_DaysA\">" + dayCount + "</a></td>";
				}
				
				dayCount++;
				firstDayOfWeek = null;
			} else {
				if(dayCount <= MVCalendar_DayOfMonth(myDate.getMonth() + 1,myDate.getFullYear())) {
					if(MVCalendar_IsSmallDate(MV_Calendar[id]['MinDate'], myDate) || MVCalendar_IsBigDate(MV_Calendar[id]['MaxDate'], myDate)) {
						tr += "<td width=\"20\" height=\"20\" class=\"MV_Calendar_BehindDays\"><label>" + prevMonthDay + "</label></td>";
					} else {
						tr += "<td width=\"20\" height=\"20\" class=\"MV_Calendar_OtherMonth\"><label>" + prevMonthDay + "</label></td>";
					}
					prevMonthDay++;
				} else {
					if(MVCalendar_IsSmallDate(MV_Calendar[id]['MinDate'], myDate) || MVCalendar_IsBigDate(MV_Calendar[id]['MaxDate'], myDate)) {
						tr += "<td width=\"20\" height=\"20\" class=\"MV_Calendar_BehindDays\"><label>" + nextMonthDay + "</label></td>";
					} else {
						tr += "<td width=\"20\" height=\"20\" class=\"MV_Calendar_OtherMonth\"><label>" + nextMonthDay + "</label></td>";
					}
					nextMonthDay++;
				}
			}
		}
		tr += "</tr>";
	}
	
	return tr;
}


/********************************************************************************************************************************************************************************
 * Funciones control del calendario																												*
 ********************************************************************************************************************************************************************************/
function MVCalendar_LessMonth(id) {
	var month = MV_Calendar[id]['Date'].getMonth();
	var year;
	
	if(month == 0) {
		year = MV_Calendar[id]['Date'].getFullYear();
		year--;
		MV_Calendar[id]['Date'].setFullYear(year);
		month = 11;
		MV_Calendar[id]['Date'].setMonth(month);
	} else {
		month--;
		MV_Calendar[id]['Date'].setMonth(month);
	}
	
	if(MV_Calendar[id]['LessMonth'] != null) {
		eval(MV_Calendar[id]['LessMonth']);
	}
	
	MV_Calendar[id]['CalendarHTML'] = MVCalendar_CreateTable(id);
	document.getElementById(id).innerHTML = MV_Calendar[id]['CalendarHTML'];
}


function MVCalendar_AddMonth(id) {
	var month = MV_Calendar[id]['Date'].getMonth();
	var year;
	
	if(month == 11) {
		year = MV_Calendar[id]['Date'].getFullYear();
		year++;
		MV_Calendar[id]['Date'].setFullYear(year);
		month = 0;
		MV_Calendar[id]['Date'].setMonth(month);
	} else {
		month++;
		MV_Calendar[id]['Date'].setMonth(month);
	}
	
	if(MV_Calendar[id]['AddMonth'] != null) {
		eval(MV_Calendar[id]['AddMonth']);
	}
	
	MV_Calendar[id]['CalendarHTML'] = MVCalendar_CreateTable(id);
	document.getElementById(id).innerHTML = MV_Calendar[id]['CalendarHTML'];
}


function MVCalendar_ShowCalendar(id, parent) {
	var element = document.getElementById(id);
	var elementParent = document.getElementById(parent);
	var top;
	var left;

	if(MV_Calendar[id]['RePaint'] == true) {
		MV_Calendar[id]['CalendarHTML'] = MVCalendar_CreateTable(id);
		document.getElementById(id).innerHTML = MV_Calendar[id]['CalendarHTML'];
	}
	
	//top = MVCalendar_GetTop(elementParent);
	//left = MVCalendar_GetLeft(elementParent);
	
	//top += MV_Calendar[id]['Top'];
	//left += MV_Calendar[id]['Left'];
	
	if(MV_Calendar[id]['ComplementShowCalendarCustom'] != null) {
		eval(MV_Calendar[id]['ComplementShowCalendarCustom']);
	}

	//element.style.left = left + "px";
	//element.style.top = top + "px";
	element.style.display = "block";
	elementParent.blur();
}


function MVCalendar_HideCalendar(id) {
	var element = document.getElementById(id);
	element.style.display = "none";
}


function MVCalendar_SelectDay(id, year, month, day) {

    if(MV_Calendar[id]['DateISO'] == true) {
    
		document.getElementById(MV_Calendar[id]['ElementPicker']).value = year + MV_Calendar[id]['DateSeparator'] + month + MV_Calendar[id]['DateSeparator'] + day;
	} else {


		document.getElementById(MV_Calendar[id]['ElementPicker']).value = day + MV_Calendar[id]['DateSeparator'] + month + MV_Calendar[id]['DateSeparator'] + year;
	}
	
	MVCalendar_HideCalendar(id);
	
	if(MV_Calendar[id]['SelectDay'] != null) {
		eval(MV_Calendar[id]['SelectDay']);
	}
}


/********************************************************************************************************************************************************************************
 * Funciones de utilidades varias																												*
 ********************************************************************************************************************************************************************************/
function MVCalendar_GetLeft(elementOrigin) {
    var curNode = elementOrigin;
    var left = 0;

    do {
        left += curNode.offsetLeft;
        if(curNode == null || curNode.offsetParent == null) {
			return left;
        }
        curNode = curNode.offsetParent;
	} while(curNode != null || curNode.tagName.toLowerCase() != 'body' || curNode.tagName.toLowerCase() != 'html');

    return left;
}


function MVCalendar_GetTop(elementOrigin) {
    var curNode = elementOrigin;
    var top = 0;

    do {
        top += curNode.offsetTop;
        if(curNode == null || curNode.offsetParent == null) {
			return top;
        }
        curNode = curNode.offsetParent;
    } while(curNode != null || curNode.tagName.toLowerCase() != 'body' || curNode.tagName.toLowerCase() != 'html');

    return top;
}


function MVCalendar_DayOfMonth(month, year) {
	var days;
	
	switch(month) {
		case 1:
		case 3:
		case 5:
		case 7:
		case 8:
		case 10:
		case 12:
			days = 31;
		break;
		case 2:
			if((year % 4 == 0 && year % 100 != 0) || (year % 100 == 0 && year % 400 == 0)) {
				days = 29;
			} else {
				days = 28;
			}
		break;
		case 4:
		case 6:
		case 9:
		case 11:
			days = 30;
		break;
		default:
			days = 30;
		break;
	}
	
	return days;
}


function MVCalendar_MonthName(month) {
	var name;
	
	switch(month) {
		case 1:
			name = "Enero";
		break;
		case 2:
			name = "Febrero";
		break;
		case 3:
			name = "Marzo";
		break;
		case 4:
			name = "Abril";
		break;
		case 5:
			name = "Mayo";
		break;
		case 6:
			name = "Junio";
		break;
		case 7:	
			name = "Julio";
		break;
		case 8:
			name = "Agosto";
		break;
		case 9:
			name = "Septiembre";
		break;
		case 10:
			name = "Octubre";
		break;
		case 11:
			name = "Noviembre";
		break;
		case 12:
			name = "Diciembre";
		break;
	}
	
	return name;
}


function MVCalendar_IsSmallDate(dateA, dateB) {
	if(dateA.getFullYear() > dateB.getFullYear()) {
		return true;
	} else {
		if(dateA.getFullYear() == dateB.getFullYear()) {
			if(dateA.getMonth() > dateB.getMonth()) {
				return true;
			} else {
				if(dateA.getMonth() == dateB.getMonth()) {
					if(dateA.getDate() > dateB.getDate()) {
						return true;
					} else {
					
						return false;
					}
				} else {
					return false;
				}
			}
		} else {
			return false;
		}
	}
}


function MVCalendar_IsBigDate(dateA, dateB) {
	if(dateA.getFullYear() > dateB.getFullYear()) {
		return false;
	} else {
		if(dateA.getFullYear() == dateB.getFullYear()) {
			if(dateA.getMonth() > dateB.getMonth()) {
				return false;
			} else {
				if(dateA.getMonth() == dateB.getMonth()) {
					if(dateA.getDate() > dateB.getDate()) {
						return false;
					} else {
					
						return true;
					}
				} else {
					return true;
				}
			}
		} else {
			return true;
		}
	}
}


function MVCalendar_SetValue(id, name, value) {
	MV_Calendar[id][name] = value;
}


function MVCalendar_TwoDigit(number) {
	number = number.toString();
	if(number.length == 1) {
		number = "0" + number;
	}
	
	return number;
}


/********************************************************************************************************************************************************************************
 * Funciones personalizadas																													*
 ********************************************************************************************************************************************************************************/
 
function MV_Calendar_SelectDay_Custom(id, year, month, day) {
//Vuelos
if (id=='MVCalendarLayer4')
{
     var fecha4=day + '/'+ month + '/'+ year;
	 $("#formDepartureDate").val(day + '/'+ month + '/'+ year);
	 $("#fechaSalidaMosVuelos").html(fecha4 + ", "+ GetDiaNombre(fecha4));
}
//Vuelos
if (id=='MVCalendarLayer5')
{
     var fecha5=day + '/'+ month + '/'+ year;
	 $("#formReturnDate").val(day + '/'+ month + '/'+ year);
	 $("#fechaRegresoMosVuelos").html(fecha5 + ", "+ GetDiaNombre(fecha5));
}
//Vuelo+Hotel
if (id=='MVCalendarLayer6')
{
     var fecha6=day + '/'+ month + '/'+ year;
	 $("#formDepartureDateVH").val(day + '/'+ month + '/'+ year);
	 $("#fechaSalidaMosVH").html(fecha6 + ", "+ GetDiaNombre(fecha6));
}
//Vuelo+Hotel
if (id=='MVCalendarLayer7')
{
     var fecha7=day + '/'+ month + '/'+ year;
	 $("#formReturnDateVH").val(day + '/'+ month + '/'+ year);
	 $("#fechaRegresoMosVH").html(fecha7 + ", "+ GetDiaNombre(fecha7));
}

//Hoteles
if (id=='MVCalendarLayer3')
{
     var fecha3=day + '/'+ month + '/'+ year;
	 $("#dateEntradaHoteles").val(day + '/'+ month + '/'+ year);
	 $("#fechaEntradaMos").html(fecha3 + ", "+ GetDiaNombre(fecha3));
	 n = parseInt($("#noches").val());
	 var fVuelta=new Date();
	 fVuelta.setFullYear(year,month,day);
	 fVuelta.setDate(fVuelta.getDate()+n);
	 fVuelta = fVuelta.getDate() + "/" + (fVuelta.getMonth()+1) + "/" + fVuelta.getFullYear();
     $("#fechaVuelta").html(fVuelta + ", "+ GetDiaNombre(fVuelta));
}

//Vacaciones
if (id=='MVCalendarLayer1')
{
	 $("#dateEntradaVacaciones").val(day + '/'+ month + '/'+ year);
}

if (id=='MVCalendarLayer2')
{
     $("#dateSalidaVacaciones").val(day + '/'+ month + '/'+ year);
}
	
}


function MV_Calendar_ShowCalendarCustom(id, top, left) {

	MVCalendar_HideCalendar('MVCalendarLayer1');
	MVCalendar_HideCalendar('MVCalendarLayer2');

	var tempLeft = left + 0;
	var tempTop = top + 195;
	
	var frameTop3;
	var frameLeft1;
	var frameLeft2;
	var frameLeft3;


	document.getElementById("CalendarCloseLayer").style.top = tempTop + "px";
	document.getElementById("CalendarCloseLayer").style.left = tempLeft + "px";
	document.getElementById("CalendarCloseLayer").style.display = "block";
	
	
	document.getElementById("CalendarCloseLayerHoteles").style.top = tempTop + "px";
	document.getElementById("CalendarCloseLayerHoteles").style.left = tempLeft + "px";
	document.getElementById("CalendarCloseLayerHoteles").style.display = "block";
	
	document.getElementById("CalendarCloseLayerVuelos").style.top = tempTop + "px";
	document.getElementById("CalendarCloseLayerVuelos").style.left = tempLeft + "px";
	document.getElementById("CalendarCloseLayerVuelos").style.display = "block";
	
	document.getElementById("CalendarCloseLayerVH").style.top = tempTop + "px";
	document.getElementById("CalendarCloseLayerVH").style.left = tempLeft + "px";
	document.getElementById("CalendarCloseLayerVH").style.display = "block";
	
	
	if(navigator.userAgent.toLowerCase().indexOf('MSIE 6.0') != -1) {
		frameTop1 = top - 4;
		frameTop2 = -2;
		frameTop3 = -2;
		frameLeft1 = left - 2;
		frameLeft2 = -2;
		frameLeft3 = -2;
	} else {
		frameTop1 = top;
		frameTop2 = 0;
		frameTop3 = 0;
		frameLeft1 = left;
		frameLeft2 = 0;
		frameLeft3 = 0;
	}
	
	document.getElementById("MVCalendarFrame1").style.top = frameTop1 + "px";
	document.getElementById("MVCalendarFrame1").style.left = frameLeft1 + "px";
	document.getElementById("MVCalendarFrame1").style.width = "21px";
	document.getElementById("MVCalendarFrame1").style.height = "20px";
	document.getElementById("MVCalendarFrame1").style.border = "none";
	document.getElementById("MVCalendarFrame1").style.display = "block";
	
	
	document.getElementById("MVCalendarFrame3").style.top = (tempTop - 0) + "px";
	document.getElementById("MVCalendarFrame3").style.left = (tempLeft + 0) + "px";
	document.getElementById("MVCalendarFrame3").style.width = "21px";
	document.getElementById("MVCalendarFrame3").style.height = "20px";
	document.getElementById("MVCalendarFrame3").style.border = "none";
	document.getElementById("MVCalendarFrame3").style.display = "block";
	
	
	document.getElementById("containerCalendarButton").style.border = "solid 1px #336699";
	document.getElementById("containerCalendarButton").style.backgroundColor = "#99ccff";
	document.getElementById("containerCalendarButtonHasta").style.border = "solid 1px #336699";
	document.getElementById("containerCalendarButtonHasta").style.backgroundColor = "#99ccff";

}


function MV_Calendar_HideCalendarCustom() {
	document.getElementById('MVCalendarFrame1').style.display = 'none';
	MVCalendar_HideCalendar('MVCalendarLayer1');
	MVCalendar_HideCalendar('MVCalendarLayer2');
	MVCalendar_HideCalendar('MVCalendarLayer3');
	MVCalendar_HideCalendar('MVCalendarLayer4');
	MVCalendar_HideCalendar('MVCalendarLayer5');
	MVCalendar_HideCalendar('MVCalendarLayer6');
	MVCalendar_HideCalendar('MVCalendarLayer7');
	document.getElementById('MVCalendarFrame3').style.display = 'none';
	document.getElementById('CalendarCloseLayer').style.display = 'none';
	document.getElementById('CalendarCloseLayerHoteles').style.display = 'none';
	
	document.getElementById("CalendarCloseLayerVuelos").style.display = "none";
	document.getElementById("CalendarCloseLayerVH").style.display = "none";
	
	document.getElementById("containerCalendarButton").style.border = "none";
	document.getElementById("containerCalendarButton").style.backgroundColor = "transparent";
	document.getElementById("containerCalendarButtonHasta").style.border = "none";
	document.getElementById("containerCalendarButtonHasta").style.backgroundColor = "transparent";
	
	
}

/********************************************************************************************************************************************************************************
 * Fin del calendario																														*
 ********************************************************************************************************************************************************************************/
