﻿var userNavigated = true;
var timoutVal = 250;


$(document).ready(function() {
    InitErrMsgBind();
    InitCompareHandler();
    InitEnterKeyHandler();
    InitTwitterHookUp();
    InitSubNavHook();
    InitCarViewTechDataHookUp();
    InitGeneralItems();
    InitFacetBind();
    InitThumbRotator();
    InitJustArrivedPanel();
    HookUpSearchResDDLS();
    InitWGCLinkOverride();
});

//$(document).ready(InitErrMsgBind);
//$(document).ready(InitCompareHandler);
//$(document).ready(InitEnterKeyHandler);
//$(document).ready(InitTwitterHookUp);
//$(document).ready(InitSubNavHook);
//$(document).ready(InitCarViewTechDataHookUp);
//$(document).ready(InitGeneralItems);
//$(document).ready(InitFacetBind);
//$(document).ready(InitThumbRotator);
//$(document).ready(InitJustArrivedPanel);

//lifestyle model page - coverflow
function SelectModelRange(capModelRangeId) {
    for (i = 0; i < lsmodels.length; i++) {
        if (lsmodels[i].ModelRangeID == capModelRangeId) {
            DisplayLSModelRange(lsmodels[i]);
            return;
        }
    }
}

function DisplayLSModelRange(result) {

    $get('modelTitle').innerHTML = result.ModelTitle;
    $get('modelImage').src = result.ModelImageUrl;
    $get('count').innerHTML = result.Count + " cars in stock <br />from " + result.PriceRangeText;

    $get('modelTitletop').innerHTML = result.ModelTitle;
    $get('counttop').innerHTML = "<strong>" + result.Count + " cars in stock</strong>";
    $get('pricerangetop').innerHTML = "from " + result.PriceRangeText;

    $get('viewcarslinktop').href = result.TargetUrl;
    $get('viewcarslink').href = result.TargetUrl;

}


function HookUpSearchResDDLS() {
    $(".links").css({ display: "" });

    var ddl = GetDotNetCtrl("ddlOrderByTop");
    if (ddl != null) ddl.change(ChangeOrderT);
    ddl = GetDotNetCtrl("ddlOrderByBtm");
    if (ddl != null) ddl.change(ChangeOrderB);
    ddl = GetDotNetCtrl("ddlPageSizeTop");
    if (ddl != null) ddl.change(ChangeRPT);
    ddl = GetDotNetCtrl("ddlPageSizeBtm");
    if (ddl != null) ddl.change(ChangeRPB);

    //enable if js
    // $("#footer_pagination").css({ display: "" });

}



function ChangeOrderT() {

    var ctl1 = GetDotNetDomCtrl("ddlOrderByTop");
    var ctl2 = GetDotNetDomCtrl("ddlOrderByBtm");
    UpdateFromCBO(ctl1, ctl2);
}
function ChangeOrderB() {

    var ctl1 = GetDotNetDomCtrl("ddlOrderByTop");
    var ctl2 = GetDotNetDomCtrl("ddlOrderByBtm");
    UpdateFromCBO(ctl2, ctl1);
}
function ChangeRPT() {
    var ctl1 = GetDotNetDomCtrl("ddlPageSizeTop");
    var ctl2 = GetDotNetDomCtrl("ddlPageSizeBtm");
    UpdateFromCBO(ctl1, ctl2);
}
function ChangeRPB() {
    var ctl1 = GetDotNetDomCtrl("ddlPageSizeTop");
    var ctl2 = GetDotNetDomCtrl("ddlPageSizeBtm");
    UpdateFromCBO(ctl2, ctl1);
}
function UpdateFromCBO(ctl1, ctl2) {
    bLockDown = true;
    if (ctl2 == null || ctl1 == null) return;
    SetDDLSelectedItem(ctl2, GetDDLSelectedItem(ctl1));
    bLockDown = false;
    //reset the btm
    pageNum = 1;
    DoFacetSearch("p");
}

//does full search with all the trimmings
function DoFacetSearch(tp) {
    //            if (bLockDown == true) return;
    //            if (!IsStringValid(tp)) tp = "f";
    //on change ddls lock events
    //update top/btm evnts
    //call apprp sch e.g. not full facet
    var qs = document.URL;

    //var pageType = GetPageType();
    var rowsPage = GetRowsPerPage();
    var sortOrder = GetSortOrder();

    //strip out rp,sort,page
    qs = qs.replace(/\&rp=\d+/g, "");
    qs = qs.replace(/rp=\d+/g, "");
    qs = qs.replace(/\&page=\d+/g, "");
    qs = qs.replace(/page=\d+/g, "");
    qs = qs.replace(/\&order=[a-z\-]+/g, "");
    qs = qs.replace(/order=[a-z\-]+/g, "");
    qs = qs.replace(/\?\&/g, "?");
    var charPos = qs.indexOf("?");
    if (charPos == -1) {
        qs = qs + "?";
    }
    else {
        //is there anything after the ?
        if (charPos != qs.length - 1) {
            if (qs.substr(qs.length - 1, 1) != "&") qs = qs + "&";
        }
    }
    qs = qs + "rp=" + rowsPage + "&order=" + sortOrder;
    document.location = qs;

    //create new search url

    //nav to url

    return;

}

function GetRowsPerPage() {
    ddl = GetDotNetDomCtrl("ddlPageSizeTop");
    if (ddl == null) ddl = GetDotNetDomCtrl("ddlPageSizeBtm");
    if (ddl == null) return "0";
    return GetDDLSelectedItem(ddl);
}
function GetSortOrder() {
    ddl = GetDotNetDomCtrl("ddlOrderByTop");
    if (ddl == null) ddl = GetDotNetDomCtrl("ddlOrderByBtm");
    if (ddl == null) return "";
    return GetDDLSelectedItem(ddl);
}

function InitCompareHandler() {
    // setupDetailViews();
    if (typeof handleCompareSelectedClick == 'function') {
        //compare lib not loaded
        var btn = $('#compare_selected_cars_button');
        if (btn != null && btn != undefined) { btn.click(handleCompareSelectedClick); }
        LoadCompareListFromCookie();
        attachCompareHandlers();
    }
    selectedPage = 1;
}

//LValidation.js
// ERROR MESSAGE FADE OUT RULES


function InitErrMsgBind() {
    $(".errormessage span").bind("mouseover", function() {
        $(this).fadeOut("fast");
    });
}

function InitEnterKeyHandler() {
    document.body.onkeypress = function(e) {
        var KeyID = (window.event) ? event.keyCode : e.keyCode;

        return !(KeyID == 13);
    };
}
// Small IE6 function that will support template on rare occasion that height is not properly worked out via css

function InitSubNavHook() {

    if ($("#subnav").length > 0) {
        var mentoswitch;
        var ctoadd;
        switch ($("#subnav").attr("class")) {
            case 'SearchCars': mentoswitch = "searchcars"; ctoadd = "1E417B"; break;
            case 'DealerSearch': mentoswitch = "dealersearch"; ctoadd = "324252"; break;
            case 'ValueCar': mentoswitch = "valuemc"; ctoadd = "2b5841"; break;
            case 'sellCar': mentoswitch = "sellmc"; ctoadd = "9d2169"; break;
            case 'GetAdvice': mentoswitch = "getadvice"; ctoadd = "8DC641"; break;
            case 'MyShowroom': mentoswitch = "myshowroom"; ctoadd = "F89520"; break;
            case 'NewsSub': mentoswitch = "news"; ctoadd = "582b2b"; break;
            default: ;
        }
        $("#" + mentoswitch + "").addClass("viewing");
        //IE6 FIX!
        $("#subnav").css({ 'background-color': '#' + ctoadd + '' });
    }
    // nav fix for ie6/7 where multidealer slider is active
    if ($.browser.msie) {
        $("#nav").hover(
    function() { $("#infopanel1, #infopanel2, #infopanelhead").css("zIndex", "-1"); }
    , function() { $("#infopanel1, #infopanel2, #infopanelhead").css("zIndex", ""); });
    }
    if ($(".verifysuccess").length > 0) { $("#verifysuccess_content").show("fast"); }

    $("#callinfo").hover(
      function() {
          $(this).addClass("hovered");
          swtich
      },
      function() {
          $(this).removeClass("hovered");
      });
}


// DETECT WHICH SUBNAV DIV IS CURRENTLY BEING DISPLAYED IN ORDER TO MAKE TOP LEVEL MENU OPTION ACTIVE AND "UN-DROPABLE".


// Function to control car view tabs

function InitCarViewTechDataHookUp() {
    $("#techmenu a").click(function() {
        var toShow;
        switch ($(this).attr("class")) {
            case 'equip': toShow = "cvequipment"; break;
            case 'tech': toShow = "cvtechspec"; break;
            case 'features': toShow = "cvfeatures"; break;
            default: ;
        }
        $("#techmenu li").removeClass("selected");
        $(this).parent().addClass("selected");
        $("#tech_details > div").slideUp("fast");
        $("#tech_details #" + toShow + "").slideDown("slow");
    });
}


function InitGeneralItems() {
    $(".ls_checked").each(function(i) {

        if ($(this).children("img").length == "0") {

            $(this).parent(".ls_recap").children().fadeTo("slow", 0.33);

        }

    });

    // Small fix for green tip not overlapping the more details container

    $(".search_green_tip_home").bind("mouseenter", function() {
        $(".detailContainer").css("z-index", "1");
    });
    $(".search_green_tip_home").bind("mouseleave", function() {
        $(".detailContainer").css("z-index", "2000");
    });


    // Sidebar Accordion effect

    $("#getadvice_accordion .accord-head").click(function() {

        $(this).next().slideToggle("normal");
        $(this).toggleClass("off");
    }).next().show();

    $("#myshowroom_accordion .accord-head").click(function() {
        if ($(this).next().find("li").length) {
            $(this).toggleClass("off");
            $(this).next().slideToggle("normal");
        } else {
            return false;
        }
    }).next().hide();

    $(".divexpand").click(function() {
        if ($(this).parent().attr("id") != "CVemaildealer") {
            if ($(this).parent().hasClass("open")) {
                $(this).parent().removeClass("open");
            } else {
                $(this).parent().addClass("open");
            }
            return false;
        }
    });
}






function InitTwitterHookUp() {
    $("#twitter_div a").click(function() {
        if (this.href.indexOf(location.hostname) == -1) {
            window.open($(this).attr('href'));
            return false;
        }
    });
}

function InitFacetBind() {
    $("#facettotal").bind("mouseenter", function() {

        $("#searchspeed").css("display", "block");

    });
    $("#facettotal").bind("mouseleave", function() {

        $("#searchspeed").css("display", "none");

    });

}




function validatedissapear(object) {

    if ($(object).parent().parent().attr("class") == "captchahold") {

        $(object).fadeOut("fast");

    } else {

        $(object).find('span').fadeOut("fast");
    }
}




/**
* Encodes a string to one that can be used as an element id.
* @param {String} id The string to be encoded.
* @return {String} Returns the encoded id.
*/
function encodeId(id) {
    return id.replace(/ /g, '_').replace(/\//g, '').replace(/\'/g, '').replace(/\+/g, '')
		.replace(/\"/g, '').replace(/\(/g, '').replace(/\)/g, '');
}

function URLEncode(clearString) {
    var output = '';
    var x = 0;
    if (!IsStringValid(clearString)) {
        clearString = '';
    }
    else {
        clearString = clearString.toString();
    }

    var regex = /(^[a-zA-Z0-9_.]*)/;
    while (x < clearString.length) {
        var match = regex.exec(clearString.substr(x));
        if (match != null && match.length > 1 && match[1] != '') {
            output += match[1];
            x += match[1].length;
        } else {
            if (clearString[x] == ' ')
                output += '+';
            else {
                var charCode = clearString.charCodeAt(x);
                var hexVal = charCode.toString(16);
                output += '%' + (hexVal.length < 2 ? '0' : '') + hexVal.toUpperCase();
            }
            x++;
        }
    }
    return output;
}

var Watermark = {
    attachToTextBox: function(textbox, watermarkText) {
        $(textbox).focus(function() {
            if ($(this).val() == watermarkText)
                $(this).val('');
        }).blur(function() {
            if ($.trim($(this).val()) == '')
                $(this).val(watermarkText);
        }).val(watermarkText);
    }
}

var genericLightboxContent;

var Lightbox = {
    callGenericLightbox: function(state, content) {
        genericLightboxContent = content;
        DisplayLightBox('genericlightbox', '600', '300', 'true');
    },
    callForgottenPasswordLightbox: function(state) {
        DisplayLightBox('forgottenpasswordlightbox', '600', '300', 'true');
    },
    callArrangeTestDriveLightbox: function(o) {
        var url = 'dyn/arrangetestdrivelightbox';
        url += '?title=' + o.title;
        url += '&registration=' + o.registration;
        url += '&dealerEmail=' + o.dealerEmail;
        url += '&dealerName=' + o.dealerName;
        url += '&dealerAddress=' + o.dealerAddress;
        url += '&price=' + o.price;
        url += '&url=' + o.url;
        url += '&id=' + o.id;

        DisplayLightBox(url, '600', '450', 'true', 'true');

    },
    callSimplyEnquireLightbox: function(o) {
        var url = 'dyn/simplyenquirelightbox';
        url += '?title=' + o.title;
        url += '&registration=' + o.registration;
        url += '&dealerEmail=' + o.dealerEmail;
        url += '&dealerName=' + o.dealerName;
        url += '&dealerAddress=' + o.dealerAddress;
        url += '&price=' + o.price;
        url += '&url=' + o.url;
        url += '&id=' + o.id;
        DisplayLightBox(url, '600', '450', 'true', 'true');
    },
    callDealerEmailOnlyLightbox: function(o) {
        var url = 'dyn/dealeremaillightbox';
        url += '?dealerEmail=' + o.dealerEmail;
        url += '&dealerName=' + o.dealerName;
        url += '&dealerAddress=' + o.dealerAddress;
        DisplayLightBox(url, '600', '450', 'true', 'true');
    },
    callDealerMapLightbox: function(o) {
        var url = 'dyn/dealermap';
        url += '?dealerlng=' + o.dealerLng;
        url += '&dealerlat=' + o.dealerLat;
        url += '&StartAd=' + o.startAd;
        url += '&dealerPostcode=' + o.dealerPostcode;
        url += '&dealerName=' + o.dealerName;
        DisplayLightBox(url, '745', '450', 'true', 'true');
    }
}

function IsDefined(varName) {
    return typeof (window[varName]) != "undefined";
}

function AppendCTASource() {
    if (typeof CTASRC == "undefined" || CTASRC == null || CTASRC == "") return "";
    return "&ctasrc=" + CTASRC;
}

function DisplayDealerEmailLB(id) {
    var url = 'dyn/dealeremaillightbox?id=' + id + AppendCTASource();
    DisplayLightBox(url, '600', '450', 'true', 'true');
}

function DisplayDealerEnquiryLB(id) {
    var url = 'dyn/simplyenquirelightbox?vid=' + id + AppendCTASource();
    DisplayLightBox(url, '600', '450', 'true', 'true');
}

function DisplayArrangeTestDriveLB(id) {
    var url = 'dyn/arrangetestdrivelightbox?vid=' + id + AppendCTASource();
    DisplayLightBox(url, '600', '450', 'true', 'true');
}
function DisplayCallMeBackLB(id) {
    var url = 'dyn/callmebacklightbox?vid=' + id + AppendCTASource();
    DisplayLightBox(url, '600', '450', 'true', 'true');
}
function displayGenericError() {
    displaySpecificError('genericerror');
}

function displayFeedbackLB() {
    DisplayLightBox('feedbackform', '600', '450', 'true');
}

function displaySpecificError(errorPage) {
    DisplayLightBox(errorPage, '485', '162', 'true');
}

//
function LBEmailAdrNotValid() {
    DisplayLightBox('emailaddressnotvalidated', '485', '162', 'true');
}

//function LBEmailSent() {
//    DisplayLightBox('senttoafriend', '485', '162', 'true');
//}

function LBUserInfoIncorrect() {
    DisplayLightBox('userinfoincorrect', '485', '162', 'true');
}

function DisplayLightBox(lightPageName, width, height, isModal, iFrame) {
    var bHasParams = (lightPageName.indexOf("?") > -1);
    if (IsObjectValid(iFrame)) { iFrame = '&TB_iframe=' + iFrame; }
    else { iFrame = ''; }
    tb_show('', BuildJSUrl() + 'lightbox/' + lightPageName + (bHasParams == true ? '&' : '?') + 'height=' + height + '&width=' + width + '&modal=' + isModal + iFrame);

}

//function DisplayLightBoxTOP(lightPageName, width, height, isModal, iFrame) {
//    var bHasParams = (lightPageName.indexOf("?") > -1);
//    if (IsObjectValid(iFrame)) { iFrame = '&TB_iframe=' + iFrame; }
//    else { iFrame = ''; }
//    tb_show('', BuildJSUrl() + 'lightbox/' + lightPageName + (bHasParams == true ? '&' : '?') + 'height=' + height + '&width=' + width + '&modal=' + isModal + iFrame);

//}



//function TS(v) {
//    var val = v.toString();
//    var result = "";
//    var len = val.length;
//    while (len > 3) {
//        result = "," + val.substr(len - 3, 3) + result;
//        len -= 3;
//    }
//    return val.substr(0, len) + result;
//}






// Fade out elements in order on a particular page using class name (see lifestyle page)

jQuery.fn.fadeOutOneByOne = function() {
    var $this = this, count = this.length;
    fadeOutElement(0);

    function fadeOutElement(i) {
        var el = $this[i];
        jQuery(el).fadeOut(250, function() {
            if (++i < count)
                fadeOutElement(i);
        });
    };
};

function SetAccordOpen(panelid) {

    $(document).ready(function() {
        if ($(panelid).next().find("li").length) {
            $(panelid).next().show("normal");
            $(panelid).removeClass("off");
        } else {
            return false;
        }
    });

}


//Helper Functions...
//========================


function IsObjectValid(obj) {
    if (obj == undefined) return false;
    if (obj == null) return false;
    return true;
}

function JSDebug(s) {
    if (!IsObjectValid(debugMode)) return;
    if (debugMode == true) {
        alert(s);
    }
}

function AddSessionCookie(cookieName, value, minutes) {
    var exdate = null;
    document.cookie = cookieName + "=" + escape(value) + ";path=/" +
((minutes == null) ? "" : ";expires=" + exdate.toGMTString());
}

function RemoveCookie(cookieName) {
    var value = '';
    var exdate = new Date();
    exdate.setDate(exdate.getDate() - 99);
    document.cookie = cookieName + "=" + escape(value) + ";path=/" +
(";expires=" + exdate.toGMTString());
}
function AddCookie(cookieName, value, numDays) {
    var exdate = new Date();
    exdate.setDate(exdate.getDate() + numDays);
    document.cookie = cookieName + "=" + escape(value) + ";path=/" +
((numDays == null) ? "" : ";expires=" + exdate.toGMTString());
}

function ReadCookie(cookieName) {
    if (document.cookie.length > 0) {
        c_start = document.cookie.indexOf(cookieName + "=");
        if (c_start != -1) {
            c_start = c_start + cookieName.length + 1;
            c_end = document.cookie.indexOf(";", c_start);
            if (c_end == -1) c_end = document.cookie.length;
            return unescape(document.cookie.substring(c_start, c_end));
        }
    }
    return null;
}
function $get(id) {
    return document.getElementById(id);
}

function RedirectJSUrl(url) {
    window.location.href = url;
}
function RedirectJSUrlExt(nurl) {

    window.open(nurl);
}
function ExtractIDFromDotNetName(name) {
    //find last $ in
    var idx = name.lastIndexOf("$");
    if (idx > -1) {
        return name.substr(idx + 1);
    }
    return name;
}

function GetDotNetCtrl(id) {
    return $("*[id$='" + id + "']:first");
}
function GetDotNetDomCtrl(id) {
    var els = $("*[id$='" + id + "']");
    return els[0];
}


function IsStringValid(s) {
    if (s == undefined) return false;
    if (s == null) return false;
    if (s == '') return false;
    return true;
}



function GetDDLSelectedItem(ddl) {
    if (ddl == null) return "";
    if (ddl.selectedIndex == -1) return "";
    return ddl.options[ddl.selectedIndex].value;
}

function GetDDLSelectedText(ddl) {
    if (ddl == null) return "";
    if (ddl.selectedIndex == -1) return "";
    return ddl.options[ddl.selectedIndex].text;
}

function SetDDLSelectedItem(ddl, val) {
    if (ddl == null) return "";
    var selIdx = -1;
    for (var i = 0; i < ddl.options.length; i++) {
        if (ddl.options[i].value == val)
        { selIdx = i; break; }
    }
    if (selIdx > -1) ddl.selectedIndex = selIdx;
}

function RemovePostCodeFromQuery(url) {
    var newUrl = url.replace(/sv=[\sa-z0-9A-Z\+%]+/g, "");
    newUrl = newUrl.replace(/st=[\sa-z0-9A-Z\+%]+/g, "");
    newUrl = newUrl + "&st=postcode&sv=empty";
    return ClearUrlPreSend(newUrl);
}

function ClearUrlPreSend(url) {
    var newUrl = url.replace(/\&\&/g, "&");
    newUrl = newUrl.replace(/\?\&/g, "?");
    if (newUrl.indexOf("?") < 0) {
        newUrl = newUrl.replace(/\&/, "?");
    }
    return newUrl;
}



function StartsWith(str, strPart)
{ return (str.match("^" + strPart) == strPart) }

function EndsWith(str, strPart)
{ return (str.match(strPart + "$") == strPart) }


//=============
function IsEmailAddressValid(emailAddress) {
    var pattern = new RegExp(/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i);
    return pattern.test(emailAddress);
}
function IsTelephoneValid(telephone) {
    var pattern = new RegExp(/^(\++)?[\s0][0-9\s\-]+$/);
    return pattern.test(telephone);

}

function ValidatePostCode(text) {
    text = text.replace(/\s/g, "");
    text = text.toUpperCase();
    return text.match(/^[a-zA-Z]{1,2}[0-9]{1,2}\s*[0-9]{1,2}[a-zA-Z]{1,2}$/);
}

//=============





var bPrevPanelVis = false;



var lastmdlClass;
function _displayNewContent(sTargetID, content, sClass) {
    if (sClass == undefined) sClass = '';
    $("#infopanelloader").hide();
    $("#infopanel" + sTargetID).css({ 'display': 'none' });
    //set the heights by class
    $("#iplcontent" + sTargetID).html(content);

    if (sClass == undefined) sClass = '';
    if (lastmdlClass != undefined && lastmdlClass != null && lastmdlClass != "") {
        $("#infopanel1").removeClass(lastmdlClass);
        $("#infopanel2").removeClass(lastmdlClass);
        $("#infopanelhead").removeClass(lastmdlClass);
    }
    lastmdlClass = sClass;

    if (sClass != null && sClass != '') {
        $("#infopanel" + sTargetID).addClass("iplhold");
        $("#infopanel" + sTargetID).addClass(sClass);
        $("#infopanelhead").addClass(sClass);
    }
    infoPanelClass = sClass;

    _initInfoPanel();
    var theHeight = $("#infopanel" + sTargetID).height();
    $("#content").css({ 'margin-top': _getInfoPanelMarginOffset(theHeight) });
    var ipHeadHeight = $("#infopanelhead").height();
    $("#infopanel" + sTargetID).css({ 'visibility': 'visible' });
    $("#infopanelcontenthold").css({ 'visibility': 'visible' });
    $("#infopanelhead").css({ 'visibility': 'visible', 'display': '' });
    $("#infopanel" + sTargetID).fadeIn(200);


}


function _getActivePanel() {
    var content1 = $("#iplcontent1").html();
    if (content1 != null && content1.length > 0) return '1';
    var content2 = $("#iplcontent2").html();
    if (content2 != null && content2.length > 0) return '2';
    return '0';
}


var bInitInfoPanelLoaded = false;

function _initInfoPanel() {
    if (bInitInfoPanelLoaded) return; bInitInfoPanelLoaded = true;
    if (bInfoPanelOpen | bPrevPanelVis) CloseInfoPanel(true);
    if (!$("#subnav").find("ul").length) { $("#infopanelloader,#infopanel1,#infopanel2,#infopanelhead").addClass("nosub"); }
    if (!$("#breadcrumb").length) { $("#infopanelloader,#infopanel1,#infopanel2,#infopanelhead").removeClass("nosub"); $("#infopanelloader,#infopanel1,#infopanelhead").addClass("nobc"); };

    infoPanelTopOffset = 20;
    var pd = parseInt($("#content").css("padding-top"));
    var ipHeadHeight = $("#infopanelhead").height();
    contentOffset = $("#content").offset().top;
    infoPanelTop = contentOffset + pd + 5 - infoPanelTopOffset;
    $("#infopanelhead").css({ 'top': infoPanelTop, 'visibility': 'visible' });
    $("#infopanelhead").show();
    infoPanelTop += ipHeadHeight;
    $("#infopanelloader").css({ 'top': infoPanelTop });
    $("#infopanel1").css({ 'top': infoPanelTop });
    $("#infopanel2").css({ 'top': infoPanelTop });
    bInfoPanelOpen = true;
}

function _getInfoPanelMarginOffset(infoPanelHeight) {
    return infoPanelHeight + 244 - infoPanelTopOffset + 8;
}



function _setInfoPanelDimsOnClose(activePanel) {
    $("#infopanelhead").hide();
    $("#content").css({ 'margin-top': 230 });
    if (infoPanelClass != null && infoPanelClass != '') {
        $("#infopanel" + activePanel).removeClass(infoPanelClass);
    }
}


function CloseInfoPanel(bQuick) {
    bInfoPanelOpen = false;
    if (contentOffset == null) return;
    var activePanel = _getActivePanel();

    if (bQuick == undefined || bQuick == false) {
        $("#infopanel" + activePanel).slideUp("fast", function() {
            _setInfoPanelDimsOnClose(activePanel);
        });
    }
    else {
        $("#infopanel" + activePanel).hide();
        _setInfoPanelDimsOnClose(activePanel);
    }

    $("#iplcontent" + activePanel).html('');
    //    //Reset the close id's
    $("#iplcloselnk1").click(CloseInfoPanel);
    $("#iplcloselnk2").click(CloseInfoPanel);
}

//display inline message 
function ShowInfoPanel(panelType, title, message, fncallback) {
    sTitle = "<h4>" + title + "</h4>";
    sContent = "<p>" + message + "</p>";
    var sClass = '';
    switch (panelType) {
        case "error": sClass = "Error"; break;
        case "success": sClass = "Success"; break;
        case "tip": sClass = "Tip"; break;
        //  case "insidetip": break;    
        default: return;
    }
    var content = sTitle + sContent;

    CloseInfoPanel(true);
    $("#iplcloselnk1").unbind();
    $("#iplcloselnk2").unbind();
    if (fncallback != undefined) {

        $("#iplcloselnk1").click(fncallback);
    }
    else {
        $("#iplcloselnk1").click(CloseInfoPanel);
        $("#iplcloselnk2").click(CloseInfoPanel);
    }

    if (sClass == undefined) sClass = '';
    if (lastmdlClass != undefined && lastmdlClass != null && lastmdlClass != "") {
        $("#infopanel1").removeClass(lastmdlClass);
        $("#infopanel2").removeClass(lastmdlClass);
        $("#infopanelhead").removeClass(lastmdlClass);
    }
    lastmdlClass = sClass;

    _initInfoPanel();
    $("#iplcontent1").html(content);
    if (sClass != null && sClass != '') {
        $("#infopanel1").addClass(sClass);
        $("#infopanelhead").addClass(sClass);
    }
    infoPanelClass = sClass;
    var theHeight = $("#infopanel1").height(); // 150; 
    $("#content").css({ 'margin-top': _getInfoPanelMarginOffset(theHeight) });
    var ipHeadHeight = $("#infopanelhead").height();
    $("#infopanel1").css({ 'visibility': 'visible' });
    $("#infopanelcontenthold").css({ 'visibility': 'visible' });
    $("#infopanelhead").css({ 'visibility': 'visible', 'display': '' });
    $("#infopanel1").slideDown('fast');
}

//replace or udate text in an info panel
function DisplayToggledContent(content, sClass, fncallback) {
    var prevTarget = _getActivePanel();
    var bCloseLoader = false;
    var sTarget = '2';
    switch (prevTarget) {
        case '0': bCloseLoader = true; sTarget = '1'; prevTarget = '2';
        case '1': bCloseLoader = false; sTarget = '2';
        case '2': bCloseLoader = false; sTarget = '1';
    }
    bInfoPanelOpen = false;
    if (bPrevPanelVis) {
        $("#infopanel" + prevTarget).fadeOut(200, function() {

            _displayNewContent(sTarget, content, sClass)
        });
    }
    else {
        _displayNewContent(sTarget, content, sClass);
    }
    bPrevPanelVis = true;

    //hide and clear the other panel
    $("#iplcontent" + prevTarget).html('');
    $("#iplcloselnk1").unbind();
    $("#iplcloselnk2").unbind();

    if (fncallback != undefined) {
        $("#iplcloselnk" + sTarget).click(fncallback)
    }
    else {
        //reset

        $("#iplcloselnk1").click(CloseInfoPanel);
        $("#iplcloselnk2").click(CloseInfoPanel);

    }
}

//display data after an ajax call
function DisplayAjaxInfoBar(fnAjax) {
    CloseInfoPanel(true);
    _initInfoPanel();
    var loaderHeight = 73; //lock loader height down
    $("#infopanelloader").height(loaderHeight);
    $("#content").css({ 'margin-top': _getInfoPanelMarginOffset(loaderHeight) });
    $("#infopanelloader").css({ 'display': 'none', 'visibility': 'visible' });
    $("#infopanelloader").show();
    fnAjax();
}


function FacetPostCodeSearch() {
    if (fctbaseurl == undefined) return;
    var txtPostCode = $.trim(GetDotNetCtrl("txtPostCode").val());
    if (txtPostCode == "") txtPostCode = "empty";
    var newUrl = RemovePostCodeFromQuery(fctbaseurl);
    newUrl = newUrl.replace(/sv=empty/g, "sv=" + txtPostCode);
    newUrl = ClearUrlPreSend(newUrl);
    window.location.href = newUrl;
}

function ReplaceNumQueryParam(qParam, qVal, url) {
    var newParam = qParam + "=" + qVal;
    var reg = new RegExp(qParam + '\=\\d', 'g');
    url = url.replace(reg, qParam + "=" + qVal);
    if (url.indexOf(qParam + "=") < 0) url += url.indexOf("?") < 0 ? "?" : "&" + newParam

    url = ClearUrlPreSend(url);
    return url;
}

function FacetImageSearch() {
    if (fctbaseurl == undefined) return;
    var url = fctbaseurl;
    var bSelVal = $get("chkFctImgs").checked;
    if (!bSelVal) {
        url = url.replace(/[\?|\&]images=\d/g, "");
    }
    else {
        url = ReplaceNumQueryParam('images', "1", url);
    }

    url = ClearUrlPreSend(url);
    window.location.href = url;
}

function FacetReducedSearch() {
    if (fctbaseurl == undefined) return;
    var url = fctbaseurl;
    var bSelVal = $get("chkFctRced").checked;
    if (!bSelVal) {
        url = url.replace(/[\?|\&]reduced=\d/g, "");
    }
    else {
        url = ReplaceNumQueryParam('reduced', "1", url);
    }

    url = ClearUrlPreSend(url);
    window.location.href = url;
}

function TestMinPriceCBO() {
    var minprice = parseInt($("#minprice").val());
    var maxprice = parseInt($("#maxprice").val());
    if (minprice == 0 || maxprice == 0) return;
    if (minprice > maxprice) maxprice = 0;
    $("#maxprice").val(maxprice);
}
function TestMaxPriceCBO() {
    var minprice = parseInt($("#minprice").val());
    var maxprice = parseInt($("#maxprice").val());
    if (minprice == 0 || maxprice == 0) return;
    if (minprice > maxprice) minprice = 0;
    $("#minprice").val(minprice);
}

function FacetUpdatePriceRange() {
    if (fctbaseurl == undefined) return;
    //get min price
    var url = fctbaseurl;
    var minprice = parseInt($("#minprice").val());
    if (minprice > 0) {
        url = ReplaceNumQueryParam('minprice', minprice, url);
    }
    else {
        url = url.replace(/[\?|\&]minprice=\d/g, "");
    }

    //get max price
    var maxprice = parseInt($("#maxprice").val());
    if (maxprice > 0) {
        url = ReplaceNumQueryParam('maxprice', maxprice, url);
    }
    else {
        url = url.replace(/[\?|\&]maxprice=\d/g, "");
    }

    url = ClearUrlPreSend(url);
    window.location.href = url;
}





function HandleEnterKey(e, delegateFunc, delegateParam) {
    var characterCode;
    if (e && e.which) // NN4 specific code
    {
        characterCode = e.which;
    } else {
        characterCode = e.keyCode; // IE specific code
    }
    if (characterCode == 13) //// Enter key is 13
    {
        if (delegateParam != undefined) {
            delegateFunc(delegateParam);
        }
        else {
            delegateFunc();
        }
    }

}


var thbSlideShowActive;
var thbimages;
var currCtl;
var thbIntervalID;
var thbCurPos;
var thbImageCount;
var bStartedThb;



//Thumb scroller js =====================


function InitThumbRotator() {
    $('.imgrollover').mouseover(function() {
        if (!bUseTHBSlideShow) return;
        if (thbSlideShowActive) return;
        LoadImagesForSlideShow($(this));
        PreCacheThbImages(thbimages);
        currCtl = $(this);
        StartThbRollOver()
    });
    $('.imgrollover').mouseout(function() {
        if (!bUseTHBSlideShow) return;
        StopThbRollOver($(this));
    });

    $('.imgrollover').click(function() {
        if (!bUseTHBSlideShow) return;
        StopThbRollOver($(this));
    });
}


function LoadImagesForSlideShow(ctl) {
    var imgCount = 0;
    var imgRef = 0;
    try { imgCount = parseInt(ctl.attr('icnt')); }
    catch (e) { return; }
    try { imgRef = parseInt(ctl.attr('iref')); }
    catch (e) { return; }
    if (imgCount < 2) return;
    thbimages = new Array();
    for (var i = 0; i < imgCount; i++) {
        thbimages[i] = GetRollOverThbName(imgRef, i + 1);
    }
}

//prevent flicker as images load
function PreCacheThbImages(thbimages) {
    if (thbimages == undefined || thbimages == null) return;
    if (thbimages.length < 2) return;
    var hiddendiv = $("#hiddendatastore");
    for (var i = 0; i < thbimages.length; i++) {
        hiddendiv.prepend('<img style="opacity:0;" src="' + thbimages[i] + '" class="thbpreloader">');
    }
}

function GetRollOverThbName(imgRef, imgPos) {
    return $("#thb" + imgRef).attr("src").replace(/_[0-9]+_c\.jpg/g, "_" + imgPos + "_c.jpg");
}

function ChangeThbSlide() {
    if (thbSlideShowActive && currCtl != null) {
        thbCurPos = thbCurPos + 1;
        if (thbCurPos >= thbImageCount) { thbCurPos = 0 }
        currCtl.parent().css('backgroundImage', 'url(' + thbimages[thbCurPos] + ')');
        currCtl.css('opacity', '0');
    }
}

function StartThbRollOver() {
    if (thbimages == undefined || thbimages == null) return;
    thbImageCount = thbimages.length;
    if (thbImageCount < 2) return;
    thbCurPos = 0;
    thbSlideShowActive = true;
    thbIntervalID = setInterval("ChangeThbSlide()", thbSlideShowInterval);
}

function StopThbRollOver(ctl) {
    $('.thbpreloader').remove();
    thbSlideShowActive = false;
    bStartedThb = false;
    clearInterval(thbIntervalID);
    ctl.css('opacity', '100');
    ctl.parent().css('backgroundImage', '');
    thbimages = [];
}


//Free Text Search =========================

function DoTextSearch(txtID) {
    //get the text value
    var searchText = "";
    if (txtID == undefined || txtID == null || txtID == "") {
        searchText = GetDotNetCtrl("txtFTSearch").val();
    }
    else {
        searchText = $("#" + txtID).val();
    }
    if (!IsStringValid(searchText) || (defaultFTSearchText == searchText)) {
        alert("We were unable to search cars because no search word(s) was entered!");
        return;
    }

    searchText = searchText.replace(/[<>]/g, ' ');
    searchText = $.trim(searchText);
    var query = encodeURI(searchText)

    var url = BuildJSUrl() + "search?q=" + query;
    window.location.href = url;
}




function clickclear(thisfield, defaulttext) {
    if (thisfield.value == defaulttext) {
        thisfield.value = "";
    }
}

function clickrecall(thisfield, defaulttext) {
    if (thisfield.value == "") {
        thisfield.value = defaulttext;
    }
}


var CTASRC = "";
function RunActionCalls(vid, dlrid) {
    var query = window.location.search;
    var qparam = "";
    var src;
    if (query.length == 0) return;
    query = query.substring(1);
    var parameters = query.split('&');
    if (parameters.length < 2) return;
    for (var i = 0; i < parameters.length; i++) {
        var paramItem = parameters[i].split('=');
        if (paramItem.length == 2) {
            switch (paramItem[0]) {
                case "src": src = paramItem[1]; break;
                case "cta": qparam = paramItem[1]; break;
            }
        }
    }
    CTASRC = src;
    switch (qparam) {
        case "book-test-drive":
            DisplayArrangeTestDriveLB(vid);
            break;
        case "email-dealer":
            DisplayDealerEmailLB(dlrid);
            break;
        case "vehicle-enquiry":
            DisplayDealerEnquiryLB(vid);
            break;
        case "call-me-back":
            DisplayCallMeBackLB(vid);
            break;
        case "send-to-friend":
            sendToAFriend('Saw this car on Carmony.co.uk, what do you think?', vid);
            break;
    }

}
//Just Arrived js =====================







var justArrivedActive = false;
var justArrivedItems = 0;
var justArrivedCurPos = 0;
var justArrivedInterval = 4000;
var justArrivedIntervalID;

function ChangeJustArrivedItem() {
    if (justArrivedActive) {
        DisableJAItem(justArrivedCurPos);
        justArrivedCurPos = justArrivedCurPos + 1;
        if (justArrivedCurPos > justArrivedItems) { justArrivedCurPos = 1 }
        EnableJAItem(justArrivedCurPos);
    }
}

function EnableJAItem(pos) {
    $("#carinfo > div:nth-child(" + pos + ")").show("slow");
    $("#isthumbs > div:nth-child(" + pos + "), #isthumbs > div:nth-child(" + pos + ") img").fadeTo("fast", "1").addClass("active");
}

function DisableJAItem(pos) {
    $("#carinfo > div:nth-child(" + pos + ")").hide();
    $("#isthumbs > div:nth-child(" + pos + ")").fadeTo("fast", "0.4").removeClass("active");
}

function InitJustArrivedPanel() {
    $("#carinfo > div:first-child").show();
    $("#isthumbs > div:nth-child(1), #isthumbs > div:nth-child(1) img").fadeTo("fast", "1").addClass("active");
    $("#isthumbs img").removeClass("imgrollover").attr("iref", "").attr("icnt", "").attr("id", "");
    $("#isthumbs .car").mouseover(function() { $(this).css("opacity", "1"); }).mouseout(function() { if (!$(this).hasClass("active")) { $(this).css("opacity", "0.4"); } });

    justArrivedItems = $("#carinfo > div").length;
    if (justArrivedItems < 2) return;
    justArrivedCurPos = 1;
    justArrivedActive = true;
    justArrivedIntervalID = setInterval("ChangeJustArrivedItem()", justArrivedInterval);
}



//Check for broken images
function CheckStockImgs() {
    var imgs = new Array();
    for (var i = 0; i < document.images.length; i++) {
        var img = document.images[i];
        if (img.complete) {
            if (img.naturalWidth == "undefined" || img.naturalWidth == 0) {
                var imgSrc = ReplaceMissingImgSrc(img.src);
                if (imgSrc != "") {
                    img.src = imgSrc;
                }
            }
        }
    }
}


function ReplaceMissingImgSrc(imgSrc) {

    if (imgSrc.match(/images\/stock\/\d+\/\d+\/thumbnail.*/g)) {
        return GetAwaitingImageThumbnail();
    }
    if (imgSrc.match(/images\/stock\/\d+\/\d+\/gallery.*/g)) {
        return GetAwaitingImageGallery();
    }
    if (imgSrc.match(/images\/stock\/\d+\/\d+\/gallerysml.*/g)) {
        return GetAwaitingImageGallerySml();
    }
    if (imgSrc.match(/images\/stock\/\d+\/\d+\/standard.*/g)) {
        return GetAwaitingImageStandard();
    }
    if (imgSrc.match(/images\/stock\/\d+\/\d+\/highres.*/g)) {
        return GetAwaitingImageHigRes();
    }
    return "";
}




//$(document).ready(function() {
//    $('img[@readyState*="uninitialized"]').each(
//    function() {
//        var imgSrc = ReplaceMissingImgSrc($(this).attr("src"));
//        if (imgSrc != "") {
//            $(this).attr("src", imgSrc);
//        }
//    }
//    )
//    CheckStockImgs()
//});


//PARKED CAR CODE
//================================

var parkedCarCookieName = "PARKEDCARS";

function addParkedCarToCookie(vid) {
    var cookieText = ReadCookie(parkedCarCookieName);
    if (cookieText == null) cookieText = "";
    var list = cookieText.split(";");
    //move parked car to top
    cookieText = vid + "_n;";
    var counter = 0;
    for (var i = 0; i < list.length; i++) {
        counter++;
        if (counter > 24) break;
        var el = list[i].split("_");
        if (el.length == 2) {
            if (parseInt(el[0]) == vid) { continue; }
            cookieText += list[i] + ";";
        }
    }
    AddCookie(parkedCarCookieName, cookieText, 60);
}

function removeParkedCarFromCookie(vid) {
    var cookieText = ReadCookie(parkedCarCookieName);
    var list = cookieText.split(";");
    var newCookieText = "";
    //move parked car to top 
    for (var i = 0; i < list.length; i++) {
        var el = list[i].split("_");
        if (el.length == 2) { if (parseInt(el[0]) == vid) { continue; } }
        newCookieText += list[i] + ";";
    }
    AddCookie(parkedCarCookieName, newCookieText, 60);
}

function DeleteParkedCar(vid) {
    if (vid == 0) return;
    if (confirm("Are you sure you want to delete the selected car from the list")) {
        removeParkedCarFromCookie(vid);
        var cookieText = ReadCookie(parkedCarCookieName);
        ShowParkedProgress("none");
        GetParkedCarsFromCookie(vid, cookieText, AddParkedCarList_Success, AddParkedCarList_Fail)
    }
}

function ShowParkedProgress(DivToFind) {
    var progDiv = $("#parkcarprog");

    if (DivToFind == "none") {
        //$("#pkdata").fadeTo("fast", "0");
        $("#pkdata").css("visibility", "hidden");
        progDiv.css("height", "" + $("#pkdata").height() + "px").css("width", "" + $("#pkdata").width() + "px").css("display", "block");

    } else {
        DivToFind = $("#resultsContainer #" + DivToFind + "");
        DivToFind.css("visibility", "hidden");
        PosSet = DivToFind.position();
        progDiv.css("top", "" + PosSet.top + "px").css("left", "" + PosSet.left + "px").css("display", "block");
    }
}

function DeleteManagedParkedCar(vid) {
    if (vid == 0) return;
    if (confirm("Are you sure you want to delete the selected car from the list")) {
        removeParkedCarFromCookie(vid);
        var cookieText = ReadCookie(parkedCarCookieName);
        ShowParkedProgress(vid);
        GetManagedParkedCarsFromCookie(vid, cookieText, AddParkedCarList_Success, AddParkedCarList_Fail)
    }
}

function AddToParkedCarList(vid) {
    addParkedCarToCookie(vid);
    var cookieText = ReadCookie(parkedCarCookieName);
    GetParkedCarsFromCookie(vid, cookieText, AddParkedCarList_Success, AddParkedCarList_Fail)
}
function AddParkedCarList_Success(data) {
    $("#parkcarprog").hide(); $("#pkdata").css("visibility", "visible");

    try { UpdateParkCarDetails(data.Count) } catch (err) { }
    try { UpdateParkCarMenuCount(data.Count); } catch (err) { }
    try { $("#pkdata").html(data.Html); } catch (err) { }
}
function AddParkedCarList_Fail() {
    $("#parkcarprog").hide(); $("#pkdata").css("visibility", "visible");
    alert("Sorry, but it was not possible to update the parked car list at this time.")
}

//VALIDATION FUNCTIONS
//===============================

function ValidateDate(txt) { return false; }

function ValidateTelephone(txt) {
    var errMsg = ValidateRequired(txt);
    if (errMsg != "") return errMsg;
    if (txt.match(/^[0-9\s\(\)\+\-\.]{8,}$/) == null) {
        return "Value entered contains invalid characters or is too short.";
    }
    return "";
}
function ValidateEmail1(txt) {
    var errMsg = ValidateRequired(txt);
    if (errMsg != "") return errMsg;
    if (txt.match(/^[0-9A-Za-z][0-9A-Za-z\-_]*(\.[0-9A-Za-z][0-9A-Za-z\-_]*)*@[0-9A-Za-z][0-9A-Za-z\-_]*(\.[0-9A-Za-z][0-9A-Za-z\-_]*)*$/) == null) {
        return "Value entered was not a vaild email.";
    }
    return "";
}
function ValidatePostCodeCtrl(txt) {
    var errMsg = ValidateRequired(txt);
    if (errMsg != "") return errMsg;
    if (!ValidatePostCode(txt)) {
        return "The postcode is not valid.";
    }
    return "";
}
function ValidateRequired(txt) {
    if (txt == "") return "This field is required, to continue please enter a value.";
    return "";
}
function ValidateMinLength(txt, minlen) {
    return "";
}


function ValidateFields(valcls) {

    var errCount = 0;
    $("." + valcls).each(function() {
        var itm = $(this);


        var valdivID = GetValDiv(itm);
        var valDiv = $("#" + valdivID);
        //get the validation function from the diff
        var vfunc = valDiv.attr('valfunc');
        if (vfunc != "undefined" && vfunc != null) {
            vfunc = vfunc + "('" + itm.val() + "');"
            var errMsg = eval(vfunc);
            if (errMsg == "") {
                //hide div
                valDiv.hide();
            }
            else {
                errCount++;
                if (errCount == 1) {
                    //display tip as soon as first error appears
                    hideTip();
                }
                valDiv.html(errMsg);
                valDiv.show();
            }
        }
    })
    if (errCount > 0) { }

    return (errCount == 0);
}

function GetValDiv(itm) {
    return "val" + ExtractIDFromDotNetName(itm.attr('name')).toLowerCase();
}

//pass a class in that is associated with all the control you want to clear
function Clear(cls) {

    $("." + cls).each(function() {
        var itm = $(this);
        itm.val("");
    })
}

function InitWGCLinkOverride() {

    $(".gscr").hover(function() {

        $(this).children("span").html("<a href='http://www.whatgreencar.com' target='_blank'></a>");

    }, function() {


        $(this).children("span").html("");

    });

}