// depends on common.js and log4javascript.js

var paging_dealersize;
var paging_numberOfPages;
var paging_dealerPerPage;
var paging_current_from;
var paging_current_to;
var paging_current_page = 0;
    	
function paging_initSiteListener() {
		siteListenerForPaging = new DefaultListener;
		//reset the markers when change in dealerlist occurs
		siteListenerForPaging.actionPerformed = function (site, parameter) {
	     	log.info("SiteListenerForPaging - performing action: site=" + site + " parameter=" + parameter);
			if (site == "site_dealerlist") {
				paging_turnToPage(parameter);
				mrm.$('#dl_headline_show_all_markers').show();
				mrm.$('#paging').show();
				mrm.$('#headerPlan').hide();
				mrm.$('#headerList').show();
				mrm.$('#dl_link_show_dealerlist').hide();
				if (parameter != null && parameter >= 0) {
					paging_current_page = parameter;
				}
			} else if (site == "site_dealerdetails"){
				mrm.$('#paging').show();
				mrm.$('#dl_headline_show_all_markers').show();
				mrm.$('#headerPlan').hide();
				mrm.$('#headerList').show();
				mrm.$('#dl_link_show_dealerlist').hide();
				
			} else if (site == "site_planRoute"){
				mrm.$('#paging').hide();
				mrm.$('#dl_headline_show_all_markers').hide();
				var planRouteText = mrm.$('#headerPlanTarget').html();
				planRouteText = " " + getSelectedDealerName(parameter);
				mrm.$('#headerPlanTarget').html(planRouteText);
				mrm.$('#dl_link_show_dealerlist').show();
				mrm.$('#headerPlan').show();
				mrm.$('#headerList').hide();
				
			}else {
				log.info("SiteListenerForPaging - Request not implemented - site=" + site);
			}
		} 

		if (siteController) {
			siteController.addListener("SiteListenerForPaging", siteListenerForPaging);
			log.info("SiteListenerForPaging : siteListenerForPaging has been added");
		} else {
			log.warn("SiteListenerForPaging : could not add siteListenerForPaging. Cause: pageController does not exist.");
		}

	}

    function paging_init(_dealersize, _numberOfPages, _dealerPerPage) {
    	log.info("Initializing paging");

    	paging_dealersize = _dealersize;
    	paging_numberOfPages = _numberOfPages;
    	paging_dealerPerPage = parseInt(_dealerPerPage);
    	
    	//mrm.$('#headerPlan').hide();
    	mrm.$('#dl_headline_paging_id').show();
    	mrm.$('#dl_headline_show_all_markers').show();
    	
		//paging_showPages(0);
    	paging_initSiteListener();
    	do_generateLinkNewSearch();
    	
    	initCheckboxListener();
    }

function initCheckboxListener () {
  	mrm.$("#input_showmarkers").click(function(){
	    if (this.checked) {
	    	// check all markers of the current page
	    	mrm.$('body').find('.mds-cmp-dealer_information').each(function(i) {
	        	var dealerId = mrm.$(this).find('.dealer_id').html();        	
	            var tempId = "#range" + dealerId;
	        	if (dealerId >= paging_current_from && dealerId <= paging_current_to)  {
	   				mrm.$(this).show();
	   				dl_checkCheckbox(tempId);
	   				gMap_showMarker(dealerId);
	        	}
	    	});
	    }
	    else {
	    	// uncheck all markers of the current page
	    	mrm.$('body').find('.mds-cmp-dealer_information').each(function(i) {
	        	var dealerId = mrm.$(this).find('.dealer_id').html();        	
	            var tempId = "#range" + dealerId;
	        	if (dealerId >= paging_current_from && dealerId <= paging_current_to)  {
	   				dl_uncheckCheckbox(tempId);
	    			gMap_hideMarker(dealerId);
	        	}
	    	});
	    }
  	}); 
  	
  	
}   

function paging_showPages(actualPageNumber) {
	if (actualPageNumber == null || actualPageNumber < 0) {
		actualPageNumber = paging_current_page;
	}
	if (paging_dealersize > 0) {
		var textHTML = "";
	
		for (var i = 0; i < paging_numberOfPages; i++) {
			var from = i * paging_dealerPerPage + 1;
			var to = Math.min(paging_dealersize, i * paging_dealerPerPage + paging_dealerPerPage);
			var fromTo = "" + from + "-" + to + "";
			var page = i;
			if (i == actualPageNumber) {
				textHTML = textHTML + "<dd class='actual'>" + fromTo + "</dd>";
			} else {
				var pagingLinkOpen = "<dd><a href='#' onclick='do_paging(" + page + ")'>";
				var pagingLinkClose = "</a></dd>";
				textHTML = textHTML + pagingLinkOpen + fromTo + pagingLinkClose;
			}
		}
		mrm.$('#dl_paging_dl_id').find('dd').remove();
		mrm.$('#dl_paging_label_dt_id').after(textHTML);
	}
}
	
	
    // first page is 0
    function paging_turnToPage(newPage) {
    	log.debug("Paging -		opening page: newPage=" + newPage + " dealersize=" + paging_dealersize + " dealerPerPage=" + paging_dealerPerPage);
		if (newPage == null || newPage < 0)  {
			showDealersFromTo (paging_current_from, paging_current_to);
		} else {
	        var from = newPage * paging_dealerPerPage + 1;
	        var to = Math.min(paging_dealersize, newPage * paging_dealerPerPage + paging_dealerPerPage);
	        log.debug("Paging -		opening page: " + newPage + ". first dealer=" + from + " last dealer=" + to);
			if (from > to) {
				log.error("Paging	-	when turning to page: " + newPage + ". Page number does not exist: Not enough dealers.");
			} else {
		    	showDealersFromTo (from, to);
			}
			dl_checkCheckbox("#input_showmarkers");
			paging_current_from = from;
			paging_current_to = to;
		}
		paging_showPages(newPage);		
    }
	
	function showDealersFromTo (from, to) {
		mrm.$('body').find('.mds-cmp-dealer_information').each(function(i) {
	        	var dealerId = mrm.$(this).find('.dealer_id').html();        	
	            var tempId = "#range" + dealerId;
	        	if (dealerId >= from && dealerId <= to)  {
	   				mrm.$(this).show();
	   				dl_checkCheckbox(tempId);
	        	} else {
	        		mrm.$(this).hide();
	        		dl_uncheckCheckbox(tempId);
	        	}
	    	});
	}
	
    function getSelectedDealerName (dealerId) {
    	var divDealerId = 'dealer_' + dealerId;
		var dealerDiv = mrm.$('body').find('#' + divDealerId).html();
		return mrm.$(dealerDiv).find('.dealerName').html();
    }
