(function ($) { $.fn.specials = function (options) { var defaults = $.extend({ ver: 1.0, branchId: null, vertical: 0, detailspage: 'http:\/\/' + document.domain + '\/vehicle.html', mediapath: 'https://trademe.tmcdn.co.nz/photoserver', jsonpath: 'http://jquery.dealerbase.co.nz', maxspecials: 4, slideinterval: 0, title: 'Our Favourites' }, options); var trademe = { cssclass: { "specials": "specials", "specialsvertical": "specials-vertical" }, id: { "specials": "specials" }, 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); }, createspecials: function () { var sform = trademe.structure.create("div", trademe.id.specials, trademe.cssclass.specials); if (defaults.vertical == 1) { sform.addClass(trademe.cssclass.specialsvertical); } if (defaults.title) { var title = trademe.structure.create("h1", null, "cufon").html(defaults.title); sform.append(title); } trademe.structure.target.append(sform); }, binddata: function () { if ($("#" + trademe.id.specials).length == 0) return; if ($("#" + trademe.id.specials).length == 0) return; if (!defaults.branchId) return; $.getJSON(defaults.jsonpath + "/specialsdata.js?branchId=" + defaults.branchId + "&callback=" + (browser && browser.msie ? "?" : ""), function (data) { var json = data; if (typeof trademe.datafetched == 'undefined' && data) { trademe["datafetched"] = true; } trademe["data"] = data; /*bind specials*/ if ($("#" + trademe.id.specials).length > 0 && typeof trademe["data"] != 'undefined') { defaults.maxspecials = trademe["data"].length < defaults.maxspecials ? trademe["data"].length : defaults.maxspecials; var rndIndex = 0; var specialflash = function () { $("#" + trademe.id.specials).find("a").remove(); var i = 0; var a_rndIndex = []; while (i < defaults.maxspecials) { rndIndex = Math.floor((Math.random() * trademe["data"].length)); if (a_rndIndex.length == 0 || $.inArray(rndIndex, a_rndIndex) == -1) { a_rndIndex.push(rndIndex); i++; } } $.each(a_rndIndex, function (i, _v) { if (trademe["data"][_v].image_list.length > 0) { var image_list = trademe["data"][_v].image_list; var v = trademe["data"][_v]; var item = trademe.structure.create("a", null, null).attr("href", defaults.detailspage + (v.Id ? "?id=" + v.Id : "")); item.append(trademe.structure.create("img", null, null).attr("src", defaults.mediapath + "/Med/" + image_list[0].split('_')[1] + ".jpg")) .append(trademe.structure.create("label", null, null).html($.currency(parseInt(v.retail_price), { roundToDecimalPlace: 0 }) + "
" + v.Year + " " + v.ManufacturerModel)); $("#" + trademe.id.specials).append(item); } }); }; specialflash(); //random display if (defaults.slideinterval > 0) { var d = window.setInterval(specialflash, 5000); } } }) .error(function (jqxhr, settings, exception) { var x = 0; }); }, hasSpecials: function () { return ($("#" + trademe.id.specials).length > 0); }, loaddefaultstyle: function () { if ($("head").find("link#_specials-theme").length == 0) { var link = trademe.structure.create("link", "_specials-theme", null); var url = defaults.jsonpath + "/css/specials.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); } } }); } } }; return this.each(function (i, obj) { //if hidden dont do this if ($(this).is(":visible")) { //get default theme for specials trademe.structure.loaddefaultstyle(); trademe.structure.target = $(this); if (!trademe.structure.hasSpecials()) { trademe.structure.createspecials(); trademe.structure.binddata(); } } }); }; })(jQuery); $(document).ready(function(){ if ($("#specials-form").length > 0) { var param = eval("[{" + $("#specials-form").attr("param") + "}]"); $("#specials-form").specials(param[0]); } });