/*
 * jPList - jQuery plugin for sorting, filtering and paging 
 * http://do-web.com/jplist/overview
 *
 * Copyright 2011, Miriam Zusin
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://do-web.com/jplist/license
 */
(function($){$.fn.jplist=function(options){var l=true,k=false,j="",options=$.extend({items_box:j,item_path:j,pagingbox:"#buttons",pageinfo:"#info",filter_path:j,sort:{},filter:{},sort_order:"asc",sort_is_num:k,sort_name:j,max_pages:5,items_on_page:15,redraw_callback:j,cookies:l,sort_dd_path:"#sort-drop-down",paging_dd_path:"#page-by"},options);return this.each(function(){var g="desc",m="class",h=this,hndl=h;h.box=$(h).find(options.items_box);h.items=$(h).find(options.item_path);h.getOuterHTML=function(d){var a=j,c=d[0].attributes,f=d.html(),e=d[0].tagName.toString().toLowerCase();a+="<"+e+" ";for(var b=0;b<c.length;b++)if(c[b].nodeValue!=null&&c[b].nodeValue!=j){a+=c[b].nodeName+"=";a+="'"+c[b].nodeValue+"' "}a+=">";a+=f;a+="</"+e+">";return a};function DataClass(){var a=this,g=a;a.data=[];var d,c;a.ID=0;a.HTML=1;a.SORT_ARR=2;a.FILTER_ARR=3;a.url=document.URL;var b=0;for(var f in options.sort){a["sort-"+f]=b;b++}var b=0;for(var e in options.filter){a["filter-"+e]=b;b++}a.getItems=function(){var a,b=0,e;hndl.items.each(function(){a=hndl.getOuterHTML($(this));d=[];c=[];for(var f in options.sort)d.push([$(this).find(options.sort[f]).text()]);for(var e in options.filter)c.push([$(this).find(options.filter[e]).text()]);g.data.push([b,a,d,c]);b++})};a.getItems();a.print=function(b){for(var c=j,h=hndl.sortObj.sort_name,d=hndl.pagingObj.items_on_page,f=hndl.pagingObj.cpage,g=hndl.sortObj.order,e=Boolean(hndl.sortObj.sort_is_num),a=0;a<b.length;a++)c+=b[a][hndl.dataObj.HTML];hndl.box.html(c);options.cookies&&hndl.cookiesObj.setCookies();$.isFunction(options.redraw_callback)&&options.redraw_callback(h,d,f,g,e)}}function FilterClass(){var a=this,b=a;a.filter_pathes=$(hndl).find(options.filter_path);a.input_fields=a.filter_pathes.find("input");a.input_fields.keyup(function(){hndl.pagingObj.cpage=0;hndl.viewObj.updateView()});a.format=function(b){var a=new String(b);a=a.replace(/[^a-zA-Z0-9]+/g,j);return a.toLowerCase()};a.if_add_item=function(c){for(var a=l,b=0;b<c.length;b++)a=a&c[b];return a};a.filterData=function(g){for(var f=[],e,c,a,d=0;d<g.length;d++){c=g[d];e=c[hndl.dataObj.FILTER_ARR];a=[];b.input_fields.each(function(){var c=b.format($(this).val()),f=$(this).attr(m),d=hndl.dataObj["filter-"+f],g=e[d];if(b.format(g[0]).indexOf(c)!=-1||$.trim(c)==j)a.push(l);else a.push(k)});b.if_add_item(a)&&f.push(c)}return f}}function CookiesClass(){var b=this,a=b;b.setCookies=function(){var c,b,h=hndl.sortObj.sort_name,d=hndl.pagingObj.items_on_page,f=hndl.pagingObj.cpage,g=hndl.sortObj.order,e=Boolean(hndl.sortObj.sort_is_num);hndl.filterObj.input_fields.each(function(){c=hndl.filterObj.format($(this).val());b=$(this).attr(m);a.setCookie("f-"+b,c)});a.setCookie("s",h);a.setCookie("iop",d);a.setCookie("c",f);a.setCookie("o",g);a.setCookie("sn",e);a.setCookie("id",hndl.dataObj.url)};b.getCookies=function(){var b,c,h=a.getCookie("s"),d=a.getCookie("iop"),f=a.getCookie("c"),g=a.getCookie("o"),e=a.getCookie("sn")=="true"?l:k,i=a.getCookie("id");if(i!=hndl.dataObj.url){hndl.filterObj.filter_field!=undefined&&hndl.filterObj.filter_field.val(j);hndl.pagingObj.cpage=0}else{hndl.filterObj.input_fields.each(function(){c=$(this).attr(m);b=a.getCookie("f-"+c);b!=undefined&&b!=j&&hndl.filterObj.filter_pathes.find("input[class='"+c+"']").val(b)});if(f!=undefined&&f!=j)hndl.pagingObj.cpage=f}if(h!=undefined&&h!=j)hndl.sortObj.sort_name=h;if(d!=undefined&&d!=j)hndl.pagingObj.items_on_page=d;if(g!=undefined&&g!=j)hndl.sortObj.order=g;if(e!=undefined&&e!=j)hndl.sortObj.sort_is_num=Boolean(e)};b.setCookie=function(d,c){var b=escape(c),a=new Date;a.setDate(a.getDate()+1);document.cookie=d+"="+b+";path=/; expires="+a.toUTCString()};b.getCookie=function(e){var a,c,d,b;b=document.cookie.split(";");for(a=0;a<b.length;a++){c=b[a].substr(0,b[a].indexOf("="));d=b[a].substr(b[a].indexOf("=")+1);c=c.replace(/^\s+|\s+$/g,j);if(c==e)return unescape(d)}}}function SortClass(){var a=this,s_hndl=a;a.order=options.sort_order;a.sort_name=options.sort_name;a.sort_is_num=Boolean(options.sort_is_num);a.getFromArr=function(b,c){var a=hndl.dataObj["sort-"+c];return b[hndl.dataObj.SORT_ARR][a]};a.sortData=function(data){if(Boolean(s_hndl.sort_is_num))data.sort(function(a,b){var x=s_hndl.getFromArr(a,s_hndl.sort_name),y=s_hndl.getFromArr(b,s_hndl.sort_name);try{x=x.toString().replace(/[^0-9.]+/g,j);y=y.toString().replace(/[^0-9.]+/g,j)}catch(ex){}if(s_hndl.order=="asc"){if(x==j)return 1;if(y==j)return-1}else{if(y==j)return 1;if(x==j)return-1}return eval(x-y)});else data.sort(function(c,d){var a=s_hndl.getFromArr(c,s_hndl.sort_name),b=s_hndl.getFromArr(d,s_hndl.sort_name);return a==undefined||b==undefined?a>b?1:-1:a.toString().toLowerCase()>b.toString().toLowerCase()?1:-1});s_hndl.order==g&&data.reverse(function(c,d){var a=s_hndl.getFromArr(c,s_hndl.sort_name),b=s_hndl.getFromArr(d,s_hndl.sort_name);return a==undefined||b==undefined?a>b?1:-1:a.toString().toLowerCase()>b.toString().toLowerCase()?1:-1});return data}}function ViewClass(){var a=this;this.viewData=[];this.updateView=function(){a.viewData=hndl.filterObj.filterData(hndl.dataObj.data);a.viewData=hndl.sortObj.sortData(a.viewData);a.viewData=hndl.pagingObj.setPaging(a.viewData);hndl.dataObj.print(a.viewData)}}function DropDownClass(){var d="span",c=".panel",e=":visible",a=this,b=a;a.sort_dd=$(hndl).find(options.sort_dd_path);a.paging_dd=$(hndl).find(options.paging_dd_path);$(document).click(function(){$(hndl).find(".drop-down").each(function(){var a=$(this).find("ul");a.is(e)&&a.hide()})});a.init_dd=function(b){var f=b.find("li span:eq(0)").text(),d,a;b.prepend("<div class='panel'>"+f+"</div>");d=b.find(c);a=b.find("ul");d.click(function(b){b.stopPropagation();if(a.is(e))a.hide();else a.show()});a.find("li").click(function(){d.html($(this).text())})};a.init_dd(a.sort_dd);a.init_dd(a.paging_dd);a.sort_dd_panel=a.sort_dd.find(c);a.paging_dd_panel=a.paging_dd.find(c);a.sort_dd.find("li").click(function(){var e=$(this).find(d).attr(m),a,c="asc",b=j;if(e.indexOf("true")!=-1)a=l;else a=k;if(e.indexOf(g)!=-1)c=g;for(var f in options.sort)if($(this).find(d).hasClass(f))b=f;hndl.sort(b,c,a)});a.initDD=function(){var c=hndl.pagingObj.items_on_page,f=hndl.sortObj.sort_name,e=hndl.sortObj.order,d=Boolean(hndl.sortObj.sort_is_num),a;a=b.paging_dd.find("span[class='p"+c+"']");if(a.length<=0)a=b.paging_dd.find("span[class='all']");b.paging_dd_panel.html(a.text());b.sort_dd.find("ul li span").each(function(){var a=this;$(a).hasClass(f)&&$(a).hasClass(e)&&$(a).hasClass(d)&&b.sort_dd_panel.html($(a).text())})};a.paging_dd.find("li").click(function(){var a=$(this).find(d).attr(m).replace("p",j);hndl.paging(a)})}function PagingClass(){var c="visible",b="visibility",a=this,p_hndl=a;a.all_items_num=hndl.items.length;a.items_on_page=options.items_on_page;a.cpage=0;a.pagingView=[];a.pageinfo=$(hndl).find(options.pageinfo);a.pagingbox=$(hndl).find(options.pagingbox);a.pagingbox.html("<div id='pagingmid'></div><div class='links'><div id='prevLink'></div><div id='nextLink'></div></div>");a.prevLink=a.pagingbox.find("#prevLink");a.pagingmid=a.pagingbox.find("#pagingmid");a.nextLink=a.pagingbox.find("#nextLink");a.prevLink.html("<span class='prev'>previous</span>");a.nextLink.html("<span class='next'>next</span>");a.first=a.prevLink.find(".first");a.prev=a.prevLink.find(".prev");a.next=a.nextLink.find(".next");a.last=a.nextLink.find(".last");a.first.click(function(){p_hndl.cpage=0;p_hndl.setPaging(p_hndl.pagingView)});a.prev.click(function(){p_hndl.cpage=p_hndl.getprevpage();p_hndl.setPaging(p_hndl.pagingView)});a.next.click(function(){p_hndl.cpage=p_hndl.getnextpage();p_hndl.setPaging(p_hndl.pagingView)});a.last.click(function(){p_hndl.cpage=p_hndl.get_pages_num(p_hndl.items_on_page)-1;p_hndl.setPaging(p_hndl.pagingView)});a.get_pages_num=function(items_on_page){return eval(Math.ceil(p_hndl.all_items_num/items_on_page))};a.getprevpage=function(){return p_hndl.cpage<=0?0:p_hndl.cpage-1};a.getnextpage=function(){return p_hndl.cpage>=p_hndl.get_pages_num(p_hndl.items_on_page)-1?p_hndl.get_pages_num(p_hndl.items_on_page)-1:eval(p_hndl.cpage)+1};a.setPaging=function(data){var start=p_hndl.cpage*p_hndl.items_on_page,end=eval(start)+eval(p_hndl.items_on_page),all=data.length;p_hndl.pagingView=data;if(end>data.length)end=data.length;p_hndl.all_items_num=all;data=data.slice(start,end);p_hndl.updateInfo(start,end,all);p_hndl.updateBullets();p_hndl.setarrowview();p_hndl.setPagingDisplay(data.length);hndl.dataObj.print(data);return data};a.updateBullets=function(){var start,end,diff,html=j;if(p_hndl.cpage>=0&&p_hndl.cpage<p_hndl.get_pages_num(p_hndl.items_on_page)){diff=Math.floor(p_hndl.cpage/options.max_pages);start=options.max_pages*diff;end=options.max_pages*(diff+1);if(end>p_hndl.get_pages_num(p_hndl.items_on_page))end=p_hndl.get_pages_num(p_hndl.items_on_page);html+="<div id='pagesbox'>";for(var i=start;i<end;i++){html+="<span";if(i==p_hndl.cpage)html+=" class='current'";html+=">"+(eval(i)+1)+"</span> "}html+="</div>";p_hndl.pagingmid.html(html);p_hndl.pagingmid.find("span").unbind().click(function(){var a=$(this).text()-1;p_hndl.cpage=a;p_hndl.setPaging(p_hndl.pagingView)})}};a.setarrowview=function(){if(p_hndl.cpage==0)p_hndl.prevLink.css(b,"visible");else p_hndl.prevLink.css(b,c);if(p_hndl.cpage==p_hndl.get_pages_num(p_hndl.items_on_page)-1)p_hndl.nextLink.css(b,"visible");else p_hndl.nextLink.css(b,c)};a.setPagingDisplay=function(){p_hndl.get_pages_num(p_hndl.items_on_page)!=1&&p_hndl.pagingbox.css(b,c)};a.updateInfo=function(start,end,all){p_hndl.pageinfo.html(eval(start)+1+" - "+eval(end)+" of "+eval(all))}}h.dataObj=new DataClass;h.filterObj=new FilterClass;h.sortObj=new SortClass;h.viewObj=new ViewClass;h.pagingObj=new PagingClass;h.cookiesObj=new CookiesClass;h.ddObj=new DropDownClass;if(options.cookies){h.cookiesObj.getCookies();h.viewObj.updateView();h.ddObj.initDD()}h.sort=function(b,c,a){hndl.pagingObj.cpage=0;hndl.sortObj.sort_name=b;hndl.sortObj.order=c;hndl.sortObj.sort_is_num=Boolean(a);hndl.viewObj.updateView()};h.paging=function(a){if(a=="all")hndl.pagingObj.items_on_page=hndl.pagingObj.all_items_num;else hndl.pagingObj.items_on_page=a;hndl.pagingObj.cpage=0;hndl.viewObj.updateView()};h.viewObj.updateView()})}})(jQuery);
