function in_array (needle, haystack, argStrict) {
    // http://kevin.vanzonneveld.net
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: vlado houba
    // +   input by: Billy
    // +   bugfixed by: Brett Zamir (http://brett-zamir.me)
    // *     example 1: in_array('van', ['Kevin', 'van', 'Zonneveld']);
    // *     returns 1: true
    // *     example 2: in_array('vlado', {0: 'Kevin', vlado: 'van', 1: 'Zonneveld'});
    // *     returns 2: false
    // *     example 3: in_array(1, ['1', '2', '3']);
    // *     returns 3: true
    // *     example 3: in_array(1, ['1', '2', '3'], false);
    // *     returns 3: true
    // *     example 4: in_array(1, ['1', '2', '3'], true);
    // *     returns 4: false
    var key = '',
        strict = !! argStrict;

    if (strict) {
        for (key in haystack) {
            if (haystack[key] === needle) {
                return true;
            }
        }
    } else {
        for (key in haystack) {
            if (haystack[key] == needle) {
                return true;
            }
        }
    }

    return false;
}

function getSeason(date) {
	
	if(!date) return false;
	var foo = date.split('/');
	var year = foo[2];
	
	date = strtotime(date);
	
	var seasons = [
		{
			'name': 'midpeak',
			'dates': [
				{'start': strtotime('may 1 ' + year), 'end': strtotime('june 1 ' + year)},
				{'start': strtotime('september 1 ' + year), 'end': strtotime('october 1 ' + year)}
			]
		},
		
		{
			'name': 'highpeak',
			'dates': [
				{'start': strtotime('june 1 ' + year), 'end': strtotime('september 1 ' + year)}
			]
		}
		
	];

	for(var i in seasons) {
		for(var n in seasons[i].dates) {
			var d = seasons[i].dates[n];
			//console.log('date=' + date + '> d.start=' + d.start + ' && date=' + date + '< d.end=' + d.end);
			if(date > d.start && date < d.end) {
				//console.log(seasons[i].name);
				return seasons[i].name;
			}
		}
	}
	//console.log('offpeak');
	return 'offpeak';
}

function getDiscount(days) {
	if(days < 7) return '1';
	else if(days > 6 && days < 14) return '2';
	else if(days > 13) return '3';
}

function getdays(time1, day1, time2, day2) {
	var days = Math.ceil((strtotime(day2 + ' ' + time2) - strtotime(day1 + ' ' + time1))/(24*60*60),0);
	
	if(days == 0) days = 1;
	
	return days;
}

function getdays_dt(dt1, dt2) {
	if(dt1 && dt2) {
		var days = (strtotime(dt2) - strtotime(dt1))/(24*60*60);
	} else {
		var days = 0;
	}
	
	if(days == 0) days = 1;
	
	return days;
}

function mf(nStr) {
	nStr += '';
	x = nStr.split('.');
	x1 = x[0];
	x2 = x.length > 1 ? '.' + x[1] : '';
	var rgx = /(\d+)(\d{3})/;
	while (rgx.test(x1)) {
		x1 = x1.replace(rgx, '$1' + ',' + '$2');
	}
	return x1 + x2;
}

function compile_offers(price, start_ts, end_ts, category_id, car_id) {
	var o = _OFFERS;
	for(var i in o) {
		if(start_ts > o[i].start_ts && start_ts < o[i].end_ts && ( in_array(category_id, o[i].categories) || in_array(car_id, o[i].cars) )) {
			if(o[i].price_override) {
				price = o[i].price_override;
				break;
			}
			else if(o[i].discount) {
				price *= (100 - o[i].discount) / 100;
			}
		}
	}
	return price;
}

function check_free_gps(start_ts, end_ts, category_id, car_id) {
	var o = _OFFERS;
	for(var i in o) {
		if(start_ts > o[i].start_ts && start_ts < o[i].end_ts && ( in_array(category_id, o[i].categories) || in_array(car_id, o[i].cars) )) {
			if(o[i].free_gps) {
				return true;
			}
		}
	}
	return false;
}

function get_datetime(d, t) {
	if(d && t) {
		return strtotime(d + ' ' + t);
	} else {
		return 0;
	}
}

function _checkForm() {
	if($('#id_pickup_location').val() != $('#id_return_location').val()) {
		$('#extra_location_switch').attr('checked', 'checked');
	} else {
		$('#extra_location_switch').attr('checked', '');
	}

	//var cat = $("#car_category").val();
	
	//var category_id = $("#category_id").val();
	/*
	var car_id = $("#car_id").val();
	
	var location_switch = $("#extra_location_switch").is(':checked');
	var driver = $("#extra_driver").is(':checked');
	var gps = $("#extra_gps").is(':checked');	
	var extra_baby = $("#extra_baby").is(':checked');
	var extra_insurance = $("#extra_insurance").is(':checked');
	var extra_gravel = $("#extra_gravel").is(':checked');
	var pickup = $("#extra_pickup").is(':checked');

	var pickup_date = $("#id_pickup_date").val();
	var return_date = $("#id_return_date").val();
	
	var pickup_time = $("#id_pickup_time").val();
	var return_time = $("#id_return_time").val();
	
	var currency = $("#id_currency").val();
	*/
	
	
	if($("#id_pickup_date").val() && $("#id_return_date").val() && $("#id_pickup_time").val() && $("#id_return_time").val()) {
		$('#mathbox').load('/get-price.php', {
			car_id: $("#car_id").val(),
		
			extra_location_switch: $("#extra_location_switch").is(':checked'),
			extra_driver: $("#extra_driver").is(':checked'),
			extra_gps: $("#extra_gps").is(':checked'),	
			extra_baby: $("#extra_baby").is(':checked'),
			extra_insurance: $("#extra_insurance").is(':checked'),
			extra_gravel: $("#extra_gravel").is(':checked'),
			extra_pickup: $("#extra_pickup").is(':checked'),

			pickup_date: $("#id_pickup_date").val(),
			return_date: $("#id_return_date").val(),
			
			pickup_time: $("#id_pickup_time").val(),
			return_time: $("#id_return_time").val(),
			
			currency: $("#id_currency").val()
		});
	}
	
	/*
	var pickup_dt = get_datetime(pickup_date, pickup_time);
	var return_dt = get_datetime(return_date, return_time);
	
	var days = getdays(pickup_time, pickup_date, return_time, return_date);
	
	var free_gps = check_free_gps(pickup_dt, return_dt, category_id, car_id);
	
	if(days == 0) days = 1;
	
	if(currency != 'ISK') {
		for(i in currency_json) {
			if(currency_json[i].short == currency) {
				var divider = currency_json[i].sell;
			}
		}
	} else {
		var divider = 1;
	}
	
	var rent_price_per_day = Math.ceil(($('#prices').find('.' + getSeason(pickup_date) + getDiscount(days)).val()) / divider);
	rent_price = compile_offers(rent_price_per_day, pickup_dt, return_dt, category_id, car_id)
	
	rent_price = rent_price * days;
	
	var location_switch_p = Math.ceil(4900 / divider);
	
	var driver_p = Math.ceil(2500 / divider);
	if(free_gps) {
		var gps_p = 0;
		$('#extra_gps').parent().find('.price').hide();
		$('#extra_gps').parent().find('.is_free').show();
	} else {
		var gps_p = Math.ceil(1600 / divider);
		$('#extra_gps').parent().find('.price').show();
		$('#extra_gps').parent().find('.is_free').hide();
	}
	var baby_p = Math.ceil(3000 / divider);
	var gravel_p = Math.ceil(800 / divider);
	var pickup_p = Math.ceil(3000 / divider); // was 4900
	
	if(cat == 'small' || cat == 'medium') {
		var insurance_p = 1400;
	} else {
		var insurance_p = 2100;
	}
	
	insurance_p = Math.ceil(insurance_p / divider);
	
	var string = '';
	var total = 0;
	
	if(days && pickup_date && return_date) string += '<div><span>Days:</span>' + days + '</div>';
	
	if(rent_price && days && pickup_date && return_date) {string += '<div><span>Rent:</span>' + mf(rent_price) + ' ' + currency + '</div>'; total += rent_price}
	if(rent_price_per_day) {string += '<div><span>Per day:</span>' + mf(rent_price_per_day) + ' ' + currency + '</div>';}
	
	if(location_switch) {string += '<div><span>Location Switch:</span>' + mf(location_switch_p) + ' ' + currency + '</div>'; total += location_switch_p}
	if(driver) {string += '<div><span>Driver:</span>' + mf(driver_p) + ' ' + currency + '</div>'; total += driver_p}
	if(gps && days && pickup_date && return_date) {string += '<div><span>GPS:</span>' + mf(gps_p * days) + ' ' + currency + '</div>'; total += (gps_p * days)}
	if(extra_baby) {string += '<div><span>Baby seat:</span>' + mf(baby_p) + ' ' + currency + '</div>'; total += baby_p}
	if(extra_insurance && days) {string += '<div><span>Insurance:</span>' + mf(insurance_p * days) + ' ' + currency + '</div>'; total += (insurance_p * days)}
	if(extra_gravel && days) {string += '<div><span>Gravel protection:</span>' + mf(gravel_p * days) + ' ' + currency + '</div>'; total += (gravel_p * days)}
	if(pickup) {string += '<div><span>Airport Pickup:</span>' + mf(pickup_p) + ' ' + currency + '</div>'; total += pickup_p}
	
	if(total) {		
		string += '<div class="total"><span>VAT:</span>' + mf(Math.ceil(0.245 * total)) + ' ' + currency + '</div>';
		string += '<div class="total"><span>Total (VAT included):</span>' + mf(total) + ' ' + currency + '</div>';
	}
	
	
	$('#mathbox').html(string);
	$('#mathbox_input').html(string);
	*/
}

function top_check_dates() {
	var dt1 = $('#top_pickup_datetime').val();
	var dt2 = $('#top_dropoff_datetime').val();
	
	if(getdays_dt(dt1, dt2) > 0) {
		$('#top_pickup_datetime, #top_dropoff_datetime').css('background-color', 'white');
		return true;
	} else {
		$('#top_pickup_datetime, #top_dropoff_datetime').css('background-color', '#ffa79f');
		return false;
	}
}


var in_progress = 0;
function ajax_get_prices() {
	var dt_pickup = $('#top_pickup_datetime').val();
	var dt_dropoff = $('#top_dropoff_datetime').val();
	
	if(dt_pickup && dt_dropoff) {
		in_progress++;
		$('#cars-select-container .overlay').stop().show();
		
		$.getJSON('/includes/car-select.php?action=reserve&ajax=true&pickup_datetime=' + dt_pickup + '&dropoff_datetime=' + dt_dropoff + '&top_car_type=all', function(data) {
			var i = 0;
			$('#cars-select .price').each(function() {
				$(this).html(data[i]);
				i++;
			});
		}).complete(function() {
			in_progress--;
			if(in_progress == 0) {
				$('#cars-select-container .overlay').stop().fadeOut('fast');
			}
		});
	}
}


var now = new Date();
now.setMinutes(Math.ceil(now.getMinutes()/10)*10);

$(document).ready(function() {
	$("#top_submit").hover(function() {
		$(this).parent().css('background-position', '0 -37px');
	}, function() {
		$(this).parent().css('background-position', '0 0');
	});

	$('#extra_location_switch').click(function() {
		return false;
	});

	var dates = $('#subpage-template #id_pickup_date, #subpage-template #id_return_date').datepicker({
		onSelect: function(selectedDate) {
			var option = this.id == "id_pickup_date" ? "minDate" : "maxDate";
			var instance = $(this).data("datepicker");
			var date = $.datepicker.parseDate(instance.settings.dateFormat || $.datepicker._defaults.dateFormat, selectedDate, instance.settings);
			dates.not(this).datepicker("option", option, date);
		},
		onClose: function(dateText, inst) {
			_checkForm();
		}
	});
	
	//top_check_dates();
	ajax_get_prices();
	
	/*
	$('#rent-template input[type=text]').blur(function() {
		var dt_pickup = $('#top_pickup_datetime').val();
		var dt_dropoff = $('#top_dropoff_datetime').val();
		
		if(getdays_dt(dt_pickup, dt_dropoff) > 0 && dt_pickup && dt_dropoff) {
			in_progress++;
			$('#cars-select-container .overlay').stop().show();
			
			$.getJSON('/procar/includes/car-select.php?action=reserve&ajax=true&pickup_datetime=' + dt_pickup + '&dropoff_datetime=' + dt_dropoff + '&top_car_type=all', function(data) {
				var i = 0;
				$('#cars-select .price').each(function() {
					$(this).html(data[i]);
					i++;
				});
			}).complete(function() {
				in_progress--;
				if(in_progress == 0) {
					$('#cars-select-container .overlay').stop().fadeOut('fast');
				}
			});
		}
	});*/
	
	/*
	$('#top_pickup_datetime, #top_dropoff_datetime').datetimepicker({
		stepMinute: 10,
		minDate: now,
		onSelect: function(selectedDate) {			
			top_check_dates();
		}
	});*/
	
	
	// pickup
	$('#top_pickup_datetime, #top_dropoff_datetime').focus(function() {
		$('#top_pickup_datetime_dd, #top_dropoff_datetime_dd, #foo_overlay').show();
	});
	
	$('#top_pickup_datetime_dd #id_pickup_date').datepicker({
		minDate: now,
		onSelect: function(selectedDate) {
			var date = $(this).val();
			var time = $('#top_pickup_datetime_dd #id_pickup_time').val();
			$('#top_pickup_datetime').val(date + ' ' + time);
			$('#top_dropoff_datetime_dd #id_return_date').datepicker('option', {minDate: selectedDate});
			
			$('#top_dropoff_datetime_dd #id_return_time').change(); // trigger the other box.
		}
	});
	
	$('#top_pickup_datetime_dd #id_pickup_time').change(function() {
		var date = $('#top_pickup_datetime_dd #id_pickup_date').val();
		var time = $(this).val();
		$('#top_pickup_datetime').val(date + ' ' + time);
	});
	
	
	// dropoff:
	$('#top_dropoff_datetime_dd #id_return_date').datepicker({
		minDate: now,
		onSelect: function(selectedDate) {
			var date = $(this).val();
			var time = $('#top_dropoff_datetime_dd #id_return_time').val();
			$('#top_dropoff_datetime').val(date + ' ' + time);
		}
	});
	
	$('#top_dropoff_datetime_dd #id_return_time').change(function() {
		var date = $('#top_dropoff_datetime_dd #id_return_date').val();
		var time = $(this).val();
		$('#top_dropoff_datetime').val(date + ' ' + time);
	});
	
	$(document).keyup(function(e) {
		var foo_visible = $('#foo_overlay').css('display') == 'block';
		if(foo_visible && e.keyCode == 27 || e.keyCode == 13) {
			$('#foo_overlay').click();
			return false;
		}
	});
	
	$('#top_dropoff_datetime_dd .done, #top_pickup_datetime_dd .done, #foo_overlay').click(function() {
		$('#top_dropoff_datetime_dd, #top_pickup_datetime_dd, #foo_overlay').hide();
		
		$('#rent-template').each(function() { // If rent template
			ajax_get_prices();
		});
	});
	
	//validate:
	$('#top-get-quote').submit(function() {
		return top_check_dates();
	});
	
	$('#top_submit').click(function () {
		$('#top-get-quote').submit();
	});
	
	
	$('select, input').bind('change select',function(){
		_checkForm();
	});
	
	
	
	$(window).scroll(function () {
		var top = $(window).scrollTop() - 144;
		if(top >= 0) {
			$('#rent-template #top-get-quote').css('top', top);
		} else {
			$('#rent-template #top-get-quote').css('top', 0);
		}
	});
	
	$('#rent-template #top_car_type').change(function() {
		var selected = $(this).find('option:selected').val();
		
		$('#cars-select .category').each(function() {
			if($(this).hasClass(selected) || selected == 'all') {
				$(this).css('height', 'auto'); // ie7 fix:
				$(this).find('*').show();
			} else {
				$(this).css('height', '1px');
				$(this).find('*').hide(); // ie7 fix:
			}
		});
		
		// ie7 fix:
		$(window).scroll();
		setTimeout('$(window).scroll();', 100);
	}).change(); // init for ie7
	
	$('#cars-select .category_head').click(function() {
		var selected = $(this).text().toLowerCase();
	
		$('#rent-template #top_car_type option').each(function() {
			if($(this).val() == selected) {
				$(this).attr('selected', true);
			} else {
				$(this).attr('selected', false);
			}
		});
		
		$('#rent-template #top_car_type').change();
	});
	
	$('#select-category div').click(function() {
		$('#select-category div').removeClass('selected');
		$('#cars-select .category').hide();
		$('#cars-select .category.' + $(this).attr('class')).show();
		$(this).addClass('selected');
	});
	
	
	$('#id_pickup_location').change(function(){
		if($(this).val() == 'Keflavik Airport') {
			$('#extra_pickup').attr('checked', 'checked');
		}
	});
	
	$('#fp-ads .slides') 
		.after('<div class="nav">')	
		.cycle({ 
			fx:     'fade',
			speed:  'fast',
			timeout: 6000,
			pager:  '#fp-ads .nav'
	});
	/*
	$('#menu > li').hover(
		function() {
			$(this).find('ul:first').attr('style', '');
			$(this).find('ul:first').stop().slideDown(50);
		},
		function() {
			$(this).find('ul:first').stop().slideUp(100, function() {
				$(this).attr('style', '');
			});
		}
	);
	*/
	
	/*
	$('#menu li').hover(
		function() {
			$(this).find('ul:first').attr('style', '');
			$(this).find('ul:first').stop().fadeIn(50);
		},
		function() {
			$(this).find('ul:first').stop().fadeOut(100, function() {
				//$(this).attr('style', '');
			});
		}
	);
	*/
	
	$('#menu li').hover(
		function() {
			$(this).find('ul:first').show();
		},
		function() {
			$(this).find('ul:first').hide();
		}
	);
	
	
	var saveme;
	
	$('#cars-slider .car').hover(
		function() {
			$(this).find('.info .model').hide();
			$(this).find('.info .price').show();
		},
		function() {
			$(this).find('.info .model').show();
			$(this).find('.info .price').hide();
		}
	);
	

});
