var defaultParams;
var params;
var initialized;
var timer;
var ageNames = ["today", "1 day", "2 days", "1 week", "2 weeks", "1 month", "2 months", "6 months", "1 year"];
var ageValues = [0, 1, 2, 7, 14, 31, 61, 183, 365];
function getParamsFromLocation()
{
var url = document.location.toString();
params = [];
for (var i in defaultParams) {
if (defaultParams.hasOwnProperty(i)) {
params[i] = defaultParams[i];
}
}
var anchor = url.indexOf('#');
if (anchor > 0) {
anchor = url.substr(anchor+1).split('&');
for (var j in anchor) {
if (anchor.hasOwnProperty(j)) {
var parts = anchor[j].split('=');
params[parts[0]] = decodeURIComponent(parts[1]);
}
}
}
}
function getParamsFromControls()
{
var age = $("#age").slider('value', 0);
params.age = (age === 0) ? '*' : (age > 0 ? ageValues[age-1] : -ageValues[-age-1]-1);
params.active = $("#active").slider('value', 0);
params.mingravity = $("#gravity").slider('value', 0);
params.maxgravity = $("#gravity").slider('value', 1);
params.gravitydelta = $("#gravitydelta").slider('value', 0);
params.payout = $("#payout").slider('value', 0);
params.commission = $("#commission").slider('value', 0);
params.pagerank = $("#pagerank").slider('value', 0);
params.subscription = $("#subscription").slider('value', 0);
params.description = $("#description").val();
var category = $("#categories .selected").attr('id');
params.category = category ? parseInt(category.substr(category.indexOf('-') + 1)) : 0;
}
function updateControlTexts()
{
var age = $("#age").slider('value', 0);
var ageText = age ? (age > 0 ? "added " + ageNames[age-1] + (age > 1 ? " ago" : "") : "removed " + (ageNames[-age-1]) + (age < -1 ? " ago" : "")) : "any";
$("#age-text").html(ageText);
var active = $("#active").slider('value', 0);
$("#active-text").html(active === 0 ? "any" : (active > 0 ? "only active products" : "only dropped products"));
var gmin = $("#gravity").slider('value', 0);
var gmax = $("#gravity").slider('value', 1);
$("#gravity-text").html(gmin === defaultParams.mingravity ? (gmax === defaultParams.maxgravity ? "any" : "up to " + gmax) : (gmax === defaultParams.maxgravity ? "from " + gmin : "between " + gmin + " and " + gmax));
var delta = $("#gravitydelta").slider('value', 0);
$("#gravitydelta-text").html(delta === 0 ? "any" : (delta > 0 ? delta + " or more" : delta + " or less"));
var payout = $("#payout").slider('value', 0);
$("#payout-text").html(payout === 0 ? "any" : "$" + payout + " or more");
var comm = $("#commission").slider('value', 0);
$("#commission-text").html(comm === 0 ? "any" : comm + "% or more");
var pr = $("#pagerank").slider('value', 0);
$("#pagerank-text").html(pr === 0 ? "any" : pr + " or more");
var subscription = $("#subscription").slider('value', 0);
$("#subscription-text").html(subscription === 0 ? "any" : (subscription > 0 ? "YES" : "NO"));
}
function updateSortingControls()
{
var sortby = params.sortby, sortby0 = sortby;
if (sortby.substr(0,1) === '-' || sortby.substr(0,1) === '+') {
sortby0 = sortby0.substr(1);
}
$("div.sorting").removeClass('sorting-selected').find("span").html(" ");
$("#" + sortby0 + "-sorting").addClass('sorting-selected').find("span").html(sortby.substr(0,1) === '-' ? "▼" : "▲");
}
function setControlsFromParams()
{
var i = 0, age = params.age;
if (age !== null && age !== '*') {
var age0 = (age >= 0) ? age : -age-1;
for (i = 1; i <= ageValues.length; i += 1) {
if (ageValues[i - 1] >= age0) {
break;
}
}
if (i > ageValues.length) {
i -= 1;
}
if (age < 0) {
i = -i;
}
}
$("#age").slider("moveTo", i, 0);
$("#active").slider("moveTo", params.active, 0);
$("#gravity").slider("moveTo", params.mingravity, 0);
$("#gravity").slider("moveTo", params.maxgravity, 1);
$("#gravitydelta").slider("moveTo", params.gravitydelta, 0);
$("#payout").slider("moveTo", params.payout, 0);
$("#commission").slider("moveTo", params.commission, 0);
$("#pagerank").slider("moveTo", params.pagerank, 0);
$("#subscription").slider("moveTo", params.subscription, 0);
$("#description").val(params.description);
$("#categories *").removeClass('selected');
$("#cat-" + params.category).addClass('selected');
updateSortingControls();
updateControlTexts();
}
function joinParams(symbol)
{
var url = "";
for (var param in params) {
if (param === "count") continue;
if (param === "sortby" || params[param] !== defaultParams[param]) {
url += param + '=' + encodeURIComponent(params[param]) + '&';
}
}
if (url !== "") {
url = symbol + url.substr(0, url.length - 1);
}
return url;
}
function onShowGraphsClick(id)
{
var graph = $("#graphs-"+id);
if (graph.parent().css("display") !== "none") {
graph.parent().hide();
graph.html("");
} else {
var captions = $("
").addClass("smallgraphcaptions").html("GravityPayoutReferredCommission")
var graph1 = $("
").attr("src", "/graph.php?id=" + id + "&data=gravity&days=31&width=160&height=120&xsteps=2&ysteps=2&bg=1");
var graph2 = $("
").attr("src", "/graph.php?id=" + id + "&data=earnedpersale&days=31&width=160&height=120&xsteps=2&ysteps=2&bg=1");
var graph3 = $("
").attr("src", "/graph.php?id=" + id + "&data=referred&days=31&width=160&height=120&xsteps=2&ysteps=2&bg=1");
var graph4 = $("
").attr("src", "/graph.php?id=" + id + "&data=commission&days=31&width=160&height=120&xsteps=2&ysteps=2&bg=1");
graph.append(captions).append(graph1).append(graph2).append(graph3).append(graph4);
graph.parent().show();
}
}
function b1(column) { return (params.sortby === column || params.sortby.substr(1) === column) ? "" : ""; }
function b2(column) { return (params.sortby === column || params.sortby.substr(1) === column) ? "" : ""; }
function loadProducts()
{
$(".loading span").show();
var query = joinParams('');
if (params.pagenumber > 0 && params.count > 0)
query += "&count=" + params.count;
//$("#debug").html(query);
$.postJSON("/catalog.php", query, function(data) {
$(".loading span").hide();
$("#results").html("");
var count = data[0];
params.count = count;
$("#pagination").pagination(count, {callback:onPaginationClick, current_page:params.pagenumber});
$("#pagination-wrapper").show();
$.each(data[1], function(i, item) {
var product = $("").addClass("product").attr("id", item.Name);
var name = $(" | ").addClass("name").append($("").attr("href", "/products/" + item.Name + ".php").html(item.Name)).append(item.Active ? "" : " (INACTIVE)");
var title = $(" | ").addClass("title").html(item.Title);
var gravity = $(" | ").addClass("gravity").html("Gravity: " + b1("gravity") + Math.round(item.Gravity*100)/100 + b2("gravity") + " ( 0 ? "up" : "down") + "\">" + b1("gravitydelta") + Math.round(item.GravityDelta*100)/100 + b2("gravitydelta") + ")");
var traffic = $(" | ").addClass("traffic").html("Traffic: " + (item.Traffic >= 0 ? (item.Traffic + (item.PageRank >= 0 ? (" (" + b1("pagerank") + "PR" + item.PageRank + b2("pagerank") + ")") : "")) : "N/A"));
var subscription = $(" | ").addClass("subscription").html("Subscription: " + (item.Subscription ? "$" + Math.round(item.Rebill*100)/100 : "NO"));
var showgraphs = $(" | ").addClass("showgraphs").attr("id", "showgraph-" + item.Name).html("show product graphs inline").click(function() { var caption = $(this).attr('id'), id = caption.substr(caption.indexOf('-')+1); onShowGraphsClick(id); });
var graphs = $(" | ").addClass("graphs").attr("id", "graphs-" + item.Name).each(function(){this.colSpan=2;});
var visit = $(" | ").addClass("visit").append($("").attr("target", "_blank").attr("href", "/landing.php?id=" + item.Name).html("visit landing page"));
var description = $(" | ").addClass("description").each(function(){this.rowSpan=4;}).html(item.Description);
var payout = $(" | ").addClass("payout").html("Payout: " + b1("payout") + "$" + Math.round(item.Payout*100)/100 + b2("payout") + " (" + b1("commission") + item.Commission + "%" + b2("commission") + ")");
product.append($("
").append(name).append(title));
product.append($("
").append(gravity).append(description));
product.append($("
").append(payout));
product.append($("
").append(subscription));
product.append($("
").append(traffic));
product.append($("
").append(visit).append(showgraphs));
product.append($("
").append(graphs));
product.appendTo("#results");
graphs.parent().hide();
});
if (data.length === 0) {
$("#results").html("No data was returned. Please adjust filters.");
}
});
}
var lastLocation = document.location.toString();
function checkLocationChange()
{
if (lastLocation !== document.location.toString()) {
getParamsFromLocation(); setLocationFromParams(); getParamsFromLocation(); setLocationFromParams();
lastLocation = document.location.toString();
setControlsFromParams();
putUpdateRequest();
}
}
window.setInterval(checkLocationChange, 100);
function setLocationFromParams()
{
var url = document.location.toString();
var anchor = url.indexOf('#');
if (anchor > 0) {
url = url.substr(0, anchor);
}
url += joinParams('#');
document.location = url;
lastLocation = url;
}
function onTimer()
{
getParamsFromControls();
setLocationFromParams();
loadProducts();
}
function putUpdateRequest()
{
window.clearTimeout(timer);
timer = window.setTimeout(onTimer, 500);
return true;
}
function onPaginationClick(page, container) {
if (!initialized) return true;
if (params.pagenumber == page) return false;
params.pagenumber = page;
putUpdateRequest();
return false;
}
function onSortClick(id)
{
var sortby = params.sortby, sortby0 = sortby;
if (sortby.substr(0,1) === '-' || sortby.substr(0,1) === '+') {
sortby0 = sortby0.substr(1);
}
if (sortby0 === id && id !== "description") {
sortby = (sortby.substr(0,1) === '-') ? id : '-' + id;
} else {
sortby = '-' + id;
}
params.sortby = sortby;
setControlsFromParams();
putUpdateRequest();
}
function onSliderMove(e, ui)
{
updateControlTexts();
return true;
}
function onSliderChange(e, ui)
{
if (!initialized) return true;
params.pagenumber = 0;
putUpdateRequest();
return true;
}
function onDescriptionChange(e, ui)
{
if (!initialized) return true;
params.pagenumber = 0;
params.sortby = "description";
updateSortingControls();
putUpdateRequest();
return true;
}
function onCategorySelected(cat)
{
if (!initialized) return true;
params.pagenumber = 0;
params.category = cat;
$("#categories *").removeClass('selected');
$("#cat-" + cat).addClass('selected');
putUpdateRequest();
}
function onCategoryLeave()
{
var elem = $("#cat-" + params.category);
if (elem.is("p")) elem = elem.parent().prev();
$(".accordion").accordion("activate", elem);
}
function onLoad()
{
$.postJSON = function(url, data, callback) { $.post(url, data, callback, "json"); };
initialized = false;
defaultParams = [];
defaultParams.age = '*';
defaultParams.active = 0;
defaultParams.mingravity = 0;
defaultParams.maxgravity = 250;
defaultParams.gravitydelta = 0;
defaultParams.payout = 0;
defaultParams.commission = 0;
defaultParams.pagerank = 0;
defaultParams.subscription = 0;
defaultParams.description = "";
defaultParams.category = 0;
defaultParams.sortby = "-gravity";
defaultParams.pagenumber = 0;
var ages = ageNames.length;
$("#age").slider({min: -ages, max: ages, steps: 2*ages, handle: ".slider-handle", animate: false, change: onSliderChange, slide: onSliderMove});
$("#active").slider({min: -1, max: 1, steps: 2, handle: ".slider-handle", animate: false, change: onSliderChange, slide: onSliderMove});
$("#gravity").slider({min: defaultParams.mingravity, max: defaultParams.maxgravity, handle: ".slider-handle", animate: false, change: onSliderChange, slide: onSliderMove});
$("#gravity").slider({min: defaultParams.mingravity, max: defaultParams.maxgravity, handle: ".slider-handle", animate: false, change: onSliderChange, slide: onSliderMove});
$("#gravitydelta").slider({min: -50, max: 50, steps:100, handle: ".slider-handle", animate: false, change: onSliderChange, slide: onSliderMove});
$("#payout").slider({min: 0, max: 100, steps:100, handle: ".slider-handle", animate: false, change: onSliderChange, slide: onSliderMove});
$("#commission").slider({min: 0, max: 100, steps:100, handle: ".slider-handle", animate: false, change: onSliderChange, slide: onSliderMove});
$("#pagerank").slider({min: 0, max: 10, steps: 10, handle: ".slider-handle", animate: false, change: onSliderChange, slide: onSliderMove});
$("#subscription").slider({min: -1, max: 1, steps: 2, handle: ".slider-handle", animate: false, change: onSliderChange, slide: onSliderMove});
$("#description").keyup(onDescriptionChange);
$(".sorting").click(function() { var caption = $(this).attr('id'), id = caption.substr(0, caption.indexOf('-')); onSortClick(id); });
$(".sorting span").addClass('sorting-selected');
$(".accordion").accordion({ header: "h4", autoHeight: false, animated: false, event: 'mouseclick', selectedClass: 'open' });
$("#categories").mouseout(onCategoryLeave);
getParamsFromLocation(); setLocationFromParams(); getParamsFromLocation(); setLocationFromParams();
setControlsFromParams();
initialized = true;
putUpdateRequest();
}
google.setOnLoadCallback(onLoad);
jQuery.fn.pagination = function(maxentries, opts){
opts = jQuery.extend({
items_per_page:10,
num_display_entries:5,
current_page:0,
num_edge_entries:2,
link_to:"#",
prev_text:"Prev",
next_text:"Next",
ellipse_text:"...",
prev_show_always:true,
next_show_always:true,
callback:function(){return false;}
},opts||{});
return this.each(function() {
/**
* Calculate the maximum number of pages
*/
function numPages() {
return Math.ceil(maxentries/opts.items_per_page);
}
/**
* Calculate start and end point of pagination links depending on
* current_page and num_display_entries.
* @return {Array}
*/
function getInterval() {
var ne_half = Math.ceil(opts.num_display_entries/2);
var np = numPages();
var upper_limit = np-opts.num_display_entries;
var start = current_page>ne_half?Math.max(Math.min(current_page-ne_half, upper_limit), 0):0;
var end = current_page>ne_half?Math.min(current_page+ne_half, np):Math.min(opts.num_display_entries, np);
return [start,end];
}
/**
* This is the event handling function for the pagination links.
* @param {int} page_id The new page number
*/
function pageSelected(page_id, evt){
current_page = page_id;
drawLinks();
var continuePropagation = opts.callback(page_id, panel);
if (!continuePropagation) {
if (evt.stopPropagation) {
evt.stopPropagation();
}
else {
evt.cancelBubble = true;
}
}
return continuePropagation;
}
/**
* This function inserts the pagination links into the container element
*/
function drawLinks() {
panel.empty();
var interval = getInterval();
var np = numPages();
// This helper function returns a handler function that calls pageSelected with the right page_id
var getClickHandler = function(page_id) {
return function(evt){ return pageSelected(page_id,evt); }
}
// Helper function for generating a single link (or a span tag if it's the current page)
var appendItem = function(page_id, appendopts){
page_id = page_id<0?0:(page_id"+(appendopts.text)+"");
}
else
{
var lnk = jQuery(""+(appendopts.text)+"")
.bind("click", getClickHandler(page_id))
.attr('href', opts.link_to.replace(/__id__/,page_id));
}
if(appendopts.classes){lnk.addClass(appendopts.classes);}
panel.append(lnk);
}
// Generate "Previous"-Link
if(opts.prev_text && (current_page > 0 || opts.prev_show_always)){
appendItem(current_page-1,{text:opts.prev_text, classes:"prev"});
}
// Generate starting points
if (interval[0] > 0 && opts.num_edge_entries > 0)
{
var end = Math.min(opts.num_edge_entries, interval[0]);
for(var i=0; i"+opts.ellipse_text+"").appendTo(panel);
}
}
// Generate interval links
for(var i=interval[0]; i 0)
{
if(np-opts.num_edge_entries > interval[1]&& opts.ellipse_text)
{
jQuery(""+opts.ellipse_text+"").appendTo(panel);
}
var begin = Math.max(np-opts.num_edge_entries, interval[1]);
for(var i=begin; i 0) {
pageSelected(current_page - 1);
return true;
}
else {
return false;
}
}
this.nextPage = function(){
if(current_page < numPages()-1) {
pageSelected(current_page+1);
return true;
}
else {
return false;
}
}
// When all initialisation is done, draw the links
drawLinks();
// call callback function
opts.callback(current_page, this);
});
}