/* 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 = "&make=" + make;
    }
    else {
        make = ""
    }

    if (model != "" && model != "ANY") {
        model = "&model=" + model;
    }
    else {
        model = ""
    }

    if (distance != "" && distance != "ANY") {
        distance = "&distance=" + distance;
    }
    else {
        distance = ""
    }

    if (postcode != "" && postcode != "ANY") {
        postcode = "&postcode=" + 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=?');
}
