var map;
var currentCategory = 'head';
var currentCategoryName = '';
var currentLocalName = ''
var st_tableIndex = 'off';
var swButtons = new Array;

var hoPosition = new GLatLng(26.202436,127.685849);

var categories, localList;
var headOffices, headInfo;
var markers, baseIcon;

function init() {
  if (GBrowserIsCompatible()) {
    map = new GMap2(document.getElementById('GoogleMaps'));
    map.setCenter(hoPosition,15);
    map.addControl(new GSmallMapControl());
    map.addControl(new GMapTypeControl());
    
    baseIcon = new GIcon();
    baseIcon.shadow = './icons/shadow.png';;
    baseIcon.iconSize = new GSize(50,49);
    baseIcon.shadowSize = new GSize(73,49);
    baseIcon.iconAnchor = new GPoint(25,49);
    baseIcon.infoWindowAnchor = new GPoint(25,49);
    baseIcon.infoshadowAnchor = new GPoint(0,0);
    
    GDownloadUrl('./categories.xml',function(data) {
      var parseData = GXml.parse(data);
      categories = parseData.documentElement.getElementsByTagName('category');
      rendCategory();
    });
    GDownloadUrl('./localList.xml', function(data) {
      var parseData = GXml.parse(data);
      localList = parseData.documentElement.getElementsByTagName('local');
    });
    GDownloadUrl('./headInfo.txt' ,function(data) {
      headInfo = data;
      GDownloadUrl('./headOffices.txt',function(data) {
        headOffices = data;
        reqHeadOffice();
      });
    });
  }
}

function reqHeadOffice() {
  document.getElementById('indexTableHeader').innerHTML = '<h3><span class="nameCat">JAおきなわ 本店（JA会館）</span></h3><span id="bt_close" onclick="btClose();">閉じる</span>';
  document.getElementById('localMenu').innerHTML = headInfo;
  document.getElementById('indexTableContent').innerHTML = headOffices;
  map.clearOverlays();
  map.setCenter(hoPosition,15);
  
  var m = {}
  m.category = 'JA';
  m.position = hoPosition;
  var HTML = '<h4>JAおきなわ</h4>';
  map.addOverlay(createMaker(m,HTML));
}

function rendCategory() {
  var catNavi = new Array;
  for (i=0;i<categories.length;i++) {
    catNavi[i] = '<li id="cat'+categories[i].getAttribute('id')+'" onclick="reqCategory(\''+categories[i].getAttribute('id')+'\');">'+categories[i].firstChild.nodeValue+'</li>';
  }
  document.getElementById('category').innerHTML = '<ul>'+catNavi.join('')+'</ul>';
/*
  var prevUrl = document.referrer;
  if (prevUrl.match(/bank/)) reqCategory('ATM');
  else if(prevUrl.match(/fm/)) reqCategory('FM');
  else if(prevUrl.match(/acoop/)) reqCategory('Acoop');
  else if(prevUrl.match(/jass/)) reqCategory('JASS');
  else reqHeadOffice();
*/
}

function btClose() {
  switch (st_tableIndex) {
    case 'on':
      sw_tableOff();
      break;
    case 'off':
      sw_tableOn();
      break;
  }
}

function reqCategory(category) {
  for (i=0;i<categories.length;i++) {
    if (category == categories[i].getAttribute('id')) {
      currentCategoryName = categories[i].firstChild.nodeValue;
    }
  }
  reqLocalMenu(category);
  initIndexTable(category);
  currentCategory = category;
}

function reqLocalMenu(category) {
  if (currentCategory != category) {
    if (category == 'Head') {
      document.getElementById('localMenu').innerHTML = '';
    } else {
      document.getElementById('localMenu').innerHTML = '<p id="msg_loading">Now Loding...</p>';
      Spry.Utils.updateContent('localMenu', 'local.php?category='+category, function() {
        var localMenu = new Spry.Widget.TabbedPanels('areaList', { defaultTab: 2 });
      });
    }
  }
}

function initIndexTable(category) {
  if (currentCategory == category) {
    if (st_tableIndex == 'off') {
      sw_menuSelect(category);
      sw_tableOn();
    } else {
      sw_tableOff();
    }
  } else {
    if (category != 'Head') {
      document.getElementById('indexTableHeader').innerHTML = '<h3><span class="nameCat">'+currentCategoryName+'</span></h3><span id="bt_close" onclick="btClose();">閉じる</span>';
/*
      document.getElementById('indexTableContent').innerHTML = '<p id="msg_loading">Now Loding...</p>';
      importXML(category);
*/
      document.getElementById('indexTableContent').innerHTML = '<p id="msg_default">広域エリア &gt; 市区町村を選択ください。</p>';
    } else {
      reqHeadOffice();
    }
    sw_menuSelect(category);
    sw_tableOn();
  }
}

function sw_menuSelect(category) {
  $$('#category li').each(function(obj){
    obj.removeClassName('selected');
  })
  $('cat'+category).addClassName('selected');
}

function sw_tableOn() {
  var obj = document.getElementById('indexTable');
  if (st_tableIndex == 'off') {
    Spry.Effect.DoFade(obj,{ duration:300, from:0, to:100, finish:function() {
      obj.style.display = 'block';
      st_tableIndex = 'on'
    }});
  }
}

function sw_tableOff() {
  var obj = document.getElementById('indexTable');
  Spry.Effect.DoFade(obj,{ duration:300, from:100, to:0, finish:function() {
    obj.style.display = 'none';
    st_tableIndex = 'off'
  }});
}

function importXML(category,local) {
  var url = './data.php?category='+category;
  if (local != null) {
    url +='&local='+local;
  }
  GDownloadUrl(url,function(data) {
    var parseData = GXml.parse(data);
    markers = parseData.documentElement.getElementsByTagName('marker');
    reqMarkers();
    if (local != null) {
      reqIndexTable(local);
    } else {
      reqIndexTableFull(category);
    }
  });
}

function reqLocalData(local) {
  importXML(currentCategory,local);
  reqLocalPosition(local);
}

function reqLocalPosition(local) {
  $$('#areaListContent li').each(function(obj){
    obj.removeClassName('selected');
  });
  $('local'+local).addClassName('selected');
  for (i=0;i<localList.length;i++) {
    if(local == localList[i].getAttribute('id')) {
      currentLocalName = localList[i].firstChild.nodeValue;
      map.setCenter(new GLatLng(localList[i].getAttribute('lat'),localList[i].getAttribute('lng')),13);
    }
  }
}

function reqMarkers() {
  map.clearOverlays();
  for (i=0;i<markers.length;i++) {
    var m = markerData(i);
    var HTML = infoWindow(m);
    map.addOverlay(createMaker(m,HTML));
  }
}

function createMaker(m,HTML) {
  if (m.category != 'ATM') baseIcon.image = './icons/'+m.category+'.png';
    else baseIcon.image = './icons/'+m.terminal+'.png';
  var JAIcon = {icon:baseIcon};
  var marker = new GMarker(m.position,JAIcon);
  GEvent.addListener(marker,'click',function() {
    marker.openInfoWindowHtml(HTML);
  });
  return marker;
}

function reqIndexTable(local) {
  var localName;
  for (i=0;i<localList.length;i++) {
    if (localList[i].getAttribute('id') == local) {
      localName = localList[i].firstChild.nodeValue;
    }
  }
  var tempTable = [];
  var th;
  switch (currentCategory) {
    case 'JA':
      th = '<tr><th>支店コード</th><th>施設名</th><th>所在地</th><th>電話番号</th><th>FAX番号</th></tr>';
      break;
    case 'ATM':
      th = '<tr><th>種別</th><th>施設名</th><th>平日</th><th>土曜</th><th>日祝</th><th>所在地</th></tr>';
      break;
    default:
      th = '<tr><th>施設名</th><th>営業時間</th><th>電話番号</th><th>所在地</th></tr>';
      break;
  }
  for (i=0;i<markers.length;i++) {
    var td;
    var m = markerData(i);
    var name = '<span onclick="reqFacility('+i+')" class="link">'+m.name+'</span>';
    switch (currentCategory) {
      case 'JA':
        if (m.code == '0') m.code = '-';
        td = '<tr><td>'+m.code+'</td><td>'+name+'</td><td>'+m.address+'</td><td>'+m.tel+'</td><td>'+m.fax+'</td></tr>';
        break;
      case 'ATM':
        var week = openTime(m.open,m.close);
        var sat = '';
        var sun = '';
        if (m.open_sat != '00:00') sat = openTime(m.open_sat,m.close_sat);
        if (m.open_sun != '00:00') sun = openTime(m.open_sun,m.close_sun);
        td = '<tr><td>'+m.terminal+'</td><td>'+name+'</td><td>'+week+'</td><td>'+sat+'</td><td>'+sun+'</td><td>'+m.address+'</td></tr>';
        break;
      default:
        var open = openTime(m.open,m.close)+m.off;
        td = '<tr><td>'+name+'</td><td>'+open+'</td><td>'+m.tel+'</td><td>'+m.address+'</td></tr>';
        break;
    }
    tempTable[i] = td;
  }
  document.getElementById('indexTableHeader').innerHTML = '<h3><span class="nameCat">'+currentCategoryName+'</span> &gt; <span class="nameLocal">'+localName+'</span></h3><span id="bt_close" onclick="btClose();">閉じる</span>';
  document.getElementById('indexTableContent').innerHTML = '<table>'+th+tempTable.join('')+'</table>';
}

function reqFacility(i) {
  var m = markerData(i);
  var HTML = infoWindow(m);
  map.setCenter(m.position,15);
  map.openInfoWindowHtml(m.position,HTML);
  sw_tableOff();
}

function markerData(i) {
  var m = {};
  m.category = markers[i].getAttribute('category');
  m.local = markers[i].getAttribute('local');
  m.code = markers[i].getAttribute('code');
  m.name = markers[i].getAttribute('name');
  m.address = markers[i].getAttribute('address');
  m.tel = markers[i].getAttribute('tel');
  m.fax = markers[i].getAttribute('fax');
  m.terminal = markers[i].getAttribute('terminal');
  m.open = markers[i].getAttribute('open');
  m.close = markers[i].getAttribute('close');
  m.open_sat = markers[i].getAttribute('open_sat');
  m.close_sat = markers[i].getAttribute('close_sat');
  m.open_sun = markers[i].getAttribute('open_sun');
  m.close_sun = markers[i].getAttribute('close_sun');
  m.off = markers[i].getAttribute('off');
  m.position = new GLatLng(markers[i].getAttribute('lat'),markers[i].getAttribute('lng'));
  return m;
}

function infoWindow(m) {
  var name, body;
  switch(m.category) {
    case 'JA':
      if (m.code != 0) name = '['+m.code+'] '+m.name;
      else name = m.name;
      body = m.address+'<br />TEL：'+m.tel+'<br />FAX：'+m.fax;
      break;
    case 'ATM':
      var week ='';
      var sat = '';
      var sun = '';
      var off = '';
      name = '['+m.terminal+'] '+m.name;
      week = '平日：'+openTime(m.open,m.close)+'<br />';
      if (m.open_sat != '00:00') sat = '土曜：'+openTime(m.open_sat,m.close_sat)+'<br />';
      if (m.open_sun != '00:00') sun = '日祝：'+openTime(m.open_sun,m.close_sun)+'<br />';
      if (m.off != '') off = m.off+'<br />';
      body = week+sat+sun+off+m.address;
      break;
    default:
      name = m.name;
      var open = '営業時間：'+openTime(m.open,m.close);
      body = open+m.off+'<br />'+m.tel+'<br />'+m.address;
      break;
  }
  var HTML = '<div class="iw'+m.category+'"><h4>'+name+'</h4><p>'+body+'</p></div>';
  return HTML;
}

function openTime(o,c) {
  if (o == '00:00' && c == '00:00') return '24時間';
    else if (c == '00:00') return o+'〜24:00';
    else if (o == '') return '-';
    else return o+'〜'+c;
}

function reqPoint(name,lat,lng) {
  var position = new GLatLng(lat,lng);
  map.setCenter(position,15);
  map.openInfoWindowHtml(position,'<h4>'+name+'</h4>');
  sw_tableOff();
}

function reqIndexTableFull(category) {
  var eachLocal = [];
  var th;
  switch (category) {
    case 'JA':
      th = '<tr><th>支店コード</th><th>施設名</th><th>所在地</th><th>電話番号</th><th>FAX番号</th></tr>';
      break;
    case 'ATM':
      th = '<tr><th>種別</th><th>施設名</th><th>平日</th><th>土曜</th><th>日祝</th><th>所在地</th></tr>';
      break;
    default:
      th = '<tr><th>施設名</th><th>営業時間</th><th>電話番号</th><th>所在地</th></tr>';
      break;
  }
  for (var l=0;l<localList.length;l++) {
    eachLocal[l] = [];
    var localId = localList[l].getAttribute('id');
    var localName = localList[l].firstChild.nodeValue;
    var tempTable = [];
    for (var i=0;i<markers.length;i++) {
      if (localId == markers[i].getAttribute('local')) {
        var td;
        var m = markerData(i);
        var name = '<span onclick="reqFacility('+i+')" class="link">'+m.name+'</span>';
        switch (category) {
          case 'JA':
            if (m.code == '0') m.code = '-';
            td = '<tr><td>'+m.code+'</td><td>'+name+'</td><td>'+m.address+'</td><td>'+m.tel+'</td><td>'+m.fax+'</td></tr>';
            break;
          case 'ATM':
            var week = openTime(m.open,m.close);
            var sat = openTime(m.open_sat,m.close_sat);
            var sun = openTime(m.open_sun,m.close_sun);
            td = '<tr><td>'+m.terminal+'</td><td>'+name+'</td><td>'+week+'</td><td>'+sat+'</td><td>'+sun+'</td><td>'+m.address+'</td></tr>';
            break;
          default:
            var open = openTime(m.open,m.close)+m.off;
            td = '<tr><td>'+name+'</td><td>'+open+'</td><td>'+m.tel+'</td><td>'+m.address+'</td></tr>';
            break;
        }
        tempTable[i] = td;
      }
    }
    if (tempTable.length != 0) eachLocal[l] = '<table>'+th+tempTable.join('')+'</table>';
  }
  document.getElementById('indexTableContent').innerHTML = eachLocal.join('');
}
