// 表示するデータを保持している二次元配列(表示内容格納配列)
dataArray = new Array();
// 現在表示しているページ番号
pagenum = new Number(0);
// オブジェクトを保持している二次元配列(表示先オブジェクト格納配列)
objectArray = new Array();
// max no. of pages/display
pages_per_disp = 10;
/**
 * 現在のページ番号を初期化
 */
function paging_clearPageNum() {
    pagenum = new Number(0);
}

/**
 * 表示内容格納配列にデータを挿入する
 * @param 挿入オブジェクト
 */
function paging_insertOutputData(object) {
    dataArray[dataArray.length] = object;
}

/**
 * 表示内容格納配列の情報を取得する
 * @param 要素番号
 * @return オブジェクト
 */
function paging_getData(index) {
    if (dataArray.length > index) {
        return dataArray[index];
    }
    return;
}
/**
 * 画面に表示されているオブジェクトの中で指定された番号の情報を取得する
 * @param クリックされたリンクの番号
 * @return オブジェクト
 */
function paging_getInfoLinkClick(num) {
    var dataArrayIndex = new Number((pagenum * objectArray.length) + parseInt(num));
    //alert(dataArrayIndex + " = (" + pagenum + " * " + objectArray.length + ") + " + num);
    return dataArray[dataArrayIndex];
}

/**
 * 表示先オブジェクト格納配列にオブジェクトを挿入する
 * @param 挿入オブジェクト
 */
function paging_insertObject(object) {

    objectArray[objectArray.length] = object;
}

/**
 * 表示先オブジェクト格納配列の中身を初期化
 */
function paging_clearObject() {

    objectArray = new Array();
}

/**
 * ページの最大数を返す
 * @return ページの最大数
 */
function paging_getMaxPageNum() {
    return (parseInt(dataArray.length) / parseInt(objectArray.length));
}
/**
 * 現在のページの情報を表示する
 */
function paging_outputNow() {
    var startDateArray = new Number(pagenum * objectArray.length);
    for (var printLoop=0; printLoop<objectArray.length; printLoop++, startDateArray++) {
        if (startDateArray<dataArray.length) {
            paging_changeOutputData(startDateArray, printLoop);
            paging_dataOutput(printLoop);
        } else {
            paging_dataOver(printLoop);
            break;
        }
        
    }
}
/**
 * 「次へ」が押された場合の処理
 */
function paging_putNext() {
    pagenum++;
    
    var startDateArray = new Number(pagenum * objectArray.length);
    if (window.makeSerchBox) {
    	makeSerchBox(pagenum);
    }
    if (window.setPagingObject) {
    	paging_clearObject();
    	setPagingObject();
    }
    if (window.paging_pageChangeAction) {
        paging_pageChangeAction( paging_getMaxPageNum(), pagenum);
    }
    if (startDateArray >= dataArray.length) {
        pagenum--;
        return;
    }
    
    // alert("startDateArray = " + startDateArray);
    for (var nextLoop=0; nextLoop<objectArray.length; nextLoop++, startDateArray++) {
        if (startDateArray<dataArray.length) {
        	paging_changeOutputData(startDateArray, nextLoop);
        	paging_dataOutput(nextLoop);
        } else {
        	paging_dataOver(nextLoop);
            break;
        }
        
    }
    // alert("paging_putNext : nextLoop = " + nextLoop + " : objectArray.length = " + objectArray.length + " : dataArray.length = " + dataArray.length);
     
}

/**
 * オブジェクトの表示に成功した場合に呼び出される
 * @param オブジェクト表示に成功した、オブジェクトの要素番号
 */
function paging_dataOutput(num) {
    // 呼び出し元のJSPで成功した場合の処理関数を定義している場合、それを呼び出す
    if (window.paging_dataOutputDetail) {
        paging_dataOutputDetail(num);
    }
}

/**
 * 「次へ」の動作により、表示内容格納配列の要素数を超えた場合に動作
 * @param 要素数を超える前に表示したオブジェクトの数
 */
function paging_dataOver(num) {
    // 呼び出し元のJSPで超過した場合の処理関数を定義している場合に、それを呼び出す
    if (window.pageing_dataOverDetail) {
        pageing_dataOverDetail(num);
    }
}

/**
 * 「前へ」が押された場合の処理
 */
function paging_putPrev() {
    if (pagenum < 1) {
        return;
    }
    pagenum--;
    if (window.makeSerchBox) {
    	makeSerchBox();
    }
    if (window.setPagingObject) {
    	paging_clearObject();
    	setPagingObject();
    }
    if (window.paging_pageChangeAction) {
        paging_pageChangeAction( paging_getMaxPageNum(), pagenum);
    }
    var startDateArray = new Number(pagenum * objectArray.length);
     
    // alert("startDateArray = " + startDateArray);
    for (var prevLoop=0; prevLoop<objectArray.length; prevLoop++, startDateArray++) {
        if (startDateArray<dataArray.length) {
            paging_changeOutputData(startDateArray, prevLoop);
            paging_dataOutput(prevLoop);
        } else {
            paging_dataOver(prevLoop);
            break;
        }     
    }
    // alert("paging_putPrev : prevLoop = " + prevLoop + " : objectArray.length = " + objectArray.length + " : dataArray.length = " + dataArray.length);
}

/**
 * 「page」が押された場合の処理
 */
function paging_putPage(p) {
    
    pagenum = p - 1;
    if (window.makeSerchBox) {
    	makeSerchBox(pagenum);
    }
    if (window.setPagingObject) {
    	paging_clearObject();
    	setPagingObject();
    }
    if (window.paging_pageChangeAction) {
        paging_pageChangeAction( paging_getMaxPageNum(), pagenum);
    }
    var startDateArray = new Number(pagenum * objectArray.length);
     
    for (var prevLoop=0; prevLoop<objectArray.length; prevLoop++, startDateArray++) {
        if (startDateArray<dataArray.length) {
            paging_changeOutputData(startDateArray, prevLoop);
            paging_dataOutput(prevLoop);
        } else {
            paging_dataOver(prevLoop);
            break;
        }     
    }
    // alert("paging_putPrev : prevLoop = " + prevLoop + " : objectArray.length = " + objectArray.length + " : dataArray.length = " + dataArray.length);
}


/**
 * 表示先オブジェクト格納配列に表示されている情報を変更する
 * @param infoindex 表示内容する表示内容格納配列の要素番号
 * @param objindex 表示先のオブジェクトの要素番号
 */
function paging_changeOutputData(infoindex, objindex) {
    if (dataArray.length > infoindex) {
    }
    if (objectArray.length > objindex) {
    }
    var infolist = dataArray[infoindex];
    var objectlist = objectArray[objindex];

    for (var i=0; i<objectlist.length; i++) {
        if (objectlist[i] != null && objectlist[i] != "") {
            if (window.paging_pageChangeOutputObject) {
                paging_pageChangeOutputObject(objectlist[i], infolist[i], i);
            } else {
                objectlist[i].innerHTML = infolist[i];
            }

        }
    }
}

/**
 * 開発用のオブジェクト表示メソッド
 */
function paging_object_alert() {
    alert("objectArray = " + objectArray);
    for (var i=0; i<objectArray.length; i++) {
        alert(" objectArray[" + i + "] = " + objectArray[i]);
    }
}


function paging_getStartEndPage() {
	
	var x=1;
	if((pages_per_disp%2)>0)
		x=0;
		
	var strPage = (pagenum+1)-(parseInt(pages_per_disp/2));
	var endPage = (pagenum+1)+(parseInt(pages_per_disp/2)-x);
	var maxPage = paging_getAbsMaximumPage();
	
	if(strPage<=0) {
		strPage = 1;
		endPage = pages_per_disp;
	}

	if(endPage>maxPage) {
		endPage = maxPage;
		strPage = (endPage - pages_per_disp)+1;

		if(strPage<1)
			strPage = 1;
	}

	return new Array(strPage, endPage);
}

//return the (rounded off)max no. of pages
function paging_getAbsMaximumPage(){
	x = parseInt(dataArray.length/objectArray.length);
	if((dataArray.length%objectArray.length)>0)
		x = x + 1;
	return x;	
}



/*
呼び出し元で定義していたら、このjsにより自動的によびだされるようになるメソッド一覧

// (paging.jsにより動作する)リンク一件が表示された場合の処理
// outputNum リンク番号
function paging_dataOutputDetail(outputNum) {
}

// (paging.jsにより動作する) 「前へ」「次へ」のページングがされた場合に動作
// maxPageNum = 最大ページ数、nowPageNum = 現在のページ数
function paging_pageChangeAction(maxPageNum, nowPageNum) {
}

// (paging.jsにより動作する) 最終ページの表示で、全ての表示内容を表示してしまったため、表示対象にならない表示オブジェクトが発生した場合の処理
// outputNum = リンク番号
function pageing_dataOverDetail(outputNum) {
}


// (paging.jsにより動作する) オブジェクトが表示している内容は変更されたときに動作
// object = 変更対象オブジェクト、changeInfo = 変更内容、objectNumber = 表示内容格納配列の要素番号
function paging_pageChangeOutputObject(object, changeInfo, objectNumber) {
}

// paging.jsに表示内容を設定する
function setPagingInfo() {
}

//検索結果表示部の生成
function makeSerchBox(){
}
*/


