(function ($) { $.fn.quicksearch = function (options) { var defaults = $.extend({ ver: 1.0, branchId: null, stockpage: 'http:\/\/' + document.domain + '\/vehicle.html', jsonpath: 'http://jquery.dealerbase.co.nz', title: 'SEARCH ALL STOCK', pagecookiename: null, //<--use page as cookiename enablecookie: false, //<--no saving to cookie reload: false, //<--call this only when reloading with no extra param hidefield: null//<--future extra parameters }, options); var trademe = { cssclass: { "quicksearch": "quick-search", "quicksearchrange": "quick-search-range", "quicksearchpricerange": "quick-search-price-range", "quicksearchto": "quick-search-to", "quicksearchyearrange": "quick-search-year-range" }, pagename: function () { return window.location.href.substr(window.location.href.lastIndexOf("/") + 1).split(".")[0].replace(" ", "").replace("-", ""); }, id: { "quicksearch": "quick-search", "quicksearchmake": "quick-search-make", "quicksearchtitle": "quick-search-title", "quicksearchmodel": "quick-search-model", "quicksearchbody": "quick-search-body", "quicksearchpricefrom": "quick-search-price-from", "quicksearchpriceto": "quick-search-price-to", "quicksearchyearfrom": "quick-search-year-from", "quicksearchyearto": "quick-search-year-to", "quicksearchsubmit": "quick-search-submit", "quicksearchall": "quick-search-all" }, structure: { target: null, create: function (nodename, nodeid, nodeclass) { var node = document.createElement(nodename); if (nodeid) { $(node).attr("id", nodeid); } if (nodeclass) { $(node).addClass(nodeclass); } return $(node); }, hidefields: function () { if (defaults.hidefield && defaults.hidefield.length > 0) { var field = [{ name: "make", id: trademe.id.quicksearchmake }, { name: "model", id: trademe.id.quicksearchmodel }, { name: "type", id: trademe.id.quicksearchbody }, { name: "title", id: trademe.id.quicksearchtitle}]; $.each(field, function (i, v) { if ($.inArray(v.name, defaults.hidefield) > -1) { $("#" + v.id).hide(); } }); } }, createquicksearch: function () { var qsform = trademe.structure.create("div", trademe.id.quicksearch, trademe.cssclass.quicksearch); var qstitle = trademe.structure.create("h1", trademe.id.quicksearchtitle, "cufon").html(defaults.title); var make = trademe.structure.create("select", trademe.id.quicksearchmake, null).addClass("first-child"); var model = trademe.structure.create("select", trademe.id.quicksearchmodel, null); var body = trademe.structure.create("select", trademe.id.quicksearchbody, null); var pricefrom = trademe.structure.create("select", trademe.id.quicksearchpricefrom, trademe.cssclass.quicksearchrange + " " + trademe.cssclass.quicksearchpricerange); var priceto = trademe.structure.create("select", trademe.id.quicksearchpriceto, trademe.cssclass.quicksearchrange + " " + trademe.cssclass.quicksearchpricerange); var pricelabelto = trademe.structure.create("span", null, trademe.cssclass.quicksearchto).html("to"); var yearfrom = trademe.structure.create("select", trademe.id.quicksearchyearfrom, trademe.cssclass.quicksearchrange + " " + trademe.cssclass.quicksearchyearrange); var yearto = trademe.structure.create("select", trademe.id.quicksearchyearto, trademe.cssclass.quicksearchrange + " " + trademe.cssclass.quicksearchyearrange); var yearlabelto = trademe.structure.create("span", null, trademe.cssclass.quicksearchto).html("to"); var browseall = trademe.structure.create("a", trademe.id.quicksearchall, null).html("Browse All").attr("href", "#"); var submit = trademe.structure.create("a", trademe.id.quicksearchsubmit, null).html("Submit").attr("href", "#"); trademe.structure.target.append(qsform.append(qstitle).append(make).append(model).append(body).append(pricefrom).append(pricelabelto).append(priceto).append(yearfrom).append(yearlabelto).append(yearto).append(submit).append(browseall)); trademe.structure.hidefields(); $("#" + trademe.id.quicksearchall).bind("click", function () { cookie("ManufacturerId" + (defaults.pagecookiename ? "_" + trademe.pagename() : ""), null); cookie("ModelId" + (defaults.pagecookiename ? "_" + trademe.pagename() : ""), null); cookie("VehicleTypeId" + (defaults.pagecookiename ? "_" + trademe.pagename() : ""), null); cookie("PriceFrom" + (defaults.pagecookiename ? "_" + trademe.pagename() : ""), null); cookie("PriceTo" + (defaults.pagecookiename ? "_" + trademe.pagename() : ""), null); cookie("YearFrom" + (defaults.pagecookiename ? "_" + trademe.pagename() : ""), null); cookie("YearTo" + (defaults.pagecookiename ? "_" + trademe.pagename() : ""), null); }); $("#" + trademe.id.quicksearchall).bind("click", trademe.structure.event.searchall); $("#" + trademe.id.quicksearchsubmit).bind("click", trademe.structure.event.submit); }, loadcookie: function () { //make if ($("#" + trademe.id.quicksearchmake).length > 0 && cookie("ManufacturerId" + (defaults.pagecookiename ? "_" + trademe.pagename() : ""))) { $("#" + trademe.id.quicksearchmake).val(cookie("ManufacturerId" + (defaults.pagecookiename ? "_" + trademe.pagename() : ""))); } //model if ($("#" + trademe.id.quicksearchmodel).length > 0) { trademe.structure.modelcallback(); if (cookie("ModelId" + (defaults.pagecookiename ? "_" + trademe.pagename() : ""))) { $("#" + trademe.id.quicksearchmodel).val(cookie("ModelId" + (defaults.pagecookiename ? "_" + trademe.pagename() : ""))); } } //vehicletype if ($("#" + trademe.id.quicksearchbody).length > 0 && cookie("VehicleTypeId" + (defaults.pagecookiename ? "_" + trademe.pagename() : ""))) { $("#" + trademe.id.quicksearchbody).val(cookie("VehicleTypeId" + (defaults.pagecookiename ? "_" + trademe.pagename() : ""))); } //pricefrom if ($("#" + trademe.id.quicksearchpricefrom).length > 0 && cookie("PriceFrom" + (defaults.pagecookiename ? "_" + trademe.pagename() : ""))) { $("#" + trademe.id.quicksearchpricefrom).val(cookie("PriceFrom" + (defaults.pagecookiename ? "_" + trademe.pagename() : ""))); } //priceto if ($("#" + trademe.id.quicksearchpriceto).length > 0 && cookie("PriceTo" + (defaults.pagecookiename ? "_" + trademe.pagename() : ""))) { var priceto = parseInt(cookie("PriceTo" + (defaults.pagecookiename ? "_" + trademe.pagename() : ""))); if (priceto > 0) { priceto = (priceto / 1000) >= 1 && (priceto / 1000) <= 99 ? parseInt(priceto / 1000) * 1000 : priceto; priceto = (priceto / 100000) >= 1 && (priceto / 100000) <= 99 ? parseInt(priceto / 100000) * 100000 : priceto; } $("#" + trademe.id.quicksearchpriceto).val(priceto); } //yearfrom if ($("#" + trademe.id.quicksearchyearfrom).length > 0 && cookie("YearFrom" + (defaults.pagecookiename ? "_" + trademe.pagename() : ""))) { $("#" + trademe.id.quicksearchyearfrom).val(cookie("YearFrom" + (defaults.pagecookiename ? "_" + trademe.pagename() : ""))); } //yearto if ($("#" + trademe.id.quicksearchyearto).length > 0 && cookie("YearTo" + (defaults.pagecookiename ? "_" + trademe.pagename() : ""))) { $("#" + trademe.id.quicksearchyearto).val(cookie("YearTo" + (defaults.pagecookiename ? "_" + trademe.pagename() : ""))); } }, modelcallback: null, binddata: function () { //todo: create binding per version of quicksearch and per branch if ($("#" + trademe.id.quicksearch).length == 0) return; if (!defaults.branchId) return; $.getJSON(defaults.jsonpath + "/quicksearchdata.js?branchId=" + defaults.branchId + "&callback=" + (browser && browser.msie ? "?" : ""), function (data) { if (typeof trademe.quicksearchdatafetched == 'undefined' && data) { trademe["quicksearchdatafetched"] = true; } trademe["quicksearchdata"] = data; /*binding make*/ if ($("#" + trademe.id.quicksearchmake).length > 0 && typeof trademe["quicksearchdata"]["manufacturermodel"] != 'undefined') { $("#" + trademe.id.quicksearchmake).find("option").remove().end().append(""); $.each(trademe["quicksearchdata"]["manufacturermodel"], function (i, v) { $("#" + trademe.id.quicksearchmake).append($("").attr("value", v.ManufacturerId).text(v.ManufacturerName)); }); } /*binding model*/ if ($("#" + trademe.id.quicksearchmodel).length > 0 && typeof trademe["quicksearchdata"]["manufacturermodel"] != 'undefined') { trademe.structure.modelcallback = function () { $("#" + trademe.id.quicksearchmodel).find("option").remove().end().append(""); $.each(trademe["quicksearchdata"]["manufacturermodel"], function (i, v) { if (v.ManufacturerId == $("#" + trademe.id.quicksearchmake).val()) { $.each(this.Models, function (_i, _v) { $("#" + trademe.id.quicksearchmodel).append($("").attr("value", _v.ModelId).text(_v.ModelName)); }); } }); }; trademe.structure.modelcallback(); $("#" + trademe.id.quicksearchmake).bind("change", function () { trademe.structure.modelcallback(); }); } /*binding body*/ if ($("#" + trademe.id.quicksearchbody).length > 0 && typeof trademe["quicksearchdata"]["vehicletype"] != 'undefined') { $("#" + trademe.id.quicksearchbody).find("option").remove().end().append(""); $.each(trademe["quicksearchdata"]["vehicletype"], function (i, v) { $("#" + trademe.id.quicksearchbody).append($("").attr("value", v.Id).text(v.Name)); }); } /*binding Price */ if ($("." + trademe.cssclass.quicksearchpricerange).length > 0 && typeof trademe["quicksearchdata"]["price"] != 'undefined') { $("." + trademe.cssclass.quicksearchpricerange).find("option").remove().end().append(""); $.each(trademe["quicksearchdata"]["price"], function (i, v) { $("." + trademe.cssclass.quicksearchpricerange).append($("").attr("value", v.Value).text(v.Text)); }); } /* bind Year */ if ($("." + trademe.cssclass.quicksearchyearrange).length > 0 && typeof trademe["quicksearchdata"]["year"] != 'undefined') { $("." + trademe.cssclass.quicksearchyearrange).find("option").remove().end().append(""); var y = []; $.each(trademe["quicksearchdata"]["year"], function (i, v) { y.push({ "Year": parseInt(v.Year) }); }); y.sort(function (a, b) { return b.Year - a.Year; }); trademe["quicksearchdata"]["year"] = y; //descending $.each(trademe["quicksearchdata"]["year"], function (i, v) { $("." + trademe.cssclass.quicksearchyearrange).append($("").attr("value", v.Year).text(v.Year)); }); } trademe.structure.loadcookie(); }) .error(function (jqxhr, settings, exception) { var x = 0; }); $("#" + trademe.id.quicksearchmake).append($("")); $("#" + trademe.id.quicksearchmodel).append($("")); $("." + trademe.cssclass.quicksearchpricerange).append($("")); $("." + trademe.cssclass.quicksearchyearrange).append($("")); }, hasQuickSearch: function () { return ($("#" + trademe.id.quicksearch).length > 0); }, loaddefaultstyle: function () { if ($("head").find("link#_quicksearch-theme").length == 0) { var link = trademe.structure.create("link", "_quicksearch-theme", null); var url = defaults.jsonpath + "/css/quicksearch.css"; link.attr("rel", "stylesheet").attr("type", "text/css").attr("href", url); //for IE if ((typeof $.browser != 'undefined' && $.browser.msie) || document.createStyleSheet) { document.createStyleSheet(url); } $("head").prepend(link); } }, fetch: function (url, callback, dataType) { dataType = !dataType ? "text" : dataType; $.ajax({ url: url, dataType: dataType, cache: true, ifModified: true, success: function (jqxhr, settings, exception) { if (!jqxhr) return; if (callback) { callback(jqxhr, settings, exception); } } }); }, event: { searchall: function (e) { //this will clear all cookies var allcookies = document.cookie.split(";"); var names = ["ManufacturerId", "ModelId", "VehicleTypeId", "PriceFrom", "PriceTo", "YearFrom", "YearTo"]; $.each(allcookies, function (i, v) { var name = v.split("=")[0].split("_")[0].replace(/^\s+|\s+$/g, ''); if ($.inArray(name, names) > -1) { cookie(v.split("=")[0].replace(/^\s+|\s+$/g, ''), null); } }); window.location.href = defaults.stockpage + (defaults.stockpage.indexOf("showall=1") == -1 ? "?showall=1" : ""); }, submit: function (e) { var query = []; cookie("ManufacturerId" + "_" + trademe.pagename(), null); cookie("ModelId" + "_" + trademe.pagename(), null); cookie("VehicleTypeId" + "_" + trademe.pagename(), null); cookie("PriceFrom" + "_" + trademe.pagename(), null); cookie("PriceTo" + "_" + trademe.pagename(), null); cookie("YearFrom" + "_" + trademe.pagename(), null); cookie("YearTo" + "_" + trademe.pagename(), null); //ManufacturerId if ($("#" + trademe.id.quicksearchmake).length > 0 && $("#" + trademe.id.quicksearchmake).val() && $("#" + trademe.id.quicksearchmake).val() != "0") { query.push("ManufacturerId=" + $("#" + trademe.id.quicksearchmake).val()); if (defaults.enablecookie) { cookie("ManufacturerId" + (defaults.pagecookiename ? "_" + trademe.pagename() : ""), $("#" + trademe.id.quicksearchmake).val()); } } //ModelId if ($("#" + trademe.id.quicksearchmodel).length > 0 && $("#" + trademe.id.quicksearchmodel).val() && $("#" + trademe.id.quicksearchmodel).val() != "0") { query.push("ModelId=" + $("#" + trademe.id.quicksearchmodel).val()); if (defaults.enablecookie) { cookie("ModelId" + (defaults.pagecookiename ? "_" + trademe.pagename() : ""), $("#" + trademe.id.quicksearchmodel).val()); } } //VehicleType if ($("#" + trademe.id.quicksearchbody).length > 0 && $("#" + trademe.id.quicksearchbody).val() && $("#" + trademe.id.quicksearchbody).val() != "0") { query.push("VehicleTypeId=" + $("#" + trademe.id.quicksearchbody).val()); if (defaults.enablecookie) { cookie("VehicleTypeId" + (defaults.pagecookiename ? "_" + trademe.pagename() : ""), $("#" + trademe.id.quicksearchbody).val()); } } //Price if ($("." + trademe.cssclass.quicksearchpricerange).length > 0) { var pricefrom = $("#" + trademe.id.quicksearchpricefrom).val() && $("#" + trademe.id.quicksearchpricefrom).val() != "0" ? parseInt($("#" + trademe.id.quicksearchpricefrom).val()) : 0; var priceto = $("#" + trademe.id.quicksearchpriceto).val() && $("#" + trademe.id.quicksearchpriceto).val() != "0" ? parseInt($("#" + trademe.id.quicksearchpriceto).val()) : 0; ; if (pricefrom > priceto) { $("#" + trademe.id.quicksearchpricefrom).val(priceto); $("#" + trademe.id.quicksearchpriceto).val(pricefrom); pricefrom = $("#" + trademe.id.quicksearchpricefrom).val() && $("#" + trademe.id.quicksearchpricefrom).val() != "0" ? parseInt($("#" + trademe.id.quicksearchpricefrom).val()) : 0; priceto = $("#" + trademe.id.quicksearchpriceto).val() && $("#" + trademe.id.quicksearchpriceto).val() != "0" ? parseInt($("#" + trademe.id.quicksearchpriceto).val()) : 0; } if (pricefrom > 0 || priceto > 0) { query.push("PriceFrom=" + pricefrom); if (priceto > 0) { priceto = (priceto / 1000) >= 1 && (priceto / 1000) <= 99 ? priceto + 999 : priceto; priceto = (priceto / 100000) >= 1 && (priceto / 100000) <= 99 ? priceto + 99999 : priceto; } query.push("PriceTo=" + priceto); if (defaults.enablecookie) { cookie("PriceFrom" + (defaults.pagecookiename ? "_" + trademe.pagename() : ""), pricefrom); cookie("PriceTo" + (defaults.pagecookiename ? "_" + trademe.pagename() : ""), priceto); } } } //Year if ($("." + trademe.cssclass.quicksearchyearrange).length > 0) { var yearfrom = $("#" + trademe.id.quicksearchyearfrom).val() && $("#" + trademe.id.quicksearchyearfrom).val() != "0" ? parseInt($("#" + trademe.id.quicksearchyearfrom).val()) : 0; var yearto = $("#" + trademe.id.quicksearchyearto).val() && $("#" + trademe.id.quicksearchyearto).val() != "0" ? parseInt($("#" + trademe.id.quicksearchyearto).val()) : 0; ; if (yearfrom > yearto) { $("#" + trademe.id.quicksearchyearfrom).val(yearto); $("#" + trademe.id.quicksearchyearto).val(yearfrom); yearfrom = $("#" + trademe.id.quicksearchyearfrom).val() && $("#" + trademe.id.quicksearchyearfrom).val() != "0" ? parseInt($("#" + trademe.id.quicksearchyearfrom).val()) : 0; yearto = $("#" + trademe.id.quicksearchyearto).val() && $("#" + trademe.id.quicksearchyearto).val() != "0" ? parseInt($("#" + trademe.id.quicksearchyearto).val()) : 0; ; } if (yearfrom > 0 || yearto > 0) { query.push("YearFrom=" + yearfrom); query.push("YearTo=" + yearto); if (defaults.enablecookie) { cookie("YearFrom" + (defaults.pagecookiename ? "_" + trademe.pagename() : ""), yearfrom); cookie("YearTo" + (defaults.pagecookiename ? "_" + trademe.pagename() : ""), yearto); } } } //show all if ($.inArray("showall=1", query) == -1 && defaults.stockpage.indexOf("showall=1") == -1) { query.push("showall=1"); } window.location.href = defaults.stockpage + (query.length > 0 ? (defaults.stockpage.indexOf("?") == -1 ? "?" : "&") + query.join("&") : ""); } } } }; return this.each(function (i, obj) { trademe.structure.target = $(this); if (defaults.reload) { var param = eval("[{" + $(this).attr("param") + "}]"); defaults = $.extend(defaults, param[0]); defaults.reload = false; } //if hidden dont do this if ($(this).is(":visible")) { //get default theme for stockpage trademe.structure.loaddefaultstyle(); if (!trademe.structure.hasQuickSearch()) { trademe.structure.createquicksearch(); trademe.structure.binddata(); } else { trademe.structure.binddata(); } } }); }; })(jQuery); $(document).ready(function () { if ($("#quick-search-form").length > 0) { var param = eval("[{"+$("#quick-search-form").attr("param")+"}]"); $("#quick-search-form").quicksearch(param[0]); } });