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.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"); } 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); $("#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 = $("").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.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}); $("#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); }); }
").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($("