/*
$Date: 2008/03/18 10:45:35 $
$Name: ukconcept_v1_r61 $
$Revision: 1.1 $
$State: Exp $
*/

// Write options returned from AJAX into select box
function writeOptions(url, response) {
  document.getElementById('tempsel').innerHTML = response;
  var opt = document.getElementById('ajax_options');
  var len = opt.options.length;
  changeSelectObject.length = 0;
  for(var i=0; i<len; i++) {
    var txt=opt.options[i].text;
    var val=opt.options[i].value;
    changeSelectObject.options[changeSelectObject.length]=new Option(txt,val);
  }
  document.getElementById('tempsel').innerHTML = "";
  changeSelectObject.className = "";
}
var changeSelectObject;

// Loop through form elements and attach auto-populate action
function attachPopulateEvent(objects) {
  for (i=0; i<objects.length; i++) {
    addEvent(document.getElementById(objects[i]), "change", populateModuleSelects, false);
    if (i != 0) document.getElementById(objects[i]).className = "disabled";
  }
}

// Attach What Car review search switcher to form element
function attachWhatCarSwitcher(object) {
  addEvent(document.getElementById(object), "change", whatCarSwitcher, false);
}

// For What Car review search: change form for new or used cars
function whatCarSwitcher(e) {
  if (e.currentTarget.value == "new") {
    document.getElementById('whatcar_edition').style.visibility = 'visible';
  }
  else {
    document.getElementById('whatcar_edition').style.visibility = 'hidden';
  }
}

// Returns object at specified index of array
function arrayIndexOf (array, srch) {
  for (var i = 0; i < array.length; i++) {
    if (array[i] == srch)
      return i;
  }
  return -1;
}

function getGenericSelectId (selectId) {
  selectId = selectId.substring(selectId.indexOf('_')+1,selectId.length);
  return selectId;
}

// For What Car search modules: populate select box when previous one changes
function populateModuleSelects(e) {
    // Get ID of element that was changed
    var IE = window.event ? true : false;
    selectId = IE ? window.event.srcElement.id : e.target.id;
    
    // Get value of changed element and generic id
    selectValue = document.getElementById(selectId).value;
    selectPrefix = selectId.substring(0,selectId.indexOf('_')+1);
    selectIdGeneric = getGenericSelectId(selectId);
    selectsToUpdate = eval(selectPrefix + "selectsToUpdate");
    
    // Options to set status of select boxes
    var blankSelect = "Select";
    var loadingSelect = "Loading...";
    
    var isAutocar = selectPrefix.indexOf('autocar') != -1
    var isFindReview = selectValue.indexOf('findreview') != -1;
    var baseUrl = isAutocar ? "/_category/motoring_autocardata.adp" : "/_category/motoring_whatcardata.adp";
    
    // Create the first part of the request URL - what list do we want next?
    currentSelectNo = arrayIndexOf(selectsToUpdate,selectId);
    if (currentSelectNo + 1 < selectsToUpdate.length) {
        newUrl = baseUrl + "?s=" + getGenericSelectId(selectsToUpdate[currentSelectNo + 1]);
    }
    
    // If there's a 'type' specified, add it to the query
    if (document.getElementById(selectPrefix + 'type')) {
		
        newUrl += "&type=" + document.getElementById(selectPrefix + 'type').value;
    }

	// If there's a 'type' specified, add it to the query
    if (document.getElementById(selectPrefix + 'filter')) {
        newUrl += "&filter=" + document.getElementById(selectPrefix + 'filter').value;
    }
    
    // Add the other data to the URL - what data has been selected so far?
    for (i = 0; i < currentSelectNo + 1; i++) {
        newUrl += "&" + getGenericSelectId(selectsToUpdate[i]) + "=" + document.getElementById(selectsToUpdate[i]).value;
    }

    // If a value is selected and select box isn't the last
    if (selectValue != 0 && (currentSelectNo+1) != selectsToUpdate.length) {
        // Make AJAX request for data
        changeSelectObject = document.getElementById(selectsToUpdate[currentSelectNo+1]);
        changeSelectObject.className = "";
        changeSelectObject.length = 0;
        changeSelectObject.options[changeSelectObject.length]=new Option(loadingSelect,0);
        makeRequest(newUrl, writeOptions);

        
        // Blank out further select boxes
        for (i=currentSelectNo+2; i<selectsToUpdate.length; i++) {
            var selectObject = document.getElementById(selectsToUpdate[i]);
            selectObject.length = 0;
            selectObject.options[selectObject.length]=new Option(blankSelect,0);
            selectObject.className = "disabled";
        }
    }
    
    // If no value selected
    if (selectValue == 0) {
        // Go through the selects that follow and blank them out
        for (i=currentSelectNo+1; i<selectsToUpdate.length; i++) {
            var selectObject = document.getElementById(selectsToUpdate[i]);
            selectObject.length = 0;
	selectObject.options[selectObject.length]=new Option(blankSelect,0);
	selectObject.className = "disabled";
        }
    }
	
}

function switchFindReviewForm(ev){
	if (ev.currentTarget.id == 'findreview_usedtype') {
		$('findreview_used').style.display = '';
		$('findreview_new').style.display = 'none';
		$('findreviewused_usedtype').checked = true;
		emptyFindReviewSelects();
	} else if(ev.currentTarget.id == 'findreviewused_newtype'){
		$('findreview_used').style.display = 'none';
		$('findreview_new').style.display = '';
		$('findreview_newtype').checked = true;
		emptyFindReviewSelects();
	}
}

function resetFindReviewForm(){
	$('findreview_used').style.display = 'none';
	$('findreview_new').style.display = '';
	$('findreviewused_usedtype').checked = true;
	$('findreview_newtype').checked = true;
	emptyFindReviewSelects();
}

function emptyFindReviewSelects(){
	$('findreview_make').selectedIndex=0;
	$('findreviewused_make').selectedIndex=0;
	emptySelect($('findreviewused_model'));
	emptySelect($('findreviewused_editions'));
	emptySelect($('findreview_model'));
	emptySelect($('findreview_editions'));
}

function emptySelect(selectElem){
	var selectOption = document.createElement("option");
	selectOption.value = 0;
	selectOption.text = 'Select';
	selectOption.innerHTML = 'Select';
	selectElem.innerHTML = '';
	selectElem.appendChild(selectOption);
	selectElem.className = 'disabled';
}

// For What Car car review and news search: populate model box when make changes
function populateModelSelect(e, prefix) {
    var IE = window.event ? true : false;
    selectId = IE ? window.event.srcElement.id : e.target.id;
    selectValue = document.getElementById(selectId).value;
    var loadingSelect = "<option>Loading...</option>";
    url = "/_category/motoring_valuation.adp?s=model&make=" + selectValue;
    
    if (selectValue > 0) {
        changeSelectObject = document.getElementById(prefix + 'make');
        changeSelectObject.className = "";
        changeSelectObject.innerHTML = loadingSelect;
        makeRequest(url, writeOptions);
    }
}



// Send details to Omniture
function setOmniturePageActivity(obj, pageName, linkName){
	s.prop20 = linkName;
	s.tl(obj,'o',linkName);
}

// Run when a tracked link is clicked
function browseLink(e) {
  if (this.id)
  {
	var text = omnitureObjects[omnitureObjects.indexOf(this.id)+1];
	setOmniturePageActivity(e.currentTarget, document.title, text);
  }
}

var omnitureObjects = new Array();
var addEventsOnloadObject = new Object();
addEventsOnloadObject.onload = function(){
  for (var i = 0; i < omnitureObjects.length; i++) {
  	var elem = document.getElementById(omnitureObjects[i]);
    addEvent(elem, "click", browseLink, false);
  }
}

// show or hide passed html element by id
function toggleVisibility(obj) {
	var el = document.getElementById(obj);
	if ( el.style.display != 'none' ) {
		el.style.display = 'none';
	}
	else {
		el.style.display = '';
	}
}

// to handle the organisation and selection of First Drives (FD) and Road Test (RT) dropdown options
// these are both conglomerated and retrieved from a single data feed
// FD and RT options are classified via their respective classnames (via the xslt)
// used by "Autocar – Drive Search" form (Car Showroom [SW], Supercar [SW] and First Drives [w])
// necessary due to lack of browser support for css hidden option elements and disabled attributes for option elements (IE)
function FDOptions(){
	this.fd_make_options_elem;
	this.rt_make_options_elem;
	this.make_select_elem;
	this.selectedOption = 'fd';

	this.init = function(){
		this.make_select_elem = document.getElementById('autocarreview_make');
		if (this.make_select_elem)
		{
		 this.fd_make_options_elem = getElementsByClassName("firstDrivesCarMake",this.make_select_elem,"option");
		 this.rt_make_options_elem = getElementsByClassName("roadTestsCarMake",this.make_select_elem,"option");
		 
		 this.attachFirstDrivesOptionToggleEvent();
		}
	}

	// handles the switching of RT/FD option elements
	this.firstDrivesOptionToggle = function(){
		

		var optionElems = null;
		var formElem = $('autocar_reviewsearch_form');
		
		// choose select options and action URL based on FD/RT selection
		if (this.selectedOption == 'rt'){
			optionElems = this.rt_make_options_elem;
			if (formElem)
			{
				formElem.action = $('rt_action').value;
			}
		} else {
			optionElems = this.fd_make_options_elem;
			if (formElem)
			{
				formElem.action = $('fd_action').value;
			}
		}

		if ($('autocarreview_filter'))
		{
			$('autocarreview_filter').value = this.selectedOption;
		}

		// loop through to show the desired options sub-set
		this.make_select_elem.innerHTML = '';
		
		for (var i=0;i<optionElems.length;i++){
				this.make_select_elem.appendChild(optionElems[i]);
				this.make_select_elem.options[i].innerHTML = optionElems[i].value;
		}

		// reset selections
		this.make_select_elem.selectedIndex = 0;	
		this.emptySelect($('autocarreview_model'));
		this.emptySelect($('autocarreview_edition'));
	}

	// reset a select element to it's default
	this.emptySelect = emptySelect;

	// event handlers
	this.firstDrivesOptionToggleEvent = function(ev){
		var obj = ev.currentTarget;
		obj.fdOptions.selectedOption = 'fd';
		if (obj.id == 'autocarreview_typert')
			obj.fdOptions.selectedOption = 'rt';
		
		obj.fdOptions.firstDrivesOptionToggle();
	}

	this.attachFirstDrivesOptionToggleEvent = function (){
		  $('autocarreview_typefd').fdOptions = this;
		  $('autocarreview_typert').fdOptions = this;
		  addEvent($('autocarreview_typefd'), "click", this.firstDrivesOptionToggleEvent, false);
		  addEvent($('autocarreview_typert'), "click", this.firstDrivesOptionToggleEvent, false);
		  this.firstDrivesOptionToggle();
	}
}

Onload.register(addEventsOnloadObject);
