/* v1.01 Added specials v1.02 Properly handled querystring for return to stock page, added viewport autoheight depends on comments,remove features field if has no value, efficiency ratings added, data access security, preload images, added thumbnails, extrascript */ (function ($) { $.fn.TradeMeMotorsStockList = function (options) { var defaults = $.extend({ ver: 1.02, datasource: null, pagetype: 0, /*0 - stocklist, 1 - details, 2- compare*/ detailspage: 'http:\/\/' + document.domain + '\/details.html', stockpage: 'http:\/\/' + document.domain + '\/vehicle.html', viewtype: 0, /*0 - galleryview, 1 - listview*/ marker: null, loancalculator: false, financethisvehicle: false, playvideo: false, maxgalleryview: 12, maxlistview: 5 }, options); var fuelefficiency = { "rating": null, "value": null, "cost": null, "message": null, "toString": function () { var effinfo = []; if (this.rating) { effinfo.push("This vehicle has a Fuel Economy Star Rating of " + this.rating + " out of 6."); } if (this.value && parseFloat(this.value) > 0) { effinfo.push("It consumes " + this.value + "L litres per 100km travelled."); } if (this.cost) { effinfo.push("The Estimated Annual Cost of running this vehicle is " + this.cost + "."); } if (this.message) { effinfo.push(this.message); } //blank fillup if (parseFloat(this.value) == 0) { effinfo.push("

"); } if (effinfo.length > 0) { return effinfo.join(" "); } return null; }, "tooltip": function () { var tooltip = trademe.structure.create("div", "fuel-economy-tooltip", "ui-curve-med ui-shadow-large"); if (this.toString()) { tooltip .append(trademe.structure.create("div", null, "arrow-left-border")) .append(trademe.structure.create("div", null, "arrow-left")) .append(trademe.structure.create("div", null, "fuel-rating-medium fuel-rating-medium-" + this.rating.replace(".", "_"))) .append(trademe.structure.create("h5", null, null).html("Vehicle Fuel Economy Labelling")) .append(trademe.structure.create("p", null, null).html(this.toString())) .append(trademe.structure.create("p", null, "disclaimer").html("Disclaimer: The Fuel Saver Information displayed here is provided for comparative purposes. Your actual cost per year and fuel consumption will vary from that shown, depending on factors such as vehicle condition and any vehicle modifications, driving style, traffic conditions, distance travelled and fuel price variations. You should not expect to meet exactly what this information says. Visit www.fuelsaver.govt.nz to find out more about this information and fuel saver labels, and how to improve fuel economy.")); //return tooltip; if ($("#fuel-economy-tooltip").length > 0) { $("#fuel-economy-tooltip").remove(); } $("body").prepend(tooltip); $("." + trademe.cssclass.fueleconomyhelp).TradeMeMotorsTooltip({ tooltipid: "fuel-economy-tooltip" }); return true; } return null; } }; var carousel = { "create": function () { if ($("#carousel").length > 0) { $("#carousel").remove(); } var c = trademe.structure.create("div", "carousel", null); trademe.structure.target.after(c); $("#carousel").TradeMeMotorsCarousel({ datasource: vehicles, carouseltype: 0 }); $("#carousel").appendTo("#details-viewport .details-form"); } }; var listing = { minpage: 0, maxpage: 0, totalpage: 0, currentpage: 0, currentmakeId: 0, currentsortby: 7, currentviewtype: 0, populatecallback: null, init: function () { if (!listing.hasViewport()) { return; } if (!trademe.structure.target.hasClass(trademe.cssclass.viewportcontainer)) { trademe.structure.target.addClass(trademe.cssclass.viewportcontainer); } //do load cookie 1st listing.loadcookie(); if (!listing.hasHeader()) { listing.createHeader(); trademe.structure.fetchlistingextra(); listing.addFilterOption(); } if (!listing.hasFooter()) { listing.createFooter(); } listing.createContainer(); }, hasViewport: function () { if (defaults.pagetype == trademe.enume.pagetype.stock) { return (trademe.structure.target.attr("id") == trademe.id.viewport); } return false; }, hasHeader: function () { return (trademe.structure.target.find("." + trademe.cssclass.header).length > 0); }, hasFooter: function () { return (trademe.structure.target.find("." + trademe.cssclass.footer).length > 0); }, loadcookie: function () { //can be optimized, todo next var cookienames = [{ listingobj: "currentpage", name: "currentpage" }, { listingobj: "currentmakeId", name: "ManufacturerId" }, { listingobj: "currentsortby", name: "SortBy" }, { listingobj: "currentviewtype", name: "viewtype"}]; $.each(cookienames, function (i, v) { if (cookie(v.name) && typeof listing[v.listingobj] != 'undefined') { listing[v.listingobj] = $.IsNumber(cookie(v.name)) ? parseInt(cookie(v.name)) : cookie(v.name); } }); }, createHeader: function () { var header = trademe.structure.create("div", null, trademe.cssclass.header); var galleryview = trademe.structure.create("a", null, trademe.cssclass.galleryview).attr("href", ""); var listview = trademe.structure.create("a", null, trademe.cssclass.listview).attr("href", ""); var label = trademe.structure.create("span", trademe.id.totallisting, null); var makelabel = trademe.structure.create("span", trademe.id.makelabel, null).html("Make"); var sortbylabel = trademe.structure.create("span", trademe.id.sortbylabel, null).html("Sort By"); var makeselect = trademe.structure.create("select", trademe.id.makeoption, null); var sortbyselect = trademe.structure.create("select", trademe.id.sortoption, null); trademe.structure.target .append(header .append(galleryview) .append(listview) .append(label) .append(sortbyselect) .append(sortbylabel) .append(makeselect) .append(makelabel) ); galleryview.bind("click", trademe.event.galleryviewclicked); listview.bind("click", trademe.event.listviewclicked); $("#" + trademe.id.makeoption).bind("change", trademe.event.makeoptionclicked); $("#" + trademe.id.sortoption).bind("change", trademe.event.sortbyclicked); }, createFooter: function () { var footer = trademe.structure.create("div", null, trademe.cssclass.footer); var poweredby = trademe.structure.create("div", null, trademe.cssclass.poweredby).html("Powered by ").append($("").attr("href", "http://www.trademe.co.nz/motors").attr("target", "_new").html("TradeMe Motors")); trademe.structure.target .append(footer.append(poweredby)); footer.css({ marginTop: parseInt(trademe.structure.target.css("height").replace("px", "")), width: trademe.structure.target.width() }); }, createContainer: function () { var container = trademe.structure.create("div", trademe.id.itemcontainerlist, trademe.cssclass.itemcontainerlist); if (trademe.structure.target.find("." + trademe.cssclass.itemcontainerlist).length == 0) { trademe.structure.target.append(container); } }, arrangeGalleryView: function () { if ($(".item-container").length == 0) return; var parentWidth = $(".gallery-view").innerWidth(); var item_per_row = Math.floor(parentWidth / $(".item-container").innerWidth()); var marginLeft = parseInt($(".item-container").css("marginLeft").replace("px", "")); var marginTop = parseInt($(".item-container").css("marginTop").replace("px", "")); //set position of each item-container var item_index = 1; var item_left = 0; var item_top = 0; $.each($(".gallery-view .item-container"), function (i, v) { if (item_index > item_per_row) { item_index = 1; item_left = 0; item_top += $(".item-container").outerHeight() + marginTop; } $(this).css({ 'left': item_left, 'top': item_top }); item_left = ($(".item-container").outerWidth() + marginLeft) * item_index; $(this).data("imageindex", 0); //$(this).prepend("
DetailsVideoCompare
"); item_index++; }); }, setpage: function (a) { var maxpaging = listing.currentviewtype == trademe.enume.pagetype.stock ? defaults.maxgalleryview : defaults.maxlistview; listing.totalpage = Math.ceil((a.length) / maxpaging); listing.currentpage = listing.totalpage > 0 && listing.currentpage == 0 ? listing.currentpage = 1 : listing.currentpage; listing.minpage = Math.min(Math.round(Math.max(1, listing.currentpage - (maxpaging / 2))), Math.max(1, listing.totalpage - maxpaging + 1)); listing.maxpage = Math.max(maxpaging, listing.minpage + maxpaging); listing.maxpage = (listing.maxpage > listing.totalpage ? listing.totalpage : listing.maxpage); $("." + trademe.cssclass.pagecontainer).remove(); if (listing.maxpage == 1) return; var pg = trademe.structure.create("div", null, trademe.cssclass.pagecontainer); pg.append(trademe.structure.create("a", null, trademe.cssclass.pageprev + " ui-curve-small ui-shadow-small").html("Prev").attr("href", "")); for (var i = listing.minpage; i <= listing.maxpage; i++) { var p = trademe.structure.create("a", null, trademe.cssclass.pagelink + " ui-curve-small ui-shadow-small" + (listing.currentpage == i ? " selected" : "")).html(i).attr("href", "").data("number", i); pg.append(p); } pg.append(trademe.structure.create("a", null, trademe.cssclass.pagenext + " ui-curve-small ui-shadow-small").html("Next").attr("href", "")); $("." + trademe.cssclass.footer).append(pg); $("." + trademe.cssclass.pagelink).bind("click", trademe.event.pagelinkclicked); $("." + trademe.cssclass.pagenext).bind("click", trademe.event.pagenextclicked); $("." + trademe.cssclass.pageprev).bind("click", trademe.event.pageprevclicked); if (listing.currentpage <= 1) { $("." + trademe.cssclass.pageprev).hide(); } else { $("." + trademe.cssclass.pageprev).show(); } if (listing.currentpage >= listing.maxpage) { $("." + trademe.cssclass.pagenext).hide(); } else { $("." + trademe.cssclass.pagenext).show(); } }, populate: function () { if (!defaults.datasource) { return; } var container = trademe.structure.target.find("." + trademe.cssclass.itemcontainerlist); container.html(""); container.focus(); container.removeClass("gallery-view").removeClass("list-view"); //get from querystring var _datasource = []; $.each(defaults.datasource, function (i, v) { if (trademe.structure.foundinquery({ "ManufacturerId": v.manufacturerId, "ModelId": v.modelId, "PriceFrom": v.price.replace("$", "").replace(",", ""), "PriceTo": v.price.replace("$", "").replace(",", ""), "TransmissionTypeId": v.transmissiontypeid, "OdometerFrom": v.odometer.replace(",", ""), "OdometerTo": v.odometer.replace(",", ""), "VehicleTypeId": v.vehicletypeid, "new": v.isnew == "true" ? "1" : "0", "specials": v.isspecial == "true" ? "1" : "0" }) && trademe.structure.foundinfilter({ "ManufacturerId": v.manufacturerId })) { _datasource.push(v); } }); //lets sort _datasource = trademe.structure.sortthis(_datasource); //set page control listing.setpage(_datasource); //initially display all counts if (_datasource.length > 0) { $("#" + trademe.id.totallisting).html("We have " + _datasource.length + " vehicle(s) listed."); } //gallery view if (listing.currentviewtype == trademe.enume.viewtype.galleryview) { container.addClass("gallery-view"); $.each(_datasource.slice((listing.currentpage * (defaults.maxgalleryview)) - defaults.maxgalleryview, listing.currentpage * (defaults.maxgalleryview)), function (i, v) { /**************/ //create items var item = trademe.structure.create("div", "item-" + v.id, "item-container"); var img = trademe.structure.create("img", null, "preview-image").attr("src", v.images.length > 0 ? v.images[0] : "images\/imageunavailable_medium.png"); var price = trademe.structure.create("label", null, "price").html(v.price); //var year = trademe.structure.create("label", null, "year").html(v.year); var pricelabel = trademe.structure.create("label", null, "pricelabel").html("Price"); var title = trademe.structure.create("label", null, "title").html((v.year ? v.year + " " : "") + "" + v.makemodel + "" + (v.modeldetails ? " " + v.modeldetails : "")); var previcon = trademe.structure.create("a", null, "prev-icon").attr("href", ""); var nexticon = trademe.structure.create("a", null, "next-icon").attr("href", ""); var imgindex = trademe.structure.create("span", null, "img-index").html((v.images.length > 0 ? "1" + " of " + v.images.length : "")); if (v.images.length == 0) { previcon.attr("style", "display:none;"); nexticon.attr("style", "display:none;"); } item.append("\r\n"); item.append(img).append("\r\n") .append(price).append("\r\n") .append(pricelabel).append("\r\n") .append(title).append("\r\n") .append(previcon).append("\r\n") .append(imgindex).append("\r\n") .append(nexticon).append("\r\n"); //execute extrascript if (typeof listing.fetchedlistingextra != 'undefined' && listing.fetchedlistingextra == true) { if (listing.listingextraescript) { listing.listingextraescript(v, item); } } container.append("\r\n"); container.append(item.clone()).append("\r\n"); item = null; /**************/ }); listing.arrangeGalleryView(); $(".item-container a.prev-icon").bind("click", trademe.event.prevclick); $(".item-container a.next-icon").bind("click", trademe.event.nextclick); } //[2] list view type if (listing.currentviewtype == trademe.enume.viewtype.listview) { container.addClass("list-view"); $.each(_datasource.slice((listing.currentpage * (defaults.maxlistview)) - defaults.maxlistview, listing.currentpage * (defaults.maxlistview)), function (i, v) { if (trademe.structure.foundinquery({ "ManufacturerId": v.manufacturerId, "ModelId": v.modelId, "PriceFrom": v.price.replace("$", "").replace(",", ""), "PriceTo": v.price.replace("$", "").replace(",", ""), "TransmissionTypeId": v.transmissiontypeid, "OdometerFrom": v.odometer.replace(",", ""), "OdometerTo": v.odometer.replace(",", ""), "VehicleTypeId": v.vehicletypeid, "new": v.isnew == "true" ? "1" : "0", "specials": v.isspecial == "true" ? "1" : "0" })) { //create items var item = trademe.structure.create("div", "item-" + v.id, "item-container"); var img = trademe.structure.create("img", null, "preview-image").attr("src", v.images.length > 0 ? v.images[0] : "images\/imageunavailable_medium.png"); var price = trademe.structure.create("label", null, "price").html(v.price); var title = trademe.structure.create("label", null, "title").html((v.year ? v.year + " " : "") + "" + v.makemodel + "" + (v.modeldetails ? " " + v.modeldetails : "")); var description = trademe.structure.create("label", null, "description").html(v.description); item.append("\r\n"); item.append(img).append("\r\n") .append(price).append("\r\n") .append(title).append("\r\n") .append(description).append("\r\n"); //execute extrascript if (typeof listing.fetchedlistingextra != 'undefined' && listing.fetchedlistingextra == true) { if (listing.listingextraescript) { listing.listingextraescript(v, item); } } container.append("\r\n"); container.append(item.clone()).append("\r\n"); } }); var marginTop = parseInt($(".item-container").css("marginTop").replace("px", "")); var item_top = 0; $.each($(".list-view .item-container"), function (i, v) { $(this).css({ 'top': item_top }); item_top += $(".item-container").outerHeight() + marginTop; }); } //bind item click $(".item-container").bind("click", trademe.event.itemclick); }, populatemakeoption: function () { if (typeof trademe.selection.fetched == 'undefined') { trademe.structure.fetchselectionjson( 'http://' + document.domain + '/scripts/selectionjson.js?cached=1', function (jqxhr, settings, exception) { if (typeof trademe.selection.fetched == 'undefined') { trademe.selection["fetched"] = true; } var arr_data = jqxhr.replace(new RegExp('\r', 'g'), '').replace(new RegExp('\n', 'g'), '').split(";"); $.each(arr_data, function (i, v) { if (v) { var o = v.replace(new RegExp('var', 'g'), '').split("="); if (typeof trademe.selection[o[0].trim()] == 'undefined') { trademe.selection[o[0].trim()] = eval(o[1].trim()); } } }); var c = window.setTimeout(function () { $("#" + trademe.id.makeoption).html(""); $("#" + trademe.id.makeoption).append($("").attr("value", "0").attr("selected", "true").html("All Makes")); $.each(trademe.selection.makeoption, function (i, v) { $("#" + trademe.id.makeoption).append($("").attr("value", v.value).html(v.display)); }); if (listing.currentmakeId) { $("#" + trademe.id.makeoption).val(listing.currentmakeId); } $.each(trademe.selection.sortoption, function (i, v) { $("#" + trademe.id.sortoption).append($("").attr("value", v.value).html(v.display)); }); if (listing.currentsortby) { $("#" + trademe.id.sortoption).val(listing.currentsortby); } if (listing.populatecallback) { listing.populatecallback(); } window.clearTimeout(c); }, 10); }); } }, addFilterOption: function () { listing.populatemakeoption(); } }; var trademe = { "cssclass": { "itemcontainerlist": "item-container-list", "viewportcontainer": "viewport-container", "detailscontainer": "details-container", "header": "headerbar", "footer": "footerbar", "poweredby": "poweredby", "viewoption": "view-option", "galleryview": "icon gallery-icon gallery-view-link", "listview": "icon gallery-list-icon list-view-link", "galleryviewlink": "gallery-view-link", "listviewlink": "list-view-link", "detailsform": "details-form", "vehicleattribute": "vehicle-attribute", "vehiclefeatures": "vehicle-features", "vehiclecomments": "vehicle-comments", "closemedium": "close-medium", "emailseller": "email-seller", "fueleconomylabel": "fuel-economy-label", "fueleconomyhelp": "fuel-economy-help", "pagecontainer": "page-container", "pagelink": "page-link", "pagenext": "page-next", "pageprev": "page-prev" }, id: { "itemcontainerlist": "item-container-list", "viewport": "gallery-viewport", "totallisting": "total-listing-count", "makelabel": "make-label", "sortbylabel": "sortby-label", "sortoption": "sort-option", "makeoption": "make-option", "detailsviewport": "details-viewport", "detailsform": "details-form", "detailstitle": "title", "detailsprice": "price", "vehicleattribute": "vehicle-attribute", "vehiclefeatures": "vehicle-features", "vehiclecomments": "vehicle-comments", "actionlinks": "action-links", "printvehicle": "print-vehicle", "loancalculator": "loan-calculator", "financethis": "finance-this", "playvideo": "play-video", "emailseller": "email-seller", "carousel": "carousel-basic" }, selection: { sortoption: [ { "value": 0, "display": "Lowest Price", "classname": "price", "sortorder": 0, "objectname": "price" }, { "value": 1, "display": "Highest Price", "classname": "price", "sortorder": 1, "objectname": "price" }, { "value": 2, "display": "Oldest Vehicle", "classname": "year", "sortorder": 0, "objectname": "year" }, { "value": 3, "display": "Newest Vehicle", "classname": "year", "sortorder": 1, "objectname": "year" }, { "value": 4, "display": "Lowest Km", "classname": "odometer", "sortorder": 0, "objectname": "odometer" }, { "value": 5, "display": "Highest Km", "classname": "odometer", "sortorder": 1, "objectname": "odometer" }, { "value": 6, "display": "Latest Listing", "classname": "created", "sortorder": 1, "objectname": "created" }, { "value": 7, "display": "Make/Model (A-Z)", "classname": "makemodel", "sortorder": 0, "objectname": "makemodel" } ], hiddendata: [ "price", "odometer", "cc", "year", "makemodel" ] }, "enume": { viewtype: { "galleryview": 0, "listview": 1 }, rotate: { "right": 0, "left": 1 }, pagetype: { "stock": 0, "details": 1, "compare": 2 } }, selectedvalue: { viewtype: 0, commenttop: 310 }, link: { plugincsspath: "http://" + document.domain + "/css/trademe.motors.stocklist.css" }, structure: { target: null, populatedetailscallback: null, hasHeader: function () { return (this.target.find("." + trademe.cssclass.header).length > 0); }, hasViewport: function () { if (defaults.pagetype == trademe.enume.pagetype.stock) { return (this.target.attr("id") == trademe.id.viewport); } if (defaults.pagetype == trademe.enume.pagetype.details) { return (this.target.attr("id") == trademe.id.detailsviewport); } return false; }, hasTMMotorsCss: function () { return ($("head").find("script[src*='" + trademe.link.plugincsspath.replace("http:\/\/" + document.domain + "\/", "") + "']").length > 0); }, hasDetailsForm: function () { if (defaults.pagetype == trademe.enume.pagetype.details) { return (this.target.find(trademe.cssclass.detailsform).length > 0); } return false; }, addHeadCss: function () { var css = this.createCssLink(trademe.link.plugincsspath); if (!this.hasTMMotorsCss()) { if (document.createStyleSheet) { document.createStyleSheet(css); } else { $("head").append(css); } } }, createHeader: function () { this.target.append( $("
") .addClass(trademe.cssclass.header) .append($("
VIEW BY
") .addClass(trademe.cssclass.viewoption) )); this.target .find("." + trademe.cssclass.viewoption + " span") .after($("").attr("href", "javascript:return false;") .addClass(trademe.cssclass.galleryview) .click(trademe.event.galleryviewclick)); this.target .find("." + trademe.cssclass.viewoption + " span") .after($("").attr("href", "javascript:return false;") .addClass(trademe.cssclass.listview) .click(trademe.event.listviewclick)); }, createcontainer: function () { //create item-container-list var containerlist = this.create("div", trademe.id.itemcontainerlist, trademe.cssclass.itemcontainerlist); if (this.target.find("." + trademe.cssclass.itemcontainerlist).length == 0) { this.target.append(containerlist); } }, createdetailsform: function () { var detailsform = this.create("div", null, trademe.cssclass.detailsform); var qs = []; $.each(window.location.search.substring(1).split("&"), function (i, v) { if (v.split("=")[0] != "id") { qs.push(v); } }); var closebutton = this.create("a", null, trademe.cssclass.closemedium).attr("href", defaults.stockpage + (qs && qs.length > 0 ? "?" + qs : "")); var title = this.create("h1", trademe.id.detailstitle, null); var price = this.create("div", trademe.id.detailsprice, "price-tag") .append(this.create("div", null, "arrow-right")); var actionlink = trademe.structure.create("div", trademe.id.actionlinks, null) .append(trademe.structure.create("a", trademe.id.printvehicle, null).html("Print Vehicle").attr("href", "#")); if (defaults.loancalculator) { actionlink.append(trademe.structure.create("a", trademe.id.loancalculator, null).html("Loan Calculator").attr("href", "#")); } if (defaults.financethisvehicle) { actionlink.append(trademe.structure.create("a", trademe.id.financethis, null).html("Finance this Vehicle").attr("href", "finance.aspx?id=" + querystring("id"))); } if (defaults.playvideo) { actionlink.append(trademe.structure.create("a", trademe.id.playvideo, null).html("Play Video").attr("href", "#")); } if ($("." + trademe.cssclass.emailseller).length == -1) { actionlink.append(trademe.structure.create("a", trademe.id.emailseller, trademe.cssclass.emailseller).html("Email the Seller").attr("href", "#")); } else if ($("#" + trademe.id.actionlinks).find("." + trademe.cssclass.emailseller).length == 0) { actionlink.append($("." + trademe.cssclass.emailseller)); } var attribute = this.create("dl", trademe.id.vehicleattribute, trademe.cssclass.vehicleattribute); var features = this.create("div", trademe.id.vehiclefeatures, trademe.cssclass.vehiclefeatures); var comments = this.create("div", trademe.id.vehiclecomments, trademe.cssclass.vehiclecomments); if (!trademe.structure.hasDetailsForm()) { this.target.append(detailsform); } var margin = detailsform.css("marginTop") ? parseInt(detailsform.css("marginTop")) : 10; detailsform .width(detailsform.parent().innerWidth() - (margin * 2)) //.height(detailsform.parent().innerHeight() - (margin * 2)) .css({ "marginTop": margin, "marginLeft": margin, "height": "100%" }) .addClass("ui-shadow-med") .addClass("ui-curve-small") .append(closebutton) .append(title) .append(price) .append(actionlink) .append(attribute) .append(features) .append(comments); $("#" + trademe.id.printvehicle).bind("click", trademe.event.printthis); }, initcontainerview: function () { //add class to viewport if (!this.target.hasClass(trademe.cssclass.viewportcontainer)) { this.target.addClass(trademe.cssclass.viewportcontainer); } //add header bar if (!trademe.structure.hasHeader()) { trademe.structure.createHeader(); } this.createcontainer(); }, createCssLink: function (path) { return ""; }, initdetails: function () { //add class to viewport if (!this.target.hasClass(trademe.cssclass.detailscontainer)) { this.target.addClass(trademe.cssclass.detailscontainer); } //add form if (!trademe.structure.hasDetailsForm()) { trademe.structure.createdetailsform(); } //add post script trademe.structure.fetchdetailsextra(); }, foundinquery: function (queryStrings, tofind) { var isfound = false; if (window.location.search) { var ismatchedarr = []; $.each(queryStrings, function (i, v) { if (querystring(i) && i.indexOf("From") == -1 && i.indexOf("To") == -1) { if (querystring(i) == v) { ismatchedarr.push(true); } else { ismatchedarr.push(false); } } if (i == "PriceFrom" || i == "PriceTo") { var ismatched = false; if (querystring("PriceFrom") != "0" && querystring("PriceTo") != "0" && parseInt(querystring("PriceFrom")) <= parseInt(v) && parseInt(querystring("PriceTo")) >= parseInt(v)) { ismatched = true; } if (querystring("PriceFrom") != "0" && querystring("PriceTo") == "0" && parseInt(querystring("PriceFrom")) <= parseInt(v)) { ismatched = true; } if (querystring("PriceFrom") == "0" && querystring("PriceTo") != "0" && parseInt(querystring("PriceTo")) >= parseInt(v)) { ismatched = true; } if (querystring(i)) { if (ismatched) { ismatchedarr.push(true); } else { ismatchedarr.push(false); } } } if (i == "OdometerFrom" || i == "OdometerTo") { var ismatched = false; if (querystring("OdometerFrom") != "0" && querystring("OdometerTo") != "0" && parseInt(querystring("OdometerFrom")) <= parseInt(v) && parseInt(querystring("OdometerTo")) >= parseInt(v)) { ismatched = true; } if (querystring("OdometerFrom") != "0" && querystring("OdometerTo") == "0" && parseInt(querystring("OdometerFrom")) <= parseInt(v)) { ismatched = true; } if (querystring("OdometerFrom") == "0" && querystring("OdometerTo") != "0" && parseInt(querystring("OdometerTo")) >= parseInt(v)) { ismatched = true; } if (querystring(i)) { if (ismatched) { ismatchedarr.push(true); } else { ismatchedarr.push(false); } } } }); isfound = true; $.each(ismatchedarr, function (index, val) { if (!val) { isfound = false; } }); return isfound; } else { return true; } }, foundinfilter: function (filterparams) { var isfound = false; if ($("#" + trademe.id.makeoption).children().length == 0 || $("#" + trademe.id.makeoption + " option:selected").val() == 0) { return true; } var ismatchedarr = []; $.each(filterparams, function (i, v) { if (parseInt($("#" + trademe.id.makeoption + " option:selected").val()) == v) { ismatchedarr.push(true); } else { ismatchedarr.push(false); } }); isfound = true; $.each(ismatchedarr, function (index, val) { if (!val) { isfound = false; } }); return isfound; }, populatedetails: function () { //check datasource, need value if (!defaults.datasource) { return; } $.each(defaults.datasource, function (i, v) { if (v.id == querystring("id")) { //title if ($("#" + trademe.id.detailstitle).length > 0) { $("#" + trademe.id.detailstitle).html((v.year && v.year>0?v.year:"") + " " + v.title); } //price if ($("#" + trademe.id.detailsprice).length > 0) { $("#" + trademe.id.detailsprice).prepend(trademe.structure.create("span", null, null).append(v.price)); } //details if (v.details && $("#" + trademe.id.vehicleattribute).length > 0) { var attribute = $("#" + trademe.id.vehicleattribute); $.each(v.details, function (text, val) { attribute.append("\r\n"); attribute.append(trademe.structure.create("dt", null, null).html(text)) .append("\r\n") .append(trademe.structure.create("dd", null, null).html((val ? val : " "))) .append("\r\n"); }); //efficiency rating if (parseFloat(v.efficiencyrating) > 0) { var effInfo = []; if (v.efficiency && parseFloat(v.efficiency)) { effInfo.push(v.efficiency + "L per 100km"); } if (v.efficiencyfuelcost) { effInfo.push("Annual fuel cost of " + v.efficiencyfuelcost); } attribute.append("\r\n"); attribute.append(trademe.structure.create("dt", null, trademe.cssclass.fueleconomylabel).html("Fuel Economy Info
(Source: Fuelsaver)
")) .append("\r\n") .append( trademe.structure.create("dd", null, "fuel-economy-label") .append(trademe.structure.create("div", null, "fuel-economy fuel-rating-" + v.efficiencyrating.replace(".", "_")) .html(effInfo.length > 0 ? "
" + effInfo.join("
") : " ") .attr("title", v.efficiencyrating + " of 6")) ) .append("\r\n"); fuelefficiency.cost = v.efficiencyfuelcost; fuelefficiency.message = v.efficiencymessage; fuelefficiency.rating = v.efficiencyrating; fuelefficiency.value = v.efficiency; var tooltip = fuelefficiency.tooltip(); } $("#" + trademe.id.vehicleattribute).show(); } else { $("#" + trademe.id.vehicleattribute).hide(); } //features if (v.features && v.features.length > 0 && $("#" + trademe.id.vehiclefeatures).length > 0) { $("#" + trademe.id.vehiclefeatures).append("Features : "); $("#" + trademe.id.vehiclefeatures).append(trademe.structure.create("p", null, null).html(v.features.join())); if ($("#" + trademe.id.vehicleattribute).length > 0) { $("#" + trademe.id.vehiclefeatures).css({ top: parseInt($("#" + trademe.id.vehicleattribute).outerHeight()) + parseInt($("#" + trademe.id.vehicleattribute).css("top")) + 16 }); } } //features = 0 if (v.features && v.features.length == 0) { $("#" + trademe.id.vehiclefeatures).remove(); } //comments if (v.comments && $("#" + trademe.id.vehiclecomments).length > 0) { //$("#" + trademe.id.vehiclecomments).append("\r\nComments : \r\n"); $("#" + trademe.id.vehiclecomments).append(trademe.structure.create("p", null, null).html("\r\n" + v.comments + "\r\n")); if ($("#" + trademe.id.vehiclefeatures).length > 0) { $("#" + trademe.id.vehiclecomments).css({ top: parseInt($("#" + trademe.id.vehiclefeatures).outerHeight()) + parseInt($("#" + trademe.id.vehiclefeatures).css("top")) }); } else { $("#" + trademe.id.vehiclecomments).css({ top: parseInt($("#" + trademe.id.vehicleattribute).outerHeight()) + parseInt($("#" + trademe.id.vehicleattribute).css("top")) + 125 + (parseInt($("#" + trademe.id.vehicleattribute).outerHeight()) < trademe.selectedvalue.commenttop ? trademe.selectedvalue.commenttop - parseInt($("#" + trademe.id.vehicleattribute).outerHeight()) : 0) }); } } //fix details-container height based on comments var detailsHeight = parseInt($("#" + trademe.id.vehiclecomments + " p").outerHeight()) + parseInt($("#" + trademe.id.vehiclecomments).css("top").replace("px")); if ($("#" + trademe.id.detailsviewport).parent().height() < (detailsHeight + 80)) { $("#" + trademe.id.detailsviewport).parent().height(detailsHeight + 80); } if (typeof trademe.structure.fetcheddetailsextra != 'undefined' && trademe.structure.fetcheddetailsextra == true) { trademe.structure.detailsextrascript(v); } } }); }, sortorder: { "asc": 0, "desc": 1 }, sort: function () { var sortby = 7; var orderby = trademe.structure.sortorder.asc; var classname = null; var sorted_elements = new Array(); var unsorted_elements = new Array(); $.each(trademe.selection.sortoption, function (i, v) { if (v.value == sortby) { orderby = v.sortorder; classname = v.classname; } }); var parent = $("." + trademe.cssclass.itemcontainerlist); $(parent.find(".item-container")).each(function (i, v) { var val = $(this).find("." + classname).html(); val = val.replace("$", "").replace(",", ""); if ($.IsNumber(val)) { val = parseInt(val); } //save unsorted elements unsorted_elements.push(new Array(val, $(this).clone(true))); }); var sortedR = []; for (var i = 0; i < unsorted_elements.length; i++) { sortedR.push(unsorted_elements[i][0]); } //start sorting sortedR.sort(); if (orderby == trademe.structure.sortorder.desc) { sortedR.reverse(); } var max = unsorted_elements.length * 2; for (var si = 0; si < sortedR.length; si++) { var ui = 0; while (unsorted_elements.length > -1) { if (unsorted_elements[ui][0] == sortedR[si]) { sorted_elements.push(unsorted_elements[ui][1]); unsorted_elements.splice(ui, 1); break; } ui++; if (ui > max) { break; } } } var _temp_sorted_elements = []; parent.html(""); $.each(sorted_elements, function (i, v) { var id = v.attr("id"); if ($("#" + trademe.id.itemcontainerlist).find(id).length == 0) { v.appendTo($("#" + trademe.id.itemcontainerlist)); } }); $(".hidden").hide(); //$(".listing-stat").html(parent.children().length + " found"); }, sortthis: function (data) { var sortby = 7; var sortorder = trademe.structure.sortorder.desc; var objectname = null; var sorted_elements = new Array(); var unsorted_elements = new Array(); if ($("#" + trademe.id.sortoption).children().length == 0) { return data; } if ($("#" + trademe.id.sortoption).children().length > 0 && $("#" + trademe.id.sortoption).find("option:selected").val() > -1) { sortby = $("#" + trademe.id.sortoption).find("option:selected").val(); } //load what and how to sort the datasource $.each(trademe.selection.sortoption, function (i, v) { if (v.value == sortby) { sortorder = v.sortorder; //orderby = v.sortby; objectname = v.objectname; } }); //save unsorted yet and save sortlabel var sortedlabel = []; var isnum = null; $.each(data, function (i, v) { if (v[objectname]) { var val = !$.IsNumber(v[objectname]) ? v[objectname].replace('$', '').replace(new RegExp(',', 'g'), '') : parseInt(v[objectname]); sortedlabel.push(!$.IsNumber(val) ? val : parseInt(val)); unsorted_elements.push(new Array(!$.IsNumber(val) ? val : parseInt(val), v)); if (isnum == null) { isnum = $.IsNumber(val); } } }); //start sorting alphabet if (!isnum) { sortedlabel.sort(); if (sortorder == trademe.structure.sortorder.desc) { sortedlabel.reverse(); } } else { sortedlabel.sort(function (a, b) { return a - b }); if (sortorder == trademe.structure.sortorder.desc) { sortedlabel.reverse(function (a, b) { return b - a }); } } var max = unsorted_elements.length * 2; for (var si = 0; si < sortedlabel.length; si++) { var ui = 0; while (unsorted_elements.length > -1) { if (unsorted_elements[ui][0] == sortedlabel[si]) { sorted_elements.push(unsorted_elements[ui][1]); unsorted_elements.splice(ui, 1); break; } ui++; if (ui > max) { break; } } } return sorted_elements; }, create: function (nodename, nodeid, nodeclass) { var node = document.createElement(nodename); if (nodeid) { $(node).attr("id", nodeid); } if (nodeclass) { $(node).addClass(nodeclass); } return $(node); }, rotateimg: function (rotatedirection, target) { var parent = target.parent("div"); var vId = parseInt(parent.attr("id").replace("item-", "")); var currentImageIndex = parseInt(parent.data("imageindex")); $.each(vehicles, function (i, v) { if (v.id == vId) { if (rotatedirection == trademe.enume.rotate.left) { if (currentImageIndex == 0) { currentImageIndex = v.images.length; } parent.find(".img-index").html(currentImageIndex + " of " + v.images.length); parent.children(".preview-image").attr("src", v.images[currentImageIndex - 1]); parent.data("imageindex", currentImageIndex - 1); } if (rotatedirection == trademe.enume.rotate.right) { if (currentImageIndex >= (v.images.length - 1)) { currentImageIndex = -1; } parent.find(".img-index").html(parseInt(currentImageIndex + 2) + " of " + v.images.length); parent.children(".preview-image").attr("src", v.images[currentImageIndex + 1]); parent.data("imageindex", currentImageIndex + 1); } } }); }, fetchselectionjson: function (url, callback) { //this is a flag that fetched has been done if (typeof trademe.selection.fetched != 'undefined' && trademe.selection.fetched == true) { return; } trademe.structure.fetch(url, callback); }, fetchlistingextra: function () { if (listing.fetchedlistingextra != 'undefined' && listing.fetchedlistingextra == true) { return; } trademe.structure.fetch( 'http://' + document.domain + '/scripts/listingextrascript.js?cached=1', function (jqxhr, settings, exception) { //remove comment jqxhr = jqxhr.replace(new RegExp('\r', 'g'), '').replace(new RegExp('\n', 'g'), '').replace(new RegExp("(?:/\\*(?:[^*]|(?:\\*+[^*/]))*\\*+/)|(?://.*)", "g"), ""); if (typeof listing.fetchedlistingextra == 'undefined' && jqxhr) { listing["fetchedlistingextra"] = true; } var arr_data = jqxhr; //.split(";"); if (listing) { listing["listingextraescript"] = eval(arr_data); } }, "script"); }, fetchdetailsextra: function () { if (typeof trademe.structure.fetcheddetailsextra != 'undefined' && trademe.structure.fetchdetailsextra == true) { return; } trademe.structure.fetch( 'http://' + document.domain + '/scripts/detailsextrascript.js?cached=1', function (jqxhr, settings, exception) { //remove comment jqxhr = jqxhr.replace(new RegExp('\r', 'g'), '').replace(new RegExp('\n', 'g'), '').replace(new RegExp("(?:/\\*(?:[^*]|(?:\\*+[^*/]))*\\*+/)|(?://.*)", "g"), ""); if (typeof trademe.structure.fetcheddetailsextra == 'undefined' && jqxhr) { trademe.structure["fetcheddetailsextra"] = true; } var arr_data = jqxhr; trademe.structure["detailsextrascript"] = eval(arr_data); trademe.structure.populatedetailscallback(); }, "script"); }, fetch: function (url, callback, dataType) { dataType = !dataType ? "text" : dataType; $.ajax({ type: "GET", url: url, dataType: dataType, cache: true, ifModified: true, success: function (jqxhr, settings, exception) { if (!jqxhr) return; if (callback) { callback(jqxhr, settings, exception); } } }); } }, event: { makeoptionclicked: function () { cookie("ManufacturerId", $(this).find("option:selected").val()); listing.currentpage = 0; listing.populate(); }, sortbyclicked: function () { cookie("SortBy", $(this).find("option:selected").val()); listing.populate(); }, galleryviewclicked: function () { //reset listing.maxpage = 0; listing.minpage = 0; listing.currentpage = 0; listing.currentviewtype = trademe.enume.viewtype.galleryview; cookie("viewtype", trademe.enume.viewtype.galleryview); listing.populate(); return false; }, listviewclicked: function () { //reset listing.maxpage = 0; listing.minpage = 0; listing.currentpage = 0; listing.currentviewtype = trademe.enume.viewtype.listview; cookie("viewtype", trademe.enume.viewtype.listview); listing.populate(); return false; }, prevclick: function (e) { if (e) { e.stopPropagation(); } else { window.event.cancelBubble = true; } trademe.structure.rotateimg(trademe.enume.rotate.left, $(this)); return false; }, nextclick: function (e) { if (e) { e.stopPropagation(); } else { window.event.cancelBubble = true; } trademe.structure.rotateimg(trademe.enume.rotate.right, $(this)); return false; }, itemclick: function () { if (defaults.detailspage) { var qs = window.location.search.substring(1); //window.location.href = defaults.detailspage + "?id=" + $(this).attr("id").replace("item-", "") + (querystring("branchId") ? "&branchId=" + querystring("branchId") : "") + (querystring("new") ? "&new=" + querystring("new") : "") + (querystring("specials") ? "&specials=" + querystring("specials") : ""); window.location.href = defaults.detailspage + "?id=" + $(this).attr("id").replace("item-", "") + (qs ? "&" + qs : ""); } }, printthis: function () { //window.print(); //$("#" + trademe.id.detailsviewport).print({ csspath: '../../App_Themes/trademe.motors.stocklist.css' }); window.open('http:\/\/' + document.domain + '\/vehicle-print.aspx?id=' + querystring("id"), '_blank'); return false; }, pagelinkclicked: function () { cookie("currentpage", $(this).data("number")); listing.currentpage = parseInt($(this).data("number")); listing.populate(); return false; }, pagenextclicked: function () { listing.currentpage += 1; cookie("currentpage", listing.currentpage); listing.populate(); return false; }, pageprevclicked: function () { listing.currentpage -= 1; cookie("currentpage", listing.currentpage); listing.populate(); return false; } } }; return this.each(function (i, obj) { $this = $(this); trademe.structure.target = $this; //add the trademe motors css if (!trademe.structure.hasTMMotorsCss()) { trademe.structure.addHeadCss(); } //setup stock list page if (defaults.pagetype == trademe.enume.pagetype.stock) { listing.init(); listing.populatecallback = function () { listing.currentpage = 0; //reset at 1st page load listing.currentviewtype = cookie("viewtype") ? parseInt(cookie("viewtype")) : defaults.viewtype; listing.populate(); }; } //setup details list page if (defaults.pagetype == trademe.enume.pagetype.details) { trademe.structure.initdetails(); ///display details trademe.structure.populatedetailscallback = trademe.structure.populatedetails; //display carousel carousel.create(); } }); }; })(jQuery); function querystring(name) { name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]"); var regexS = "[\\?&]" + name + "=([^&#]*)"; var regex = new RegExp(regexS); var results = regex.exec(window.location.search); if(results == null) return ""; else return decodeURIComponent(results[1].replace(/\+/g, " ")); } //USAGE: cookie([name],value); cookie([name]); cookie([name],[value],{expires:[value]}) function cookie() { return cookie.params.apply(this, arguments); } cookie.params = function (key, value, options) { if (arguments.length > 1 && String(value) !== "[object Object]") { if (options == undefined) { options = {} } if (value === null || value === undefined) { options.expires = -1; } if (typeof options.expires === 'number') { var days = options.expires, t = options.expires = new Date(); t.setDate(t.getDate() + days); } value = String(value); return (document.cookie = [encodeURIComponent(key), '=', options.raw ? value : encodeURIComponent(value), options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE options.path ? '; path=' + options.path : '', options.domain ? '; domain=' + options.domain : '', options.secure ? '; secure' : ''].join('')); } options = value || {}; var result, decode = options.raw ? function (s) { return s; } : decodeURIComponent; return (result = new RegExp('(?:^|; )' + encodeURIComponent(key) + '=([^;]*)').exec(document.cookie)) ? decode(result[1]) : null; } jQuery.IsNumber = function (n) { return typeof (n) != "boolean" && !isNaN(n); }