var xmldoc;  //読み込んだxmlを格納する変数
var xmlfile; //読み込むxml
var xmlhttp; //xmlオブジェクト用

///////////////////////////////////////////
//変数に値をセットしXMLファイルを読み込む//
///////////////////////////////////////////
//引数
//setXmlFile:xmlファイルのurl
///////////////////////////////////////////
function setXmlValue(setXmlFile) {
    xmlfile = setXmlFile;
    xmlhttp = null;

    createNewXmlObject();

    if (xmlhttp != null) {
        return loadxmldoc();
    } else {
        return false;
    }
}

//xmlオブジェクト
function createNewXmlObject() {
    if (window.ActiveXObject) {
        try {
            xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch (e) {
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
    } else if (window.XMLHttpRequest) {
        xmlhttp = new XMLHttpRequest();
    }
}

//xmlファイル読み込み
function loadxmldoc() {
    if (window.ActiveXObject) {
        xmldoc = new ActiveXObject("Microsoft.XMLDOM");
        xmldoc.async = false;
        xmldoc.load(xmlfile);
        return (xmldoc);
    } else if (window.XMLHttpRequest) {
        xmldoc = getxml().responseXML;
        return (xmldoc);
    } else {
        alert("11Your browser does not support XMLHTTP.");
        return false;
    }
}

function getxml() {
    if (xmlhttp != null) {
        xmlhttp.open("GET", xmlfile, false);
        xmlhttp.send(null);
    } else {
        alert("Your browser does not support XMLHTTP.11");
        return false;
    }
    return (xmlhttp);
}

//XMLを書き出す　start件目からpage件書き出し
function writeXml(loadXml, writeStr, page, start, borderStr, cutStrNo,cutName) {
    if (arguments.length == 3) {
        start = 0;
        borderStr = "";
        cutStrNo = 0;
        cutName = "";
    } else if (arguments.length == 4) {
        borderStr = "";
        cutStrNo = 0;
        cutName = "";
    } else if (arguments.length == 5) {
        cutStrNo = 0;
        cutName = "";
    }else if (arguments.length == 6) {
        cutName = "note";
    }
    
    
    if (!loadXml == false) {
        var count = 0;         //カウント変数
        var loopflg = 1;       //whileを制御するフラグ
        var escStr = writeStr; //###で囲まれた部分を取り出していくので一旦変数に入れる
        var matchArray = new Array();
        var matchStr = new String();

        while (loopflg) {
            matchStr = escStr.match(/###[A-Z0-9]{1,}###/i);
            
            if (matchStr) { //###に囲まれた文字列があったら
                escStr = escStr.replace(matchStr, "");
                matchArray[count] = matchStr[0].split("###").join("");  
                count++;
            } else {
                //###に囲まれた文字列がなくなったらループ終了
                loopflg = 0;
            }
            if (count > 50) {
                loopflg = 0;
            }
        }
        //XMLからデータ配列を取得
        var x = loadXml.getElementsByTagName("article");
        //ループ用に値の設定
        if (start > 0) {
            start = start - 1;
            page = page + start;
        }
        if (x.length < page+1) {
            page = x.length;
        }
        for (i = start; i < page; i++) {
            escStr = writeStr;  //繰り返し書き出す文字列を変数にコピー

            for (n = 0; n < count; n++) {
                //###で囲まれた部分をXMLのデータと置き換え
                try {
                    //cutNameの時文字をカットする可能性
                    if(matchArray[n] == cutName){
                        //cutStrNoが0以上の時文字列カット
                        if (cutStrNo > 0) {
                            cutStr = x[i].getElementsByTagName(matchArray[n])[0].childNodes[0].nodeValue;
                            if (cutStr.length >= cutStrNo) {
                                cutStr = cutStr.slice(0, cutStrNo);
                                cutStr = cutStr + "…";
                            }
                            escStr = escStr.replace("###" + matchArray[n] + "###", cutStr);
                        } else {
                            escStr = escStr.replace("###" + matchArray[n] + "###", x[i].getElementsByTagName(matchArray[n])[0].childNodes[0].nodeValue);
                        }
                    } else {
                        escStr = escStr.replace("###" + matchArray[n] + "###", x[i].getElementsByTagName(matchArray[n])[0].childNodes[0].nodeValue);
                    }
                }catch(e){
	            	escStr = escStr.replace("###" + matchArray[n] + "###", "");
	            }


	        }
            //ボーダーを書き出さない処理
	        if(i == page-1){
	            if (borderStr != "") {
	                escStr = escStr.split(borderStr).join("");
                }
            }
            //置き換えた文字列を出力
            document.write(escStr);
        }

    }

}

//XMLをピックアップして書き出す
function writePickUp(loadXml, writeStr, pickupArray, idname) {
    
    if (!loadXml == false) {
        var count = 0;         //カウント変数
        var loopflg = 1;       //whileを制御するフラグ
        var escStr = writeStr; //###で囲まれた部分を取り出していくので一旦変数に入れる
        var matchArray = new Array();
        var matchStr = new String();

        while (loopflg) {
            matchStr = escStr.match(/###[A-Z0-9]{1,}###/i);

            if (matchStr) { //###に囲まれた文字列があったら
                escStr = escStr.replace(matchStr, "");
                matchArray[count] = matchStr[0].split("###").join("");
                count++;
            } else {
                //###に囲まれた文字列がなくなったらループ終了
                loopflg = 0;
            }
            if (count > 50) {
                loopflg = 0;
            }
        }
        //XMLからデータ配列を取得
        var x = loadXml.getElementsByTagName("article");
        var writeArray = new Array(); //書き出す配列
        //配列から書き出すデータを探す
        for (i = 0; i < x.length; i++) {//xmlデータ配列のデータ数分ループ
            for (n = 0; n < pickupArray.length; n++) {//ピックアップするIDの数分ループ
                //xmlデータ配列のidとピックアップするidが同じなら
                if (x[i].getElementsByTagName(idname)[0].childNodes[0].nodeValue == pickupArray[n]) {
                    escStr = writeStr;  //繰り返し書き出す文字列を変数にコピー

                    for (j = 0; j < count; j++) {
                        //###で囲まれた部分をXMLのデータと置き換え
                        try{
	                        escStr = escStr.replace("###" + matchArray[j] + "###", x[i].getElementsByTagName(matchArray[j])[0].childNodes[0].nodeValue);
	                    }catch(e){
	                    	escStr = escStr.replace("###" + matchArray[j] + "###", "");
	                    }
                    }
                    writeArray[pickupArray[n]] = escStr;　//出力文字列用配列に挿入
                    
                    break;
                }
            }
            //出力文字列用配列とピックアップID配列の数が同じならループを抜ける
            if (writeArray.length == pickupArray.length) {
                break;
            }
        }

        //出力文字列を書き出す
        for (i = 0; i < pickupArray.length; i++) {
            document.write(writeArray[pickupArray[i]]);
        }

    }

}

//XMLのtagNameタグがtagValueなものをtagCount件書き出す
function writePickUpCount(loadXml, writeStr, tagName, tagValue, tagCount, valueType) {
    
    if (arguments.length == 4) {
        tagCount = 0;
        valueType = "html";
    } else if (arguments.length == 5) {
        valueType = "html";
    }

    if (!loadXml == false) {
        var count = 0;         //カウント変数
        var loopflg = 1;       //whileを制御するフラグ
        var escStr = writeStr; //###で囲まれた部分を取り出していくので一旦変数に入れる
        var matchArray = new Array();
        var matchStr = new String();
        var returnArray = new Array();

        while (loopflg) {
            matchStr = escStr.match(/###[A-Z0-9]{1,}###/i);

            if (matchStr) { //###に囲まれた文字列があったら
                escStr = escStr.replace(matchStr, "");
                matchArray[count] = matchStr[0].split("###").join("");
                count++;
            } else {
                //###に囲まれた文字列がなくなったらループ終了
                loopflg = 0;
            }
            if (count > 50) {
                loopflg = 0;
            }
        }
        //XMLからデータ配列を取得
        var x = loadXml.getElementsByTagName("article");
        var n = 0;
        var writeFlag = 0;
        //配列から書き出すデータを探す
        for (i = 0; i < x.length; i++) {//xmlデータ配列のデータ数分ループ
            //配列検索対応
            writeFlag = 0;
            if (IsArray(tagName)) {
                for (y = 0; y < tagName.length; y++) {
                    if (x[i].getElementsByTagName(tagName[y])[0].childNodes[0].nodeValue.match(tagValue[y])) {
                        writeFlag = 1;
                    } else {
                        writeFlag = 0;
                        break;
                    }
                }
            } else {
                if (x[i].getElementsByTagName(tagName)[0].childNodes[0].nodeValue.match(tagValue)) {
                    writeFlag = 1;
                }
            }

            if (writeFlag) {
                if (valueType == "one"){
                    return x[i];
                }
                
                escStr = writeStr;  //繰り返し書き出す文字列を変数にコピー

                for (j = 0; j < count; j++) {
                    //###で囲まれた部分をXMLのデータと置き換え
                    try{
                        escStr = escStr.replace("###" + matchArray[j] + "###", x[i].getElementsByTagName(matchArray[j])[0].childNodes[0].nodeValue);
                    }catch(e){
                        escStr = escStr.replace("###" + matchArray[j] + "###", "");
                    }
                }
                if (valueType == "data") {
                    returnArray[n] = escStr;
                }else{
                    document.write(escStr);
                }
                n++;
            }
            
            
            //出力文字列用配列とピックアップID配列の数が同じならループを抜ける
            if (tagCount > 0) {
                if (n == tagCount) {
                    
                    break;
                }
            }
        }

        if (valueType == "data") {
            return returnArray;
        }

    }

}

//配列かどうか
function IsArray(array)
{
  return !(
    !array || 
    (!array.length || array.length == 0) || 
    typeof array !== 'object' || 
    !array.constructor || 
    array.nodeType || 
    array.item 
  );
}


//ページング情報を配列で返す関数
function returnMaxPage(pageCount, allCount) {
    var returnValue = new Array();
    //最大ページ数の計算
    if (allCount % pageCount > 0) {
        returnValue = allCount / pageCount + 1;
    } else {
        returnValue = allCount / pageCount;
    }


    return Math.floor(returnValue);
}

//GETパラメーターを取得する
function retrieveGETqs() {
    var qsParm = new Array();
    var query = window.location.search.substring(1);
    var parms = query.split('&');
    for (var i=0; i<parms.length; i++) {
        var pos = parms[i].indexOf('=');
        if (pos > 0) {
            var key = parms[i].substring(0,pos);
            var val = parms[i].substring(pos+1);
            qsParm[key] = val;
        }
    }
    return qsParm;
}
 
//ページング部分
function makePage(dataArray, pageMax, pageNow, pageCount, htmlDataId, htmlPageId, pagingCount, pagingType) {
    if (arguments.length == 7) {
        pagingType = "0";
    }

    var atagStr;
    var pagingStr = '<ul>';

    if (pagingType == "1") {
        pageBackStr = "前へ";
        pageNextStr = "次へ";
    } else {
        pageBackStr = "&lt;&lt;前へ";
        pageNextStr = "次へ&gt;&gt;";
    }
    
    
    //最大ページ数が２ページ以上の場合のみページング書き出し
    if (pageMax > 1) {
        //前へボタン
        if (pageNow > 1) {
            atagStr = '<a href="javascript:void(0)" onclick="makePage(dataArray,pageMax,' + (parseInt(pageNow) - 1) + ',pageCount,htmlDataId,htmlPageId,pagingCount,' + pagingType + '); return false;">';
            pagingStr = pagingStr + '<li>'+ atagStr + pageBackStr + '</a></li>';
        }else{
            pagingStr = pagingStr + '<li><a>' + pageBackStr + '</a></li>';
        }
        //ページングの開始ページ数を計算
        var page_start;
        var page_end;
        if(pageMax<pagingCount){
		    page_start=1;
		    page_end = pageMax;
	    }else{
		    page_start = pageNow-(pagingCount/2);
		    page_end = pageNow + (pagingCount / 2 - 1);
    		
		    if(page_start < 1){
			    page_start = 1;
			    page_end = pagingCount;
    			
		    }
		    if(page_end > pageMax){
			    page_end = pageMax;
			    page_start = pageMax - (pagingCount - 1);
    			
		    }
	    }

	    //ページング部分
	    for (var i = page_start; i <= page_end; i++) {
	        atagStr = '<a href="javascript:void(0)" onclick="makePage(dataArray,pageMax,' + i + ',pageCount,htmlDataId,htmlPageId,pagingCount,' + pagingType + '); return false;">';
	        if (pageNow == i) {
	            pagingStr = pagingStr + '<li class="PagingCateOn">' + atagStr + i + '</a></li>';
	        } else {
	            pagingStr = pagingStr + '<li>' + atagStr + i + '</a></li>';
	        }

	    }
	    //次へボタン
	    if (pageNow <= pageMax - 1) {
	        atagStr = '<a href="javascript:void(0)" onclick="makePage(dataArray,pageMax,' + (parseInt(pageNow) + 1) + ',pageCount,htmlDataId,htmlPageId,pagingCount,' + pagingType + '); return false;">';
	        pagingStr = pagingStr + '<li>' + atagStr + pageNextStr + '</a></li>';
	    } else {
	    pagingStr = pagingStr + '<li><a>' + pageNextStr + '</a></li>';
	    }
	    pagingStr = pagingStr + '</ul>';

	    document.getElementById(htmlPageId + "1").innerHTML = pagingStr;
	    document.getElementById(htmlPageId + "2").innerHTML = pagingStr;
	}
	
    //書き出すデータ番号を計算
    page_start = ((pageNow-1)*pageCount);
    page_end = page_start + pageCount - 1;
    if(page_end >= dataArray.length){
        page_end = dataArray.length - 1;
    }
    pagingStr = "";
    for (var i = page_start; i <= page_end; i++) {
        if (i == page_end) {
            dataArray[i] = dataArray[i].split("KanKouListLine").join("");
        }
        pagingStr = pagingStr + dataArray[i];        
    }
    pagingStr = '<table border="0" cellspacing="0" cellpadding="0">' + pagingStr + '</table>';

    document.getElementById(htmlDataId).innerHTML = pagingStr;

    
}

function writeData(dataArray) {
    var writeStr = "";
    for (var i = 0; i < dataArray.length; i++) {
        writeStr = writeStr + dataArray[i];
    }
    return writeStr;
}
