$( function()
{

	var maxHeight = 0;

	$('#table_jobs, #table_companies').liveFilter('basic');

	$( "#tabs" ).tabs();

	$(".equal,.columns").each( function()
	{
		if ($(this).height() > maxHeight)
		{
			maxHeight = $(this).height();
		}
	});

	$(".equal,.columns").height(maxHeight);

	$("a[rel=group], a.single-image").fancybox({
		'titlePosition'		: 'outside',
		'overlayColor'		: '#000',
		'overlayOpacity'	: 0.9
	});

	$("#sub_category").chained("#main-category"); /* or $("#series").chainedTo("#mark"); */

	$('#sub-category').change( function()
	{
		$('#btn_select_category').parent().css('display', 'inline');
	});

	$(".parentCheckBox").click( function()
	{
		$(this).parents('div:eq(0)').find('.childCheckBox').attr('checked', this.checked);
	});

	$('.childCheckBox').live('click', function()
	{
		if ($(this).parents('div:eq(0)').find('.parentCheckBox').attr('checked') == true && this.checked == false)
			$(this).parents('div:eq(0)').find('.parentCheckBox').attr('checked', false);
		if (this.checked == true)
		{
			var flag = true;
			$(this).parents('div:eq(0)').find('.childCheckBox').each( function()
			{
				if (this.checked == false)
					flag = false;
			}

			);
			$(this).parents('div:eq(0)').find('.parentCheckBox').attr('checked', flag);
		}
	});

	$("#overview").sortable({
		placeholder: "ui-state-highlight",
		update : function ()
		{
			var order = $('#overview').sortable('serialize');
			$("#info").load("/admin/sortable.php?order=maincat&"+order);
		}

	});

	$("#overview-page-top").sortable({
		placeholder: 'ui-state-highlight',
		update : function ()
		{
			var order = $('#overview-page-top').sortable('serialize');
			$("#info").load("/admin/sortable.php?order=top&"+order);
		}

	});

	$("#overview-page-left").sortable({
		placeholder: "ui-state-highlight",
		items: "li:not(.ui-state-disabled)",
		handle : '.handle',
		update : function ()
		{
			var order = $('#overview-page-left').sortable('serialize');
			$("#info").load("/admin/sortable.php?order=left&"+order);
		}

	});

	$('#table_jobs, #table_companies').dataTable();

	$(".tablesorter").tablesorter({

		dateFormat: "uk"
	}).tablesorterPager({
		container: $(".pager")
	});

	Cufon.replace('h4, .popular, .price'); // Works without a selector engine

});

(function($)
{
	$.extend({tablesorter:new
		function()
		{
			var parsers=[],widgets=[];
			this.defaults={cssHeader:"header",cssAsc:"headerSortUp",cssDesc:"headerSortDown",cssChildRow:"expand-child",sortInitialOrder:"asc",sortMultiSortKey:"shiftKey",sortForce:null,sortAppend:null,sortLocaleCompare:true,textExtraction:"simple",parsers:{},widgets:[],widgetZebra:{css:["even","odd"]},headers:{},widthFixed:false,cancelSelection:true,sortList:[],headerList:[],dateFormat:"us",decimal:'/\.|\,/g',onRenderHeader:null,selectorHeaders:'thead th',debug:false};
			function benchmark(s,d)
			{
				log(s+","+(new Date().getTime()-d.getTime())+"ms");
			}

			this.benchmark=benchmark;
			function log(s)
			{
				if(typeof console!="undefined"&&typeof console.debug!="undefined")
				{
					console.log(s);
				} else
				{
					alert(s);
				}
			}

			function buildParserCache(table,$headers)
			{
				if(table.config.debug)
				{
					var parsersDebug="";
				}
				if(table.tBodies.length==0)
					return;
				var rows=table.tBodies[0].rows;
				if(rows[0])
				{
					var list=[],cells=rows[0].cells,l=cells.length;
					for(var i=0;i<l;i++)
					{
						var p=false;
						if($.metadata&&($($headers[i]).metadata()&&$($headers[i]).metadata().sorter))
						{
							p=getParserById($($headers[i]).metadata().sorter);
						} else if((table.config.headers[i]&&table.config.headers[i].sorter))
						{
							p=getParserById(table.config.headers[i].sorter);
						}
						if(!p)
						{
							p=detectParserForColumn(table,rows,-1,i);
						}
						if(table.config.debug)
						{
							parsersDebug+="column:"+i+" parser:"+p.id+"\n";
						}
						list.push(p);
					}
				}
				if(table.config.debug)
				{
					log(parsersDebug);
				}
				return list;
			};

			function detectParserForColumn(table,rows,rowIndex,cellIndex)
			{
				var l=parsers.length,node=false,nodeValue=false,keepLooking=true;
				while(nodeValue==''&&keepLooking)
				{
					rowIndex++;
					if(rows[rowIndex])
					{
						node=getNodeFromRowAndCellIndex(rows,rowIndex,cellIndex);
						nodeValue=trimAndGetNodeText(table.config,node);
						if(table.config.debug)
						{
							log('Checking if value was empty on row:'+rowIndex);
						}
					} else
					{
						keepLooking=false;
					}
				}
				for(var i=1;i<l;i++)
				{
					if(parsers[i].is(nodeValue,table,node))
					{
						return parsers[i];
					}
				}
				return parsers[0];
			}

			function getNodeFromRowAndCellIndex(rows,rowIndex,cellIndex)
			{
				return rows[rowIndex].cells[cellIndex];
			}

			function trimAndGetNodeText(config,node)
			{
				return $.trim(getElementText(config,node));
			}

			function getParserById(name)
			{
				var l=parsers.length;
				for(var i=0;i<l;i++)
				{
					if(parsers[i].id.toLowerCase()==name.toLowerCase())
					{
						return parsers[i];
					}
				}
				return false;
			}

			function buildCache(table)
			{
				if(table.config.debug)
				{
					var cacheTime=new Date();
				}
				var totalRows=(table.tBodies[0]&&table.tBodies[0].rows.length)||0,totalCells=(table.tBodies[0].rows[0]&&table.tBodies[0].rows[0].cells.length)||0,parsers=table.config.parsers,cache={row:[],normalized:[]};
				for(var i=0;i<totalRows;++i)
				{
					var c=$(table.tBodies[0].rows[i]),cols=[];
					if(c.hasClass(table.config.cssChildRow))
					{
						cache.row[cache.row.length-1]=cache.row[cache.row.length-1].add(c);
						continue;
					}
					cache.row.push(c);
					for(var j=0;j<totalCells;++j)
					{
						cols.push(parsers[j].format(getElementText(table.config,c[0].cells[j]),table,c[0].cells[j]));
					}
					cols.push(cache.normalized.length);
					cache.normalized.push(cols);
					cols=null;
				};
				if(table.config.debug)
				{
					benchmark("Building cache for "+totalRows+" rows:",cacheTime);
				}
				return cache;
			};

			function getElementText(config,node)
			{
				var text="";
				if(!node)
					return"";
				if(!config.supportsTextContent)
					config.supportsTextContent=node.textContent||false;
				if(config.textExtraction=="simple")
				{
					if(config.supportsTextContent)
					{
						text=node.textContent;
					} else
					{
						if(node.childNodes[0]&&node.childNodes[0].hasChildNodes())
						{
							text=node.childNodes[0].innerHTML;
						} else
						{
							text=node.innerHTML;
						}
					}
				} else
				{
					if(typeof(config.textExtraction)=="function")
					{
						text=config.textExtraction(node);
					} else
					{
						text=$(node).text();
					}
				}
				return text;
			}

			function appendToTable(table,cache)
			{
				if(table.config.debug)
				{
					var appendTime=new Date()
				}
				var c=cache,r=c.row,n=c.normalized,totalRows=n.length,checkCell=(n[0].length-1),tableBody=$(table.tBodies[0]),rows=[];
				for(var i=0;i<totalRows;i++)
				{
					var pos=n[i][checkCell];
					rows.push(r[pos]);
					if(!table.config.appender)
					{
						var l=r[pos].length;
						for(var j=0;j<l;j++)
						{
							tableBody[0].appendChild(r[pos][j]);
						}
					}
				}
				if(table.config.appender)
				{
					table.config.appender(table,rows);
				}
				rows=null;
				if(table.config.debug)
				{
					benchmark("Rebuilt table:",appendTime);
				}
				applyWidget(table);
				setTimeout( function()
				{
					$(table).trigger("sortEnd");
				},0);

			};

			function buildHeaders(table)
			{
				if(table.config.debug)
				{
					var time=new Date();
				}
				var meta=($.metadata)?true:false;
				var header_index=computeTableHeaderCellIndexes(table);
				$tableHeaders=$(table.config.selectorHeaders,table).each( function(index)
				{
					this.column=header_index[this.parentNode.rowIndex+"-"+this.cellIndex];
					this.order=formatSortingOrder(table.config.sortInitialOrder);
					this.count=this.order;
					if(checkHeaderMetadata(this)||checkHeaderOptions(table,index))
						this.sortDisabled=true;
					if(checkHeaderOptionsSortingLocked(table,index))
						this.order=this.lockedOrder=checkHeaderOptionsSortingLocked(table,index);
					if(!this.sortDisabled)
					{
						var $th=$(this).addClass(table.config.cssHeader);
						if(table.config.onRenderHeader)
							table.config.onRenderHeader.apply($th);
					}
					table.config.headerList[index]=this;
				});

				if(table.config.debug)
				{
					benchmark("Built headers:",time);
					log($tableHeaders);
				}
				return $tableHeaders;
			};

			function computeTableHeaderCellIndexes(t)
			{
				var matrix=[];
				var lookup={};
				var thead=t.getElementsByTagName('THEAD')[0];
				var trs=thead.getElementsByTagName('TR');
				for(var i=0;i<trs.length;i++)
				{
					var cells=trs[i].cells;
					for(var j=0;j<cells.length;j++)
					{
						var c=cells[j];
						var rowIndex=c.parentNode.rowIndex;
						var cellId=rowIndex+"-"+c.cellIndex;
						var rowSpan=c.rowSpan||1;
						var colSpan=c.colSpan||1
						var firstAvailCol;
						if(typeof(matrix[rowIndex])=="undefined")
						{
							matrix[rowIndex]=[];
						}
						for(var k=0;k<matrix[rowIndex].length+1;k++)
						{
							if(typeof(matrix[rowIndex][k])=="undefined")
							{
								firstAvailCol=k;
								break;
							}
						}
						lookup[cellId]=firstAvailCol;
						for(var k=rowIndex;k<rowIndex+rowSpan;k++)
						{
							if(typeof(matrix[k])=="undefined")
							{
								matrix[k]=[];
							}
							var matrixrow=matrix[k];
							for(var l=firstAvailCol;l<firstAvailCol+colSpan;l++)
							{
								matrixrow[l]="x";
							}
						}
					}
				}
				return lookup;
			}

			function checkCellColSpan(table,rows,row)
			{
				var arr=[],r=table.tHead.rows,c=r[row].cells;
				for(var i=0;i<c.length;i++)
				{
					var cell=c[i];
					if(cell.colSpan>1)
					{
						arr=arr.concat(checkCellColSpan(table,headerArr,row++));
					} else
					{
						if(table.tHead.length==1||(cell.rowSpan>1||!r[row+1]))
						{
							arr.push(cell);
						}
					}
				}
				return arr;
			};

			function checkHeaderMetadata(cell)
			{
				if(($.metadata)&&($(cell).metadata().sorter===false))
				{
					return true;
				};
				return false;
			}

			function checkHeaderOptions(table,i)
			{
				if((table.config.headers[i])&&(table.config.headers[i].sorter===false))
				{
					return true;
				};
				return false;
			}

			function checkHeaderOptionsSortingLocked(table,i)
			{
				if((table.config.headers[i])&&(table.config.headers[i].lockedOrder))
					return table.config.headers[i].lockedOrder;
				return false;
			}

			function applyWidget(table)
			{
				var c=table.config.widgets;
				var l=c.length;
				for(var i=0;i<l;i++)
				{
					getWidgetById(c[i]).format(table);
				}
			}

			function getWidgetById(name)
			{
				var l=widgets.length;
				for(var i=0;i<l;i++)
				{
					if(widgets[i].id.toLowerCase()==name.toLowerCase())
					{
						return widgets[i];
					}
				}
			};

			function formatSortingOrder(v)
			{
				if(typeof(v)!="Number")
				{
					return(v.toLowerCase()=="desc")?1:0;
				} else
				{
					return(v==1)?1:0;
				}
			}

			function isValueInArray(v,a)
			{
				var l=a.length;
				for(var i=0;i<l;i++)
				{
					if(a[i][0]==v)
					{
						return true;
					}
				}
				return false;
			}

			function setHeadersCss(table,$headers,list,css)
			{
				$headers.removeClass(css[0]).removeClass(css[1]);
				var h=[];
				$headers.each( function(offset)
				{
					if(!this.sortDisabled)
					{
						h[this.column]=$(this);
					}
				});

				var l=list.length;
				for(var i=0;i<l;i++)
				{
					h[list[i][0]].addClass(css[list[i][1]]);
				}
			}

			function fixColumnWidth(table,$headers)
			{
				var c=table.config;
				if(c.widthFixed)
				{
					var colgroup=$('<colgroup>');
					$("tr:first td",table.tBodies[0]).each( function()
					{
						colgroup.append($('<col>').css('width',$(this).width()));
					});

					$(table).prepend(colgroup);
				};
			}

			function updateHeaderSortCount(table,sortList)
			{
				var c=table.config,l=sortList.length;
				for(var i=0;i<l;i++)
				{
					var s=sortList[i],o=c.headerList[s[0]];
					o.count=s[1];
					o.count++;
				}
			}

			function multisort(table,sortList,cache)
			{
				if(table.config.debug)
				{
					var sortTime=new Date();
				}
				var dynamicExp="var sortWrapper = function(a,b) {",l=sortList.length;
				for(var i=0;i<l;i++)
				{
					var c=sortList[i][0];
					var order=sortList[i][1];
					var s=(table.config.parsers[c].type=="text")?((order==0)?makeSortFunction("text","asc",c):makeSortFunction("text","desc",c)):((order==0)?makeSortFunction("numeric","asc",c):makeSortFunction("numeric","desc",c));
					var e="e"+i;
					dynamicExp+="var "+e+" = "+s;
					dynamicExp+="if("+e+") { return "+e+"; } ";
					dynamicExp+="else { ";
				}
				var orgOrderCol=cache.normalized[0].length-1;
				dynamicExp+="return a["+orgOrderCol+"]-b["+orgOrderCol+"];";
				for(var i=0;i<l;i++)
				{
					dynamicExp+="}; ";
				}
				dynamicExp+="return 0; ";
				dynamicExp+="}; ";
				if(table.config.debug)
				{
					benchmark("Evaling expression:"+dynamicExp,new Date());
				}
				eval(dynamicExp);
				cache.normalized.sort(sortWrapper);
				if(table.config.debug)
				{
					benchmark("Sorting on "+sortList.toString()+" and dir "+order+" time:",sortTime);
				}
				return cache;
			};

			function makeSortFunction(type,direction,index)
			{
				var a="a["+index+"]",b="b["+index+"]";
				if(type=='text'&&direction=='asc')
				{
					return"("+a+" == "+b+" ? 0 : ("+a+" === null ? Number.POSITIVE_INFINITY : ("+b+" === null ? Number.NEGATIVE_INFINITY : ("+a+" < "+b+") ? -1 : 1 )));";
				} else if(type=='text'&&direction=='desc')
				{
					return"("+a+" == "+b+" ? 0 : ("+a+" === null ? Number.POSITIVE_INFINITY : ("+b+" === null ? Number.NEGATIVE_INFINITY : ("+b+" < "+a+") ? -1 : 1 )));";
				} else if(type=='numeric'&&direction=='asc')
				{
					return"("+a+" === null && "+b+" === null) ? 0 :("+a+" === null ? Number.POSITIVE_INFINITY : ("+b+" === null ? Number.NEGATIVE_INFINITY : "+a+" - "+b+"));";
				} else if(type=='numeric'&&direction=='desc')
				{
					return"("+a+" === null && "+b+" === null) ? 0 :("+a+" === null ? Number.POSITIVE_INFINITY : ("+b+" === null ? Number.NEGATIVE_INFINITY : "+b+" - "+a+"));";
				}
			};

			function makeSortText(i)
			{
				return"((a["+i+"] < b["+i+"]) ? -1 : ((a["+i+"] > b["+i+"]) ? 1 : 0));";
			};

			function makeSortTextDesc(i)
			{
				return"((b["+i+"] < a["+i+"]) ? -1 : ((b["+i+"] > a["+i+"]) ? 1 : 0));";
			};

			function makeSortNumeric(i)
			{
				return"a["+i+"]-b["+i+"];";
			};

			function makeSortNumericDesc(i)
			{
				return"b["+i+"]-a["+i+"];";
			};

			function sortText(a,b)
			{
				if(table.config.sortLocaleCompare)
					return a.localeCompare(b);
				return((a<b)?-1:((a>b)?1:0));
			};

			function sortTextDesc(a,b)
			{
				if(table.config.sortLocaleCompare)
					return b.localeCompare(a);
				return((b<a)?-1:((b>a)?1:0));
			};

			function sortNumeric(a,b)
			{
				return a-b;
			};

			function sortNumericDesc(a,b)
			{
				return b-a;
			};

			function getCachedSortType(parsers,i)
			{
				return parsers[i].type;
			};

			this.construct= function(settings)
			{
				return this.each( function()
				{
					if(!this.tHead||!this.tBodies)
						return;
					var $this,$document,$headers,cache,config,shiftDown=0,sortOrder;
					this.config={};
					config=$.extend(this.config,$.tablesorter.defaults,settings);
					$this=$(this);
					$.data(this,"tablesorter",config);
					$headers=buildHeaders(this);
					this.config.parsers=buildParserCache(this,$headers);
					cache=buildCache(this);
					var sortCSS=[config.cssDesc,config.cssAsc];
					fixColumnWidth(this);
					$headers.click( function(e)
					{
						var totalRows=($this[0].tBodies[0]&&$this[0].tBodies[0].rows.length)||0;
						if(!this.sortDisabled&&totalRows>0)
						{
							$this.trigger("sortStart");
							var $cell=$(this);
							var i=this.column;
							this.order=this.count++%2;
							if(this.lockedOrder)
								this.order=this.lockedOrder;
							if(!e[config.sortMultiSortKey])
							{
								config.sortList=[];
								if(config.sortForce!=null)
								{
									var a=config.sortForce;
									for(var j=0;j<a.length;j++)
									{
										if(a[j][0]!=i)
										{
											config.sortList.push(a[j]);
										}
									}
								}
								config.sortList.push([i,this.order]);
							} else
							{
								if(isValueInArray(i,config.sortList))
								{
									for(var j=0;j<config.sortList.length;j++)
									{
										var s=config.sortList[j],o=config.headerList[s[0]];
										if(s[0]==i)
										{
											o.count=s[1];
											o.count++;
											s[1]=o.count%2;
										}
									}
								} else
								{
									config.sortList.push([i,this.order]);
								}
							};
							setTimeout( function()
							{
								setHeadersCss($this[0],$headers,config.sortList,sortCSS);
								appendToTable($this[0],multisort($this[0],config.sortList,cache));
							},1);

							return false;
						}
					}).mousedown( function()


					{
						if(config.cancelSelection)
						{
							this.onselectstart= function()
							{
								return false
							};

							return false;
						}
					});

					$this.bind("update", function()
					{
						var me=this;
						setTimeout( function()
						{
							me.config.parsers=buildParserCache(me,$headers);
							cache=buildCache(me);
						},1);

					}).bind("updateCell", function(e,cell)


					{
						var config=this.config;
						var pos=[(cell.parentNode.rowIndex-1),cell.cellIndex];
						cache.normalized[pos[0]][pos[1]]=config.parsers[pos[1]].format(getElementText(config,cell),cell);
					}).bind("sorton", function(e,list)


					{
						$(this).trigger("sortStart");
						config.sortList=list;
						var sortList=config.sortList;
						updateHeaderSortCount(this,sortList);
						setHeadersCss(this,$headers,sortList,sortCSS);
						appendToTable(this,multisort(this,sortList,cache));
					}).bind("appendCache", function()


					{
						appendToTable(this,cache);
					}).bind("applyWidgetId", function(e,id)


					{
						getWidgetById(id).format(this);
					}).bind("applyWidgets", function()


					{
						applyWidget(this);
					});

					if($.metadata&&($(this).metadata()&&$(this).metadata().sortlist))
					{
						config.sortList=$(this).metadata().sortlist;
					}
					if(config.sortList.length>0)
					{
						$this.trigger("sorton",[config.sortList]);
					}
					applyWidget(this);
				});

			};

			this.addParser= function(parser)
			{
				var l=parsers.length,a=true;
				for(var i=0;i<l;i++)
				{
					if(parsers[i].id.toLowerCase()==parser.id.toLowerCase())
					{
						a=false;
					}
				}
				if(a)
				{
					parsers.push(parser);
				};
			};

			this.addWidget= function(widget)
			{
				widgets.push(widget);
			};

			this.formatFloat= function(s)
			{
				var i=parseFloat(s);
				return(isNaN(i))?0:i;
			};

			this.formatInt= function(s)
			{
				var i=parseInt(s);
				return(isNaN(i))?0:i;
			};

			this.isDigit= function(s,config)
			{
				return/^[-+]?\d*$/.test($.trim(s.replace(/[,.']/g,'')));
			};

			this.clearTableBody= function(table)
			{
				if($.browser.msie)
				{
					function empty()
					{
						while(this.firstChild)
							this.removeChild(this.firstChild);
					}

					empty.apply(table.tBodies[0]);
				} else
				{
					table.tBodies[0].innerHTML="";
				}
			};

		}});

	$.fn.extend({tablesorter:$.tablesorter.construct});
	var ts=$.tablesorter;
	ts.addParser({id:"text",is: function(s)
		{
			return true;
		},format: function(s)


		{
			return $.trim(s.toLocaleLowerCase());
		},type:"text"});

	ts.addParser({id:"digit",is: function(s,table)
		{
			var c=table.config;
			return $.tablesorter.isDigit(s,c);
		},format: function(s)


		{
			return $.tablesorter.formatFloat(s);
		},type:"numeric"});

	ts.addParser({id:"currency",is: function(s)
		{
			return/^[Â£$â‚¬?.]/.test(s);
		},format: function(s)


		{
			return $.tablesorter.formatFloat(s.replace(new RegExp(/[Â£$â‚¬]/g),""));
		},type:"numeric"});

	ts.addParser({id:"ipAddress",is: function(s)
		{
			return/^\d{2,3}[\.]\d{2,3}[\.]\d{2,3}[\.]\d{2,3}$/.test(s);
		},format: function(s)


		{
			var a=s.split("."),r="",l=a.length;
			for(var i=0;i<l;i++)
			{
				var item=a[i];
				if(item.length==2)
				{
					r+="0"+item;
				} else
				{
					r+=item;
				}
			}
			return $.tablesorter.formatFloat(r);
		},type:"numeric"});

	ts.addParser({id:"url",is: function(s)
		{
			return/^(https?|ftp|file):\/\/$/.test(s);
		},format: function(s)


		{
			return jQuery.trim(s.replace(new RegExp(/(https?|ftp|file):\/\//),''));
		},type:"text"});

	ts.addParser({id:"isoDate",is: function(s)
		{
			return/^\d{4}[\/-]\d{1,2}[\/-]\d{1,2}$/.test(s);
		},format: function(s)


		{
			return $.tablesorter.formatFloat((s!="")?new Date(s.replace(new RegExp(/-/g),"/")).getTime():"0");
		},type:"numeric"});

	ts.addParser({id:"percent",is: function(s)
		{
			return/\%$/.test($.trim(s));
		},format: function(s)


		{
			return $.tablesorter.formatFloat(s.replace(new RegExp(/%/g),""));
		},type:"numeric"});

	ts.addParser({id:"usLongDate",is: function(s)
		{
			return s.match(new RegExp(/^[A-Za-z]{3,10}\.? [0-9]{1,2}, ([0-9]{4}|'?[0-9]{2}) (([0-2]?[0-9]:[0-5][0-9])|([0-1]?[0-9]:[0-5][0-9]\s(AM|PM)))$/));
		},format: function(s)


		{
			return $.tablesorter.formatFloat(new Date(s).getTime());
		},type:"numeric"});

	ts.addParser({id:"shortDate",is: function(s)
		{
			return/\d{1,2}[\/\-]\d{1,2}[\/\-]\d{2,4}/.test(s);
		},format: function(s,table)


		{
			var c=table.config;
			s=s.replace(/\-/g,"/");
			if(c.dateFormat=="us")
			{
				s=s.replace(/(\d{1,2})[\/\-](\d{1,2})[\/\-](\d{4})/,"$3/$1/$2");
			} else if(c.dateFormat=="uk")
			{
				s=s.replace(/(\d{1,2})[\/\-](\d{1,2})[\/\-](\d{4})/,"$3/$2/$1");
			} else if(c.dateFormat=="dd/mm/yy"||c.dateFormat=="dd-mm-yy")
			{
				s=s.replace(/(\d{1,2})[\/\-](\d{1,2})[\/\-](\d{2})/,"$1/$2/$3");
			}
			return $.tablesorter.formatFloat(new Date(s).getTime());
		},type:"numeric"});

	ts.addParser({id:"time",is: function(s)
		{
			return/^(([0-2]?[0-9]:[0-5][0-9])|([0-1]?[0-9]:[0-5][0-9]\s(am|pm)))$/.test(s);
		},format: function(s)


		{
			return $.tablesorter.formatFloat(new Date("2000/01/01 "+s).getTime());
		},type:"numeric"});

	ts.addParser({id:"metadata",is: function(s)
		{
			return false;
		},format: function(s,table,cell)


		{
			var c=table.config,p=(!c.parserMetadataName)?'sortValue':c.parserMetadataName;
			return $(cell).metadata()[p];
		},type:"numeric"});

	ts.addWidget({id:"zebra",format: function(table)
		{
			if(table.config.debug)
			{
				var time=new Date();
			}
			var $tr,row=-1,odd;
			$("tr:visible",table.tBodies[0]).each( function(i)
			{
				$tr=$(this);
				if(!$tr.hasClass(table.config.cssChildRow))
					row++;
				odd=(row%2==0);
				$tr.removeClass(table.config.widgetZebra.css[odd?0:1]).addClass(table.config.widgetZebra.css[odd?1:0])
			});

			if(table.config.debug)
			{
				$.tablesorter.benchmark("Applying Zebra widget",time);
			}
		}});

})(jQuery);

(function($)
{
	$.extend({
		tablesorterPager: new
		function()
		{

			function updatePageDisplay(c)
			{
				var s = $(c.cssPageDisplay,c.container).val((c.page+1) + c.seperator + c.totalPages);
			}

			function setPageSize(table,size)
			{
				var c = table.config;
				c.size = size;
				c.totalPages = Math.ceil(c.totalRows / c.size);
				c.pagerPositionSet = false;
				moveToPage(table);
				fixPosition(table);
			}

			function fixPosition(table)
			{
				var c = table.config;
				if(!c.pagerPositionSet && c.positionFixed)
				{
					var c = table.config, o = $(table);
					if(o.offset)
					{
						c.container.css({
							top: o.offset().top + o.height() + 'px',
							position: 'relative'
						});
					}
					c.pagerPositionSet = true;
				}
			}

			function moveToFirstPage(table)
			{
				var c = table.config;
				c.page = 0;
				moveToPage(table);
			}

			function moveToLastPage(table)
			{
				var c = table.config;
				c.page = (c.totalPages-1);
				moveToPage(table);
			}

			function moveToNextPage(table)
			{
				var c = table.config;
				c.page++;
				if(c.page >= (c.totalPages-1))
				{
					c.page = (c.totalPages-1);
				}
				moveToPage(table);
			}

			function moveToPrevPage(table)
			{
				var c = table.config;
				c.page--;
				if(c.page <= 0)
				{
					c.page = 0;
				}
				moveToPage(table);
			}

			function moveToPage(table)
			{
				var c = table.config;
				if(c.page < 0 || c.page > (c.totalPages-1))
				{
					c.page = 0;
				}

				renderTable(table,c.rowsCopy);
			}

			function renderTable(table,rows)
			{

				var c = table.config;
				var l = rows.length;
				var s = (c.page * c.size);
				var e = (s + c.size);
				if(e > rows.length )
				{
					e = rows.length;
				}

				var tableBody = $(table.tBodies[0]);

				// clear the table body

				$.tablesorter.clearTableBody(table);

				for(var i = s; i < e; i++)
				{

					//tableBody.append(rows[i]);

					var o = rows[i];
					var l = o.length;
					for(var j=0; j < l; j++)
					{

						tableBody[0].appendChild(o[j]);

					}
				}

				fixPosition(table,tableBody);

				$(table).trigger("applyWidgets");

				if( c.page >= c.totalPages )
				{
					moveToLastPage(table);
				}

				updatePageDisplay(c);
			}

			this.appender = function(table,rows)
			{

				var c = table.config;

				c.rowsCopy = rows;
				c.totalRows = rows.length;
				c.totalPages = Math.ceil(c.totalRows / c.size);

				renderTable(table,rows);
			};

			this.defaults = {
				size: 10,
				offset: 0,
				page: 0,
				totalRows: 0,
				totalPages: 0,
				container: null,
				cssNext: '.but-next',
				cssPrev: '.but-prev',
				cssFirst: '.but-first',
				cssLast: '.but-last',
				cssPageDisplay: '.pagedisplay',
				cssPageSize: '.pagesize',
				seperator: " van ",
				positionFixed: false,
				appender: this.appender
			};

			this.construct = function(settings)
			{

				return this.each( function()
				{

					config = $.extend(this.config, $.tablesorterPager.defaults, settings);

					var table = this, pager = config.container;

					$(this).trigger("appendCache");

					config.size = parseInt($(".pagesize",pager).val());

					$(config.cssFirst,pager).click( function()
					{
						moveToFirstPage(table);
						return false;
					});

					$(config.cssNext,pager).click( function()
					{
						moveToNextPage(table);
						return false;
					});

					$(config.cssPrev,pager).click( function()
					{
						moveToPrevPage(table);
						return false;
					});

					$(config.cssLast,pager).click( function()
					{
						moveToLastPage(table);
						return false;
					});

					$(config.cssPageSize,pager).change( function()
					{
						setPageSize(table,parseInt($(this).val()));
						return false;
					});

				});

			};

		}

	});
	// extend plugin scope
	$.fn.extend({
		tablesorterPager: $.tablesorterPager.construct
	});

})(jQuery);


