		String.prototype.trim = function() {
			return this.replace(/^\s+|\s+$/g,"");
		}

		Date.prototype.add = function(unit, value)
		{

			unit = unit.replace( /s$/ ).toLowerCase();

			switch ( unit ) {
				case "day":
					this.setTime( this.getTime() + value * 86400000 );
				break;

				default:
					this.setTime( this.getTime() + value );
				break;
			}

			return this;
		};

		Date.prototype.subtract = function(unit, value)
		{
			unit = unit.replace( /s$/ ).toLowerCase();

			switch ( unit )
			{
				case "day":
					this.setTime( this.getTime() - value * 86400000 );
				break;

				default:
					this.setTime( this.getTime() - value );
				break;
			}
		};

		//SOS: -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
		//start date the day the office starts operating again
		//stop date the date that the office stops operating...
		var dt_start_date	= new Date();
		var dt_stop_date	= new Date();

		//virtual consts
		var const_min_day_period		= parseInt(2, 10);
		var const_int_one_day			= 1000*60*60*24;

		if (new Date().add("day", 1).getTime() < dt_start_date.getTime() &&
			new Date().add("day", 1).getTime() > dt_stop_date.getTime()){
			var const_start_day			= 	dt_start_date;
		}else{
			var const_start_day			= 	new Date().add("day", 1);
		}

		var form_enabled = true;

		$(function() {
			var oldval = $("#startdate").attr('value').trim();
			
			$("#startdate, #enddate").datepicker(
				{
					beforeShow: customRange,
					onClose: valiDates,
					beforeShowDay: closedDays,

					showOn: "both",
					numberOfMonths: 1,
					buttonImageOnly: true,
					buttonText: '',
					dateFormat: 'dd/mm/yy',
					duration: 'fast',
					showButtonPanel: true
				}
			);

			if (oldval != ''){
				$("#startdate").datepicker( "setDate", oldval )
			}else{
				$("#startdate").datepicker( "setDate", const_start_day);
			}

			valiDates();

			$("#imgCalStart").click(function(){
				$("#startdate").datepicker("show");
			});
			$("#imgCalEnd").click(function(){
				$("#enddate").datepicker("show");
			});

			$("#appointmentForm").submit(function() {
				//date validation time...
				form_enabled = true;
				
				var dt_tmp1 = new Date($("#startdate").datepicker("getDate"));
				var dt_tmp2 = new Date($("#enddate").datepicker("getDate"));
				
				var total_days = parseInt((dt_tmp2.getTime() - dt_tmp1.getTime()) / const_int_one_day, 10);
				var i = 0;
				var res = false;
				var d = dt_tmp1.getTime();
				for (i = 0; i <= total_days; i++) {
					thadate = new Date(d);
					res = closedDays(thadate)[0];
					if (res == false) {
						form_enabled = false;
						break;
					}
					d += const_int_one_day;
				}
				
				if (form_enabled) {
					$("#Pickmonth").attr('value',	dt_tmp1.getMonth());
					$("#Pickday").attr('value', 	dt_tmp1.getDate());
					$("#Pickyear").attr('value',	dt_tmp1.getFullYear());
					$("#Returnmonth").attr('value', dt_tmp2.getMonth());
					$("#Returnday").attr('value',	dt_tmp2.getDate());
					$("#Returnyear").attr('value',	dt_tmp2.getFullYear());
				} else {
					alert("The dates on the pale blue background are deactivated. During those dates, there is no car availability or the agency remains closed.\n\nPlease select new dates.");
					return false;
				}
			})
		});

		var cDays = [];

		function closedDays(date)
		{
			for (i = 0; i < cDays.length; i++) {
				if (date.getFullYear() == cDays[i][0] && date.getMonth() == cDays[i][1] - 1 && date.getDate() == cDays[i][2]) {
					return [false, 'day_disabled_css'];
				}
			}
			return [true, ''];
		}

		var curr_selected_date_id = null;

		function valiDates(dDate)
		{
			var dt_tmp1 = new Date($("#startdate").datepicker("getDate"));
			var dt_tmp2 = new Date($("#enddate").datepicker("getDate"));

			if (dt_tmp1 != null && dt_tmp2 != null )
			{
				if ( dt_tmp1.getTime() != 0 && dt_tmp2.getTime() != 0)
				{
					var total_days = parseInt((dt_tmp2.getTime() - dt_tmp1.getTime()) / const_int_one_day, 10);
					$("#total_days_to_rent").html(total_days);

					if (curr_selected_date_id == "startdate")
					{
						//if
						//return date is after pickup day
						//and their difference is greater or eq that the min day rental period
						//all is fine...
						if ((dt_tmp1 < dt_tmp2) && (total_days >= const_min_day_period)) {
							return;
						}

						//else
						//must fix return date
						//so, get start date and add "min day rental period" days to it
						dt_tmp1.add("day", const_min_day_period);
						$("#enddate").datepicker("setDate", dt_tmp1);
						valiDates(null);
					}
					else
					{
						if (dt_tmp1 > dt_tmp2) {
							dt_tmp1.add("day", const_min_day_period);
							$("#enddate").datepicker("setDate", dt_tmp1);
						}
					}
				}else{
					if(dt_tmp1.getTime() != 0 && dt_tmp2.getTime() == 0){
						dt_tmp1.add("day", const_min_day_period);
						$("#enddate").datepicker("setDate", dt_tmp1);
						valiDates(null);
					}
				}
			}
		}

		function customRange(input)
		{
			var dateMin = const_start_day;

			curr_selected_date_id = input.id;
			if (curr_selected_date_id == "startdate")
			{}
			else if (curr_selected_date_id == "enddate")
			{
					if ($("#startdate").datepicker("getDate") != null)
					{
							var dt_tmp = new Date($("#startdate").datepicker("getDate"));
							dt_tmp.add("day", const_min_day_period);
							dateMin = dt_tmp;
					}
					else
					{
							var dt_tmp = new Date();
							dt_tmp.add("day", const_min_day_period);
							dateMin = dt_tmp;
					}
			}

			return {
				minDate: dateMin,
				maxDate: null
			};
		}

