(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]);
}
});