// JavaScript Document



 
// check valid days in month
function checkDaysInMonth(start_month, start_day, end_month, end_day, date) { 
	// get days in month and set to last day of month if more than
	
	var smonth = $('#'+start_month).val();
	if (smonth) {
		var daysInMonth = 32 - new Date(smonth.substring(0, 4), smonth.substring(5, 7) - 1, 32).getDate();
		if ($('#'+start_day).val() > daysInMonth) { 			
			$('#'+start_day).val(daysInMonth); 
		}
		
		var daysInlastMonth = $('#'+start_day+' option:last').val();
		// add in options up to 31 and then remove if necessary
		if (daysInMonth > daysInlastMonth) {		
			for (i = 1; i <= daysInMonth - daysInlastMonth; i++)  {				
				var newval = parseInt(daysInlastMonth)+parseInt(i);
				$('#'+start_day).append('<option value="'+newval+'">'+newval+'</option>');
			} 
		}	
		// remove not needed days
		$('#'+start_day+' option:gt(' + (daysInMonth - 1) +')').remove(); 
		
		//alert($('#end_month').val()+'-'+$('#end_day').val());
		// get days in month and set to last day of month if more than
		var emonth = $('#'+end_month).val();
		var daysInMonth = 32 - new Date(emonth.substring(0, 4), emonth.substring(5, 7) - 1, 32).getDate();
		if ($('#'+end_day).val() > daysInMonth) { 
			$('#'+end_day).val(daysInMonth); 
		}
		//alert(daysInMonth);
			  
		var daysInlastMonth = $('#'+end_day+' option:last').val();
		// add in options up to 31 and then remove if necessary
		if (daysInMonth > daysInlastMonth) {		
			for (i = 1; i <= daysInMonth - daysInlastMonth; i++)  {				
				var newval = parseInt(daysInlastMonth)+parseInt(i);
				$('#'+end_day).append('<option value="'+newval+'">'+newval+'</option>');
			} 
		}
		// remove not needed days
		$('#'+end_day+' option:gt(' + (daysInMonth - 1) +')').remove(); 
		
		/* hack for opera which doesn't use days of week
		if (!$.browser.opera)
		{
			// add day names of week
			$('#start_day option').each( 
				function() {
					//alert($(this).text());
					var today = new Date(smonth.substring(0, 4), smonth.substring(5, 7) - 1, $(this).val()).getDay();
					$(this).text($.datepicker.regional[_lang].dayNamesShort[today]+' '+$(this).val().replace(/^0/, ''));
			});
			$('#end_day option').each( 
				function() {
					var today = new Date(emonth.substring(0, 4), emonth.substring(5, 7) - 1, $(this).val()).getDay();
					$(this).text($.datepicker.regional[_lang].dayNamesShort[today]+' '+$(this).val().replace(/^0/, ''));
			});
		}*/		
	}
}


// need one function to use after entry date is set
// another after leaving date is set

function setNightsEntrada() {
	// show nights if salida more than entrada, also update num nights field
	// update nights field using new date value	
	var dFrom = $('#dFrom').val();
	var dTo = $('#dTo').val();
	var entrada = new Date(dFrom.substring(6, 10), parseInt(dFrom.substring(3, 5) - 1), dFrom.substring(0, 2));
	var oldSalida = new Date(dTo.substring(6, 10), parseInt(dTo.substring(3, 5) - 1), dTo.substring(0, 2));
	//alert(dFrom.substring(3, 5));
	// is not ok, set salida to value of old nights	
	if (entrada >= oldSalida)  
	{		
		// if old numnights was zero and entrada still after salida, leave at zero
		if ($('#numnights').val() > 0)
		{
			var numnights = $('#numnights').val();
			var newsalida = new Date(entrada.getTime());		
			newsalida.setDate(newsalida.getDate() + parseInt(numnights));	
			//alert(entrada +'|'+ numnights +'|'+ newsalida);
			// get back in usable format
			var tmpsalida = $.datepicker.formatDate('dd/mm/yy', newsalida);
			
			$('#dTo').val(tmpsalida);
			$('#containerNights').show().css('color', '#000');
			$('#errorMessage').empty();
		}
	} 
	else  // is ok , update nights
	{		
		var numnights = getDaysBetween(entrada, oldSalida);
		$('#nightsDisplay').html(numnights +' ');
		$('#numnights').val(numnights); // update numnights hidden value		
		$('#containerNights').show().css('color', '#000');
		$('#errorMessage').empty();
	}
	
	//highlightDays(); // call last	
}


function setNightsSalida() {
	// show nights if salida more than entrada, also update num nights field
	// update nights field using new date value	
	var dFrom = $('#dFrom').val();
	var dTo = $('#dTo').val();
	var oldEntrada = new Date(dFrom.substring(6, 10), parseInt(dFrom.substring(3, 5) - 1), dFrom.substring(0, 2));
	var salida = new Date(dTo.substring(6, 10), parseInt(dTo.substring(3, 5) - 1), dTo.substring(0, 2));
	//alert(	dTo.substring(6, 10) );
	var numnights = $('#numnights').val();
	
	if (oldEntrada < salida) // is ok, update nights
	{ 		
		var numnights = getDaysBetween(oldEntrada, salida);
		$('#nightsDisplay').html(numnights +' ');
		$('#numnights').val(numnights); // update with new value
		$('#containerNights').show().css('color', '#000');		
	} 
	else // is wrong date, so unset nights
	{ 
		$('#nightsDisplay').html('X ');
		$('#numnights').val('');
		$('#containerNights').show().css('color', '#f00');
	}
	
	//highlightDays(); // call last	
	$('#errorMessage').empty();
}







// extra functions for bookings system
function getDaysBetween(sDate_1, sDate_2)
{	
	var iTime_1 = sDate_1.getTime();
	var iTime_2 = sDate_2.getTime();
	
	var iDiff = Math.abs( iTime_1 - iTime_2 );
	var iDaysBetween = Math.round(iDiff / 86400000);
	//alert(sDate_1 +'|'+ sDate_2 +'|'+ iDaysBetween);
	return iDaysBetween;
}

// end date must be after start
function checkValidDates()
{
	var dFrom = $('#dFrom').val();
	var dTo = $('#dTo').val();
	var entrada = new Date(dFrom.substring(6, 10), parseInt(dFrom.substring(3, 5) - 1), dFrom.substring(0, 2));
	var salida = new Date(dTo.substring(6, 10), parseInt(dTo.substring(3, 5) - 1), dTo.substring(0, 2));
	if (salida <= entrada) {
		return false;
	}
	return true;
}


function highlightDays()
{
	// take off highlighting
	return false;
	var dFrom = $('#dFrom').val();
	var dTo = $('#dTo').val();
	var entrada = new Date(dFrom.substring(6, 10), parseInt(dFrom.substring(3, 5) - 1), dFrom.substring(0, 2));
	var salida = new Date(dTo.substring(6, 10), parseInt(dTo.substring(3, 5) - 1), dTo.substring(0, 2));
	$('#cal').contents().find('td').removeClass('highlightDay');
	$('#cal').contents().find('td').removeClass('highlightDayInactive');
	var seconds = entrada.valueOf();
	var numdays = getDaysBetween(entrada, salida);
	var i = 0;
	if (entrada < salida) {
		while (i <= numdays)
		{
			// add days and format to match id of cell
			var tmpentrada = new Date(seconds + (i * 24*60*60*1000));
			//tmpentrada.setDate(tmpentrada.getDate() + i);	
			//alert(tmpentrada);	
			var tmpdate = $.datepicker.formatDate('yy-mm-dd', tmpentrada);
			//alert(window.frames['cal'].$('#'+tmpdate).attr('class'));
			if ($('#cal').contents().find('#'+tmpdate).attr('class') == 'calInactive') {
				$('#cal').contents().find('#'+tmpdate).addClass('highlightDayInactive');	
			} else {
				$('#cal').contents().find('#'+tmpdate).addClass('highlightDay');
			}
			i=i+1;
	
		}
	}
}



// format an incorrectly formatted date, e.g. 1/7/12 to 01/07/2012
function reformatDate(dateField)
{
	var val = $('#'+dateField).val();
	var update = false;
	if (val && val != 'dd/mm/yyyy')
	{
		var elems = val.split('/');	
		// set defaults	
		var d = elems[0];
		var m = elems[1];
		var y = elems[2];
		if (elems[0].length == 1 && parseInt(elems[0]) > 0)
		{
			var d = '0'+elems[0];
			update = true;
		}
		if (elems[1].length == 1 && parseInt(elems[1]) > 0)
		{
			var m = '0'+elems[1];
			update = true;
		}
		if (elems[2].length == 2)
		{
			y = '20'+elems[2];
			update = true;
		}
		if (update) {
			// update field
			$('#'+dateField).val(d+'/'+m+'/'+y);
		}
	}
}
