$(document).ready(init);
var quicksearch = new Array();

function init() {
    if ($('#quicksearch').length > 0) {
        restore_selection();
        $('#quicksearch form select').bind('change', update_selects);
        
    }
    if ($('#CarFactoryForm').length > 0) {
        $('#CarFactoryForm select[@name=make]').bind('change', update_make);
        $('#CarFactoryForm select').bind('change', select_other);
        $('#CarFactoryForm input#form_reset').click(restore_select_other);
        $('#CarFactoryForm form').submit(validate_car_factory);
    }
    
    if ($('div.form_block').length > 0) {
        $('div.form_block h3').curvy("10px tr tl");
        $('div.form_block').curvy("10px br bl");  
    }
    if ($('div#financing_calculator').length > 0) {
        $('div#financing_calculator form').submit(function() {calculate_finance(); return false; });
        $('div#financing_calculator form input').bind('change', calculate_finance);
        $('div#financing_calculator form select').bind('change', calculate_finance);
    }
    if ($('div#leasing_calculator').length > 0) {
        $('div#leasing_calculator form').submit(calculate_lease);
        $('div#leasing_calculator form input').bind('change', calculate_lease);
        $('div#leasing_calculator form select').bind('change', calculate_lease);
    }
    if ($(".ViewingForm form").length > 0) {
        var options = { 
            target: 'div.ViewingForm',
            beforeSubmit: validate_viewing_form,
            success: viewing_form_response,
            url: '?xhr=true'
        }; 
        $(".ViewingForm form").ajaxForm(options);
    }
}
function restore_selection() {
    if (cur_hash = parent.location.hash) {
        selection = cur_hash.split("&");
        for (var i=0; i<selection.length; i=i+1) {
            field=selection[i].split('=');
            name = field[0].split("#").pop()
            switch(name) {
                case "make":
                case "model":
                case "year":
                case "mileage":
                case "vehicleType":
                  set_selection(name, field[1]);
                  break;
                default:
                  break;
            }
        }
        return update_selects();
    }
}
function set_selection(field, value) {
    for (var i=0; i < $("#"+field+" option").length; i=i+1) {
        var row = $("#"+field+" option:eq("+i+")");
        if ($(row).val() == value) {
            $(row).attr("selected", "true"); 
        }
    }
}
function calculate_finance() {
    principal = $('div#financing_calculator input[@name=vehicle_price]').val();
    principal = principal.replace(/,/, "");
    principal = principal * 1;
    
    gst = $('div#financing_calculator input[@name=gst]').val().replace("%", "");
    pst = $('div#financing_calculator select[@name=pst]').val().replace("%", "");
    
    down = $('div#financing_calculator input[@name=down_payment]').val();
    down = down.replace(/,/, "");
    down = down * 1;
    
    interest = $('div#financing_calculator input[@name=interest_rate]').val().replace("%", "") / 1.00;

    term_months = $('div#financing_calculator select[@name=financing_term]').val();
    
    if (principal && interest && term_months) {
        calc_gst = principal * (gst / 100);
        calc_pst = principal * (pst / 100);
        actprincipal = principal + calc_gst + calc_pst - down;
        payments = actprincipal / term_months;
        
        j = interest / 1200;
        j1 = j + 1;
        j2 = Math.pow(j1, -term_months);
        m = actprincipal * (j / (1 - j2));
        m2 = m + "";
        
        monthlyint = m2.split(".");
        m3 = (m * 100) - (monthlyint[0] * 100);
        m3 = m3 + "";
        monthlydec = m3.split(".");
        monthlypayments = monthlyint[0] * 1 + monthlydec[0] * 1;
        $('div#financing_calculator span#monthly_payment').html("$" + monthlyint[0] +"."+ monthlydec[0]);
    }
    return false;
}
function format_money(Amt) {
    //mult by 100, round, drop signs
    var N=Math.abs(Math.round(Amt*100));
    //leading zero's if less than 0.10/1.00
    var S=((N<10)?"00":((N<100)?"0":""))+N;
    S=S.substring(0,(S.length-2)) + "." + S.substring((S.length-2),S.length);
    return S;
}
function calculate_lease() {
    price = $('div#leasing_calculator input[@name=vehicle_price]').val();
    down = $('div#leasing_calculator input[@name=down_payment]').val();
    trade = $('div#leasing_calculator input[@name=tradein_value]').val();
    gst = $('div#leasing_calculator input[@name=gst]').val().replace("%", "");
    pst = $('div#leasing_calculator select[@name=pst]').val().replace("%", "");
    
    calc_gst = price * (gst / 100);
    calc_pst = price * (pst / 100);
    price = parseFloat(price) + calc_gst + calc_pst;
    var bal = price - down - trade;
    if((bal < 0) || isNaN(bal)) {
        bal = 0;   
    }
    var buyout = $('div#leasing_calculator input[@name=lease_buyout]').val();
    var rate = $('div#leasing_calculator input[@name=interest_rate]').val()/1200;
    var term = $('div#leasing_calculator select[@name=lease_term]').val();
    var amort;
    var payment;
    
    if(rate == 0) {
        payment = (bal-buyout)/term;
        amort = bal - buyout;
    } else {
        var cInt = Math.pow((1 + rate),term);
        amort = bal - buyout;
        payment = (rate * ((bal * cInt) - buyout))/((1 + rate) * (cInt - 1));
        $('div#leasing_calculator span#monthly_payment').html("$" + format_money(payment));
    }
    return false;   
}
function validate_car_factory() {
    if (($('input[@name=phone]').val() == "" && $('input[@name=phone_cell]').val() == "" && $('input[@name=phone_work]').val() == "") || $('input[@name=email]').val() == "" || $('input[@name=name]').val() == "") {
        alert("You must enter your name, phone number and email address to continue.");
        return false;
    }
}
function viewing_form_response(responseText, statusText) {
    $('div.ViewingForm').addClass('ViewingFormResults');
}
function validate_viewing_form(formData, jqForm, options) {
    var form = jqForm[0]; 
    if (form.name.value) {
        if (!(form.phone_daytime.value || form.phone_evening.value || form.phone_cell.value)) {
            alert('Please enter at least one phone number.'); 
            return false;
        }
    } else {
        alert('Please enter your name')
        return false
    }
    $('td.ViewingFormLeft').html('<p>Please wait while your request is submitted...</p>')
}
function restore_select_other(event) {
    $("input.other").each(function() {
        $('select[@name=' + $(this).attr('name') + '_disabled]')
            .css('display', '')
            .attr('name', $(this).attr('name'));
        $(this).remove();
    });
}
function select_other(event, force) {
    if ($(this).val() == 'Other' || force) {
        $(this).css('display', 'none');
        $(this).after('<input type="text" name="' + $(this).attr('name') + '" class="AutowayInput other">');
        $('input.other').focus(function() { $(this).val("").css('color', '#000')});
        $('input.other').blur(
            function() {
                if ($(this).val() == "") {
                    if ($(this).attr('name') == 'purchase_time_frame') {
                        $(this).val("Enter your timeframe")
                            .css('color', '#999')
                    } else {
                        $(this).val("Enter the " + 
                            $('label[@for=' + $(this).attr('name') + ']').html().slice(0, -1).toLowerCase())
                            .css('color', '#999')   
                    }
                }
            }
        );
        $('input.other').blur();
        $(this).attr('name', $(this).attr('name') + '_disabled');
        
        if ($(this).attr('name') == 'make_disabled') {
            $('#CarFactoryForm select[@name=model]').trigger('change', ["True"]);
        }
    }	
}
function update_make() {
    if ($(this).val() != 'Other') {
        $.getJSON('/vehicle/models/', { make : $('#CarFactoryForm select[@name=make]').val() }, 
            function(data) {
                $('#CarFactoryForm select[@name=model]').empty();
                $('#CarFactoryForm select[@name=model]').append('<option value="" disabled="true" selected="true"></option>');
                for (var i=0; i < data.length; i++) {
                    var elOptNew = document.createElement('option');
                    elOptNew.text = elOptNew.value = data[i];
                    try {
                      document.getElementById('id_model').add(elOptNew, null); // standards compliant; doesn't work in IE
                    }
                    catch(ex) {
                      document.getElementById('id_model').add(elOptNew); // IE only
                    }
                }
                var elOptNew = document.createElement('option');
                elOptNew.text = elOptNew.value = "Other";
                try {
                  document.getElementById('id_model').add(elOptNew, null); // standards compliant; doesn't work in IE
                }
                catch(ex) {
                  document.getElementById('id_model').add(elOptNew); // IE only
                }
                $('#CarFactoryForm select[@name=model] option[@value=Other]').addClass('other');
            }
        );
    }
}
function update_selects() {
    fields = new Array('make', 'model', 'year', 'mileage', 'vehicleType');
    for (i in fields) {
        quicksearch[fields[i]] = $('#' + fields[i] + ' option:selected').val();
    }
    var oldValues = quicksearch;
    
    var request = "";
    for (field in oldValues) {
        if (oldValues[field] && oldValues[field] != 'all') {
            if (request) { request += "&"; }
            request += field + "=" + oldValues[field];
        }
    }

    if (request == 'make=all&model=all&year=all&mileage=all&vehicleType=all') {
        $('#inventory_title').html('Browse Inventory');
    } else {
        $('#inventory_title').html('Quick Search Results');
    }
    myDataSource.dataSource = myDataSource;
    myDataTable.getRecordSet().reset();
    myDataSource.makeConnection("ajax=true&"+request, myDataTable.onDataReturnPaginateRows, myDataTable ); 
    myDataTable.paginateRows();
    parent.location.hash = request;
    $.getJSON('/browse/quicksearch_json/',
        { 
            make: oldValues['make'],
            model: oldValues['model'],
            year: oldValues['year'],
            mileage: oldValues['mileage'],
            vehicleType: oldValues['vehicleType'],
            selectField: $(this).attr('name')
        }, 
        function(json){

            for (category in json['result']) {
                if (category == "selected_make") {
                    $("#quicksearch form select[@name=make] option[@value=" + json['result'][category] +"]").attr('selected', 'true');
                    continue;
                }
                $('#quicksearch form select[@name=' + category + ']').empty();
                
                var elOptNew = document.createElement('option');
                elOptNew.text = 'Any ' + category.substring(0,1).toUpperCase() + category.substring(1, category.length);
                elOptNew.value = 'all';
                if (oldValues[category] == 'all')
                    elOptNew.selected = 'selected';
                    
                try {
                  document.getElementById(category).add(elOptNew, null); // standards compliant; doesn't work in IE
                }
                catch(ex) {
                  document.getElementById(category).add(elOptNew); // IE only
                }
                
                for (row in json['result'][category]) {
                    var value = json['result'][category][row].name;
                    var count = json['result'][category][row].count;
                    var elOptNew = document.createElement('option');
                    elOptNew.text = value + ' (' + count + ')';
                    elOptNew.value = value;
                    if (oldValues[category] == value) {
                        elOptNew.selected = 'selected';
                    }
                    try {
                      document.getElementById(category).add(elOptNew, null); // standards compliant; doesn't work in IE
                    }
                    catch(ex) {
                      document.getElementById(category).add(elOptNew); // IE only
                    }
                }
                if($('#quicksearch form select#'+category+' option:selected').length < 1) {
                    $('#quicksearch form select#'+category+' option:first').attr('selected', 'true');
                }
            }
         });
}
