		function isArray(array)
		{
			return !(
				!array || 
				(!array.length || array.length == 0) || 
				typeof array !== 'object' || 
				!array.constructor || 
				array.nodeType || 
				array.item 
			);
		}

		function doc_write(out)
		{
			if ( isArray(out) )
			{
				var max = out.length;
				for(var i = 0; i<max; i++){
					document.write( out[i] + '\n');
				}
			}else{
				document.write(out);
			}
		}
		
		function doc_include(out)
		{

			var headID = document.getElementsByTagName("head")[0];
			var max = out.length;
			for(var i = 0; i<max; i++)
			{
				if ( out[i].endsWith('.css') )
				{
					var cssNode = document.createElement('link');
					cssNode.type = 'text/css';
					cssNode.rel = 'stylesheet';
					cssNode.media = 'screen';
					cssNode.href = out[i];
					headID.appendChild(cssNode);			
				}
				else
				{
					var newScript = document.createElement('script');
					newScript.type = 'text/javascript';
					newScript.src = out[i];
					headID.appendChild(newScript);
				}
			}

		}

		String.prototype.endsWith = function(str) {
			return (this.match(str+"$")==str)
		}

		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(1, 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 const_start_day		= 	new Date();
		}

		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,
					buttonImage: '/images/trans.gif',
					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");
			});
			*/

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

				var url = $("#reservationform").attr('action');
				
				url += '&check_in=' + dt_tmp1.getFullYear() + '-' + dt_tmp1.getMonth() + '-' + dt_tmp1.getDate();
				url += '&check_out=' + dt_tmp2.getFullYear() + '-' + dt_tmp2.getMonth() + '-' + dt_tmp2.getDate();
				url += '&adults=' + $("#adults").attr('value');
				url += '&children=' + $("#children").attr('value');
				
				window.open(url);
				
				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
			};
		}

