/* 
 *	BitCashサイト内の標準ページャーを作成します。
 *	pager.css も利用しています。
 *
 *	objXpath		(表示位置)
 *	page			(ページ番号)
 *	limit		(表示数)
 *	count		(item総数)
 *	range		(ページャーの幅) 例えば、2なら現在のページ±2ページ分  ［２］［３］【４】［５］［６］
 *
 *	例)
 *	pager = new _pager;
 *	pager.createPager(objXpath,page,limit,count,range);
 *
 *	同じXpathでページャーを複数作成するは、回数分newする必要があります。
 *	例)
 *	var pagerNum = $(targetObjXpath).length;
 *	Pager = [];
 *	for(var i = 0; i < pagerNum; i++){
 *		Pager[i] = new _pager();
 *		Pager[i].createPager($(targetObjXpath + "eq(" + i +")"),page,limit,count);
 *	}
 *
 */

function _pager(){
	this.createPager = function(targetObjXpath,page,limit,count,range,notindex){
		var pager = document.createElement("div");
		pager.className = "pagerFrame";
		if ( !notindex ) pager.appendChild(this.pagerIndex(page,limit,count));
		pager.appendChild(this.pagerList(page,limit,count,range));
		
		$(targetObjXpath).html(pager);
	};

	this.pagerIndex = function(page,limit,count){
		page  = page  - 0;
		limit = limit - 0;
		count = count - 0;
		var pagerIndex = document.createElement("div");
		pagerIndex.className = "pagerIndex";
		pagerIndex.innerHTML = "[ 全" + count + "件中 " + (limit * (page - 1) + 1) + ((limit * (page - 1) + 1) != count ?  " - " + ( count > limit * page ? (limit * page) : count ) : "") + " 件目を表示 ]";
		return pagerIndex;
	};

	this.pagerList = function(page,limit,count,range){
		page  = page  - 0;
		limit = limit - 0;
		count = count - 0;
		var endpage = Math.ceil(count/limit);
		if(!range){
			var range = 3;
		}
		var min = (page - range) - 1;
		var max = (page + range);


		if(min < 0){
			max -= min;
		}
		if(max > endpage){
			min -= (max - endpage);
		}
/*
		// Next last などの有無による調整
		if(page == 1){
			max += 1;
		}
		if(page == endpage){
			min -= 1;
		}
		if(page - range <= 1){
			max += 1;
		}
		if(page + range >= endpage){
			min -= 1;
		}
*/
		// 調整
		if(min < 0){
			min = 0;
		} 
		if(max > endpage){
			max = endpage;
		}

		var rapper = document.createElement("div");

		var pagerBlock = document.createElement("div");
		pagerBlock.className = "pagerBlock";

		var ul = document.createElement("ul");
		ul.className = "pagerBody";
		pagerBlock.appendChild(ul);

		if(endpage == 1){
			ul.className = "pagerBody transparent";
		}

		if(page - range > 1){
//		  if(page > 1){
			var li = document.createElement("li");
			li.page  = 1;
			li.innerHTML = "<div>&lt;&lt;</div>";
			li = this.addHover(li);
			ul.appendChild(li);
		}else{
			var li = document.createElement("li");
			li.page = 0;
			li.className = "plain";
			li.innerHTML = "<div>&lt;&lt;</div>";
			ul.appendChild(li);
		}
		if(page > 1){
			var li = document.createElement("li");
			li.page = (page - 1);
			li.innerHTML = "<div>&lt;</div>";
			li = this.addHover(li);
			ul.appendChild(li);
		}else{
			var li = document.createElement("li");
			li.page = 0;
			li.className = "plain";
			li.innerHTML = "<div>&lt;</div>";
			ul.appendChild(li);
		}
		for(var i = min ; i < max; i++){
			var li = document.createElement("li");
			li.innerHTML = "<div>" + (i + 1) + "</div>";
			if(page == (i + 1)){
				li.className = "on";
				li.page = 0;
			}else{
				li = this.addHover(li);
				li.page = (i + 1);
			}
			ul.appendChild(li);
		}
		if(page < endpage){
			var li = document.createElement("li");
			li.page = page + 1;
			li.innerHTML = "<div>&gt;</div>";
			li = this.addHover(li);
			ul.appendChild(li);
		}else{
			var li = document.createElement("li");
			li.page = 0;
			li.className = "plain";
			li.innerHTML = "<div>&gt;</div>";
			ul.appendChild(li);
		}
		if(page + range < endpage){
//		  if(page < endpage){
			var li = document.createElement("li");
			li.page = endpage;
			li.innerHTML = "<div>&gt;&gt;</div>";
			li = this.addHover(li);
			ul.appendChild(li);
		}else{
			var li = document.createElement("li");
			li.page = 0;
			li.className = "plain";
			li.innerHTML = "<div>&gt;&gt;</div>";
			ul.appendChild(li);
		}
		return pagerBlock;
	}
	this.addHover = function(obj){
		$(obj).hover(function(){
			$(this).addClass("hover");
		},function(){
			$(this).removeClass("hover");
		});
		return obj;
	}

/*
 * ページャーの子のLiタグをクリックするとpointSite(）を呼び出します。
 */
	this.flipPointSite = function(method,id,cbFnc,targetObjXpath,limit, i){
		var clickObj = $(targetObjXpath).parent().children(".pager:eq("+i+")").find(".pagerBody li");
		//var clickObj = $(targetObjXpath).parent().find(".pager .pagerBody li");
		$(clickObj).click(function(){
			if(this.page != 0){

				if ( i == 1 ){
					var e = -1;
					while ( 0 < (scroll_top = document.body.scrollTop || document.documentElement.scrollTop || document.scrollY || 0 ) ) {
						window.scrollBy( 0, e );
						e -= 1;
					}
				}

				pointSite(method,id,"pointSiteCB." + cbFnc,targetObjXpath,this.page,limit);
				
			}
		});
	}

/*
 * ページャーの子のLiタグをクリックするとsearchList(）を呼び出します。(商品検索用)
 */
	this.flipSearchList = function( keywords, category, price_min, price_max, limit, sort_by, sort_order, page, cbFnc, targetObjXpath, i ){
		var clickObj = $(targetObjXpath).parent().children(".pager:eq("+i+")").find(".pagerBody li");
		$(clickObj).click(function(){

			if(this.page != 0){

				if ( i == 1 ){
					// shoppingコントローラ配下で動いてる時のみスクロールさせます
					if ( -1 != window.location.pathname.indexOf("shopping") ) {
						var e = -1;
						var scroll_top;
						while ( 0 < ( scroll_top = document.body.scrollTop || document.documentElement.scrollTop || document.scrollY || 0 ) ) {
							window.scrollBy( 0, e );
							e -= 2
						}
					}
				}

				searchList( keywords, category, price_min, price_max, limit, sort_by, sort_order, this.page, "searchListCB." + cbFnc, targetObjXpath );
			}
		});
	}

/*
 * ページャーの子のLiタグをクリックするとsearchList(）を呼び出します。(店舗検索用)
 */
	this.flipStoreSearchList = function( keywords, category, limit, sort_by, sort_order, page, cbFnc, targetObjXpath, i ){
		var clickObj = $(targetObjXpath).parent().children(".pager:eq("+i+")").find(".pagerBody li");
		$(clickObj).click(function(){

			if(this.page != 0){

				if ( i == 1 ){
					// shoppingコントローラ配下で動いてる時のみスクロールさせます
					if ( -1 != window.location.pathname.indexOf("shopping") ) {
						var e = -1;
						var scroll_top;
						while ( 0 < ( scroll_top = document.body.scrollTop || document.documentElement.scrollTop || document.scrollY || 0 ) ) {
							window.scrollBy( 0, e );
							e -= 2
						}
					}
				}

				storesearchList( keywords, category, limit, sort_by, sort_order, this.page, "storesearchListCB." + cbFnc, targetObjXpath );
			}
		});
	}

/*
 * ページャーの子のLiタグをクリックするとsearchList(）を呼び出します。(店舗検索用)
 */
	this.flipQuickEnqList = function( limit, page, list, cbFnc, targetObjXpath, i ){
		var clickObj = $(targetObjXpath).parent().children(".pager:eq("+i+")").find(".pagerBody li");
		$(clickObj).click(function(){

			if(this.page != 0){

				if ( i == 1 ){
					var e = -1;
					var scroll_top;
					while ( 0 < ( scroll_top = document.body.scrollTop || document.documentElement.scrollTop || document.scrollY || 0 ) ) {
						window.scrollBy( 0, e );
						e -= 2
					}
				}

				quickenqList( limit, this.page, list, "quickenqListCB." + cbFnc, targetObjXpath );
			}
		});
	}
}
