/* Common scripts compiled in one file
-- These include:
-- clear-box.js
-- sign-in-form.js
-- script from find-a-motor.inc
-- script from foot/index.inc
*/

/* search panel */

/* search panel specific javascript and jquery extensions*/

// Global Vars

var jsonData = '';
var data = '';
var new_yn;
/* price range function */
var current_min = '';
var current_max = '';
var update_max = 0;
var maker = '';
var toggled = 0;
var newused = 'U';
var widget_url = '';
var widget_link = '';

// End Global Vars

function validate_postcode(field) {
    var postcodeFilter = /[a-z0-9]/i;
    var illegalChars = /[\!\"\`\$\%\^\@\_\-\'\|\&\*\+\=\{\}\~\#\?\(\)\<\>\,\.\;\:\\\/\[\]]/;
    var first_char = field.substr(0, 1);
    var numbers = '1234567890';
    var postcode_value = '';
    var counter = 0;
    var positions = new Array(field.length);
    onechar_parea = ["B", "E", "G", "L", "M", "N", "S", "W"];
    twochar_parea = ["AB", "AL", "BA", "BB", "BD", "BH", "BL", "BN", "BR", "BS", "BT", "CA", "CB", "CF", "CH", "CM", "CO", "CR", "CT", "CV", "CW", "DA", "DD", "DE", "DG", "DH", "DL", "DN", "DT", "DY", "EC", "EH", "EN", "EX", "FK", "FY", "GL", "GU", "HA", "HD", "HG", "HP", "HR", "HS", "HU", "HX", "IG", "IP", "IV", "KA", "KT", "KW", "KY", "LA", "LD", "LE", "LL", "LN", "LS", "LU", "ME", "MK", "ML", "NE", "NG", "NN", "NP", "NR", "NW", "OL", "OX", "PA", "PE", "PH", "PL", "PO", "PR", "RG", "RH", "RM", "SA", "SE", "SG", "SK", "SL", "SM", "SN", "SO", "SP", "SR", "SS", "ST", "SW", "SY", "TA", "TD", "TF", "TN", "TQ", "TR", "TS", "TW", "UB", "WA", "WC", "WD", "WF", "WN", "WR", "WS", "WV", "YO", "ZE"];
    for (x = 0; x < field.length; x++) {
        if (numbers.indexOf(field.substr(x, 1)) != -1) {
            positions[counter] = x;
            counter = counter + 1;
        }
    }
    if (!postcodeFilter.test(field) || field.match(illegalChars) || numbers.indexOf(first_char) != -1 || counter > 3 || (counter === 0 && field.length > 2) || (positions[0] > 2 && field.length > 2) || (counter < 2 && field.length > 4)) {
        return 0;
    } else {
        var checkpc = 0;
        //alert(numbers.indexOf(field.substr(1, 1)));
        // alert(field.substr(1, 1));
        // alert(field.substr(0, 1));
        // alert(field.substr(0, 2));
        for (pc = 0; pc < onechar_parea.length; pc++) {
            if (field.substr(0, 1) == onechar_parea[pc] && numbers.indexOf(field.substr(1, 1)) != -1) {
                checkpc = 1;
                break;
            }
        }
        for (pc = 0; pc < twochar_parea.length; pc++) {
            if (field.substr(0, 2) == twochar_parea[pc]) {
                checkpc = 1;
                break;
            }
        }
        return checkpc;
    }
}


/* this blurs the text fields to display titles when not in focus */
jQuery.fn.text_field = function () {
    return this.each(function () {
        var t = jQuery(this);
        var title = t.attr("title");

        if (title) {
            t.blur(function () {
                if (t.val() == "") {
                    t.val(title);
                    t.addClass("blur");
                }
            });

            t.focus(function () {
                if (t.val() == title) {
                    t.val("");
                    t.removeClass("blur");
                }
            });

            t.blur();
        }
    });
};

/* end plugins */

function models_body_types(maker, model) {
    jQuery(".model_options").remove();
    jQuery("select#model_F option[value='ANY']").text("Loading...");

    jQuery.getJSON('http://api.carsource.co.uk/json-models-list.php?callback=update_models&maker_F=' + maker + '&used_new_F=M&jsoncallback=?');
    jQuery("select#model_F option[value='ANY']").text("Model");

    jQuery.get("/jsonModBod?" + options, function (data) {
        var data_array = data.split("|");
        var models_array = data_array[0].split("\n");

        for (i = 0; i < models_array.length; i++) {
            if (models_array[i].length > 0) {
                if (model == models_array[i]) {
                    jQuery('select#model_F').append('<option value="' + models_array[i] + '" class="model_options" SELECTED>' + models_array[i] + '</option>');
                }
                else {
                    jQuery('select#model_F').append('<option value="' + models_array[i] + '" class="model_options">' + models_array[i] + '</option>');
                }
            }
        }
        jQuery("select#model_F option[@value='ANY']").text("Model");
    });
}

function update_models(data) {
    for (i = 0; i < data.model.length; i++) {
        if (data.model.length > 0) {
            jQuery('select#model_F').append('<option value="' + data.model[i]['value'] + '" class="model_options">' + data.model[i]['value'] + '</option>');
        }
    }
}

function model_options() {
    jQuery("select#maker_F").change(function () {
        var maker = jQuery(this).attr("value");
        models_body_types(maker);
    });
}

function load_manufacturer() {
    //    jQuery.getJSON("http://api.carsource.co.uk/json-manufacturers-list.php?callback=update_manufacturers&used_new_F=M&jsoncallback=?")
    jQuery.getJSON("http://cdn.motors.co.uk/d/motors/js/api_manufacturer_list.js?jsoncallback=?")
}

function update_manufacturers(data) {
    for (i = 0; i < data.manufacturer.length; i++) {
        if (data.manufacturer.length > 0) {
            jQuery('select#maker_F').append('<option value="' + data.manufacturer[i].value + '" class="man_options">' + data.manufacturer[i].value + '</option>');
        }
    }
}


function max_price_options() {
    /* on change of min_price_F hide all max options that are less <= value of min */
    jQuery("select#min_price").change(function () {
        var min_val = parseInt(jQuery(this).attr("value"));
        var update_max = '';

        if (current_max == '' || current_max <= min_val) {
            current_max = '';
            update_max = 1;
        }

        current_min = min_val;
        var i = 0;

        jQuery("#max_price").find("option").each(function () {
            jQuery(this).removeClass("hide");
            var max_val = parseInt(jQuery(this).attr("value"));

            if (min_val >= max_val) {
                jQuery(this).addClass("hide");
            }
            else {
                if (i == 0 && jQuery(this).attr("value") != "max" && current_max == '' && current_max < jQuery(this).attr("value")) {
                    jQuery(this).attr("selected", "selected");
                    i = 1;
                    if (update_max == 1) {
                        current_max = jQuery(this).attr("value");
                        update_max = 0;
                    }
                }
            }
        });
    });

    jQuery("select#max_price").change(function () {
        var max_val = parseInt(jQuery(this).attr("value"));

        if (current_min && current_min > max_val) {
            current_min = '';
        }

        current_max = max_val;

        jQuery("#min_price").find("option").each(function () {
            var min_val = parseInt(jQuery(this).attr("value"));
            if (max_val == min_val && current_min == '' && current_min < jQuery(this).attr("value")) {
                jQuery(this).prev().attr("selected", "selected")
            }
        });

    });
}
/* end price range function */

function refresh_options() {

    var config_s = [];
    var config_c = [];
    var config_t = [];
    var config_r = [];

    models_body_types(null, null);

    // SELECTS
    config_s['maker_F'] = 'maker_F';
    config_s['min_price'] = 'from_price_F';
    config_s['max_price'] = 'to_price_F';
    config_s['distance'] = 'distance_basic_F';
    config_s['transmission'] = 'transmission_F';
    config_s['fuel'] = 'fuel_F';
    config_s['drive_time'] = 'drive_time_F';
    config_s['car_age'] = 'car_age_F';
    config_s['from_age'] = 'from_age_F';
    config_s['to_age'] = 'to_age_F';

    for (i in config_s) {
        jQuery("#" + i).find("option").each(function () {
            var value = jQuery(this).attr("value");

        });
    }
    // text fields
    config_t['postcode'] = 'postcode_F';

}

function refresh_form_fields() {
    refresh_options();
}

/* tooltps */
/* end tooltips */

/* form submission handler */
function form_submit() {
    var url = $('#search_form').attr('action');
    var make = $('#maker_F option:selected').val();
    var model = $('#model_F option:selected').val();
    var distance = $('input[name="distance_basic_F"]').val();
    var postcode = $('#postcode').val();
    var price = $('#min_price option:selected').val() + ',' + $('#max_price option:selected').val();

    if (make != "" && make != "ANY") {
        make = "&makeModel=" + make;
    }
    else {
        make = ""
    }

    if (model == "ANY") {
        model = ""
    }

    if (distance != "" && distance != "ANY") {
        distance = "&distance=" + distance;
    }
    else {
        distance = ""
    }

    if (postcode != "" && postcode != "ANY") {
        postcode = "&location=" + postcode;
    }
    else {
        postcode = ""
    }

    if (price != "" && price != "0,9999999" && price != "ANY") {
        price = "&price=" + price;
    }
    else {
        price = ""
    }

    var url = url +
				make + "," +
				model +
				distance +
				postcode +
				price;

    if (top.location != location) {
        top.location.href = url;
    } else {
        window.location.href = url;
    }
}

/* function loader - add all functions here to be loaded on document ready */

function widget_links(data) {
    widget_link = data.links[0]['value'];
    widget_url = data.links[1]['value'];
    jQuery("#usedLink")
	.attr("href", widget_url)
	.text(widget_link)
	.attr("title", widget_link);
}


function display_from_price(template) {
    if (template == 'template2' || template == 'template3' || template == 'template5') {
        label_class = 'class="short"';
    }
    else {
        label_class = '';
    }

    if (template == 'template5') {
        from_price = '<label ' + label_class + '><select name="from_price_F" id="min_price" class="floatL"><option value="0">Min \u00A3</option><option value="500">500</option><option value="1000">1000</option> <option value="2000">2000</option> <option value="3000">3000</option> <option value="4000">4000</option> <option value="5000">5000</option> <option value="6000">6000</option> <option value="7000">7000</option> <option value="8000">8000</option> <option value="9000">9000</option> <option value="10000">10000</option> <option value="11000">11000</option> <option value="12000">12000</option> <option value="13000">13000</option> <option value="14000">14000</option> <option value="15000">15000</option> <option value="16000">16000</option> <option value="17000">17000</option> <option value="18000">18000</option> <option value="19000">19000</option> <option value="20000">20000</option> <option value="22500">22500</option> <option value="25000">25000</option> <option value="27500">27500</option> <option value="30000">30000</option> <option value="35000">35000</option> <option value="40000">40000</option> <option value="50000">50000</option> <option value="75000">75000</option> <option value="100000">100000</option> <option value="250000">250000</option> <option value="500000">500000</option> </select> </label>';
    }
    else {
        from_price = '<label ' + label_class + '><select name="from_price_F" id="min_price" class="floatL"><option value="0">min</option><option value="500">500</option><option value="1000">1000</option> <option value="2000">2000</option> <option value="3000">3000</option> <option value="4000">4000</option> <option value="5000">5000</option> <option value="6000">6000</option> <option value="7000">7000</option> <option value="8000">8000</option> <option value="9000">9000</option> <option value="10000">10000</option> <option value="11000">11000</option> <option value="12000">12000</option> <option value="13000">13000</option> <option value="14000">14000</option> <option value="15000">15000</option> <option value="16000">16000</option> <option value="17000">17000</option> <option value="18000">18000</option> <option value="19000">19000</option> <option value="20000">20000</option> <option value="22500">22500</option> <option value="25000">25000</option> <option value="27500">27500</option> <option value="30000">30000</option> <option value="35000">35000</option> <option value="40000">40000</option> <option value="50000">50000</option> <option value="75000">75000</option> <option value="100000">100000</option> <option value="250000">250000</option> <option value="500000">500000</option> </select> </label>';
    }

    return from_price;
}

function display_to_price(template) {
    if (template == 'template2' || template == 'template3' || template == 'template5') {
        label_class = 'class="short"';
    }
    else {
        label_class = '';
    }

    if (template == 'template5') {
        to_price = '<label ' + label_class + '> <select name="to_price_F" id="max_price" class="floatR"> <option value="9999999">Max \u00A3</option> <option value="500">500</option> <option value="1000">1000</option> <option value="2000">2000</option> <option value="3000">3000</option> <option value="4000">4000</option> <option value="5000">5000</option> <option value="6000">6000</option> <option value="7000">7000</option> <option value="8000">8000</option> <option value="9000">9000</option> <option value="10000">10000</option> <option value="11000">11000</option> <option value="12000">12000</option> <option value="13000">13000</option> <option value="14000">14000</option> <option value="15000">15000</option> <option value="16000">16000</option> <option value="17000">17000</option> <option value="18000">18000</option> <option value="19000">19000</option> <option value="20000">20000</option> <option value="22500">22500</option> <option value="25000">25000</option> <option value="27500">27500</option> <option value="30000">30000</option> <option value="35000">35000</option> <option value="40000">40000</option> <option value="50000">50000</option> <option value="75000">75000</option> <option value="100000">100000</option> <option value="250000">250000</option> <option value="500000">500000</option> </select> </label>';
    }
    else {
        to_price = '<label ' + label_class + '> <select name="to_price_F" id="max_price" class="floatR"> <option value="9999999">max</option> <option value="500">500</option> <option value="1000">1000</option> <option value="2000">2000</option> <option value="3000">3000</option> <option value="4000">4000</option> <option value="5000">5000</option> <option value="6000">6000</option> <option value="7000">7000</option> <option value="8000">8000</option> <option value="9000">9000</option> <option value="10000">10000</option> <option value="11000">11000</option> <option value="12000">12000</option> <option value="13000">13000</option> <option value="14000">14000</option> <option value="15000">15000</option> <option value="16000">16000</option> <option value="17000">17000</option> <option value="18000">18000</option> <option value="19000">19000</option> <option value="20000">20000</option> <option value="22500">22500</option> <option value="25000">25000</option> <option value="27500">27500</option> <option value="30000">30000</option> <option value="35000">35000</option> <option value="40000">40000</option> <option value="50000">50000</option> <option value="75000">75000</option> <option value="100000">100000</option> <option value="250000">250000</option> <option value="500000">500000</option> </select> </label>';
    }

    return to_price;
}

function display_maker() {
    return '<label><select name="maker_F" id="maker_F"><option value="ANY">Manufacturer</option>[%man_options%]</select></label>';
}

function display_model() {
    return '<label><select name="model_F" id="model_F"><option value="ANY">Model</option></select></label>';
}

function display_postcode() {
    return '<label><input type="text" name="postcode_F" id="postcode" maxlength="8"class="text clear_field new" title="Postcode *Required*" value="" /> </label>';
}

function display_form(newspaper) {
    return '<form name="search_form" id="search_form" class="motorsSearch" action="http://www.motors.co.uk/search/default.aspx?referring_site=' + newspaper + '" method="post" target="_top"> <fieldset>';
}

function end_form() {
    return '<input type="hidden" name="submit_search" value="1" /><input type="hidden" name="submitted" value="1" /><input type="hidden" name="sort_order_F" value="P" /><input type="hidden" name="first_car_F" value="1"><input type="hidden" name="distance_basic_F" value="50"></fieldset></form>';
}

function display_url() {
    return '<input type="image" name="submit_search" id="submit_search" src="http://cdn2.motors.co.uk/v2live/images/btn_search.gif" class="submit" /><a href="' + widget_url + '" class="usedLink" id="usedLink" title="" target="_top"></a>';
}

function make_panel(newspaper, template) {
    if (template == 'template1' || template == 'template4') {
        //cambridge
        view = display_form(newspaper) + display_postcode() + display_maker() + display_model() + display_from_price() + display_to_price() + display_url() + end_form();
    } else {
        //express_star and shropshire_star
        view = display_form(newspaper) + display_postcode() + display_maker() + display_model() + display_from_price(template) + display_to_price(template) + display_url() + end_form();
    }

    view = view + '<script src="http://www.google-analytics.com/urchin.js" type="text/javascript">';
    jQuery("#motorssearchpanel").html(view);
    jQuery('input:text').text_field();

    jQuery("#search_form").submit(function (e) {

        e.preventDefault();

        /* validation */
        var pcode = jQuery("#postcode").val();
        if (validate_postcode(pcode.toUpperCase()) == 0) {
            alert("Please enter a full or partial postcode so we can find cars closest to you. If you don't have a UK postcode please enter W4 5TS to see results.");
            jQuery("#postcode").focus();
            return false;
        } else if (jQuery("#make").val() == 'ANY' && jQuery("#keyword").val() == 'Keyword, e.g. GTI' && jQuery("#min_price").val() == 0 && jQuery("#max_price").val() == 999999) {
            alert("Motors.co.uk has 200,000 cars for sale. If you want to search for 'any make', you'll need to limit your price search to a �2000 spread . Otherwise, the list that'll return will be so big, it'll take hours to read!");
            return false;
        } else if ((jQuery("#min_price").val() == 0 && jQuery("#max_price").val() == 999999) && jQuery("#make").val() == 'ANY') {
            alert("Motors.co.uk has 200,000 cars for sale. If you want to search for 'any make', you'll need to limit your price search to a �2000 spread . Otherwise, the list that'll return will be so big, it'll take hours to read!");
            return false;
        }
        var minval = jQuery("#min_price").val();
        var maxval = jQuery("#max_price").val();
        if (minval == 'min') { minval = 0; }
        if (maxval == 'max') { maxval = 1000000; }
        if ((jQuery("#min_price").val() != 'min' || jQuery("#max_price").val() != 'max') && jQuery("#make").val() == 'ANY') {
            var diffValue = maxval - minval;
            if (jQuery("#max_price").val() <= 20000 && diffValue > 2000) {
                range = 2000;
                alert("Motors.co.uk has 200,000 cars for sale. If you want to search for 'any make', you'll need to limit your price search to a �2000 spread . Otherwise, the list that'll return will be so big, it'll take hours to read!");
                return false;
            } else if (jQuery("#max_price").val() <= 30000 && diffValue > 2500) {
                range = 2500;
                alert("Motors.co.uk has 200,000 cars for sale. If you want to search for 'any make', you'll need to limit your price search to a �2500 spread . Otherwise, the list that'll return will be so big, it'll take hours to read!");
                return false;
            } else if (jQuery("#min_price").val() < 30000 && jQuery("#max_price").val() >= 30000) {
                alert("Please choose a smaller price range or select a manufacturer");
                return false;
            }
            return true;
        }
        if ((jQuery("#from_age").val() > jQuery("#to_age").val()) && (jQuery("#from_age").val() != "" && jQuery("#to_age").val() != "")) {
            alert("The from year is greater than to year");
            return false;
        }

        /* analytics */
        _uacct = "UA-1084356-1";
        urchinTracker('/widgets/' + newspaper);

        form_submit();
    });

    max_price_options();
    load_manufacturer();
    model_options();

    //jQuery.getJSON('http://www.motors.co.uk/json-widget-links.php?callback=widget_links&jsoncallback=?');
}

