var searchURL = '/network/search_result.php';
var param_keys = [ 'category_id', 'area', 'city', 'chkmd', 'chkds' ];
var gmap;
var markerObjects = {};
var params =  '';/*検索パラメータ*/
var shopdata = {}/*検索結果*/
var infoMax = 10;/*左店舗リスト表示件数*/
var infoStart = 0;
var infoEnd = infoStart + infoMax;
var Zoom = 10;/*地図倍率*/
var pageNateLength = 5;/*ページ番号リンク数*/
var pageNateStart = 1;
var localStart = new Date();
var addMarkerStart = new Date();
var timerLogFlg = false;/*処理時間のログ表示（する:true, しない:false）*/
var searchWaitTimer;/*検索処理を、テキストフィールドのデフォルト値が完全に空になるまで延滞させる変数（for Windows IE）*/
var searchWaitMilliSec = 500;/*検索処理を、テキストフィールドのデフォルト値が完全に空になるまで延滞させるミリ病数（for Windows IE）*/

var Loader;
Loader = {
	search : function(){
    $('city').focus();
    pageNateStart = 1;//検索時のみカウントを初期化
    if(timerLogFlg){
      if($('server_time')) $('server_time').innerHTML = '';
      if($('local_time')) $('local_time').innerHTML = '';
      if($('add_marker_time')) $('add_marker_time').innerHTML = '';
    }
    if( $('gmapGuide') && $('gmapBlock') && $('gmapGuide').style.display == "none" && $('gmapBlock').style.display == "none" ) {
      $('gmapGuide').style.display = $('gmapBlock').style.display = "";
      Loader.initialize();
    }
    if( searchWaitTimer ) clearInterval(searchWaitTimer);
    searchWaitTimer = setInterval("Loader.sendData()",searchWaitMilliSec);
	},
	sendData : function(){
    clearInterval(searchWaitTimer);
    params = '';
    for(var i=0; i < param_keys.length; i++){
    /**/
      if( param_keys[i].indexOf('chk') == 0 && !$(param_keys[i]).checked ){
        continue;
      }
    /**/
      if($(param_keys[i]) && $(param_keys[i]).value != ''){
        params += (params == '') ? '?' : '&';
        params += param_keys[i] + '=' + $(param_keys[i]).value;
        /*
        params += param_keys[i] + '=';
        params += ( param_keys[i].indexOf('chk') == 0 && !$(param_keys[i]).checked ) ? '' : $(param_keys[i]).value;
        */
      }
    }
    new Ajax.Request(
      searchURL,
      {
        "method": "get",
        "parameters": params,
        onCreate: function() {
          Element.show($('loading'));
        },
        onComplete : Loader.requestComplete
      }
    );
	},
  requestComplete : function(_request){
    var _json;
    eval("_json="+_request.responseText);
    shopdata = _json['shopdata'];
    if(timerLogFlg){
      if($('server_time')) $('server_time').innerHTML = 'サーバー内取得 : ' + _json['microtime'] + ' 秒';
      localStart = new Date();
    }
    Element.hide('loading');
    $('city').blur();
    if( shopdata.length <= 0 ){
      Loader.initialize();
      alert( '検索条件に一致する店舗は見つかりませんでした。' );
      return;
    }
    Map.addMarker();
  },
	initialize : function(){
    var foo = new AlphaChanneledPNG('foo', '/_resource/images/blank.gif');
    gmap = new GMap2( $("gmap") );
    gmap.enableScrollWheelZoom();
    gmap.addControl(new GLargeMapControl());
    $('view_info').innerHTML = '';
    $('link_list').innerHTML = '';
    $('pagenate').innerHTML = '';
	},
	startUp : function(){
    Loader.initialize();
    var urlParams = Loader.getDefaultParams();
    if ( $('gmapGuide') && $('gmapBlock') && urlParams == null ) {
      $('gmapGuide').style.display = $('gmapBlock').style.display = "none";
      return;
    }
    Loader.search();
	},
  getDefaultParams : function(){
    var _paramsObject = {};
    var _tmp_str = String(window.location.href);
    var _tmp_arr = _tmp_str.split('?');
    _tmp_str = _tmp_arr[1];
    if( !_tmp_str || _tmp_str == '' ) return null;
    _tmp_arr = _tmp_str.split('&');
    var _tmp_arr_length = _tmp_arr.length;
    for(var i=0; i < _tmp_arr_length; i++){
      var _row = _tmp_arr[i].split('=');
      _paramsObject[ _row[0] ] = String( decodeURI( _row[1] ) );
      for(var k=0; k < param_keys.length; k++){
        if ( param_keys[k] != _row[0] ) continue;
        if ( param_keys[k].indexOf('chk') == 0 ){
          $(param_keys[k]).checked = ( _paramsObject[param_keys[k]] && _paramsObject[param_keys[k]] == $( param_keys[k] ).value ) ? true : false;
        } else {
          $( param_keys[k] ).value = _paramsObject[param_keys[k]];
        }
      }
    }
    if( !_paramsObject['category_id'] ) $('category_id').value = '';
    if( !_paramsObject['area'] ) $('area').value = '';
    if( !_paramsObject['city'] ) $('city').value = '';
    if( !_paramsObject['chkmd'] ) $('chkmd').checked = false;
    if( !_paramsObject['chkds'] ) $('chkds').checked = false;
    return _paramsObject;
  }
}

var Map;
Map = {
  addMarker : function ( _start ){
    if(timerLogFlg){
      if($('add_marker_time')) $('add_marker_time').innerHTML = '';
      addMarkerStart = new Date();
    }
    infoStart = ( _start > 0 ) ? _start : 0;
    infoEnd = ( shopdata.length <= infoStart + infoMax ) ? shopdata.length : infoStart + infoMax;
    gmap.clearOverlays(); // 全てのマーカーを消去（線も消えるので注意）
    markerObjects = {}; //マーカーObjectを初期化
    var _gb;
    var _first = true;
    var _shopdataLength = shopdata.length;
    for (var i=0; i<_shopdataLength; i++) {
      var _marker = Map.createMarker(shopdata[i]);
      if( i < infoStart || i >= infoEnd ) continue;
      if( _first ){
        _gb = new GLatLngBounds( _marker.getPoint(), _marker.getPoint() );
        _first = false;
      } else {
//        _gb.extend( _marker.getPoint() );
      }
    }
    //gmap.setCenter( _gb.getCenter(), gmap.getBoundsZoomLevel( _gb ) );
    gmap.setCenter( _gb.getCenter(), Zoom );

    if(timerLogFlg){
      var _date = new Date();
      var _addMarkerTime = Number(_date.getSeconds() - addMarkerStart.getSeconds()) + Number(_date.getMilliseconds() - addMarkerStart.getMilliseconds())/1000;
      if($('add_marker_time')) $('add_marker_time').innerHTML = 'マーカー設置 : ' + String(_addMarkerTime) + ' 秒';
    }
    
    Info.linkList(shopdata);
  },
  createIcon : function(){
    var _baseIcon = new GIcon();
    _baseIcon.shadow = "/_resource/images/shadow.png";
    _baseIcon.iconSize = new GSize(20, 34);
    _baseIcon.shadowSize = new GSize(37, 34);
    _baseIcon.iconAnchor = new GPoint(9, 34);
    _baseIcon.infoWindowAnchor = new GPoint(9, 2);
    _baseIcon.infoShadowAnchor = new GPoint(18, 25);
    return _baseIcon;
  },
	createMarker : function( _obj ) {
    var _point = new GLatLng(_obj['lat'], _obj['lng']);
    var _marker = new GMarker( _point );
    /*icon変更する場合*/
    /*
		var ic = new GIcon( Map.createIcon() );
		ic.image = "/_resource/images/icon.png";
		var _marker = new GMarker( _point, { icon: ic} );
    */
    gmap.addOverlay(_marker);
    GEvent.addListener(_marker, 'click', function() {
      var _html = '';
      _html +=  (_obj['url']) ? '<p style="font-weight:bold;"><a href="' + _obj['url'] + '" target="_blank">' + _obj['shopname'] + '</a></p>' : '<p style="font-weight:bold;">' + _obj['shopname'] + '</p>';
//      _html += '<br />';
//      _html += '<p>' + _obj['area'] + ' / ' + _obj['prefecture'] + '</p>';
      _html +=  (_obj['url']) ? '<p style="margin-top:0.5em;"><a href="' + _obj['url'] + '" target="_blank">' + _obj['address'] + '</a></p>' : '<p style="margin-top:0.5em;">' + _obj['address'] + '</p>';
      _marker.openInfoWindowHtml(_html);
    });
		markerObjects[ String(_obj['shopid']) ] = _marker;//
    return _marker;
	}
}

var Info;
Info = {
  listIcon : function(_shop){
    switch (_shop) {
      case '調剤薬局' :
        return '<img src="/network/images/search_icon01.gif" alt="調剤薬局" width="55" height="15" />';
        break;
      case 'ainz' :
        return '<img src="/network/images/search_icon02.gif" alt="ainz" width="48" height="15" />';
        break;
      case 'アインズ＆トルペ' :
        return '<img src="/network/images/search_icon03.gif" alt="アインズ＆トルペ" width="74" height="15" />';
        break;
      case 'アインズ＆トルペ（新）' :
        return '<img src="/network/images/search_icon06.gif" alt="アインズ＆トルペ" width="61" height="15" />';
        break;
      case 'アインズ' :
        return '<img src="/network/images/search_icon04.gif" alt="アインズ" width="58" height="15" />';
        break;
      case 'トルペ' :
        return '<img src="/network/images/search_icon05.gif" alt="トルペ" width="64" height="15" />';
        break;
    }
  },
  viewInfo : function(_shopdata_length){
    $('view_info').innerHTML = _shopdata_length + '件　' + ( infoStart + 1 ) + '-' + ( infoEnd ) + '件を表示';
  },
  linkList : function(_shopdata){
    $('link_list').innerHTML = '';
    for( var i=infoStart; i < infoEnd; i++){
//      $('link_list').innerHTML += '<li><a href="#" onclick="GEvent.trigger(markerObjects[\'' + _shopdata[i]['shopid'] + '\'], \'click\', null); return false;">' + Info.listIcon(_shopdata[i]['shop']) + '<br />' + _shopdata[i]['shopname'] + '</a></li>';//情報ウインドウOPEN
      $('link_list').innerHTML += '<li><a href="' + _shopdata[i]['url'] + '" target="_blank">' + Info.listIcon(_shopdata[i]['shop']) + '<br />' + _shopdata[i]['shopname'] + '</a></li>';//店舗詳細ページへリンク
    }
    Info.viewInfo(_shopdata.length);

    pageNateStart = Math.floor((infoStart / infoMax) / pageNateLength) * pageNateLength + 1;//Map切替時のみ変更
    Info.pageNate(_shopdata.length, pageNateStart);
  },
  pageNate : function(_shopdata_length, _cntStart){
    $('pagenate').innerHTML = '';
    if( infoStart >= infoMax ){
      $('pagenate').innerHTML += '<a href="#" onclick="Map.addMarker( ' + (infoStart - infoMax) + ' ); return false;">&#171;&nbsp;前の' + infoMax + '件</a>';
    }
    if( infoStart >= infoMax && infoEnd < _shopdata_length ){
      $('pagenate').innerHTML += '&nbsp;|&nbsp;';
    }
    if(  infoEnd < _shopdata_length ){
      var _next = ( _shopdata_length - infoEnd < infoMax ) ? _shopdata_length - infoEnd : infoMax;
      $('pagenate').innerHTML += '<a href="#" onclick="Map.addMarker( ' + infoEnd + ' ); return false;">次の' + _next  + '件&nbsp;&#187;</a>';
    }
    $('pagenate').innerHTML += '<br />';
    var _cnt = 1;
    pageNateStart = ( !_cntStart ) ? _cnt : _cntStart;//Map切替時 && pageNate移動時
    for(var i=0; i<_shopdata_length; i+=infoMax){
      if( (pageNateLength + pageNateStart) == _cnt ){
//        $('pagenate').innerHTML += '<a href="#" onclick="Info.pageNate( ' + _shopdata_length + ', ' + _cnt + ' ); return false;">&nbsp;…&nbsp;</a>';
        $('pagenate').innerHTML += '<a href="#" onclick="Map.addMarker( ' + i + ' ); return false;">&nbsp;…&nbsp;</a>';
        break;
      }
      if( pageNateStart == _cnt && ( _cnt - pageNateLength ) > 0 ){
//        $('pagenate').innerHTML += '<a href="#" onclick="Info.pageNate( ' + _shopdata_length + ', ' + ( _cnt - pageNateLength ) + ' ); return false;">&nbsp;…&nbsp;</a>';
        $('pagenate').innerHTML += '<a href="#" onclick="Map.addMarker( ' + (i - infoMax * pageNateLength) + ' ); return false;">&nbsp;…&nbsp;</a>';
      }
      if( pageNateStart <= _cnt ){
        if(i == infoStart){
          $('pagenate').innerHTML += '&nbsp;' + _cnt + '&nbsp;';
        } else {
          $('pagenate').innerHTML += '<a href="#" onclick="Map.addMarker( ' + i + ' ); return false;">&nbsp;' + _cnt + '&nbsp;</a>';
        }
      }
      _cnt ++;
    }
    
    if(timerLogFlg){
      var _date = new Date();
      var _localTime = Number(_date.getSeconds() - localStart.getSeconds()) + Number(_date.getMilliseconds() - localStart.getMilliseconds())/1000;
      if($('local_time')) $('local_time').innerHTML = 'ローカル表示 : ' + String(_localTime) + ' 秒';
    }
  }
}

var AlphaChanneledPNG = Class.create();
AlphaChanneledPNG.prototype = {
  initialize: function(imgId, blankImgSrc) {
    this.imgId = imgId;
    this.blankImgSrc = blankImgSrc;
    Event.observe(window, 'load', this.show.bind(this));
  },
  show: function() {
    if (/MSIE (5\.5|6\.)/.test(navigator.userAgent)) {
      imgObj = $(this.imgId);
      orgSrc = imgObj.src;
      imgObj.src = this.blankImgSrc;
      imgObj.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(" + "src='" + orgSrc + "', sizingMethod='scale')";
    }
  }
};


window.onload = Loader.startUp;
window.unload = GUnload;

