(function ($) { $.fn.TradeMeMotorsTestimonial = function (options) { var defaults = $.extend({ ver: 1, datasource: null, testimonialtype: 0, /*0 - BoxType, 1 - Full*/ mediapath: 'http://media.autobase.co.nz', jsonpath: 'http://jquery.dealerbase.co.nz', paging: true }, options); var trademe = { target: null, populatecallback: null, currentpage: 1, autoadjust: { eachWidth: function () { return trademe.target ? trademe.target.find("." + trademe.cssclass.testimonialpage).outerWidth() - 40 : 0; }, heightPerPage: function () { return 800; }, pWidth: function () { return trademe.target ? trademe.target.outerWidth() - trademe.target.find("img").outerWidth() - 100 : 0; }, eachMarginBottom: function () { return 20; } }, cssclass: { "testimonial": "testimonial-item", "testimonialpage": "testimonial-page", "testimonialpagecontainer": "testimonial-page-container", "pagelink": "page-link", "pagenext": "page-next", "pageprev": "page-prev", "testimonialpopup": "testimonial-popup" }, id: { "testimonial": "testimonial-item" }, tmenum: { testimonialtype: { "basic": 0, "full": 1 } }, create: function (nodename, nodeid, nodeclass) { var node = document.createElement(nodename); if (nodeid) { $(node).attr("id", nodeid); } if (nodeclass) { $(node).addClass(nodeclass); } return $(node); }, init: function () { $.getJSON(defaults.jsonpath + "/testimonialdata.js?branchId=" + defaults.branchId + "&callback=" + (browser && browser.msie ? "?" : ""), function (data) { if (typeof trademe.datafetched == 'undefined' && data) { trademe["datafetched"] = true; } defaults.datasource = data; if (trademe.populatecallback) { trademe.populatecallback(); } }) .error(function (jqxhr, settings, exception) { var x = 0; }); }, populate: function () { if (!defaults.datasource) { return; } var assumedHeight = 0; $.each(defaults.datasource, function (i, v) { var imgUrl = defaults.mediapath + "\/UserData\/Testimonials\/Thumb\/" + v.Id + ".jpg"; var item = trademe.create("div", null, trademe.cssclass.testimonial + " ui-curve-small ui-shadow-large"); var p = trademe.create("p", null, null).html(v.body_text + "

" + v.Signature + ""); var img = trademe.create("img", null, null).attr("src", imgUrl).error(function () { $(this).attr("src", defaults.jsonpath + "/images/imageunavailable_medium.png").width($(this).parent().width()); }); var a = trademe.create("a", null, null).attr("href", "").attr("param", "id:" + v.Id); var arrowleft = trademe.create("div", null, "arrow-left"); var arrowleftborder = trademe.create("div", null, "arrow-left-border"); item.append(arrowleftborder).append(arrowleft).append(a.append(img)).append(p); if (!defaults.paging) { trademe.target.append(item); } else { //assume sizing var cloned = item.clone().addClass("cloned"); cloned.css({ "position": "absolute", "top": 0, "right": 0, "width": trademe.autoadjust.eachWidth(), "z-Index": 100000 }); cloned.find("p").width(trademe.autoadjust.pWidth() - 126); $("body").prepend(cloned); //create a per page container (for paging) var div = null; if ($("." + trademe.cssclass.testimonialpage).length == 0) { div = trademe.create("div", null, trademe.cssclass.testimonialpage); } else { div = $("." + trademe.cssclass.testimonialpage + ":last-child"); } //todo:debug for displaying height //item.find("p").append(" " + cloned.outerHeight() + ""); assumedHeight = assumedHeight + cloned.outerHeight(); if ((assumedHeight) < trademe.autoadjust.heightPerPage()) { div.append(item); if (i == 0) { trademe.target.append(div); } } else { trademe.target.append(div); div = trademe.create("div", null, trademe.cssclass.testimonialpage); div.append(item); assumedHeight = cloned.outerHeight(); trademe.target.append(div); } item = $("." + trademe.cssclass.testimonial + ":last-child"); item.css({ "width": trademe.autoadjust.eachWidth() }); item.find("p").width(trademe.autoadjust.pWidth() - 126); cloned.remove(); } }); //hide all except 1st testimonial page $("." + trademe.cssclass.testimonialpage).not(":first-child").hide(); //set paging if (defaults.paging) { trademe.setpagea(trademe.target.find("." + trademe.cssclass.testimonialpage)); } $("." + trademe.cssclass.testimonial).find("a").bind("click", trademe.event.thumbclicked); }, loaddefaultstyle: function () { if ($("head").find("link#_testimonials-theme").length == 0) { var link = trademe.create("link", "_testimonials-theme", null); var url = defaults.jsonpath + "/css/testimonials.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); } }, popup: function (id) { if (!defaults.datasource) { return; } var pop = trademe.create("div", null, trademe.cssclass.testimonialpopup + " ui-curve-med ui-shadow-large"); if ($("." + trademe.cssclass.testimonialpopup).length > 0) { $("." + trademe.cssclass.testimonialpopup).remove(); } $.each(defaults.datasource, function (i, v) { if (v.Id == id) { var imgUrl = defaults.mediapath + "\/UserData\/Testimonials\/Full\/" + v.Id + ".jpg"; var img = trademe.create("img", null, null).attr("src", defaults.mediapath + "\/UserData\/Testimonials\/Full\/" + v.Id + ".jpg").error(function () { $(this).attr("src", defaults.jsonpath + "/images/imageunavailable_medium.png").width($(this).parent().width()); }); var p = trademe.create("p", null, null).html(v.body_text + "

" + v.Signature + ""); var a = trademe.create("a", null, null).attr("href", ""); pop.append(p.prepend(img).append(a)).hide(); $("body").prepend(pop); var navWidth, navHeight; if (self.innerWidth != undefined) { navWidth = self.innerWidth; navHeight = self.innerHeight; } else { navWidth = document.documentElement.clientWidth; navHeight = document.documentElement.clientHeight; } var centerY = ($(window).height() / 2) + $(window).scrollTop(); var centerX = $(window).width() / 2; window.setTimeout(function () { pop.center(); //var maxh = pop.outerHeight()+480; var maxh = pop.outerHeight(); var maxw = pop.outerWidth(); var img = new Image(); img.onerror = function () { maxh += 480; popanim(); }; img.src = defaults.mediapath + "\/UserData\/Testimonials\/Full\/" + v.Id + ".jpg"; pop.css({ "width": 1, "height": 1, "top": centerY, "left": centerX }); pop.find("p").hide(); pop.fadeIn(100); var popanim = function () { pop.animate({ "width": +maxw, "height": +maxh, "top": +(centerY - (maxh / 2)), "left": +(centerX - (maxw / 2)) }, 300, function () { $(this).find("p").fadeIn(); $(this).find("img").css({ "height": 480, "width": 640 }); }); }; popanim(); }, 100); $("." + trademe.cssclass.testimonialpopup).find("a").bind("click", function () { $("." + trademe.cssclass.testimonialpopup).remove(); return false; }); } }); }, setpagea: function (a) { var _pagedisplay = 6; var _totalpages = a.length; var _currentpage = trademe.currentpage && trademe.currentpage > 0 ? trademe.currentpage : 1; var _minpage = Math.min(Math.round(Math.max(1, _currentpage - (_pagedisplay / 2))), Math.max(1, _totalpages - _pagedisplay)); var _maxpage = Math.max(_pagedisplay, _minpage + _pagedisplay); _maxpage = (_maxpage > _totalpages ? _totalpages : _maxpage); var minpage = _minpage; var maxpage = _maxpage; $("." + trademe.cssclass.testimonialpagecontainer).remove(); if (maxpage == 1) return; var pg = trademe.create("div", null, trademe.cssclass.testimonialpagecontainer); pg.append(trademe.create("a", null, trademe.cssclass.pageprev + " ui-curve-small ui-shadow-small").html("Prev").attr("href", "")); for (var i = minpage; i <= maxpage; i++) { var p = trademe.create("a", null, trademe.cssclass.pagelink + " ui-curve-small ui-shadow-small" + (trademe.currentpage == i ? " selected" : "")).html(i).attr("href", "").data("number", i); pg.append(p); } pg.append(trademe.create("a", null, trademe.cssclass.pagenext + " ui-curve-small ui-shadow-small").html("Next").attr("href", "")); trademe.target.append(pg); if (trademe.currentpage <= 1) { $("." + trademe.cssclass.pageprev).hide(); } else { $("." + trademe.cssclass.pageprev).show(); } if (trademe.currentpage >= maxpage) { $("." + trademe.cssclass.pagenext).hide(); } else { $("." + trademe.cssclass.pagenext).show(); } $("." + trademe.cssclass.pagelink).bind("click", trademe.event.pageclicked); $("." + trademe.cssclass.pagenext).bind("click", trademe.event.pagenextclicked); $("." + trademe.cssclass.pageprev).bind("click", trademe.event.pageprevclicked); return; }, 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); } }, error: function (jqXHR, textStatus, errorThrown) { var x = 0; } }); }, event: { imageclicked: function (e) { alert("image clicked"); }, pageclicked: function (e) { $(trademe.target).find("." + trademe.cssclass.testimonialpage).hide(); $(trademe.target).find("." + trademe.cssclass.testimonialpage + ":nth-child(" + $(this).html() + ")").show(); $("." + trademe.cssclass.testimonialpagecontainer + " a").removeClass("selected"); $(this).addClass("selected"); trademe.currentpage = $(this).html(); //set paging trademe.setpagea(trademe.target.find("." + trademe.cssclass.testimonialpage)); return false; }, pagenextclicked: function (e) { trademe.currentpage++; $(trademe.target).find("." + trademe.cssclass.testimonialpage).hide(); $(trademe.target).find("." + trademe.cssclass.testimonialpage + ":nth-child(" + trademe.currentpage + ")").show(); $("." + trademe.cssclass.testimonialpagecontainer + " a").removeClass("selected"); $("." + trademe.cssclass.testimonialpagecontainer + " a:nth-child(" + (trademe.currentpage + 1) + ")").addClass("selected"); //set paging trademe.setpagea(trademe.target.find("." + trademe.cssclass.testimonialpage)); return false; }, pageprevclicked: function (e) { trademe.currentpage--; $(trademe.target).find("." + trademe.cssclass.testimonialpage).hide(); $(trademe.target).find("." + trademe.cssclass.testimonialpage + ":nth-child(" + trademe.currentpage + ")").show(); $("." + trademe.cssclass.testimonialpagecontainer + " a." + trademe.cssclass.pagelink).removeClass("selected"); $("." + trademe.cssclass.testimonialpagecontainer + " a." + trademe.cssclass.pagelink + ":nth-child(" + (trademe.currentpage) + ")").addClass("selected"); //set paging trademe.setpagea(trademe.target.find("." + trademe.cssclass.testimonialpage)); return false; }, thumbclicked: function (e) { var param = {}; if ($(this).attr("param")) { param = eval("({" + $(this).attr("param") + "})"); trademe.popup(param.id); } return false; } } }; return this.each(function (i, obj) { trademe.target = $(this); $(trademe.target).children().remove(); //default css for this plugin trademe.loaddefaultstyle(); trademe.populatecallback = function () { if (trademe.datafetched != 'undefined' && trademe.datafetched == true) { trademe.populate(); } }; trademe.init(); }); }; })(jQuery); $(document).ready(function() { if ($("#testimonial-form").length > 0) { var param = eval("[{" + $("#testimonial-form").attr("param") + "}]"); if (!param || param.length == 0) return; $("#testimonial-form").TradeMeMotorsTestimonial(param[0]); } });