$(document).ready(function(){
	/* Start Rental Page Location Drop Downs */
	var stateIdCodeArray = new Array();
	var countryCodeStateNumberArray = new Array();
	
	var errMsg = '';
	 
	stateIdCodeArray[1] = 'Austria';
	stateIdCodeArray[2] = 'Belgium';
	stateIdCodeArray[3] = 'Switzerland';
	stateIdCodeArray[4] = 'Germany';
	stateIdCodeArray[5] = 'Spain';
	stateIdCodeArray[6] = 'France';
	stateIdCodeArray[7] = 'United Kingdom';
	stateIdCodeArray[8] = 'Italy';
	stateIdCodeArray[9] = 'Luxembourg';
	stateIdCodeArray[10] = 'Netherlands';
	stateIdCodeArray[11] = 'Norway';
	stateIdCodeArray[12] = 'Sweden';
	stateIdCodeArray[13] = 'AL';
	stateIdCodeArray[14] = 'AK';
	stateIdCodeArray[15] = 'AZ';
	stateIdCodeArray[16] = 'AR';
	stateIdCodeArray[17] = 'CA';
	stateIdCodeArray[18] = 'CO';
	stateIdCodeArray[19] = 'CT';
	stateIdCodeArray[20] = 'FL';
	stateIdCodeArray[21] = 'GA';
	stateIdCodeArray[22] = 'HI';
	stateIdCodeArray[23] = 'ID';
	stateIdCodeArray[24] = 'IL';
	stateIdCodeArray[25] = 'IN';
	stateIdCodeArray[26] = 'IA';
	stateIdCodeArray[27] = 'KY';
	stateIdCodeArray[28] = 'LA';
	stateIdCodeArray[29] = 'ME';
	stateIdCodeArray[30] = 'MD';
	stateIdCodeArray[31] = 'MA';
	stateIdCodeArray[32] = 'MI';
	stateIdCodeArray[33] = 'MN';
	stateIdCodeArray[34] = 'MO';
	stateIdCodeArray[35] = 'MT';
	stateIdCodeArray[36] = 'NE';
	stateIdCodeArray[37] = 'NV';
	stateIdCodeArray[38] = 'NH';
	stateIdCodeArray[39] = 'NJ';
	stateIdCodeArray[40] = 'NM';
	stateIdCodeArray[41] = 'NY';
	stateIdCodeArray[42] = 'NC';
	stateIdCodeArray[43] = 'OH';
	stateIdCodeArray[44] = 'OR';
	stateIdCodeArray[45] = 'PA';
	stateIdCodeArray[46] = 'SC';
	stateIdCodeArray[47] = 'SD';
	stateIdCodeArray[48] = 'TN';
	stateIdCodeArray[49] = 'TX';
	stateIdCodeArray[50] = 'UT';
	stateIdCodeArray[51] = 'VT';
	stateIdCodeArray[52] = 'VA';
	stateIdCodeArray[53] = 'WA';
	stateIdCodeArray[54] = 'WI';
	stateIdCodeArray[55] = 'South Africa';
		 
	countryCodeStateNumberArray['AUT'] = 1;
	countryCodeStateNumberArray['BEL'] = 2;
	countryCodeStateNumberArray['CHE'] = 3;
	countryCodeStateNumberArray['DEU'] = 4;
	countryCodeStateNumberArray['ESP'] = 5;
	countryCodeStateNumberArray['FRA'] = 6;
	countryCodeStateNumberArray['GBR'] = 7;
	countryCodeStateNumberArray['ITA'] = 8;
	countryCodeStateNumberArray['LUX'] = 9;
	countryCodeStateNumberArray['NLD'] = 10;
	countryCodeStateNumberArray['NOR'] = 11;
	countryCodeStateNumberArray['SWE'] = 12;
	countryCodeStateNumberArray['ZAF'] = 55;
	
	var formURL = {'state':'http://go.mappoint.net/HarleyDavidson/PrxResults.aspx?LL=en-US&AD4=USA&brand=hrl&rentalsearch=1&FC=HDRentals&GSTATE=',
		       'dealer':'http://go.mappoint.net/HarleyDavidson/PrxResults.aspx?LL=en-US&brand=hrl&rentalsearch=1&FC=HDRentals&HDid=',
		       'operator':'https://websolutions.tsd-inc.com/Harley-Davidson/frmRateQuote.aspx?locale=en_US&bmLocale=en_US',
		       'europeoperator':'https://www2.rentcentric.com/Client4317/webcustomer/harleydavidson.aspx?locale=en_US&bmLocale=en_US'};
	
	// Make sure and reset rental country
	$('#rentalCountry').attr('selectedIndex', 0);
	
	// Make sure and reset rental state
	$('#rentalState').attr('selectedIndex', 0);
	
	updateList('stateSelector','List');
	$('#stateDropDown').show();
	$('#stateSelectorLoading').hide();
	$('#stateSelector').show();
		
	$('#rentalCountry').change(function(){
		checkThis($(this).attr("id"));
	});
	
	$('#rentalState').change(function(){
		checkThis($(this).attr("id"));
	});
	
	$('#rentalOperator').change(function(){
		checkThis($(this).attr("id"));
	});
	
	// might need to bind
	$('#rentalPickupDate').change(function(){
		checkPickupdateList();
	});
	
	// might need to bind
	$('#rentalDropoffDate').change(function(){
		checkDropoffDate();
	});
	
	$('#rentform').submit(function(e){
		checkForm(e);
	});
	
	$('#rentalPickupDate').datepicker({
		showOn: 'both',
		buttonImage: '/en_US/Media/images/Content/Pictorial/Try_a_Bike/icon_calendar.png',
		buttonImageOnly: true,
		minDate: 1
	});
	
	$('#rentalDropoffDate').datepicker({
		showOn: 'both',
		buttonImage: '/en_US/Media/images/Content/Pictorial/Try_a_Bike/icon_calendar.png',
		buttonImageOnly: true,
		minDate: 1
	});
	
	$("#format").change(function() { $('#rentalPickupDate').datepicker('option', {dateFormat: $(this).val()}); });

	// Set location of map of locations link based on state selected
	$('#map-of-locations').click(function(e){
		doMapLocations();
		e.preventDefault();
	});
	
	function doLinkRent() {
		var countrySelected = $('#rentalCountry').val();
		
		var url = '';
		var opts = 'width=620,height=500,scrollbars=yes,resizable=yes,toolbar=no,location=no,menubar=no,directories=no,status=no';
		
		url = 'http://go.mappoint.net/HarleyDavidson/Geocode.aspx?LL=en-US&AD4=' + countrySelected + '&brand=hrl&rentalsearch=1&FC=HDRentals';
		window.open(url,'',opts);
	}
	
	function doMapLocations() {
		
		var countrySelected = $('#rentalCountry').val();
		
		var stateSelected = $('#rentalState').val();
		var stateCode = stateIdCodeArray[stateSelected];
		
		var url = '';
		var opts = 'width=620,height=500,scrollbars=yes,resizable=yes,toolbar=no,location=no,menubar=no,directories=no,status=no';

		if (stateSelected) {			
			url = formURL.state + stateCode;
			window.open(url,'',opts);
		}
		else {
			url = 'http://go.mappoint.net/HarleyDavidson/Geocode.aspx?LL=en-US&AD4=' + countrySelected + '&brand=hrl&rentalsearch=1&FC=HDRentals';
			window.open(url,'',opts);
		}
	}
	
	function checkThis(id) {
		
		var val = (id != '') ? $('#'+id).val() : '';
		
		$('#btn_find').css("margin-top", "0px");
		
		if (id == 'rentalCountry') {
			
			if (val != 'USA') {
				var isoCode = '' + val;
				var stateNumber = countryCodeStateNumberArray[isoCode];
				
				//States may have been selected before, so reset with defaults.
				updateList('stateSelector','List');
				updateList('rentalSelector',stateNumber);
				
				$('#rentalStateContainer').hide();
				$('#stateSelector').hide();
				
				if(stateNumber == undefined) {
					//Countries not in europe
					$('#rentalContainer').hide();
					
					$('#rentalSelectorContainer').hide();
					$('#rentalSelector').hide();
					
					$('#rentalSelectorLoading').show();

					$('#_searchtype').val('other');	
					return;
				}
				
				$('#rentalContainer').show();
				
				$('#rentalSelectorContainer').show();
				$('#rentalSelector').show();
				
				$('#rentalSelectorLoading').hide();
				
				$('#rentalDateContainer').hide();
				
				checkThis('rentalOperator');
			}
			else {
				
				//States may have been selected before, so reset with defaults.
				updateList('stateSelector','List');
				
				$('#rentalStateContainer').show();
				$('#stateSelector').show();
				
				$('#rentalSelectorContainer').hide();
				$('#rentalSelector').hide();
				
				checkThis('rentalState');	
			}
		}

		if (id == 'rentalState') { 
			if (!val) {
				$('#rentalContainer').hide();
				
				$('#rentalSelectorContainer').hide();
				$('#rentalSelector').hide();
				
				$('#rentalSelectorLoading').show();
				
				$('#_searchtype').val('usa');		
				return;		
			}
			$('#_searchtype').val('state');
			
			$('#rentalDateContainer').hide();
			
			$('#rentalContainer').show();
			
			$('#rentalSelectorLoading').hide();
			$('#rentalSelectorContainer').show();
			$('#rentalSelector').show();
			
			updateList('rentalSelector',$('#rentalState').val());
			
			checkThis('rentalOperator');
		}
		if (id == 'rentalOperator') {
			if (!val || val.indexOf(":") < 0) {
				$('#rentalDateContainer').hide();
				$('#_searchtype').val('state');
				$('#_isvalid').val(1); // skip checking pick-up/drop-off dates
				return;			
			}
			$('#_searchtype').val('operator');
			$('#rentalDateContainer').show();
			$('#btn_find').css("margin-top", "27px");
		}
	}	
	
	function validateRentalDates(d1,d2) {
		if (!d1) return false;
		var errMsg = '';
		var d  = jQuery.trim($('#'+d1).val());
		var dt = adjustYear(new Date(d));
		var td = new Date();
		$('#rentalDateError').html(errMsg);
		//$('#'+d1+'Warning').hide();
		//$('#'+d1+"WarningPast").hide();
		//if ($('#'+d1+"WarningPast2"))
		//	$('#'+d1+"WarningPast2").hide();
		if (d.length != 10 || dt == "NaN" || !validateDateFormat(d)) {
			//$('#'+d1+'Warning').show();
			errMsg += '<div>Please enter dates in mm/dd/yyyy.</div>';
			//$('#rentalDateError').append(errMsg);
			return false;
		}
		if (dt != "NaN" && validateDateFormat(d)) {
			if (dt < td) {
				errMsg += '<div>Reservations must be made a day (24 hours) in advance. Please enter a new date.</div>';
				//$('#rentalDateError').append(errMsg);
				return false;
			}			
		}	
		if (d2) {
			if (validateRentalDates(d2)) {
				var dt2 = adjustYear(new Date(jQuery.trim($('#'+d2).val())));
				if (dt < dt2) {
					errMsg += '<div>Drop off date must be later than pick up date.</div>';
					//$('#rentalDateError').append(errMsg);
					return false;
				}
			} else
				return false;
		}
		return true;
	}

	function updateList(id, l) {
		$('#'+id).html(eval('cfg.state'+l));
		
		$("#rentalState").unbind("change");
		$('#rentalState').change(function(){
			checkThis($(this).attr("id"));
		});
		
		$("#rentalOperator").unbind("change");
		$('#rentalOperator').change(function(){
			checkThis($(this).attr("id"));
		});
	}
	
	function checkPickupdateList() {
		var valid = ($('#_searchtype').val() != 'operator' || validateRentalDates('rentalPickupDate')) ? 1 : 0;
		$('#_isvalid').val(valid);
		
		if (valid != "1") {
			$('#rentalPickupDate').addClass('border-error');
		}
	}
	
	function checkDropoffDate() {
		var valid = ($('#_searchtype').val() != 'operator' || validateRentalDates('rentalDropoffDate', 'rentalPickupDate')) ? 1 : 0;
		$('#_isvalid').val(valid);
		
		if (valid != "1") {
			$('#rentalDropoffDate').addClass('border-error');
		}
	}
	
	function checkForm(e) {
		
		var errMsg = '';
		$('#error').html('');
		$('#error').hide();
		
		$('#rentalState').removeClass('border-error');
		$('#rentalOperator').removeClass('border-error');
		$('#rentalPickupDate').removeClass('border-error');
		$('#rentalDropoffDate').removeClass('border-error');
		
		e.preventDefault();
		checkPickupdateList();
		checkDropoffDate();	
		
		if ($('#rentalState').val() == '' && $('#rentalState').is(':visible')) {
			$('#rentalState').addClass('border-error');
			errMsg += '<div>Please select a State to continue.</div>';
		}
		
		if ($('#rentalOperator').val() == '' && $('#rentalOperator').is(':visible')) {
			$('#rentalOperator').addClass('border-error');
			errMsg += '<div>Please select an Authorized Rental Location to continue.</div>';
		}
		
		if ($('#_isvalid').val() != "1" && $('#rentalPickupDate').is(':visible')) {
			errMsg += '<div>Please enter a date(s) in this format: mm/dd/yyyy.</div>';
		}
		
		if ($('#rentalPickupDate').is(':visible') && (new Date($('#rentalPickupDate').val() + ' ' + $('#rentalPickupTime').val()) > new Date($('#rentalDropoffDate').val() + ' ' + $('#rentalDropoffTime').val()))) {
			errMsg = '<div>Drop off date and time must be later than pick up date and time.</div>';
		}
		
		//if ($('#_isvalid').val() != "1" ||) return false;
		
		if (errMsg != '') {
			$('#error').html(errMsg);
			$('#error').show();
			errMsg = '';
			return false;
		}
		else {
			$('#error').html('');
			$('#error').hide();
			errMsg = '';
		};
		
		var dealer_string = $('#rentalOperator').val();
		dealer_string = dealer_string.replace("1:", "");
		
		// Hit Box tracking
		_hbPageView('Rent+a+Bike', '/Get+On+A+Bike/Try+a+Bike/Rent+a+Bike/Find/' + stateIdCodeArray[$('#rentalState').val()] + '/' + dealer_string + '/');
		
		var opts = 'width=620,height=500,scrollbars=yes,resizable=yes,toolbar=no,location=no,menubar=no,directories=no,status=no';
		
		if ($('#_searchtype').val() == 'usa' || $('#_searchtype').val() == 'other')
			doLinkRent();				
		
		
		if 	($('#_searchtype').val() == 'state') {
			
			var d = $('#rentalOperator').val();			
			var stateSelected = $('#rentalState').val();
			
			if (!stateSelected) {
				if (d) {
				  url = formURL.dealer +  d;
				  o = window.open(url,'',opts);	
				} else {
				  doLinkRent();
				}
				return;
			}
			
			var stateCode = stateIdCodeArray[stateSelected];
			var url = formURL.state + stateCode;
			
			if (d) url = formURL.dealer +  d;
			o = window.open(url,'',opts);
		}		
		if 	($('#_searchtype').val() == 'operator') {
 
			var oid = $('#rentalOperator').val().substring(2);
			oid = oid * 29;
			
			var pt = $('#rentalPickupDate').val() + ' ' + $('#rentalPickupTime').val();
			var dt = $('#rentalDropoffDate').val() + ' ' + $('#rentalDropoffTime').val();
			
			var countrySelected = $('#rentalCountry').val();
			var countryIsoCode = '' + countrySelected;
			var europeCountry = countryCodeStateNumberArray[countryIsoCode];
			if(europeCountry != undefined) {
			   o = window.open(formURL.europeoperator+'&PickupLoc='+oid+'&PickupDateTime='+pt+'&ReturnDateTime='+dt,'','');
			} else {
			   o = window.open(formURL.operator+'&PickupLoc='+oid+'&PickupDateTime='+pt+'&ReturnDateTime='+dt,'','');
			}
		}
	}
	
	function adjustYear(date){
		if (parseInt(date.getFullYear(),10) < 2000){
			date.setFullYear(2000 + date.getYear());
			return date;
		}else{
			return date;
		}
	}
	
	function validateDateFormat( inDate ) {
		if (inDate.length==10){
			var objRegExp = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/;
		}else if (inDate.length==7){
			var objRegExp = /^\d{1,2}\w{3}\d{2}$/;
		}else{
			var objRegExp = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{2}$/;
		}
		if(!objRegExp.test(inDate)){
			return false; 
		}else{
			// Normalize date
			if (inDate.length==7){
				var month = 0;
				var sMonth = inDate.substring(2,5);
				for(i = 1; i <= 12; i++){
					if (sMonth == CALMON[i]) month = i+1;
				}
				if (month <=9) month = "0" + month;
				inDate = month + "/" + inDate.substring(0,2) + "/" + inDate.substring(5,7);
			}

			var sSeparator = findSeperator(inDate);
			var arrayDate = inDate.split(sSeparator);
			var arrayLookup = { '01' : 31,'03' : 31, '04' : 30,'05' : 31,'06' : 30,'07' : 31, '08' : 31,'09' : 30,'10' : 31,'11' : 30,'12' : 31}
			var intDay = parseInt(arrayDate[1],10);

			if(arrayLookup[padAge(arrayDate[0])] != null) {
				if(intDay <= arrayLookup[padAge(arrayDate[0])] && intDay != 0)
					return true; 
			}
			var intMonth = parseInt(arrayDate[0],10);
			if (intMonth == 2) { 
			   var intYear = parseInt(arrayDate[2],10);
			   if( ((intYear % 4 == 0 && intDay <= 29) || (intYear % 4 != 0 && intDay <=28)) && intDay !=0)
				  return true; 
			}
		}
	  	return false; 
	}

	function findSeperator(inDate){
		var i;
		var retVal = "";

		for (i = 0; i < inDate.length; i++){
			if (isNaN(inDate.substr(i,1))){
				retVal = inDate.substr(i,1);
			}
		}
		return retVal;
	}
	
	function padAge(age){
		if (age.length < 2 && age != 0){
			age = '0' + age;
		}
		return age;
	}
	/* End Rental Page Location Drop Downs */	
});