/********************************************************
 *
 *  info / search系
 *
 ********************************************************/

(function($){

// オブジェクト(連想配列)の空設定
if(!jNextraGMaps2.Info){
    jNextraGMaps2.Info = function(map){
        this._map = map;
    };
}

/****** 住所から探す ******/

//入力文字、パラメータのチェック
jNextraGMaps2.Info.prototype.getGeoAddrByFreeword = function(params, callback){
    if(!params.frewd || params.frewd == '例）新宿区など'){
        jAlert('住所を入力してください','文字が入力されていません');
        $(".fwBtn").removeAttr("disabled");
        return;
    }
    params.datum = 'WGS84';
    params.pflg = 1;
    params.mclv = 1;
    jNextra.Facade.Geo.AddrByFreeword(params, callback, this, [params]);
};

//検索結果によって処理を分岐
jNextraGMaps2.Info.prototype.getGeoAddrByFreewordDialog = function(data, params){
    var self = this;
    var container = $("<div></div>");
    //１件ヒットの場合は市区町村コードからmasterに問合せ市区郡コードを取得する
    if(data.length == 1){
        if(data[0].ADDR1.length == 2){
            //市区町村コードが二桁＝都道府県なので属する市区郡をダイアログにて表示。
            params = {
                code: 'addr1',
                'key[0]' : parseInt(data[0].AD11),
                frewd : params.frewd,
                result : '*'
            };
            jNextra.Facade.Code.Master(params,info.getCodeMasterKyotoDialog,this,[params]);
            return;
        }else{
            params = {
                code: 'addr1',
                'key[0]' : parseInt(data[0].AD11),
                'key[1]' : data[0].ADDR1.substr(2,3),
                result : '*'
            };
        jNextra.Facade.Code.Master(params,info.getGeoAddrByFreewordMove);
        }
        
    //２件以上ヒットの場合はリストを表示(dialog&pagerを使用)
    }else if(data.length > 1){
        itemTempName = new Array();
        itemTempCode = new Array();
        if(data.length >= 100){
            var overcnt = true;
        }else{
            var overcnt = false;
        }
        for(var i=0; i<data.length; i++){
            var itemjapan = data[i].ADDR[0].match(/^(.+)(都|道|府|県)$/);
            itemjapan = itemjapan[0];

            //ADDR[1]がundefined＝都道府県が検索結果になっている
            if(typeof data[i].ADDR[1] == 'undefined'){
                    params = {
                        code: 'addr1',
                        'key[0]' : parseInt(data[i].AD11),
                        frewd : params.frewd,
                        result : '*'
                    };
                    jNextra.Facade.Code.Master(params,info.getCodeMasterKyotoDialog,this,[params]);
                    return;
            }else if(data[i].ADDR[1].match(/^(.+郡).+(町|村)$/)){
                //ひとまず市区町村コードを取得
                itemcode = data[i].ADDR1;
                itemarea = data[i].ADDR[1].match(/^(.+郡).+(町|村)$/);
                itemarea = itemarea[1];
            }else if(data[i].ADDR[1].match(/^(.+市)(.+区)$/)){
                itemarea = data[i].ADDR[1].match(/^(.+市)(.+区)$/);
                itemarea = itemarea[0];
                itemcode = data[i].ADDR1.substr(0,2) + '0' + data[i].ADDR1.substr(2,3);
            }else if(data[i].ADDR[1].match(/^(.+市)$/)){
                itemarea = data[i].ADDR[1].match(/^(.+市)$/);
                itemarea = itemarea[0];
                itemcode = data[i].ADDR1.substr(0,2) + '0' + data[i].ADDR1.substr(2,3);
            }else if(data[i].ADDR[1].match(/^(.+区)$/)){
                itemarea = data[i].ADDR[1].match(/^(.+区)$/);
                itemarea = itemarea[0];
                itemcode = data[i].ADDR1.substr(0,2) + '0' + data[i].ADDR1.substr(2,3);
            }else if(data[i].ADDR[1].match(/^(.+町)$/)){
                itemarea = data[i].ADDR[1].match(/^(.+町)$/);
                itemarea = itemarea[0];
                itemcode = data[i].ADDR1.substr(0,2) + data[i].ADDR1.substr(2,3);
            }else if(data[i].ADDR[1].match(/^(.+村)$/)){
                itemarea = data[i].ADDR[1].match(/^(.+村)$/);
                itemarea = itemarea[0];
                itemcode = data[i].ADDR1.substr(0,2) + data[i].ADDR1.substr(2,3);
            }
            itemname = itemjapan + itemarea;
            if($.inArray(itemname,itemTempName) == -1){
                itemTempName.push(itemname);
                itemTempCode.push(itemcode);
            }
        }

        data = new Array();
        for(var i=0; i<itemTempName.length; i++){
            data[i] = {'NAME':itemTempName[i]
            ,'ADDR1':itemTempCode[i]};
        }

        if(data.length == 1){
            var area = parseInt(itemTempCode[0].slice(0,2));
            var shiku = itemTempCode[0].slice(-3);
            params = {
                code: 'addr1',
                'key[0]' : area,
                'key[1]' : shiku,
                result : '*'
            };
            jNextra.Facade.Code.Master(params,info.getGeoAddrByFreewordMove);
        }else{
        	var dialogOpts = {};
            if(!self._dialog && jNextra.Dialog){
                self._dialog = new jNextra.Dialog(self._map, dialogOpts);
            }
	        var pagerOpt =  {};
	        /*var pagerOpts = jNextra.Util.merge({
	            searchParams: params,
	            dialog: self._dialog,
	            errmes:overcnt
	        },pagerOpt);
	        */
        /**opts.pager = opts.pager || {};*/
        var pagerOpts = jNextra.Util.merge({
            searchParams: params,
            dialog: self._dialog,
            dspFirst: false,
            dspLast: false,
            mes: overcnt
        },pagerOpt);
        
        	var pager = new jNextraGMaps2.DataPager(self._map, data, pagerOpts);
            //検索結果表示
            container.append(pager.getResultGeoAddrByFreewordDialog());
            container.append(pager.getListGeoAddrByFreewordDialog());
            container.append(pager.getPagerGeoAddrByFreewordDialog());
            dialogOpts = {
                width: 500,
                minHeight: 400,
                title: 'フリーワード検索',
                className: 'jnxt-dialog jnxt-gmaps-info-search'
            };

            $(".fwBtn").removeAttr("disabled");
            return this._dialog.open(container, dialogOpts);
        }

    //０件ヒットの場合はアラート表示
    }else{
        jAlert('【' + params.frewd + '】を住所で検索しましたが、一致する情報は見つかりませんでした。\n'
              + '別のキーワードで試してみてください。','該当する情報が見つかりません');
        $(".fwBtn").removeAttr("disabled");
        return;
    }
};

//市区郡コード(6桁)を表示する処理。
jNextraGMaps2.Info.prototype.getGeoAddrByFreewordMove = function(data, params){
    //addr1_1＝都道府県コード
    //ad1＝市区郡コード
    $.get("/Map/addr/",{addr11:data.ADDR1_1,ad1:data.AD1},function(addrdata){
        location.href= addrdata;
        //ダイアログを表示せずに遷移する場合、遷移までの時間を取っておく。
        //unit環境では約1500msほど遷移に必要。
        setTimeout(function(){$(".fwBtn").removeAttr("disabled");},1500);
    });
    
};

//都道府県対策。
jNextraGMaps2.Info.prototype.getCodeMasterKyotoDialog = function(data,params){
    var self = this;
    var container = $("<div></div>");
    var kdata = [];
    tempNameData1 =[];
    tempCodeData1 =[];
    tempNameData2 =[];
    tempCodeData2 =[];
    var cnt = 0;
    for(var i in data){
        tempNameData1[cnt] = data[i].ADDR1 + data[i].ADDR2;
        tempCodeData1[cnt] = data[i].AD1;
        cnt++;
    }
    for(var i=0; i<tempNameData1.length; i++){
        if(tempNameData1[i].match(/^(.+郡).+(町|村)$/)){
            area = tempNameData1[i].match(/^(.+郡).+(町|村)$/);
            area = area[1];
            if($.inArray(area,tempNameData2) == -1){
                tempNameData2.push(area);
                tempCodeData2.push(tempCodeData1[i]);
            }
        }else{
            tempNameData2.push(tempNameData1[i]);
            tempCodeData2.push(tempCodeData1[i]);
        }
    }
    for(var i=0; i<tempNameData2.length; i++){
        kdata[i] = {
            'NAME':tempNameData2[i],
            'ADDR1':tempCodeData2[i]
        };
    }
    var data = new Array();
    var data = kdata;
    if(data.length == 1){
        var area = data[0].ADDR1.substr(0,2);
        var shiku = data[0].ADDR1;
        $.get("/Map/addr/",{addr11:area,ad1:shiku},function(addrdata){
            location.href = addrdata;
        });
    }else{
    	var dialogOpts = {};
        if(!self._dialog && jNextra.Dialog){
            self._dialog = new jNextra.Dialog(self._map, dialogOpts);
        }
        var pager = new jNextraGMaps2.DataPager(self._map, data, {
            searchParams: params,
            dialog: self._dialog
        });
        //検索結果表示
        container.append(pager.getResultGeoAddrByFreewordDialog());
        container.append(pager.getListGeoAddrByFreewordDialog());
        container.append(pager.getPagerGeoAddrByFreewordDialog());
    
        dialogOpts = {
            width: 500,
            minHeight: 400,
            title: 'フリーワード検索',
            className: 'jnxt-dialog jnxt-gmaps-info-search'
        };
        $(".fwBtn").removeAttr("disabled");
        return this._dialog.open(container, dialogOpts);
    }
};

/****** 駅名から探す ******/

//入力文字、パラメータのチェック
jNextraGMaps2.Info.prototype.getGeoEkiInfoByFreeword = function(params, callback){
    if(!params.s || params.s == '例）渋谷駅など'){
        jAlert('駅名を入力してください','文字が入力されていません');
        $(".fwBtn").removeAttr("disabled");
        return;
    }
    params.ext_match = 1;
    jNextra.Facade.Geo.EkiInfoByFreeword(params, callback, this, [params]);
};

//検索結果によって処理を分岐
jNextraGMaps2.Info.prototype.getGeoEkiInfoByFreewordDialog = function(data, params){
    var self = this;
    var container = $("<div></div>");
    //１件ヒットの場合は直接遷移
    if(data.length == 1){
        var ad11 = parseInt(data[0].AD11);
        var ekiCode = data[0].ID;
        if(ekiCode == null){
            jAlert('駅は存在しますが、駅データがないため表示できません','駅データがありません');
            $(".fwBtn").removeAttr("disabled");
            return;
        }else{
            $.get("/Map/getstation/",{area:ad11,ekicode:ekiCode},function(stdata){
                location.href = stdata;
                //ダイアログを表示せずに遷移する場合、遷移までの時間を取っておく。
                //unit環境では約3000msほど遷移に必要。
                setTimeout(function(){$(".fwBtn").removeAttr("disabled");},2000);
            });
        }
    return;
    //２件以上ヒットの場合はリストを表示(dialog&pagerを使用)
    }else if(data.length > 1){
        var tempData = [];
        tempCodeData = [];
        var cnt = 0;
        
        for(var i=0; i<data.length; i++){
            if(!(data[i].ID == null)){
                if($.inArray(data[i].ID,tempCodeData) == -1){
                    tempCodeData[cnt] = data[i].ID;
                    tempData[cnt] = {
                        'ID' : data[i].ID,
                        'AD11' : data[i].AD11,
                        'EKI_NAME' : data[i].EKI_NAME,
                        'AD11_NAME' : data[i].AD11_NAME
                    };
                    cnt++;
                }
            }
        }
        data = new Array();
        data = tempData;

        if(data.length <= 0){
            jAlert('駅は存在しますが、駅データがないため表示できません','駅データがありません');
            $(".fwBtn").removeAttr("disabled");
            return;
        }else if(data.length == 1){
            $.get('/Map/getstation/',{area:data[0].AD11,ekicode:data[0].ID},function(stdata){
                location.href= stdata;
                //ダイアログを表示せずに遷移する場合、遷移までの時間を取っておく。
                //unit環境では約2000msほど遷移に必要。
                setTimeout(function(){$(".fwBtn").removeAttr("disabled");},2000);
            });
        }else{
            if(!self._dialog && jNextra.Dialog){
                self._dialog = new jNextra.Dialog(self._map, dialogOpts);
            }
            var pager = new jNextraGMaps2.DataPager(self._map, data, {
                searchParams: params,
                dialog: self._dialog,
                dspFirst: false,
                dspLast: false
            });
            container.append(pager.getResultGeoEkiInfoByFreewordDialog());
            container.append(pager.getListGeoEkiInfoByFreewordDialog());
            container.append(pager.getPagerGeoEkiInfoByFreewordDialog());
            
            var dialogOpts = {
                width: 500,
                minHeight: 400,
                title: 'フリーワード検索',
                className: 'jnxt-dialog jnxt-gmaps-info-search'
            };
            $(".fwBtn").removeAttr("disabled");
            return this._dialog.open(container, dialogOpts);
        }
    //０件ヒットの場合はアラート表示
    }else{
        jAlert('【' + params.s + '】を駅名で検索しましたが、一致する情報は見つかりませんでした。\n'
              + '別のキーワードで試してみてください。','該当する情報が見つかりません');
        $(".fwBtn").removeAttr("disabled");
        return;
    }
};
})(jQuery);