(function($){
	
	$.fn.dateComboFields = function(options){
		
		var opts = $.extend({}, $.fn.dateComboFields.defaults, options);

		return this.each(function() {
			
			$this = $(this);
		    var o = $.meta ? $.extend({}, opts, $this.data()) : opts;			
			
		    $(o.inDate).datepicker({
				dateFormat: 'yy-mm-dd',
				defaultDate: o.defaultDateIn,
				minDate: o.minDateIn, 
				maxDate: o.maxDateIn,
				showOn: 'both',
				buttonImage: o.buttonImage, 
				buttonImageOnly: true,	
	
				onSelect:function(date) {
					updateSel(o.inDate,date);	
					updateCheckout(o.inDate,o.outDate);													
				}			
			});
			
			$(opts.outDate).datepicker({
				dateFormat: 'yy-mm-dd',
				defaultDate: o.defaultDateOut,
				minDate: o.minDateOut, 
				maxDate: o.maxDateOut,
				showOn: 'both',
				buttonImage: o.buttonImage, 
				buttonImageOnly: true,
	
				onSelect:function(date) {
					updateSel(o.outDate,date);															
				}
			});	
	
			$(o.inYearMonth).change(function(){
				updatePicker(o.inDate);
				updateDaySelect(o.inDate);
				updateCheckout(o.inDate,o.outDate);
			});
			
			$(o.inDay).change(function(){
				updatePicker(o.inDate);
			});
			
			$(o.outYearMonth).change(function(){
				updatePicker(o.outDate);
				updateDaySelect(o.outDate);
			});
			
			$(o.outDay).change(function(){
				updatePicker(o.outDate);
			});
	
			updateDaySelect(o.inDate);
			updateDaySelect(o.outDate);
		});
	};

	
	$.fn.dateComboFields.defaults = {
		inDate: ".checkin",
		inDay: ".checkinDay",
		inYearMonth: ".checkinYearMonth",
		outDate: ".checkout",
		outDay: ".checkoutDay",
		outYearMonth: ".checkoutYearMonth",
		defaultDateIn: +0,
		minDateIn: +0,
		maxDateIn: '+1Y',
		defaultDateOut: +1,
		minDateOut: +1,
		maxDateOut: '+1Y',
		buttonImage: '/img/calendario.png'
	 };

	
	function updatePicker(pattern) {  
		
		year  =	$(pattern+'YearMonth').val().split('-')[0];
		month = $(pattern+'YearMonth').val().split('-')[1] - 1;
		day   = $(pattern+'Day').val();
			
		maxDay = getMonthMaxDays(year, month+1);
		
		if( day > maxDay){
			day = maxDay;
		}
			
		d = new Date(year, month, day);
		$(pattern).datepicker('setDate', d);
		
		return {};  
	}  
	  	
	var updateSel = function(pattern, date) { 	
	    $(pattern+'YearMonth').val(date.substring(0, 7));  
	    $(pattern+'Day').val(date.substring(8, 10));  
	    updateDaySelect(pattern); 
	}

	var updateCheckout = function (patternA, patternB) { 
		
		var checkin = $(patternA); 
		var checkout = $(patternB); 

		if( checkin.datepicker( 'getDate' ) >= checkout.datepicker( 'getDate' ) ){

			var minDate = new Date(checkin.datepicker( 'getDate' ));
			minDate.setDate( minDate.getDate() + 1 );	

			checkout.datepicker('setDate', minDate);

			updateSel(patternB,$.datepicker.formatDate('yy-mm-dd', minDate));
			updateDaySelect(patternB);
		}      
	}

	var updateDaySelect = function(pattern){
		
		d = absMinDate.split('-');
		var minDate = new Date(d[0],d[1]-1,d[2]);
		d = absMaxDate.split('-');
		var maxDate = new Date(d[0],d[1]-1,d[2]);
		
		var currentDate = $(pattern).datepicker('getDate');
		var year = currentDate.getFullYear();
		var month= currentDate.getMonth();
		var day  = currentDate.getDate();
		
		var myDate = new Date(year, month, 1);	

		var maxDay = getMonthMaxDays(year, month+1);
		var daysName = $.datepicker.regional[lang]['dayNamesShort'];

		
		
		// check fine mese & selezione
		if( day > maxDay ){
			index = maxDay;
			updatePicker(pattern);
		} else {	
			index = day;		
		}
		
		var options = '';
		for(i=1; i<=maxDay; i++){
			myDate.setDate(i);
			val = i < 10 ? '0'+i : i;	
			
			disabled = "";
			if( myDate < minDate || myDate > maxDate){	
				disabled = "disabled='disabled'";
			}
			
			selected = "";
			if(i==index){
				selected="selected='selected'";
			}
			
			options+= "<option value='"+val+"' "+disabled+" "+selected+">" + daysName[myDate.getDay()] + " " + i+"</option>";
		}	
		
		$(pattern+'Day').empty().html(options);
	}
	
	function getMonthMaxDays(year, month){
		var myDate = new Date(year, month, 0);	 
		return myDate.getDate();
	}
	
})(jQuery);



function print_r(ob){
	var str;
	for(a in ob){
		str+= a + ": " + ob[a] + "\n";
	}

	$('body').append('<pre>' + str + '</pre>');
}

function validateFormHotels(){

	var form = $(this);
	
	removeError(form);
	
	var minutes = 1000*60;
	var hours = minutes*60;
	var days = hours*24;
			
	var search_txt = jQuery.trim($('#search_txt', form).attr('value'));
	
	if( search_txt.length  < 3 ){
		showError("#search_txt", txtBadCity, txtBadTitle, form);
		return false;		
	}

	var checkin = $("#checkin", form).datepicker( 'getDate' );
	var checkout = $("#checkout", form).datepicker( 'getDate' );

	if( checkin == null ){ 
		showError("#checkinDay, #checkinYearMonth",txtFalseCheckin,txtBadTitle, form);
		return false;	
	}

	if( checkout == null ){ 
		showError("#checkoutDay, #checkoutYearMonth",txtFalseCheckout,txtBadTitle, form);
		return false;	
	}

	officeoffset = 840;
	
	visitortime = new Date();
	visitoroffset = visitortime.getTimezoneOffset();
	if(visitoroffset < 0){
		visitoroffset = Math.abs(visitoroffset) + 720;
	} else {
		visitoroffset = 720 - visitoroffset;
	}

	diff = officeoffset - visitoroffset;
	officetime = new Date();
	officetime.setTime(Number(visitortime) + (diff * 60000));

	now = new Date();
	now.setHours(0);
	now.setMinutes(0);
	now.setSeconds(0);
	now.setMilliseconds(0);

	//Checkin maggiore o uguale a oggi
	if( checkin.getTime() < now.getTime() ) {
		showError("#checkinDay, #checkinYearMonth,",txtBadCheckIn,txtBadTitle, form);
		return false;
	}
	
	var leadtime = $("input[name='leadtime']", form);

	if( leadtime.val() != "undefined" ){
		if( leadtime.val() > ( checkin.getTime() - now.getTime() ) / days ){
			txtError = txtLeadTime1+" "+leadtime.val()+" "+txtLeadTime2;
			showError("",txtError,txtBadTitle, form);
			return false;
		}
	}
	
	//Checkin dopo le 18 di oggi
	if( checkin.getTime() == now.getTime() ) {
		if( officetime.getHours() >= 17 ){
			showError("#checkinDay, #checkinYearMonth, #checkoutDay, #checkoutYearMonth",txtSameDayError,txtBadTitle, form);
			return false;
		}
	}	
	
	//Checkin anteriore a checkout
	if( checkin.getTime() > checkout.getTime() ) {
			showError("#checkoutDay, #checkoutYearMonth",txtBadCheckOut,txtBadTitle, form);
			return false;
	}
	
	//Checkin diverso da checkout
	if( checkin.getTime() == checkout.getTime() ) {
		showError("#checkinDay, #checkinYearMonth, #checkoutDay, #checkoutYearMonth",txtBadCheckInOut,txtBadTitle, form);
		return false;
	}

	//Intervallo max per le query
	if(Math.abs( checkin.getTime() - checkout.getTime() ) / days >= 30) {
		showError("#checkinDay, #checkinYearMonth, #checkoutDay, #checkoutYearMonth",txtBadInterval,txtBadTitle, form);
		return false;
	}
	
	//alert($.datepicker.formatDate('yymmdd', checkin));
	//alert($.datepicker.formatDate('yymmdd', checkout));
	//return false;
	
	$("#checkin", form).attr('value', $.datepicker.formatDate('yymmdd', checkin));
	$("#checkout", form).attr('value', $.datepicker.formatDate('yymmdd', checkout));
	
	
	return true;
}

function validateFormAuto(){

	var form = $(this);	
	
	removeError(form);
	
	var country = $('#country', form);
	
	if( isNaN( parseInt(country.val())) ){
		showError(country, txtBadCity, txtBadTitle, form);
		return false;		
	}
	
	var puCity_id = $('#puCity_id', form);
		
	if( isNaN( parseInt(puCity_id.val())) ){			
		showError(puCity_id, txtBadCity, txtBadTitle, form);
		return false;		
	}
			
	var doCity_id = $('#doCity_id', form);
	
	if( isNaN( parseInt(doCity_id.val())) ){
		showError(doCity_id, txtBadCity, txtBadTitle, form);
		return false;		
	}
	
	var pickup = $("#pickup", form).datepicker( 'getDate' );
	var dropoff = $("#dropoff", form).datepicker( 'getDate' );

	if( pickup == null ){ 
		showError("#pickupDay, #pickupYearMonth",txtFalseCheckin,txtBadTitle, form);
		return false;	
	}

	if( dropoff == null ){ 
		showError("#dropoffDay, #dropoffYearMonth",txtFalseCheckout,txtBadTitle, form);
		return false;	
	}
	
	now = new Date();
	now.setHours(0);
	now.setMinutes(0);
	now.setSeconds(0);
	now.setMilliseconds(0);
	//Checkin maggiore o uguale a oggi
	if( pickup.getTime() < now.getTime() ) {
		showError("#pickupDay, #pickupYearMonth,",txtBadCheckIn,txtBadTitle, form);
		return false;
	}
	
	//Checkin anteriore a checkout
	if( pickup.getTime() >= dropoff.getTime() ) {
			showError("#dropoffDay, #dropoffYearMonth",txtBadCheckOut,txtBadTitle, form);
			return false;
	}
	     
	$("#giornoarr", form).attr('value', $.datepicker.formatDate('dd', pickup));
	$("#meseannoarr", form).attr('value', $.datepicker.formatDate('yymm', pickup));
	$("#giornopar", form).attr('value', $.datepicker.formatDate('dd', dropoff));
	$("#meseannopar", form).attr('value', $.datepicker.formatDate('yymm', dropoff));
	
	return true;
}

function showError(error_fields,error_txt,error_title,form){	
		
	var div = $("#formError");
	$('h3', div).text(error_title);
	$('p', div).text(error_txt);	
	div.show();
	
	$(error_fields).addClass("error");
		
}

function removeError(form){
	$("#formError").hide();
	$(".error", form).removeClass("error");	
}


function getXml(cmd, id, callBack){

	bodyContent = $.ajax({
	      url: "/proxy.php",
	      global: false,
	      type: "POST",
	      data: ({Command : cmd, Data: id, Lang: lang}),
	      dataType: "xml",
	      success: function(xml){

				switch(callBack){
					case 'appendAll':
						appendAll(xml);
						break;
					case 'appendPU':
						appendPU(xml);
						break;
					case 'appendDO':
						appendDO(xml);
						break;
				}

	      }
	  }).responseText;
	
}

function appendAll(xml){
	appendPU(xml);
	appendDO(xml);
}

function appendPU(xml){

	var selectPU = $("#puCity_id");
	selectPU.empty();

	$("AdvanceQuote1_cmbPUCity option", xml).each(function(){
		selectPU.append("<option value='"+$(this).attr('value')+"'>"+$(this).text()+"</option>");
	});
}

function appendDO(xml){

	var selectDO = $("#doCity_id");

	selectDO.empty();

	var first = $("AdvanceQuote1_cmbPUCity option:first", xml);

	if(first.attr('value') < 0){
		first.remove();
	}

	
	var options = $("AdvanceQuote1_cmbPUCity option", xml);

	options.each(function(){		
		selectDO.append("<option value='"+$(this).attr('value')+"'>"+$(this).text()+"</option>");		
	});	
}