function errorFunction(response, status) {
    alert("Sorry, we are unable to process your request.\nPlease try again.");
    window.location.reload();
}


function adjustStepsView(step1Active) {
    if( !step1Active) {
        $('#step1 input').attr('disabled', 'true');
        $('#step1 select').attr('disabled', 'true');
        $('#step1 input').attr('disabled', 'true');
        $('#step1 select').attr('disabled', 'true');
        $('#dealerQuoteForm').removeClass('disabled');
        $('#step2 input').removeAttr('disabled');
        $('#step2 select').removeAttr('disabled');
        $('#step2 textarea').removeAttr('disabled');
        $('#step3 input').removeAttr('disabled');
        $('.bottom-part-disabled').addClass('bottom-part');
        $('.bottom-part').removeClass('bottom-part-disabled');
        $('.bottom-part-main').addClass('bottom-part-main-disabled');
        $('.bottom-part-main').removeClass('bottom-part-main');
        $('.step-content-disabled').addClass('step-content-enabled');
        $('.step-content-disabled').removeClass('step-content-disabled');
        $('.step-content-main').addClass('step-content-main-disabled');
        $('.step-content-main').removeClass('step-content-main');
        $('.step1_header').addClass('step1_header_disabled');
        $('.step1_header').removeClass('step1_header');
        $('.step2_header_disabled').addClass('step2_header_enabled');
        $('.step2_header_disabled').removeClass('step2_header_disabled');
        $('.step3_header_disabled').addClass('step3_header_enabled');
        $('.step3_header_disabled').removeClass('step3_header_disabled');
        
    } else {
        $('#step1 input').removeAttr('disabled');
        $('#step1 select').removeAttr('disabled');
        $('#dealerQuoteForm').addClass('disabled');
        $('#step2 input').attr('disabled', 'true');
        $('#step2 select').attr('disabled', 'true');
        $('#step2 textarea').attr('disabled', 'true');
        $('#step3 input').attr('disabled', 'true');
        $('.bottom-part').addClass('bottom-part-disabled');
        $('.bottom-part').removeClass('bottom-part');
        $('.bottom-part-main-disabled').addClass('bottom-part-main');
        $('.bottom-part-main-disabled').removeClass('bottom-part-main-disabled');
        $('.bottom-part').addClass('bottom-part-disabled');
        $('.bottom-part').removeClass('bottom-part');
        $('.step-content-enabled').addClass('step-content-disabled');
        $('.step-content-enabled').removeClass('step-content-enabled');
        $('.step-content-main-disabled').addClass('step-content-main');
        $('.step-content-main-disabled').removeClass('step-content-main-disabled');
        $('.step1_header_disabled').addClass('step1_header');
        $('.step1_header_disabled').removeClass('step1_header_disabled');
        $('.step2_header_enabled').addClass('step2_header_disabled');
        $('.step2_header_enabled').removeClass('step2_header_enabled');
        $('.step3_header_enabled').addClass('step3_header_disabled');
        $('.step3_header_enabled').removeClass('step3_header_enabled');
    }
}

function submitDQForm(submitType) {
    //submit types are: Ping (which looks up dealers), Post (which submits the lead) and getdata for filling in select boxes
    if(submitType == "Ping") {

        $('#dealerQuoteForm').ajaxSubmit({

            beforeSubmit: function(){
                $("#pleaseWait").html("Finding dealers. Please wait...");
                $("#pleaseWait").show();
                $("body").css("cursor", "wait");
            },

            success: function(responseText, statusText){
                $("body").css("cursor", "auto");
                $('#pleaseWait').fadeOut("slow");
                $('#dealerQuoteForm').html($('#dealerQuoteForm', responseText).html());
                init();

            },
            error: errorFunction
        });
    } else if(submitType == "getdata") {
        $('#dealerQuoteForm').ajaxSubmit({
            success: function(responseText, statusText){
                data = eval("("+responseText+")");
                var modelSelect = $("#af_model_cc").get(0);
                var yearSelect = $("#af_year_cc").get(0);
                if(data.models) {
                    var models = data.models;
                    yearSelect.options.length = 1;
                    modelSelect.options.length = 1;
                    for(i in models) {
                        if(models.hasOwnProperty(i)) {
                            modelSelect.options[modelSelect.options.length] = new Option(models[i], i);
                        }
                    }
                } else {
                    var years = data.years;
                    for(i in years) {
                        if(years.hasOwnProperty(i)) {
                            yearSelect.options[yearSelect.options.length] = new Option(years[i], years[i]);
                        }
                    }
                }
                validate();
            },
            error: errorFunction
        });
    } else { // Post action
        var isChecked = false;
        $('.dealership').find('input').each(function() {
            if (this.checked == true) {
                isChecked = true;
            }
        });

        if (!isChecked) {
            $('#errorBox').html('Sorry, we were unable to process your price quote request. Please select a dealer.');
            $('#errorBox').show();
            return;
        }
		
        var hasErrors = false;
        var action = $('#hiddenAction').val();
        var postAction = 'Post' === action;
		
		
        var firstName = $('#firstName').get(0);
        if( (firstName.value == firstName.defaultValue && !postAction) || firstName.value.length<3) {
            $('#fname-container').addClass('errorField')
            hasErrors = true;
        } else {
            $('#fname-container').removeClass('errorField')
        }
		
        var lastName = $('#lastName').get(0);
        if( (lastName.value == lastName.defaultValue && !postAction) || lastName.value.length<3) {
            $('#lname-container').addClass('errorField')
            hasErrors = true;
        } else {
            $('#lname-container').removeClass('errorField')
        }
		
        var email = $('#email').get(0);
        if( (email.value == email.defaultValue && !postAction) || !validEmail(email.value)) {
            $('#email-container').addClass('errorField')
            hasErrors = true;
        } else {
            $('#email-container').removeClass('errorField')
        }
		
        var phonePart1 = $('#phonePart1').get(0);
        var phonePart2 = $('#phonePart2').get(0);
        var phonePart3 = $('#phonePart3').get(0);
        if( phonePart1.value.length<3 || phonePart2.value.length<3 || phonePart3.value.length<4) {
            $('#phone-container').addClass('errorField')
            hasErrors = true;
        } else {
            $('#phone-container').removeClass('errorField')
        }
		
        var address = $('#address').get(0);
        var city = $('#city').get(0);
        var state = $('#state').get(0);
        if( (address.value == address.defaultValue && !postAction) || address.value.length<5) {
            $('#address-container').addClass('errorField')
            hasErrors = true;
        } else if( (city.value == city.defaultValue && !postAction) || address.value.length<3) {
            $('#address-container').addClass('errorField')
            hasErrors = true;
        } else if (state.options[0].selected) {
            $('#address-container').addClass('errorField')
            hasErrors = true;
        } else {
            $('#address-container').removeClass('errorField')
        }
		
        if(hasErrors) {
            $('#errorBox').html('Sorry, we were unable to process your price quote request. Please fix the issues highlighted bellow in red and try again.');
            $('#errorBox').show();
            return;
        } else {
            $('#errorBox').hide();
        }
		
        $('#hiddenAction').val('Post');

        $('#dealerQuoteForm').ajaxSubmit({
            beforeSubmit: function(){
                $("#pleaseWait").html("Please Wait...");
                $("#pleaseWait").show();
                $("body").css("cursor", "wait");
                pageTracker._trackEvent("Autobytel Form", "Autobytel Get Dealers Clicked", getFullName());
                $("#get-quote-button-img").attr('src','/images/website/get_quote_button_disabled.gif')
                $("#get-quote-button").unbind("click");
                $("#get-quote-button").css('cursor','wait');
            },
            success: function(responseText, statusText)  {
                // Check if confirm page url is set
                $("body").css("cursor", "auto");
                $('#pleaseWait').fadeOut("slow");
                $('#dealerQuoteForm').html($('#dealerQuoteForm', responseText).html());
                if( !parseInt($('#abtLeadId', responseText).val(),10)) {
                    init();
                }
            },
            error: errorFunction
        });
    }
}

function initEventsTracker() {
    $("#zipCode").blur(function() {
        if($('#zipCode').get(0)) {
            var zipRE=/^\d{5}$/;
            if($('#zipCode').val().search(zipRE) !=-1) {   
                pageTracker._trackEvent("Autobytel Form", "Autobytel Zip Filled", getFullName());
            }
        }
    });

    $("#dealer-quote-content a.trigger").mouseover(function() {
        pageTracker._trackEvent("Autobytel Form", "Autobytel 'How Does This Work' hover", getFullName());
        $("#dealer-quote-content a.trigger").unbind("mouseover");
    });

}

function init(){
    //show the car selector whey change car link is clicked
    var make = $('#make').val();
    if( !make) {
        $('#make-model-selection').css("display","block");
        $('#make-model-current').css("display","none");
        $('#changeCarAndLocation').css("display","none");
    } else {
        $('#changeCarAndLocation').click(function() {
            $('#make-model-selection').toggle();
            $('#make-model-current').toggle();
            var txt = $('#changeCarAndLocation').text();
            var newTxt = 'Cancel' === txt ? 'Change car or location' : 'Cancel'
            $('#changeCarAndLocation a').html(newTxt);
            $('#changeCarAndLocation a').attr('title',newTxt);
            validate();
            adjustStepsView(true);
        });
    }
	
    adjustStepsView($('#disableSteps').val() == 1)
	
    $('#dealerQuoteForm').ajaxForm();

    if($('#hasErrors').val() == 1){
        $('#errorBox').show();
        var eboxTxt = $("#errorBox").text();
        if(eboxTxt.indexOf("There are no dealers available") !== -1) {
            pageTracker._trackEvent("Autobytel Form", "Autobytel No Dealers Found", getFullName());
        } else {
            pageTracker._trackEvent("Autobytel Form", "Autobytel Request Failed", getFullName()+', error='+eboxTxt);
        }
    }
    $('#zipCode').keypress(onlyNumbers);
    $('#phonePart1').keypress(onlyNumbers);
    $('#phonePart2').keypress(onlyNumbers);
    $('#phonePart3').keypress(onlyNumbers);

    $('#zipCode').keyup( function(evt){
        validate();
    });
    $('#zipCode').blur( function(evt){
        validate();
    });

    $('#get-quote-button').click(function () {
        submitDQForm();
    });
    $("#af_make_cc").change(function(){
        $('#hiddenAction').val('getdata');
        $('#make').val(getId($('#af_make_cc option:selected').val()));
        $('#model').val('');
        $("#af_model_cc").get(0).options.length = 1;
        $("#af_year_cc").get(0).options.length = 1;
        submitDQForm('getdata');
    });
    $("#af_model_cc").change(function(){
        $('#hiddenAction').val('getdata');
        $('#make').val(getId($('#af_make_cc option:selected').val()));
        $('#model').val(getId($('#af_model_cc option:selected').val()));
        $("#af_year_cc").get(0).options.length = 1;
        submitDQForm('getdata');
    });
    $("#af_year_cc").change(function(){
        validate();
    });
	
    //check all the dealership checkboxes if select all is hit
    $('#selectAllDealers').click(function() {
        $('#selectAllDealers').each( function() {
            var checked = this.checked;
            $('.dealership').find('input').each(function() {
                this.checked = checked;
            });
        });
    });
	
    var action = $('#hiddenAction').val();
    var postAction = 'Post' === action;
    if(!postAction) {
        $('#firstName').focus(inputFocus);
        $('#firstName').blur(inputBlur);
        $('#lastName').focus(inputFocus);
        $('#lastName').blur(inputBlur);
        $('#email').focus(inputFocus);
        $('#email').blur(inputBlur);
        $('#phone').focus(inputFocus);
        $('#phone').blur(inputBlur);
        $('#address').focus(inputFocus);
        $('#address').blur(inputBlur);
        $('#city').focus(inputFocus);
        $('#city').blur(inputBlur);
    }

    validate();
    initEventsTracker();
}

function inputFocus() {
    if(this.value == this.defaultValue) {
        $('#'+this.id).removeClass('default');
        this.value = '';
    }
}

function inputBlur() {
    if( !this.value.length) {
        $('#'+this.id).addClass('default');
        this.value = this.defaultValue;
    }
}

function validate(){ 
    var passed = true;
    //make sure the car is selected
    var yearSelect = $('#af_year_cc').get(0);
    if( !yearSelect.selectedIndex && $('#make-model-current:hidden').length ) {
        passed = false;
    }
    //make sure we have five digits for zip
    if($('#zipCode').get(0))
    {
        var zipRE=/^\d{5}$/;
        if($('#zipCode').val().search(zipRE)==-1) {
            passed = false;
        }
    }
    //if made it through validation then enable the button
    if(passed && $('#zipCode').attr('disabled') !== true) {
        $('#saveCarAndLocation').attr('src', '/images/website/continue_button.gif');
        $('#saveCarAndLocation').css("cursor", "pointer");
        //changing car. re-ping with updated data for new dealerships
        $('#saveCarAndLocation').unbind("click");
        $('#saveCarAndLocation').click(function () {
            if( $('#make-model-current:hidden').length ) {
                $('#year').val($('#af_year_cc option:selected').val());
                $('#make').val(getSeoName($('#af_make_cc option:selected').val()));
                $('#model').val(getSeoName($('#af_model_cc option:selected').val()));
            } else {
                var zipCode = $('#zipCode').val();
                $('#dealerQuoteForm').get(0).reset();
                $('#zipCode').val(zipCode);
            }
            $('#hiddenAction').val('Ping');
            submitDQForm('Ping');
            pageTracker._trackEvent("Autobytel Form", "Autobytel Continue Clicked", getFullName());
        });
    } else {
        $('#saveCarAndLocation').attr('src', '/images/website/continue_button_disabled.gif');
        $('#saveCarAndLocation').css("cursor", "default");
        $('#saveCarAndLocation').unbind("click");
    }
    return true;
} 

function getSeoName(str) {
    pos = str.indexOf("|");
    if(-1 !== pos) {
        return str.substring(pos+1);
    }
    return str;
}

function getId(str) {
    pos = str.indexOf("|");
    if(-1 !== pos) {
        return str.substring(0,pos);
    }
    return str;
}

function onlyNumbers(evt) {
    var charCd = (evt.which != null) ? evt.which : event.keyCode;
    if (charCd > 31 && (charCd < 48 || charCd > 57)) {
        return false;
    }
    return true;
}

function validEmail(src) {
    var emailReg = "^[\\s]*[\\w-_\.]*[\\w-_\.]\@[\\w]\.+[\\w]+[\\w][\\s]*$";
    var regex = new RegExp(emailReg);
    return regex.test(src);
}

function getFullName() {
    var zipCode = $("#zipCode").val();
    var userData = '';
    if( $("#make-model-fullname").text() && !$("#make-model-fullname:hidden").length) {
        userData = $("#make-model-fullname").text()+', zip='+zipCode;
    } else {
        userData = $('#af_year_cc option:selected').text()+' '+$('#af_make_cc option:selected').text()+' '+$('#af_model_cc option:selected').text()+', zip='+zipCode;
    }
    return userData;
}