var pagectrl = epctl = {fn : {
//************************************************************/
// 関数名 : main()
// 処理   : ページインデックスを動的に生成するメイン処理
// 引数   : 無
// 戻り値 : ページ生成時 true
//          非生成時     false
//************************************************************/
main:function () {
    /* 引数設定情報デフォルト値 */
    var thisUrl = location.href.split("?");
    var divObj = document.getElementsByTagName(epctl.per.page_pattTag);
    var regObj = new RegExp(epctl.per.page_pattid, "i");
    var regObjpageId = new RegExp(epctl.per.pageidxid);
    var pageObj = new Array();
    var getUrlData = epctl.fn.getParam();
    var pageIdicesf = document.getElementById(epctl.per.pageidxFid);
    var pageIdicesb = document.getElementById(epctl.per.pageidxBid);
    var frtSubtxt = "";
    var bakSubtxt = "";
    var makePoint = document.getElementById(epctl.per.makeIdxid);

    /* ページインデックス生成用のタグが見つからなかったら処理を終了 */
    if ( !makePoint ) {
        return false;
    }

    /* 定義されたページの数を数える */
    for (var i=0; i < divObj.length; i++ ) {
        if ( divObj[i].id.match(regObj) ) {
            pageObj[RegExp.rightContext] = divObj[i];
        }
    }

    /* ページインデックス非活性時文字列をセットする */
    var ptxtObj = document.getElementById(epctl.per.dispPagetxt);
    var setTxtFlg = false;
    if ( !ptxtObj ) {
        var oAnchor = document.createElement("A");
        oAnchor.setAttribute("id", epctl.per.dispPagetxt);
//        oAnchor.setAttribute("style", "display:none;");
        oAnchor.style.display = "none";
        makePoint.appendChild(oAnchor);
        setTxtFlg = true;
        ptxtObj = document.getElementById(epctl.per.dispPagetxt);
    }

    /* ページインデックスリストオブジェクトを取得する */
    var pageChilds = makePoint.childNodes;
    var setAobjList = new Array();
    var deli = "";
    var j=1;
    for (i=0; i < pageChilds.length; i++) {
        if ( pageChilds[i].id == epctl.per.pageidxFid ) {
            /* 前にある区切り文字情報を取得する */
            if ( pageChilds[i].previousSibling ) {
                deli = (pageChilds[i].previousSibling.nodeType == 3 ) ? pageChilds[i].previousSibling.nodeValue : "";
            }
            frtSubtxt = pageChilds[i].firstChild.nodeValue;
            var cloneObj = pageIdicesf.cloneNode(true);
            epctl.fn.clearChildren(cloneObj);
            makePoint.removeChild(pageChilds[i]);
        } else if ( pageChilds[i].id == epctl.per.pageidxBid ) {
            bakSubtxt = pageChilds[i].firstChild.nodeValue;
            makePoint.removeChild(pageChilds[i]);
        } else if ( pageChilds[i].nodeType == 1 && !pageChilds[i].id) {
            setAobjList[j] = pageChilds[i];
            j++;
        }
    }

    /* ページ数分だけページインデックスを生成しパラメータをセットする */
    i = 1;
    for ( var pidx in pageObj ) {
        if ( pageIdicesf ) {
            var pageIdxObj = cloneObj.cloneNode(true);
            pageIdxObj.setAttribute("id", epctl.per.pageidxid + i);
            pageIdxObj.setAttribute("name", pageObj[pidx].id);
            pageIdxObj.setAttribute("href", thisUrl[0] + "?" + document.body.id + "=" + epctl.per.pageidxid + i);
            pageIdxObj.appendChild(document.createTextNode(frtSubtxt + i + bakSubtxt));

            makePoint.insertBefore(pageIdxObj, ptxtObj);
            makePoint.insertBefore(document.createTextNode(deli), ptxtObj);
        } else {
            var pageIdxObj = setAobjList[i];
            pageIdxObj.setAttribute("id", epctl.per.pageidxid + i);
            pageIdxObj.setAttribute("name", pageObj[pidx].id);
            pageIdxObj.setAttribute("href", thisUrl[0] + "?" + document.body.id + "=" + epctl.per.pageidxid + i);
        }

        if ( setTxtFlg ) {
            /* 非活性時文字列が定義されていない場合 */
            ptxtObj.innerHTML +=frtSubtxt + i + bakSubtxt + "@";
        }
        i++;
    }

    if ( pageObj.length > 0 ) {

        if ( getUrlData ) {
            if ( getUrlData[document.body.id] ) {
                if ( getUrlData[document.body.id].match(regObjpageId) ) {
                    epctl.fn.page_disp(getUrlData[document.body.id]);
                    return true;
                }
            }
        }
        epctl.fn.page_disp(epctl.per.pageidxid + "1");
        return true;

    } else {
        /* 区切りページ情報が存在しなかった場合、ページインデックスを非表示化する */
        makePoint.style.display = "none";
        return false;
    }
},

//************************************************************/
// 関数名 : page_disp(pageIndexId)
// 処理   : 指定されたページのみの表示を行う
// 引数   : pageIndexId 選択されたページインデックスID
// 戻り値 : 無
//************************************************************/
page_disp:function(pageIndexId) {
    var dispObj = document.getElementById(pageIndexId);
    var parentObj = dispObj.parentNode;
    var pageChilds = parentObj.childNodes;
    var setTxtList = document.getElementById(epctl.per.dispPagetxt).firstChild.nodeValue.split("@");
    var regObj = new RegExp(pageIndexId.substring(0, epctl.per.pageidxidlen));
    var headFlg = false;
    var tailFlg = false;
    var j = 0*1;
    for (var i=0; i < pageChilds.length; i++) {
        if ( pageChilds[i].nodeType == 1 ) {
            if ( pageChilds[i].id == pageIndexId ) {

                /* 選択ページ表示処理 */
                operObj = document.getElementById(pageChilds[i].name);
                operObj.style.display = "inline";

                /* 選択ページインデックス非活性化処理 */
                pageChilds[i].style.display  = "none";
                if ( pageChilds[i].previousSibling ) {
                    if ( pageChilds[i].previousSibling.nodeType == 3 ) {
                        pageChilds[i].previousSibling.nodeValue += setTxtList[j];
                    } else {
                        parentObj.insertBefore(document.createTextNode(setTxtList[j]), pageChilds[i]);
                        i++;
                    }
                } else {
                    parentObj.insertBefore(document.createTextNode(setTxtList[j]), pageChilds[i]);
                    i++;
                }
                headFlg = ( j==0 ) ? true : false;
                tailFlg = true;
                j++;

            } else if ( pageChilds[i].id.match(regObj) ) {
                /* 非選択ページ非表示処理 */
                operObj = document.getElementById(pageChilds[i].name);
                operObj.style.display = "none";

                /* 非選択ページインデックス活性化処理 */
                pageChilds[i].style.display  = "inline";
                if ( pageChilds[i].previousSibling ) {
                    if (pageChilds[i].previousSibling.nodeType == 3 ) {
                        pageChilds[i].previousSibling.nodeValue.replace(setTxtList[j],"");
                    }
                }
                tailFlg = false;
                j++;
            }
        }
    }
    var pageIdicesf = document.getElementById(epctl.per.movBeforeid);
    var pageIdicesb = document.getElementById(epctl.per.movNextid);
    if (pageIdicesf) {
        if ( headFlg ) {
            pageIdicesf.style.display = "none";
        } else {
            epctl.fn.beforePage(pageIdicesf, dispObj);
        }
        if ( tailFlg ) {
            pageIdicesb.style.display = "none";
        } else {
            epctl.fn.nextPage(pageIdicesb, dispObj);
        }
    }

},

//************************************************************/
// 関数名 : beforePage(beforeObj, pageObj)
// 処理   : 前ページ移動インデックスのプロパティのセットを行う
// 引数   : beforeObj 前ページインデックス
//        : pageObj 現在表示されているページのインデックス
// 戻り値 : 無
//************************************************************/
beforePage:function(beforeObj, pageObj) {
    if ( pageObj.previousSibling.nodeType == 1 ) {
        var thisUrl = location.href.split("?");
        thisUrl = thisUrl[0];
        beforeObj.setAttribute("href", thisUrl + "?" + document.body.id + "=" + pageObj.previousSibling.id);
        beforeObj.style.display = "inline";
    } else {
        epctl.fn.beforePage(beforeObj, pageObj.previousSibling);
    }
    return ;
},

//************************************************************/
// 関数名 : nextPage(nextObj, pageObj)
// 処理   : 次ページ移動インデックスのプロパティのセットを行う
// 引数   : nextObj 次ページインデックス
//        : pageObj 現在表示されているページのインデックス
// 戻り値 : 無
//************************************************************/
nextPage:function(nextObj, pageObj) {
    if ( pageObj.nextSibling.nodeType == 1 ) {
        var thisUrl = location.href.split("?");
        thisUrl = thisUrl[0];
        nextObj.setAttribute("href", thisUrl + "?" + document.body.id + "=" + pageObj.nextSibling.id);
        nextObj.style.display = "inline";
    } else {
        epctl.fn.nextPage(nextObj, pageObj.nextSibling);
    }
    return ;
},

//************************************************************/
// 関数名 : getParam()
// 処理   : URLよりGetパラメータを取得する
// 引数   : 無
// 戻り値 : key [連想配列](Getパラメータ有)
//        : null          (Getパラメータ無)
//************************************************************/
getParam:function() {
    var pram = location.search.substring(1);
    var pair = pram.split("&");
    var temp= new Array();
    var key = new Array();
    var setFlg = false;

    if (!pram) {
        return null;
    }

    for (var i=0; i < pair.length; i++) {
        temp = pair[i].split("=");
        if ( temp.length == 2 ) {
            key[temp[0]] = temp[1];
            setFlg = true;
        }
    }
    if ( setFlg ) {
        return key;
    }
},

//************************************************************/
// 関数名 : clearChildren(clearobj)
// 処理   : 子ノードを全て削除
// 引数   : clearobj 子ノードを削除するオブジェクト
// 戻り値 : 無
//************************************************************/
clearChildren:function (clearobj) {
    if (clearobj.firstChild) {
        for ( var i=0; i < clearobj.childNodes.length ; i++ ) {
            clearobj.removeChild(clearobj.childNodes[i]);
        }
    }
}

},
per : {
    makeIdxid   : "el_pagenavi",    //ページインデックスを生成するタグのID
    page_pattTag: "DIV",            //ページエリアを指定するタグの種類
    page_pattid : "AreaPage",       //ページエリアを指定するタグに付与されたIDパターン
    pageidxid   : "el_page-disp",   //ページインデックス用IDパターン
    pageidxidlen: 12,               //ページインデックス用IDパターン文字列数
    pageidxFid  : "el_indicesf",    //ページインデックステンプレート+インデックスサブ文字(前)
    pageidxBid  : "el_indicesb",    //インデックスサブ文字(後)
    movBeforeid : "el_page_before", //前ページ移動用ID
    movNextid   : "el_page_next",   //次ページ移動用ID
    dispPagetxt : "el_page_text"    //非活性時表示テキスト用タグID
}};


function overRideload(func, loadstr, loadstr2){
    if (window.addEventListener) {
        window.addEventListener(loadstr2, func, false);
    } else if (window.attachEvent) {
        window.attachEvent(loadstr, func);
    }
}


overRideload(pagectrl.fn.main, "onload", "load");
overRideload(function(){}, "onunload", "unload");

