//-----------------------------------------------------------------------------
// 変数設定
//-----------------------------------------------------------------------------
var searchFlg;
var map;
var curPoint;
var icon;

var pageMaxNum = 10; //１ページに表示する件数
var curPage;         //現在のページ
var mk = new Array();

var evtdat;
var slat = "";
var slng = "";

//-----------------------------------------------------------------------------
// 初期設定
//-----------------------------------------------------------------------------
function init(){

    //詳細検索の表示設定
    if(searchFlg == 1){
        document.getElementById("joken").style.display = "none";
        tagRead();
    }else{
        document.getElementById("searchRap").style.display = "none";
        searchFlg = null;
    }
    //searchFlg = null;
    //tagRead();

    //地図の表示
    if(typeof curMarker != 'undefined'){
        map = new GMap2(document.getElementById("map"));
        map.addControl(new GLargeMapControl()); 
        map.addControl(new GMapTypeControl()); 
        var point = new GPoint( mlng , mlat); 
        var latlng = new GLatLng( mlat , mlng); 
        map.setCenter(latlng, 13, G_NORMAL_MAP);
        //map.addOverlay(curMarker);
        //mapResize();
        
        getPage(1); //1ページ目の表示
        GEvent.addListener(map, "click", windowopen);
    }
   
   
}

function getPage(page){
    map.clearOverlays();
    readMapPoint(page);
}

function typeChange(type){
    document.evtform.type.value = type;
    document.evtform.submit();
    //alert(document.evtform.submit());
}


function readMapPoint(page){
    httpObj = createXMLHttpRequest(
        function(){
            if((httpObj.readyState == 4) && (httpObj.status == 200)){
                evtdat = parseTabText(httpObj.responseText);
                //alert(httpObj.responseText);
                //alert(evtdat.length);
                displayEvt();
            }
        });
    if(httpObj){
        
        curPage = page;
        
        var para = "?url=" 
                 + host 
                 + "getmappoint.php" 
                 + mapPara 
                 + "&page=" + page
                 + "&plain=1";
        //現在の表示範囲以内の検索
        if(document.areacheck.areaflg.value == 1){
            sw_glat = map.getBounds().getSouthWest();
            ne_glat = map.getBounds().getNorthEast();
            
            para += "&s_lat=" + sw_glat.lat()
                 +  "&n_lat=" + ne_glat.lat()
                 +  "&w_lng=" + sw_glat.lng()
                 +  "&e_lng=" + ne_glat.lng()
        }
        var date = new Date();
        var timestamp = date.getTime(); //キャッシュ利用を防ぐため
        var uri = "./getajaxurl.php" + para + "&time=" + timestamp;
        //alert(uri);
        httpObj.open("GET", uri, true);
        httpObj.send(null);
    }
}
//イベントの表示
function displayEvt(){
    var evtHtml          = "";
    var pageCtlKekkaHtml = "";
    var pageCtlHtml      = "";

    if(evtdat[0][4]){ //検索結果件数
        //ページコントロール部（上）
        var ttlrec  = evtdat[0][4];
        var sttrec  = (curPage - 1) * pageMaxNum;
        var readrec = evtdat.lenth;  
        var endrec  = curPage * pageMaxNum;
        if(endrec > ttlrec){endrec = ttlrec;}

        pageCtlKekkaHtml += "<div class=\"kekkanum\">検索結果 ";
        pageCtlKekkaHtml += ttlrec;
        pageCtlKekkaHtml += " 件</div>";
        
        pageCtlHtml += "<div class=\"pagectrl\">";

        if((curPage - 1) != 0){
            pageCtlHtml += "<a href=\"#kekkah\" onclick='getPage(" + (curPage - 1) + ")'> < 前 </a> | ";
        }else{
            pageCtlHtml += " <span>< 前</span> | ";
        }

        pageCtlHtml += (sttrec + 1) + "～" + endrec + "件" ;

        if(endrec < ttlrec){
            pageCtlHtml += " | <a href=\"#kekkah\" onclick='getPage(" + (curPage + 1) + ")'> 次 > </a>";
        }else{
            pageCtlHtml += " | <span>次 ></span> ";
        }
       
        pageCtlHtml +=  "</div>";
       
        evtHtml += pageCtlKekkaHtml;
        evtHtml += pageCtlHtml;

        //データ表示部
        for(i=0; i<evtdat.length; i++){
            //マーカーを表示する処理
            mk[i]         = new GMarker(new GLatLng(evtdat[i][2], evtdat[i][3]), iconk);
            mk[i].id      = evtdat[i][0];
            mk[i].name    = evtdat[i][1];
            mk[i].lat     = evtdat[i][2];
            mk[i].lng     = evtdat[i][3];
            mk[i].data    = evtdat[i][5];
            mk[i].sisetu  = evtdat[i][6];
            
            map.addOverlay(mk[i]);

            //リスト表示部
            evtHtml += "<div class=\"kekkad\" onclick=\"mapwindow('" +  i  + "')\">";
            //evtHtml += "<a href=\"evtdisp.php?id=";
            /*
            evtHtml += "<a href=\"evtdisp.php?id=";
            evtHtml += evtdat[i][0];
            evtHtml += "\">";
            */
            evtHtml += "<a href=\"javascript:void(0)\">";
            evtHtml += mk[i].name;
            evtHtml += "</a><br>";
            evtHtml += evtdat[i][5];
            evtHtml += "</div>";


        }
        //alert(evtHtml);
        //ページコントロール部（下）
        if(evtdat.length > 5){ //検索結果件数
           evtHtml += pageCtlHtml;
        }
    
        var areaflg   = document.areacheck.areaflg.value;
    
        //すべてのマーカーが表示できるように自動的にズームレベルを変える
        //端を求める(lat)
        if(areaflg == 0){
            var latMin;
            var latMax;
            var lngMin;
            var lngMax;

            for(i=0;i<evtdat.length;i++){
               if(i == 0){
                   latMin = evtdat[0][2];
                   latMax = evtdat[0][2];
               }
               if(latMin > evtdat[i][2]){latMin = evtdat[i][2]}
               if(latMax < evtdat[i][2]){latMax = evtdat[i][2]}
            }
            
            
            
            //端を求める(lng)
            for(i=0;i<evtdat.length;i++){
               if(i == 0){
                   lngMin = evtdat[0][3];
                   lngMax = evtdat[0][3];
               }
               if(lngMin > evtdat[i][3]){lngMin = evtdat[i][3]}
               if(lngMax < evtdat[i][3]){lngMax = evtdat[i][3]}
            }
            
            //alert(lngMax);
            //中心点を求める
            latCenter = (parseFloat(latMin) + parseFloat(latMax)) / 2;
            lngCenter = (parseFloat(lngMin) + parseFloat(lngMax)) / 2;
            
            var rectObj = new GLatLngBounds(new GLatLng(latMin,lngMin), new GLatLng(latMax,lngMax));
            map.setZoom(map.getBoundsZoomLevel(rectObj));
            map.panTo(new GLatLng(latCenter, lngCenter));
        }
    }else{
        evtHtml += "<div class=\"kekkanum\">検索結果 0 件</div>";
        evtHtml += "<div class=\"pagectrl\">該当なし<\/div>";
    }

    document.getElementById("mapdata").innerHTML = evtHtml;
}


function windowopen(marker, point){
    if(marker && marker.id){
        htmlstr = "<div class='mapwindow'><a href='evtdisp.php?id=" 
                + marker.id 
                + "'>"
                + marker.name
                + "</a><br>"
                + "<span>"
                + marker.sisetu
                + "</span><br>"
                + marker.data
                + "</div>";
        map.openInfoWindowHtml(new GLatLng(marker.lat, marker.lng), htmlstr);
        //setTimeout(function () {map.openInfoWindowHtml(new GLatLng(marker.lat, marker.lng), htmlstr)}, 50);
    }
}

//タブ区切りテキストを解析して表示
function parseTabText(tabText){
    var LF = String.fromCharCode(10);
    var TAB = String.fromCharCode(9);
    lineData = tabText.split(LF);
    var parseData = new Array();
    for(var i=0; i< lineData.length; i++) parseData[i] = lineData[i].split(TAB);
    return parseData;
}


function mottoSearch(){
    if(!searchFlg){
        searchFlg = 0;
        tagRead();
    }
    if(searchFlg == 0){
        document.getElementById("searchRap").style.display = "block";
        document.getElementById("joken").style.display = "none";
        searchFlg = 1;
    }else{
        document.getElementById("searchRap").style.display = "none";
        document.getElementById("joken").style.display = "block";
        searchFlg = 0;
    }
}

function mottoSearchOn(){
    document.getElementById("searchRap").style.display = "block";
}
function mottoSearchOff(){
    document.getElementById("searchRap").style.display = "none";
}



//-----------------------------------------------------------------------------
// タグを読み込む処理
//-----------------------------------------------------------------------------
function tagRead(){
    httpObj = createXMLHttpRequest(
        function(){
            if((httpObj.readyState == 4) && (httpObj.status == 200)){
                //alert(httpObj.responseText);
                var xmlData = httpObj.responseXML;
                //カテゴリの表示
                var item = xmlData.getElementsByTagName("Item");
                var tagHtml = "";
                for(var i = 0; i < item.length; i++){
                    var tag = item[i].getElementsByTagName("Name")[0].firstChild.nodeValue;
                                         tagHtml += "<li class=\"tag\"><a href=\"javascript:void(0)\" onclick='setTag(this)'>" + tag + "<\/a><\/li>\n";
                }
                //alert(tagHtml);
                document.getElementById("tagData").innerHTML = tagHtml;
                
                
            }
        });
    if(httpObj){
        var para = "?url=" + host + "gettag.php";
        var date = new Date();
        var timestamp = date.getTime(); //キャッシュ利用を防ぐため
        var uri = "./getajaxurl.php" + para + "&time=" + timestamp;
        httpObj.open("GET", uri, true);
        httpObj.send(null);
    }
    document.getElementById("tagCateName").innerHTML = "人気のタグ （下記のタグから選択できます）";

    //ie系のため再度画面描画書処理（泣き）
    myIE = document.all;            // ブラウザ(IE)のチェック用
    myOpera = window.opera;         // ブラウザ(Opera)のチェック用
    if(myIE && !myOpera){
            setTimeout("mottoSearchOff()", 700);
            setTimeout("mottoSearchOn()", 700);
    }
}


//-----------------------------------------------------------------------------
// クリックしたタグを追加する処理
//-----------------------------------------------------------------------------
function setTag(srcObj){
    var tagstr = document.evtform.tag.value;
    var tag    = srcObj.firstChild.nodeValue;
    
    tagstr += " " + tag;
    
    document.evtform.tag.value = tagstr;
}


//-----------------------------------------------------------------------------
// 地図のウィンドウを開く処理
//-----------------------------------------------------------------------------
function mapwindow(mapid){
        htmlstr = "<div class='mapwindow'><a href='evtdisp.php?id=" 
                + mk[mapid].id 
                + "'>"
                + mk[mapid].name
                + "</a><br>"
                + "<span>"
                + mk[mapid].sisetu
                + "</span><br>"
                + mk[mapid].data
                + "</div>";
        map.openInfoWindowHtml(new GLatLng(mk[mapid].lat, mk[mapid].lng), htmlstr);
        //setTimeout(function () {map.openInfoWindowHtml(new GLatLng(mk[mapid].lat, mk[mapid].lng), htmlstr)}, 50);
}


//-----------------------------------------------------------------------------
// 地図の大きさを最適化する処理
//-----------------------------------------------------------------------------
    function mapResize(){
        myN6 = document.getElementById; // ブラウザ(N6)のチェック用
        myIE = document.all;            // ブラウザ(IE)のチェック用
        myN4 = document.layers;         // ブラウザ(N4)のチェック用
        myOpera = window.opera;         // ブラウザ(Opera)のチェック用

        var mapPos          = getElementPosition("map");  //マップの表示位置を取得
        //alert(mapPos.left + " " + mapPos.top);
        var mapHeight    = 500; //初期値 500
        var footerPos       = getElementPosition("mapend");  //マップ終了位置を取得
        var footerHeight    = footerPos.height + 18;
        //alert(footerPos.left + " " + footerPos.top + " " + footerPos.height);
        if(myIE){
            if(myOpera){
                mapHeight = "600px";
            }else{
                mapHeight = document.documentElement.clientHeight - mapPos.top - footerHeight  + "px";
            }
        }else if(myN6){
            mapHeight = innerHeight  - mapPos.top - footerHeight + "px";
        }else if(myN4){
            mapHeight = innerHeight  - mapPos.top - footerHeight + "px";
        }
        
        document.getElementById("map").style.height   = mapHeight;
        //document.getElementById("kekkarap").style.height = mapHeight;
        map.checkResize();
    }
    
    function getElementPosition(element) {
        var offsetTrail  = (typeof element == 'string') ? document.getElementById(element) : element;
        var offsetLeft   = 0;
        var offsetTop    = 0;
        var offsetHeight = 0;
    
        if(offsetTrail.offsetHeight){
            offsetHeight = offsetTrail.offsetHeight;
        }

        while (offsetTrail) {
            offsetLeft   += offsetTrail.offsetLeft;
            offsetTop    += offsetTrail.offsetTop;
            //alert(offsetTrail.offsetHeight + " " + offsetTrail.offsetTop);
            offsetTrail  =  offsetTrail.offsetParent;
        }
    
        if (navigator.userAgent.indexOf('Mac') != -1 && typeof document.body.leftMargin != "undefined") {
            offsetLeft   += document.body.leftMargin;
            offsetTop    += document.body.topMargin;
        }
        
    
    
        return ({left: offsetLeft, top: offsetTop, height:offsetHeight});
    }


