/**
 * Holden.com.au JavaScript - Contains all application specific javascript code
 */

hld_ajax_enabled = true;
hld_ajaxLinkIdent = ".ajaxLink"; 
hld_ajaxFormIdent = ".ajaxForm";
hld_ajaxRefreshIdent = ".ajaxRefresh";  
hld_ajaxRefreshToolIdent = ".ajaxRefresh";  
hld_ajaxRefreshColoradoIdent = ".ajaxRefreshColorado";  
hld_popupLinkIdent = ".popupLink"; 
hld_mainContentIdent = "#contentWrapper";
hld_documentReadyListeners = new Array();
hld_ajaxThreads = 0;

/**
 * Keeps an array of all registered document ready listeners. This
 * are invoked when the page is loaded by full page load or AJAX
 */
function hld_documentReady(fnName){
	hld_documentReadyListeners[fnName]=fnName;
}

/**
 * Invokes all registered document ready listeners
 */
function hld_invokeDocumentReadyListeners(firesifr){
	for(f in hld_documentReadyListeners){
		//alert(f);
		eval(f+"()");
	}
	if(firesifr){
		hld_fireSIFR();
	}
}

/**
 * Define the global document ready handler
 */
$(document).ready(function(){
	hld_invokeDocumentReadyListeners(false);
	overLabel();
});


function overLabel () {
	try {
			$('INPUT.overlabel').focus(function() {
				$(this).val('');
				$(this).removeClass('overlabel');
				$(this).unbind('focus');
				return;
			});
	} catch (err) {
		return false;
	}
}

/**
 * Register the standard document ready listeners
 */
hld_documentReady("hld_turnOnPopupLinks");
hld_documentReady("hld_turnOnAjaxLinks");
hld_documentReady("hld_turnOnAjaxForms");
hld_documentReady("hld_turnOnAjaxRefreshTool");
hld_documentReady("hld_turnOnAjaxRefreshColorado");
hld_documentReady("hideLoaderOnPageLoad");
hld_documentReady("addExternalMessageWindow");



function hld_goToVehicleRange(vehicleName){
	if(hld_dealer_mode)
		hld_redirect(hld_context_path+"/vehicles/"+vehicleName +"?dealerMode=true");
	else
		hld_redirect(hld_context_path+"/vehicles/"+vehicleName);
}

function hld_redirect(url){
	location.href = url;
}

function hld_goToLatestOffer(offerURL){
	//alert("TODO: Go to offer URL: " + offerURL);
	hld_redirect(offerURL);
}

function hld_viewLinup(){
	location.href="#viewLineUp";
}

function hld_popup(url, trackingid){
	var params  = 'width='+ (screen.width);
 	params += ', height='+ (screen.height);
 	params += ',menubar=0';
 	params += ',toolbar=0';

	window.open(url,"", params);
	
}
function hld_micrositeRedirect(url, vehicleName) {
  // Microsite Event Trackking
  hld_trackEventClick('Microsite'.toUpperCase(), vehicleName.toUpperCase(), 'Vehicle_Range'.toUpperCase());
  hld_redirect(url);
}

function hld_micrositePopup(url, vehicleName) {
	var params  = 'width='+ (screen.width);
 	params += ', height='+ (screen.height);
 	params += ',menubar=0';
 	params += ',toolbar=0';

  // Microsite Event Trackking
  hld_trackEventClick('Microsite'.toUpperCase(), vehicleName.toUpperCase(), 'Vehicle_Range'.toUpperCase());
	window.open(url,"", params);
}

function hld_trackClick(trackingidsuffix){


}

// Google Analytics Event Tracking
function hld_trackEventClick(evCategory, evAction, evLabel){
  try {
         
    // Additional Event Tracking for Colours
    if ( evCategory.toUpperCase() == 'COLOURS_VIEW') {
      pageTracker._trackEvent('COLOURS', hld_tracking_id.toUpperCase(), evAction.toUpperCase() );
    }
    
    if ( evCategory.toUpperCase() == 'HOME') {
      evCategory = 'HOMEPAGE';
    } else if ( evCategory.toUpperCase() == 'VEHICLES') {
      evCategory = 'VEHICLE SHOWROOM';
    } else if ( evCategory.toUpperCase().match('RANGE') != null ) {      
      var subStrIdx = evCategory.toUpperCase().indexOf('RANGE');
      evCategory = evCategory.substr(0, subStrIdx-1);
    }
    
    pageTracker._trackEvent(evCategory.toUpperCase(), evAction.toUpperCase(), evLabel.toUpperCase() );
    
    if (typeof(window['dealerTracker']) != "undefined") {
		dealerTracker._trackEvent(evCategory.toUpperCase(), evAction.toUpperCase(), evLabel.toUpperCase());
	}
      
  } catch(err) {
  
  }
  
}

/* Sophus Tracking
function hld_sophusTracking() {

}
*/

function hld_turnOnPopupLinks(){
	try {
		$(hld_popupLinkIdent).unbind();
		$(hld_popupLinkIdent).click(function(){
		 	window.open(this.href,"Popup"+(new Date()).getTime(),"width=600, height=400");
		});
	} catch (err) {
		return false;
	}
}

function hld_turnOnAjaxForms(){
	hld_turnOnAjaxFormsSet(hld_ajaxFormIdent, hld_mainContentIdent);
}

function hld_turnOnAjaxFormsSet(formIdent, mainContentArea){
	try {
		$(formIdent).unbind();
		$(formIdent).ajaxForm({ 
			target: mainContentArea, 
			beforeSubmit: function()
			{
				hld_ajaxLoading(true, 0);
			},
			success: function()
			{
				hld_ajaxLoading(false, 0);
				hld_invokeDocumentReadyListeners(true);
			}
		});
	} catch (err) {
		return false;
	}
}

function hld_turnOnAjaxRefresh(ident,id){
	try {
		$(ident).unbind();
		$(ident).change(function(){
	     	hld_ajaxLoading(true, 0);
			document.forms[id]['ajax'].value='true';
			
			$("#" + id).ajaxSubmit({ target: hld_mainContentIdent, success: function(){
		     	hld_invokeDocumentReadyListeners(true);
		     	hld_ajaxLoading(false, 0);
			}});
			return false;
		});
	} catch (err) {
		return false;
	}
}

function hld_turnOnAjaxRefreshTool(){
	hld_turnOnAjaxRefresh(hld_ajaxRefreshToolIdent,"tool");
}

function hld_turnOnAjaxRefreshColorado(){
	hld_turnOnAjaxRefresh(hld_ajaxRefreshColoradoIdent,"colorado");
}

function hideLoaderOnPageLoad()
{
	try {
	//$("#ajaxLoader").hide();
	} catch (err) {
		return false;
	}
}

var loaderCallback = function(){}; // is called when the loader is setup
// Loader callback should contain code to perform a load
var callbackFunction = function(){ 
	hld_ajaxLoading(false, 0);  
	hld_invokeDocumentReadyListeners(true);
};
// The callbackFunction is called after load is complete

function hld_ajaxLoading(start, timer){
	if(start){
		hld_ajaxThreads++;
	}
	else {
		hld_ajaxThreads--;
	}
	
	if(hld_ajaxThreads>0)
	{
		window.status="Loading..... please wait";
		setupLoading(loaderCallback, timer);
	}
	else 
	{
		window.status="Finished Loading";
		hideLoadingInModal();
	}
}

function hld_ajaxBeforeSubmit(formData, jqForm, options){
	//alert("Submitting with AJAX: " + formDat);	
	return true;	
}

function hld_turnOnAjaxLinks() 
{
	try {
		$(hld_ajaxLinkIdent).unbind();
		$(hld_ajaxLinkIdent).click(function() 
		{
			callbackFunction = function()
	     	{
	         	hld_invokeDocumentReadyListeners(true);
	        	hld_ajaxLoading(false, 500);
	     	};
	     	
	     	var currentHref = this.href;
	     	hld_loadURL(currentHref, hld_mainContentIdent, callbackFunction);
		 	return false;
		 });
	} catch (err) {
		return false;
	}
}

function hld_loadURL(href, divToLoad, otherCallback)
{
	if(otherCallback == undefined)
		otherCallback = callbackFunction;
	
	loaderCallback = function()
	{
		var sep = href.indexOf("?")>=0 ? "&" : "?";  
	    $(divToLoad).load(href+sep+"ajax=true", null, otherCallback);
	};
	hld_ajaxLoading(true, 1000);
}

function hld_hideElementById(id) {
	$("#" + id).hide();	
}

function hld_hideElementByIdSlow(id) {
	$("#" + id).hide("slow");
}

function hld_showElementById(id) {
	$("#" + id).show();	
}

function hld_showElementByIdSlow(id) {
	$("#" + id).show("slow");	
}

function hld_clearInputField(id) {
	$("#" + id).val("");
}

function hld_populateInputField(id, value) {
	var val =$("#" + id).val();
	
	if(val == "")
		$("#" + id).val(value);
}

function hld_splitValue(value, token, index) {
	var arr = value.split(token);
 	return arr[index];
}

function hld_openSubWindow(pageURL) {
	var sw = screen.width - 100;
	var sh = screen.height - 100;
	
	var paramz = 'toolbar=no,location=no,directories=no,status=no,menubar=no,resizable=yes,scrollbars=yes,width='+sw+',height='+sh;
	var oSubWin = window.open("", null, paramz );

  	oSubWin.moveTo(50, 50);
  	oSubWin.location.replace( pageURL );
}

function hld_openNormalWindow(pageURL) {
	var sw = screen.width - 100;
	var sh = screen.height - 100;
	
	var paramz = 'toolbar=yes,location=yes,directories=no,status=yes,menubar=yes,resizable=yes,scrollbars=yes,width='+sw+',height='+sh;
	var oSubWin = window.open("", null, paramz );

  	oSubWin.moveTo(50, 50);
  	oSubWin.location.replace( pageURL );
}

function hld_lettersOnly(evt) {
	
	evt = (evt) ? evt : event;
    var charCode = (evt.charCode) ? evt.charCode : ((evt.keyCode) ? evt.keyCode : 
        ((evt.which) ? evt.which : 0));
        
    //lower case
    if (charCode >= 97 && charCode <= 122) {
        return true;
    }//upper case
    else if (charCode >= 65 && charCode <= 90) {
    	 return true;
    }// - dash
    else if (charCode == 45) {
    	 return true;
    }// delete key
    else if (charCode == 8) {
    	 return true;
    }
    
    return false;
    
}


function hld_numbersOnly(e) {
	
	var key;
	var keychar;
		
	
	if (window.event) {
        key = window.event.keyCode;
    } else if (e) {
       key = e.which;
    } else {
       return true;
    }
    
	//allows numbers, left arrow, right arrow, delete, backspace
	if(key == 8 || (key >= 48 && key <= 57)) {
		return true;
	} 
	
	return false;
}

function hld_postcodeInput(event, value) {

	return hld_numbersOnly(event);
	
}

function hld_submitForm(formId) {
	var form = document.getElementById(formId);
	form.submit();
}

function hld_submitFormWithNumbers(textField, formId) {
	var text = document.getElementById(textField).value;
	
	//go through text to see if numbers
	if (!isNaN(text))
		hld_submitForm(formId);
	else
		return false;

}

function hld_submitSelectedContent(formId, select) {
	var text = select.options[select.selectedIndex].value;

	if (text != "")
		hld_submitForm(formId);
	else
		return false;
}

function hld_JumpToModel(index) {

	if (index != "")
		window.location = index;
	else
		return false;
}

// required for helpmechoose
function setSize(width, height)
{
	<!-- id  -->
	var divtag = document.getElementById('panel');
	divtag.style.height = height + 'px';
	divtag.style.width = width + 'px';		
}

function hld_fireGoogleTracking(key, id) {
	try {
		hld_tracking_id = id;

		pageTracker._trackPageview(hld_tracking_id);
	} catch(err) {}

}

function hld_fireGoodleDealerTracking(id) {
	try {
		if (typeof(window['dealerTracker']) != "undefined") {
			dealerTracker._trackPageview(id);
		}
	} catch(err){}
}

function hld_trackPageview(id) {
    try {
        pageTracker._trackPageview(id);
    } 				
    catch(err){}
}

function hld_trackDealerPageview(id) {
	try {
        if (typeof(window['dealerTracker']) != "undefined") {
			dealerTracker._trackPageview(id);
		}
    } 				
    catch(err){}
}

function hld_strStartsWith(str, prefix) {
	return str.indexOf(prefix) == 0;
}

function hld_urlCacheController(url){
	
	var currentTime = new Date()
	var hours = currentTime.getHours().toString()
	var day = currentTime.getDate().toString()
	var month = currentTime.getMonth() + 1
	var year = currentTime.getFullYear()
	url+=hld_addParam(url)+year+month.toString()+day+hours;
	
	return url;
}

function hld_addParam(url){
	if(url.indexOf("?")>-1){
		return "&cacheCon=";		
	}else{
		return "?cacheCon=";
	}
}

function hld_resizeBuildPriceOffer(height){
  $("#panel").css('height',height);
}

function hld_trimString(str) {
	return str.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
}

function hld_locateDealerEventTracker(action, label, suffix) {
	
	var category = "Locate A Dealer";
	if (suffix != '') {
		category += " - " + suffix;
	}
	
	hld_trackEventClick(category, action, label);
}

function hld_composeDealerEventTag(formObj, suffix) {
	
	var label = "";
	
	var valueEntered = ""
	var searchType = "";
	var services = "";
	//get the valuedEntered
	for (var i=0; i < formObj.length; i++) {
		var elementName = formObj.elements[i].name;
		
		if (elementName == 'valueEntered') {
			valueEntered = formObj.elements[i].value;
		} else if (elementName == 'searchCriteria') {
			searchType = formObj.elements[i].value;
		} else if (elementName == 'service') {
			if (formObj.elements[i].type == 'checkbox') {
				if (formObj.elements[i].checked) {
					services += formObj.elements[i].value + ",";
				}
			} else {
				services += formObj.elements[i].value + ",";
			}
		}
	}
	
	label = valueEntered + "," + services.slice(0, -1);
	
	if (searchType == 'Postcode') {
		hld_locateDealerEventTracker('Postcode Search', label, suffix);
	} else if (searchType == 'Dealer') {
		hld_locateDealerEventTracker('Dealer Name Search', label, suffix);
	} else if (searchType == 'Suburb') {
		hld_locateDealerEventTracker('Suburb & State Search', label, suffix);
	}
	
}


// Make each div as tall as the tallest div in dealer members page 
$(function() {
	try {
	var maxHeight = 0;
	var MemberModule = $(".teamMemberModule");
	MemberModule 
		.each(function() {
			if ($(this).height() > maxHeight) { maxHeight = $(this).height(); }
		})
		.height(maxHeight)
} catch (err) {
	
}

});


// REMOVE sIFR FROM CERTAIL ELEMENTS
$(function() {
try {
	$('.newsDetail h3').removeClass("sIFR-replaced");
	$('.newsDetail h3').addClass("sIFR-ignore");
} catch (err) {
	
}
});

hld_documentReady("fireOffPngFix")
function fireOffPngFix() {
	//$('div.ie6PngFix').pngFix();
}

function getResourcePath() {
	return hld_resource_path;
}