/********************************************************************************************************************************************************************************
 * 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':0, 'Left':0, '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 += "<td colspan=\"5\" class=\"MV_Calendar_Title\">" + MVCalendar_MonthName(MV_Calendar[id]['Date'].getMonth() + 1) + " " + MV_Calendar[id]['Date'].getFullYear() + "</td>";
	
	//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;
        curNode = curNode.offsetParent;
    } while(curNode.tagName.toLowerCase() != 'body');

    return left;
}


function MVCalendar_GetTop(elementOrigin) {
    var curNode = elementOrigin;
    var top = 0;

    do {
        top += curNode.offsetTop;
        curNode = curNode.offsetParent;
    } while(curNode.tagName.toLowerCase() != 'body');

    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_AddMonth_Custom(id1, id2) {
	MVCalendar_AddMonth(id1);
}


function MV_Calendar_LessMonth_Custom(id1, id2) {
	MVCalendar_LessMonth(id2);
}

function MV_Calendar_SelectDay_Custom(id1, id2) {
	MVCalendar_HideCalendar(id1);
	MVCalendar_HideCalendar(id2);
}

function MV_Calendar_ShowLayerXClose_Custom(id1, id2) {
	MVCalendar_HideCalendar(id1);
	MVCalendar_HideCalendar(id2);
}

function MV_Calendar_ComplementShowCalendarCustom(top, left) {
	var tempLeft = left + 369;
	var tempTop = top - 20;
	
	var frameTop1;
	var frameTop2;
	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";
	
	
	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.border = "none";
	document.getElementById("MVCalendarFrame1").style.display = "block";
	
	document.getElementById("MVCalendarFrame2").style.top = (top + frameTop2) + "px";
	document.getElementById("MVCalendarFrame2").style.left = (left + 195) + "px";
	document.getElementById("MVCalendarFrame2").style.border = "none";
	document.getElementById("MVCalendarFrame2").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";
	
	//MVCalendarFrame1
}

function MV_Calendar_HideCalendarCustom() {
	MVCalendar_HideCalendar('MVCalendarLayer1');
	MVCalendar_HideCalendar('MVCalendarLayer2');
	MVCalendar_HideCalendar('MVCalendarLayer3');
	MVCalendar_HideCalendar('MVCalendarLayer4');
	document.getElementById('CalendarCloseLayer').style.display = 'none';
	
	document.getElementById('MVCalendarFrame1').style.display = 'none';
	document.getElementById('MVCalendarFrame2').style.display = 'none';
	document.getElementById('MVCalendarFrame3').style.display = 'none';
}

function MV_Calendar_ChangeDateCustom() {
	var dateGo = document.getElementById("dateGo").value;
	var dateSplit = dateGo.split("/");
	
	
	MVCalendar_SetValue("MVCalendarLayer3", "MinDate", new Date(dateSplit[2], (dateSplit[1] - 1), dateSplit[0]));
	MVCalendar_SetValue("MVCalendarLayer4", "MinDate", new Date(dateSplit[2], (dateSplit[1] - 1), dateSplit[0]));
	
	/*MVCalendar_SetValue("MVCalendarLayer3", "Date", new Date(dateSplit[2], (dateSplit[1] - 1), dateSplit[0]));
	MVCalendar_SetValue("MVCalendarLayer4", "Date", new Date(dateSplit[2], (dateSplit[1]), dateSplit[0]));*/
	
	MVCalendar_SetValue("MVCalendarLayer3", "Date", new Date(dateSplit[2], (dateSplit[1] - 1), 15));
	MVCalendar_SetValue("MVCalendarLayer4", "Date", new Date(dateSplit[2], (dateSplit[1]), 15));
	//alert(dateSplit[0]);
}


function MV_Calendar_ChangeDateGoCustom() {
	var dateGo = document.getElementById("dateGo").value;
	var dateSplit = dateGo.split("/");
	
	/*MVCalendar_SetValue("MVCalendarLayer1", "Date", new Date(dateSplit[2], (dateSplit[1] - 1), dateSplit[0]));
	MVCalendar_SetValue("MVCalendarLayer2", "Date", new Date(dateSplit[2], (dateSplit[1]), dateSplit[0]));*/
	
	MVCalendar_SetValue("MVCalendarLayer1", "Date", new Date(dateSplit[2], (dateSplit[1] - 1), 15));
	MVCalendar_SetValue("MVCalendarLayer2", "Date", new Date(dateSplit[2], (dateSplit[1]), 15));
	//alert(dateSplit[0]);
}

 
/********************************************************************************************************************************************************************************
 * Fin del calendario																														*
 ********************************************************************************************************************************************************************************/