/*
* jQuery pager plugin [modified]
* Version 1.0 (12/22/2008)
* @requires jQuery v1.2.6 or later
*
* Example at: http://jonpauldavies.github.com/JQuery/Pager/PagerDemo.html
*
* Copyright (c) 2008-2009 Jon Paul Davies
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
*
* Read the related blog post and contact the author at http://www.j-dee.com/2008/12/22/jquery-pager-plugin/
*
* This version is far from perfect and doesn't manage it's own state, therefore contributions are more than welcome!
*
* Usage: .pager({ pageCurrent: 1, pageCount: 15, buttonClickCallback: PagerClickTest });
*
* Where pageCurrent is the visible page number
*       pageCount is the total number of pages to display
*       buttonClickCallback is the method to fire when a pager button is clicked.
*
* buttonClickCallback signiture is PagerClickTest = function(pageclickednumber)
* Where pageclickednumber is the number of the page clicked in the control.
*
* The included Pager.CSS file is a dependancy but can obviously tweaked to your wishes
* Tested in IE6 IE7 Firefox & Safari. Any browser strangeness, please report.
*/

(function($) {

    $.fn.pager = function(options) {
        return this.each(function() {

			//set id
			$.fn.pager.defaults.id = options.pagerId;

			var useAjax = $(this).find('code var:nth-child(5)').text();

			//TODO si ajax, on doit aller chercher les infos dans le <var> #6

			//page use ajax ("true" or "false")
			$.fn.pager.defaults.useAjax = (useAjax=="true")?true:false;			
			//page count
			$.fn.pager.defaults.pageCount = parseInt($(this).find('code var:nth-child(2)').text());
			//page url
			$.fn.pager.defaults.pageUrl = $(this).find('code var:nth-child(3)').text();
			//page query
			$.fn.pager.defaults.pageQuery = $(this).find('code var:nth-child(4)').text();
			//page current
			$.fn.pager.defaults.pageCurrent = ($.fn.pager.defaults.useAjax)?parseInt(options.pageCurrent):parseInt($(this).find('code var:nth-child(1)').text());

			//alert("id:"+$.fn.pager.defaults.id+" \najax:"+$.fn.pager.defaults.useAjax+" \npageCount:"+$.fn.pager.defaults.pageCount
			//+" \npageUrl"+$.fn.pager.defaults.pageUrl+" \npageQuery:"+$.fn.pager.defaults.pageQuery);
			
			
			$(this).find('ul').remove();
			if($.fn.pager.defaults.pageCount > 1){				
				$(this).prepend(renderpager(options.buttonClickCallback));
			}
			else{
				var defaultHtml = "";
				defaultHtml += '<ul>';
				defaultHtml += '    <li class="disabled"><a class="b_prev" title="Page pr\u00E9c\u00E9dente" href="#">Précédent</a></li>';
				defaultHtml += '	   <li class="mp_pagerNumbers"><ul><li class="selected"><a href="#">1</a></li></ul></li>';
				defaultHtml += '    <li class="disabled"><a class="b_next" title="Page suivante" href="#">Suivant</a></li>';
				defaultHtml += '</ul>';				
				$(this).prepend(defaultHtml);
			}

        });
    };

    // render and return the pager with the supplied options
    function renderpager(buttonClickCallback) {
	
		var pageCount = $.fn.pager.defaults.pageCount;
		var pageCurrent = $.fn.pager.defaults.pageCurrent;
		var useAjax = $.fn.pager.defaults.useAjax;

        // setup $pager to hold render
        var $pager = $('<ul></ul>');

		//MAX_LENGTH
		//    ie. MAX_LENGTH = 4 and PC = 10. Logic sequence below:
		//        1 2 3 4 ... 10
		//        1 ... 4 5 6 ... 10
		//        1 ... 7 8 9 10
		var MAX_LENGTH = 6; //please, no odds # here.
        var startPoint = 1;
        var endPoint = MAX_LENGTH;
		var stepRight = Math.floor((MAX_LENGTH - 1) / 2);
		var stepLeft = stepRight + 1;

		//sides manipulation
        if (pageCurrent > stepLeft) {
			startPoint = (pageCurrent - stepLeft > pageCount - MAX_LENGTH)? pageCount - MAX_LENGTH: pageCurrent - stepLeft;
            endPoint = pageCurrent + stepRight;
        }
        if (endPoint > pageCount) endPoint = pageCount;
        if (startPoint < 1) startPoint = 1;

		var $pagerSub = $('<li class="mp_pagerNumbers"></li>');
		var $pagerSubSub = $('<ul></ul>');
		$pagerSubSub.appendTo($pagerSub);

		//put the first link appart of the pager
		if(startPoint > 1){
			var href = makeHref(1);
			var $firstLink = $('<li><a'+href+'>1</a></li>');
			$firstLink.click(function() {				
				buttonClickCallback(1);
				if(useAjax)	return ajaxify(1);
			});
			$firstLink.appendTo($pagerSubSub);
			$('<li><a>...</a></li>').appendTo($pagerSubSub);
			startPoint += 1;
		}

		//we put a bigger right step if we approach the end like we did for the beggining
		if(endPoint == pageCount - 1) endPoint += 1;

        // loop thru visible pages and render buttons
        for (var page = startPoint; page <= endPoint; page++) {
			var href = makeHref(page);
            var currentButton = $('<li><a'+href+'>' + (page) + '</a></li>');
			if(page == pageCurrent){
				currentButton.addClass('selected');
			}
            currentButton.click(function() {								
				buttonClickCallback(this.childNodes[0].firstChild.data);
				if(useAjax)	return ajaxify(this.childNodes[0].firstChild.data);
			});
            currentButton.appendTo($pagerSubSub);
        }

		//put the last link appart of the pager
		if(endPoint < pageCount - 1){
			$('<li><a>...</a></li>').appendTo($pagerSubSub);
			var href = makeHref(pageCount);
			var $lastLink = $('<li><a'+href+'>' + (pageCount) + '</a></li>');
			$lastLink.click(function() {				
				buttonClickCallback(pageCount);
				if(useAjax)	return ajaxify(pageCount);
			});
			$lastLink.appendTo($pagerSubSub);
		}

		$pager.append($pagerSub);

		// add the previous and next buttons
		$pager.prepend(renderButton(true, buttonClickCallback));
		$pager.append(renderButton(false, buttonClickCallback));

		return $pager;
    }

    // renders and returns a 'specialized' button, ie 'next', 'previous' etc. rather than a page number button
    function renderButton(buttonLabel, buttonClickCallback) {

		var useAjax = $.fn.pager.defaults.useAjax;
		var pageCurrent = $.fn.pager.defaults.pageCurrent;
        var $Button = $('<li></li>');

        var destPage = 1;

        if (buttonLabel) { //previous
			href = '';
			if( pageCurrent <= 1){
				$Button.addClass('disabled')
			}else{
				destPage = pageCurrent - 1;
				$Button.click(function() {
					buttonClickCallback(destPage);
					if(useAjax)	return ajaxify(destPage);
				});
				href = makeHref(destPage);
			}
			$('<a class="b_prev" title="Page pr\u00E9c\u00E9dente"' + href + '>Précédent</a>').appendTo($Button);
        }
        else { //next
			href = '';
			if( pageCurrent >=  $.fn.pager.defaults.pageCount){
				$Button.addClass('disabled')
			}else{
				destPage = pageCurrent + 1;
				$Button.click(function() {
					buttonClickCallback(destPage);
					if(useAjax)	return ajaxify(destPage);
				});
				href = makeHref(destPage);
			}
			$('<a class="b_next" title="Page suivante"' + href + '>Suivant</a>').appendTo($Button);
        }

        return $Button;
    }

	function makeHref(page){
		var p = "?page=" + page;
		return ' href="' + $.fn.pager.defaults.pageUrl + p + $.fn.pager.defaults.pageQuery + '" ';
	}

	function ajaxify(page){		
	
		$.ajax({
			type: "get",
			cache: false,
			url: $.fn.pager.defaults.pageUrl + "?page=" + page + $.fn.pager.defaults.pageQuery,
			dataType: "json",
			/*error: function (xhr, desc, exceptionobj) {
				alert(desc);
			},*/
			success: function(data){				
				var $pager = $(".pagerId"+$.fn.pager.defaults.id+":first");
				$pager.find('img').animate({opacity: 0}, 400).remove();
				var $content = $pager.next();//the next elem need to be the <ul>							
				$content.empty();
				//$content..prepend(data.htmlOutput);				
				$content.prepend(data.htmlOutput);				
				$content.animate({opacity: 1}, 400);			

				//update 
				initSidebarHover();//this function is in common.js
				$(".b_plus").addToPlaylist(); //this one too
			}
		});
		
		var $pager = $(".pagerId"+$.fn.pager.defaults.id+":first");
		var $content = $pager.next();						
		$pager.css({'position':'relative'});
		$pager.append('<img src="/media/images/all/backgrounds/ajax-loader.gif" alt="" style="position: absolute; bottom: -'+ $content.height()/2.0 +'px; left:300px;"/>');
		$content.animate({opacity: 0}, 100);				
		return false;
	}

	$.fn.pager.defaults = {
		id: 0,
		pageCount: 1,
		pageCurrent: 1,
		pageQuery: "",
		useAjax: false,
		pageUrl: ""
    };

})(jQuery);
