var mouseClickSubmit = false;
var formSubmitted = false;

$(document).ready(function(){
        
    $('#s').locationinput('s', userLocations, {
            onLocationFound: function(latitude, longitude) {
                updateMap('s', latitude, longitude);
            },
			onEmpty: function() {
        	    clearMap(defaultLocation.lat, defaultLocation.lng, 's');
			},
			onError: function() {
        	    clearMap(defaultLocation.lat, defaultLocation.lng, 's');
			},
            loc_values: start_locations,
            autocompleteOptions: { width: $('#s').width() + parseInt($('#s').css("padding-right"))  + parseInt($('#s').css("padding-left")) }
    }).focus(function() {
			// simulate a keydown event
			var e = jQuery.Event('keydown'); e.keyCode = 40; $(this).trigger(e);
	});

    $('#e').locationinput('e', userLocations, {
            onLocationFound: function(latitude, longitude) {
                updateMap('e', latitude, longitude);
            },
			onEmpty: function() {
        	    clearMap(defaultLocation.lat, defaultLocation.lng, 'e');
			},
			onError: function() {
        	    clearMap(defaultLocation.lat, defaultLocation.lng, 'e');
			},
            loc_values: end_locations,
            autocompleteOptions: { width: $('#e').width() + parseInt($('#e').css("padding-right"))  + parseInt($('#e').css("padding-left")) }            
    }).focus(function() {
			// simulate a keydown event
			var e = jQuery.Event('keydown'); e.keyCode = 40; $(this).trigger(e);
	});
    
    // Select driver/passenger -> show/hide vehicles
    $("#who :radio").click(function () {
        if ($(this).val() == "need") {
            $("#vehicle").hide();
            $("[name=vehicle]:radio").attr("checked", false);
            $("#zipcar-warning").hide();
        } else {
            $("#vehicle").show();
        }
    });
    
    $("#unselect_vehicle").click(function () {
    	$("[name=vehicle]:radio").attr("checked", false);
        $("#zipcar-warning").hide();
    });
    
    $('#depart-date').datepicker();
    $('#return-date').datepicker();

    $('#start_calendar').click( function() {
		if (!$('#date').attr('disabled')) {
            $('#depart-date').focus();
		}
    });

    $('#end_calendar').click( function() {
		if (!$('#return-date').attr('disabled')) {
            $('#return-date').focus();
		}
    });

    $('#depart-date').change( function() {
        $startDate = $('#depart-date').attr('value');
        $startDate = $startDate.substr( 6 ) + '/' + $startDate.substr( 0, 5 );
        $endDate = $('#return-date').attr('value');
        $endDate = $endDate.substr( 6 ) + '/' + $endDate.substr( 0, 5 );

        if ( $startDate > $endDate )
            $('#return-date').attr('value', $('#depart-date').attr('value') );
        
    });

	$('#return-date').change(function(){
		$startDate = $('#depart-date').val();
		$startDate = $startDate.substr(6) + '/' + $startDate.substr(0, 5);
		$endDate = $(this).val();
		$endDate = $endDate.substr(6) + '/' + $endDate.substr(0, 5);            

		if ($startDate > $endDate) {
			$('#depart-date').val($(this).val());
		}
	});
    
    $("[name=vehicle]:radio").change(function () {
        if ($("#zipcar").is(":checked")) {
            $("#zipcar-warning").show();
        } else {
            $("#zipcar-warning").hide();
        }
    });
    
    $('#add_ride').submit(function() {
            if (mouseClickSubmit == true) {
                return validatedRide();
            } else {
                return false;
            }
    });
    
    $('#form-addride-button, #form-save-button').keypress(function(e) {
        // if the user pressed return or space, while the focus was on
        // the addride-button or form-save-button
        if ( e.keyCode == 13 || e.keyCode == 32 || e.which == 13 || e.which == 32 )
            mouseClickSubmit = true;
    });

    $('#form-addride-button, #form-save-button').mousedown(function() {
        mouseClickSubmit = true;
    });
    
    if ( google.setOnLoadCallback ) {
    	google.setOnLoadCallback(initialize);
	}
    
    $('#back').click(function() {
            toggleReturnTrip();
    });
    
    // Enable/Disable trusted partners checkbox
    $('#post_to_platform_public').click(function() {
            // Enabled -> Disabled
            $('#include_trusted_partners').attr('disabled', 'disabled');
            $('#include_trusted_partners').removeAttr('checked');
    });
    $('#post_to_platform_private').click(function() {
            // Enabled -> Disabled
            $('#include_trusted_partners').removeAttr('disabled');
    });
    
    // attach facebox onload
    $('a[rel*=facebox]').facebox();
    
    //************ Events code *************//
    $('#event').change(function() {
        setEventLocation($(this).val());
    });


});


// Call this function when the page has been loaded
function initialize() {
    if ($('#map').length > 0) {
        map = new google.maps.Map2(document.getElementById("map"));
        map.setCenter(new google.maps.LatLng(defaultLocation.lat, defaultLocation.lng), 13);
        // Give it the maps.google.com experience.
        map.setUIToDefault();
        map.disableScrollWheelZoom();
    
        if ($("#add_ride input[name='s_lat']").val() && $("#add_ride input[name='s_lng']").val()) {
            updateMap('s', $("#add_ride input[name='s_lat']").val(), $("#add_ride input[name='s_lng']").val());
        }
        
        if ($("#add_ride input[name='e_lat']").val() && $("#add_ride input[name='e_lng']").val()) {
            updateMap('e', $("#add_ride input[name='e_lat']").val(), $("#add_ride input[name='e_lng']").val());
        }
        
        if (events.length > 0) {
            if ( typeof eventID != 'undefined' )
                setEventLocation(eventID);
            else
                setEventLocation(events[0].id);
        }
    }

	// step 1 -> 2 -> 3 ... back or Next Step
	$('form#add_ride button[type="button"]').click(function(){
		var parent = $(this).closest('fieldset');
		if ( validatedStep(parent.attr('id')) ) {
			parent.hide();
			parent.next().fadeIn();
		}
	});

	$('form#add_ride a.back').click(function(){
		var parent = $(this).closest('fieldset');
		parent.hide();
		parent.prev().fadeIn();
	});

	$('form#add_ride input[name="type"]').click(function(){
		if ('one-time' == $(this).val()) {
			$('#there_repeating').hide();
			$('#there_one_time').show();
			$('#back_repeating').hide();
			$('#back_one_time').show();
			$('label[for="advanced"]').addClass('invisible');
			$('#one_time_cost_frequency').show();
			$('#repeating_cost_frequency').hide();
		} else if ('repeating' == $(this).val()) {
			$('#there_one_time').hide();
			$('#there_repeating').show();
			$('#back_one_time').hide();
			$('#back_repeating').show();
			$('label[for="advanced"]').removeClass('invisible');
			$('#one_time_cost_frequency').hide();
			$('#repeating_cost_frequency').show();
		}
	});

	var advanceLabel = 'Show Advanced Scheduling';
	var simpleLabel = 'Hide Advanced Scheduling';

	$('label[for="advanced"] a').click(function(){
		if ( $(this).text() == advanceLabel ) {
			$(this).text(simpleLabel);
			$("#advanced").attr("value", "1");
		}
		else {
			$(this).text(advanceLabel);
			$("#advanced").attr("value", "0");
		}

		setFlexCheckboxes();

		$('.timetable select').each(function(){
			if ($(this).hasClass('invisible')) {
				// Invisible -> Visible
				$(this).removeClass('invisible');
			} else {
				// Visible -> Invisible
				$(this).addClass($(this).attr('default'));
			}
		});
	});

	$(':checkbox[id^="there"],:checkbox[id^="back"]').click(function() {
        var parts = $(this).attr('id').split('_');
		if (1 == $('#advanced').val()) { 
        	disableTimeFlex(parts[1], parts[0], $(this));
		} else {
			setFlexCheckboxes();
		}
	});

    toggleReturnTrip();
}

function toggleReturnTrip() {
	$returnDate = $('#return-date');
	$returnDateCalendar = $('#end_calendar img');
	$backTime = $('#back_time');
	$backFlex = $('#back_flex');

	if ($('#back').attr('checked')) {
		// Disabled -> Enabled
		$returnDate.removeClass('disabled').removeAttr('disabled');
		$returnDateCalendar.removeClass('disabled');
		$backTime.removeAttr('disabled');
		$backFlex.removeAttr('disabled');
	} else {
		// Enabled -> Disabled
		$returnDate.addClass('disabled').attr('disabled', 'disabled');
		$returnDateCalendar.addClass('disabled');
		$backTime.attr('disabled', 'disabled');
		$backFlex.attr('disabled', 'disabled');
	}
}

function disableTimeFlex(id, trip, element){
    var fields = $("#" + trip + "_time_" + id + "," + "#" + trip + "_flex_" + id);
    if ($(element).is(":checked")) {
        fields.removeAttr("disabled");
    } else {
        fields.attr("disabled", true);
    }
}

function setFlexCheckboxes() {
	$(':checkbox[id^="there"],:checkbox[id^="back"]').each(function() {
        var parts = $(this).attr('id').split('_');

		disableTimeFlex(parts[1], parts[0], $(this));

		if (0 == $('#advanced').val() && $(this).is(':checked')) {
			$('#' + parts[0] + '_time_1' + ',' + '#' + parts[0] + '_flex_1').removeAttr('disabled');
		}
	});
}

function setEventLocation(eventId) {
    var lat;
    var lng;
    for(var i=0; i<events.length; i++) {
        if ( events[i].id == eventId) {
            lat = events[i].lat;
            lng = events[i].lng;
            $('#add_ride input[name="e_location_key"]').val(events[i].location);
            $('#event_id').val(events[i].id);
            //$('#event_title').val(events[i].name);
            $('#event_url').val(events[i].show_url);

			if ( events[i].location_only == 0 ) {
            	$('#depart-date').val(events[i].date);
            	$('#there_time').val(events[i].time);
            	$('#return-date').val(events[i].returnDate);
            	$('#back_time').val(events[i].returnTime);
			}

        }
    }
    updateMap('e', lat, lng);
}

function processRepeatingRide(direction) {
	var days = '';
	for (var i=1; i<=7; i++) {
		key = direction + '_' + i;
		if ( $('#' + key).attr('checked') ) {
			if ( days != '' ) {
				days += ',';
			}
			days += i;
		}
	}
	return days;
}

function validatedStep($step) {
	var errors = [];
	switch($step) {
	case 'step_1':
		errors = validatedStep1();
		break;
	case 'step_2':
		errors = validatedStep2();
		break;
	case 'step_3':
		errors = validatedStep3();
		break;
	}
	if ( errors.length ) {

		var s = "<h2>Please correct the following:<br/></h2><div class='notice'><ul>";
		for(var err in errors) {
			s += "<li><p>" + errors[err] + "</p></li>";
		}
		s += "</ul></div>";
		jQuery.facebox(s);
		return false;
	}
	else {
		return true;
	}
}

function validatedStep1() {

	var errors = new Array;
	if ( !$('input[name=who]:checked').val() ) {
		errors.push('You must select Offer/Need/Either/Cab.');
	}

	if (!$('#add_ride input[name="s_lat"]').val() && !$('#add_ride input[name="s_location_key"]').val()) {
		errors.push('Your starting location could not be found.');
	}

	if (!$('#add_ride input[name="e_lat"]').val() && !$('#add_ride input[name="e_location_key"]').val()) {
		errors.push('Your ending location could not be found.');
	}
	return errors;
}

function validatedStep3() {
	var errors = new Array;
	var cost = $('#cost').val();
	if ( cost ) {
		cost = jQuery.trim(cost).replace('/\$/', '');
		if ( isNaN(cost) ) {
			errors.push('Price must be numeric.');
		}
	}
	return errors;
}

function validatedStep2() {

	var errors = new Array;
	var there_type = 'one-time';
	var back_type = 'one-time';
	var ride_type = $('input[name=type]:checked').val();

	if ( ride_type == 'repeating' ) {
		there_type = processRepeatingRide('there');
		back_type = processRepeatingRide('back');

		if ( there_type == '' ) {
			if ( back_type == '' ) {
				errors.push('You have selected a repeating trip, but you did not specify which days you take this trip.');
			}
			else {
				errors.push('You have selected a repeating trip, but you did not specify departure days');
			}
		}
	}

	if (( ride_type == 'one-time' ) && !$('#depart-date').val() ) {
		errors.push('You need to provide a start date for one-time ride.');
	}

	if ( $('#back').attr('checked') ) {
		var return_date = 0, depart_date = 0;

		if ( $('#return-date').val() ) {
 			return_date = strtotime($('#return-date').val());
		}

		if ( $('#depart-date').val() ) {
 			depart_date = strtotime($('#depart-date').val());
		}

		if ((return_date < depart_date) && ride_type == 'one-time') {
			errors.push('Your return date must be after your start date.');
		}
		else if ( ! $('#back_time').val() ) {
			errors.push('Return time required');
		}
	}
	
	if ( $('#there_time').val()) {
		if ( !validTimeSpec($('#there_time').val()) ) {
			$('#there_time').val('');
			errors.push('Departure time improperly formatted.  Correct format: \'9:00am\'');
		}

	} else {
		errors.push('Departure time required');
	}

	if ($('#back_time').val()) {
		if ( !validTimeSpec($('#back_time').val()) ) {
			$('#back_time').val('');
			errors.push('Return time improperly formatted.  Correct format: \'9:00am\'');
		} 
	}
	return errors;
}

function validatedRide() {

	var errors = [];

	errors = errors.concat(validatedStep1());
	errors = errors.concat(validatedStep2());
	errors = errors.concat(validatedStep3());

	if ( errors.length ) {

		var s = "<h2>Ooops, something went wrong:<br/></h2><div class='notice'><ul>";
		for(var err in errors) {
			s += "<li><p>" + errors[err] + "</p></li>";
		}
		s += "</ul></div>";
		jQuery.facebox(s);
		return false;
	}
	else {
		return true;
	}
	
}

