var obj_map;
var obj_pref;
var obj_city;
var obj_town;
var obj_hotels;
var obj_ranking;
var obj_myhotel;
var obj_hotel_detail;
var obj_wikip;

var selarea = Array();

function init() {
    obj_map =  new Mashup_Map('map', 36.066, 136.472);
 
    obj_pref = new Mashup_Pref('area','pref');
    obj_city = new Mashup_City('city');
    obj_town = new Mashup_Town('town');
    obj_hotels = new Mashup_Hotels('hotels');

    obj_ranking = new Mashup_Ranking('ranking'); 
    update_ranking('');

    obj_myhotel = new Mashup_Myhotel('myhotel', $('cid').innerHTML);
    obj_myhotel.getMyhotel();

    obj_hotel_detail = new Mashup_Hotel_Detail('hotel_detail');

    obj_wikip = new Mashup_Wikip('wikip');

    new Draggable('area_navi');
}

function myhotel_update() {
    obj_myhotel.getMyhotel();
}

function sel_area(id,name) {
    selarea[0] = name;
    selarea[1] = "";
    selarea[2] = "";
    selarea[3] = "";
    disp_area();
    
    obj_map.move(36.066, 136.472, 6);
    clear_sel_color('area_', obj_pref.getIdList_area());
    $('area_'+id).style.backgroundColor = "#e9967a";
    obj_pref.clear();
    obj_city.clear();
    obj_town.clear();
    obj_wikip.clear();
    obj_hotels.clear();
    obj_pref.getPref(id);

    update_ranking('a'+id);
}

function sel_pref(id,name) {
    selarea[1] = name;
    selarea[2] = "";
    selarea[3] = "";
    disp_area();

    var pinfo = obj_pref.getinfo(id);
    obj_map.move_bytky(pinfo['lat'], pinfo['lng'], 6);
    clear_sel_color('pref_', obj_pref.getIdList());
    $('pref_'+id).style.backgroundColor = "#e9967a";
    obj_city.clear();
    obj_town.clear();
    obj_wikip.clear();
    obj_hotels.clear();
    obj_city.getCity(id);

    update_ranking(id.substr(0,2));    

}

function sel_city(id,name) {
    selarea[2] = name;
    selarea[3] = "";
    disp_area();

    clear_sel_color('city_', obj_city.getIdList());
    $('city_'+id).style.backgroundColor = "#e9967a";
    obj_town.clear();
    obj_wikip.clear();
    obj_hotels.clear();
    obj_town.getTown(id);

    update_ranking(id.substr(0,4));    
    
}

function sel_town(id,name) {
    selarea[3] = name;
    disp_area();

    clear_sel_color('town_', obj_town.getIdList());
    $('town_'+id).style.backgroundColor = "#e9967a";
    obj_hotels.clear();
    obj_hotels.getHotels(id);

    update_ranking(id);
    
    hide_area_navi();

    obj_wikip.getWikip(id);
}

function update_ranking(id) {
    obj_ranking.setCD(id);
    obj_ranking.getRanking();
}

function clear_sel_color(level, array_id) {
    for(var i=0;i<array_id.length;i++) {
        $(level + array_id[i]).style.backgroundColor = "#ddd";
    }
}

function page_change(page) {
    obj_hotels.showHotels(page);
}

function map_point(x,y) {
    obj_map.clear_point();
    obj_map.add_point_and_pan(x,y);
}

function saveHotel(h_id) {
    var cid = $('cid').innerHTML;
    var ajax = new Ajax.Request(
        './api/saveHotel.php',
        {medhod: 'get', parameters: 'cid='+cid+'&h_id='+h_id, onComplete: saveHotel_complete}
        );
}
function saveHotel_complete(oj) {
    alert(oj.responseText);   
    obj_myhotel.getMyhotel();
}
function delHotel(h_id) {
    var cid = $('cid').innerHTML;
    var ajax = new Ajax.Request(
        './api/delHotel.php',
        {medhod: 'get', parameters: 'cid='+cid+'&h_id='+h_id, onComplete: delHotel_complete}
        );
}
function delHotel_complete(oj) {
    alert(oj.responseText);   
//    obj_myhotel.getMyhotel();
}

function getUtime() {
        var dd = new Date();
        return dd.getTime();
}

function disp_area() {
    $('disp_area').innerHTML = selarea.join(' > ');
}

function show_area_navi() {
    $('area_navi').style.visibility = "visible";
}
function hide_area_navi() {
    $('area_navi').style.visibility = "hidden";
}

function show_hotel_detail(h_id, cd) {
    obj_hotel_detail.getHotel_Detail(h_id, cd);
}

function show_info() {
    var html = "<a href=\"#\" onclick=\"Effect.toggle('hotel_detail','appear'); return false;\">前画面に戻る</a><br>";
    html += '<img src="./images/info1.png">';
    $('hotel_detail_main').innerHTML = html;
    Effect.toggle('hotel_detail', 'appear');
}
function Mashup_City(id) {
    this._id = id
    this._res = "";
}

Mashup_City.prototype.getCity = function(prefid) {
    this._selpref = prefid;
    this._res = "";
    var ajax = new Ajax.Request(
            './api/getarea.php',
            {method: 'get', parameters: 'lv=2&cd='+prefid, onComplete: this._ajax_complete.bind(this)}
            );
}

Mashup_City.prototype._ajax_complete = function(oj) {
    eval('this._res='+oj.responseText);
    $(this._id).innerHTML =
        TrimPath.processDOMTemplate(this._id + '_tmpl', {'city': this._res});
}

Mashup_City.prototype.clear = function() {
    $(this._id).innerHTML = "";
    this._selpref = "";
}

Mashup_City.prototype.getIdList = function() {
    var array_id = new Array();
    for(var i=0;i<this._res.length;i++) {
        array_id.push(this._res[i]['cd']);
    }
    return array_id;
}
function Mashup_Hotel_Detail(id) {
    this._id = id;
    this._res = "";
}

Mashup_Hotel_Detail.prototype.getHotel_Detail = function(h_id,cd) {
    Effect.toggle(this._id, 'appear');
    this._cd = cd;
    $(this._id+'_main').innerHTML = '<img src="./js/ibox/images/indicator.gif">';
    var url = "./api/showhotel.php";
    var ajax = new Ajax.Request(
                    url,
                    {method: 'get', parameters: 'h_id='+h_id+'&cd='+cd, onComplete: this._ajax_complete.bind(this)}
                    );
}

Mashup_Hotel_Detail.prototype._ajax_complete = function(oj) {
    this.clear();
    eval('this._res='+oj.responseText);
    this._res.info.cd = this._cd;
    map_point(this._res.hotel_info.Hotel.X, this._res.hotel_info.Hotel.Y);
    $(this._id+'_main').innerHTML =
            TrimPath.processDOMTemplate(this._id + '_tmpl', {'hotel': this._res});
}

Mashup_Hotel_Detail.prototype.clear = function() {
    $(this._id+'_main').innerHTML = '';
}
function Mashup_Hotels(id) {
    this._id = id;
    this._res = "";
    this._count_par_page = 5;
}

Mashup_Hotels.prototype.getHotels = function(cd) {
    $(this._id).innerHTML = '<img src="./js/ibox/images/indicator.gif">';
    this._cd = cd;
    var url = "./api/gethotels.php";
    var ajax = new Ajax.Request(
                    url,
                    {method: 'get', parameters: 'cd='+cd, onComplete: this._ajax_complete.bind(this)}
                    );
}

Mashup_Hotels.prototype._ajax_complete = function(oj) {
    this.clear();
    eval('this._res='+oj.responseText);
    this.showHotels(0);
}

Mashup_Hotels.prototype.showHotels = function(page) {
    var start = page * this._count_par_page;
    var obj_disp = new Object;
    obj_disp['hotels'] = new Object;
    obj_disp['info'] = new Object;
    for(var i=start;i<start+this._count_par_page;i++) {
        if(this._res['hotels']['Hotel'][i]) {
            obj_disp['hotels'][i] = this._res['hotels']['Hotel'][i];
        }
    }
    obj_disp['info']['cd']   = this._cd;
    obj_disp['info']['now']  = page;
    obj_disp['info']['prev'] = page-1;
    obj_disp['info']['next'] = page+1;
    obj_disp['info']['total'] = this._res['hotels']['DisplayPerPage'];
    obj_disp['info']['start'] = start + 1;
    obj_disp['info']['end'] = start + this._count_par_page;
    $(this._id).innerHTML =
            TrimPath.processDOMTemplate(this._id + '_tmpl', {'hotel_list': obj_disp});
    init_ibox();
}

Mashup_Hotels.prototype.clear = function() {
    $(this._id).innerHTML = '';
}
function Mashup_Map(id, lat, lng) {
    this._map = new GMap2(document.getElementById(id));
    this._map.addControl(new GSmallMapControl());
    this._map.addControl(new GOverviewMapControl());
    this._map.setCenter(new GLatLng(lat, lng), 6);
}

Mashup_Map.prototype.move = function(lat,lng,zoom) {
    this._map.setCenter(new GLatLng(lat, lng), zoom);
}

Mashup_Map.prototype.move_bytky = function(lat,lng,zoom) {
    wgs = Geotool.tky2wgs(lat,lng);
    this._map.setCenter(new GLatLng(wgs.lat, wgs.lng), zoom);
}

Mashup_Map.prototype.add_point = function(x,y) {
    x /= 3600000;
    y /= 3600000;
    wgs = Geotool.tky2wgs(y,x);
    var point = new GLatLng(wgs.lat,wgs.lng);
    this._map.addOverlay(new GMarker(point));
}

Mashup_Map.prototype.add_point_and_pan = function(x,y) {
    x /= 3600000;
    y /= 3600000;
    wgs = Geotool.tky2wgs(y,x);
    var point = new GLatLng(wgs.lat,wgs.lng);

    this._map.setZoom(12);
    this._map.panTo(point);
    this._map.addOverlay(new GMarker(point));
}


Mashup_Map.prototype.clear_point = function() {
    this._map.clearOverlays();
}

function Mashup_Myhotel(id,cid) {
    this._id = id;
    this._cid = cid;
    this._res = "";
}

Mashup_Myhotel.prototype.getMyhotel = function() {
    var url = "./api/getmyhotel.php";
    var ajax = new Ajax.Request(
                    url,
                    {method: 'get', parameters: 'cid='+this._cid+'&time='+getUtime(), onComplete: this._ajax_complete.bind(this)}
                    );
}

Mashup_Myhotel.prototype._ajax_complete = function(oj) {
    eval('this._res='+oj.responseText);
    $(this._id).innerHTML =
            TrimPath.processDOMTemplate(this._id + '_tmpl', {'myhotel': this._res});
    //temp :-)
    $('myhotel2').innerHTML =
            TrimPath.processDOMTemplate('myhotel2_tmpl', {'myhotel': this._res});
    init_ibox();
}

Mashup_Myhotel.prototype.clear = function() {
    $(this._id).innerHTML = "";
}
function Mashup_Pref(areaid, prefid) {
    this._areaid = areaid
    this._prefid = prefid;
    this._res  = "";
    this._init();

    this._selarea = "";

    var ajax = new Ajax.Request(
            './api/getarea.php',
            {method: 'get', parameters: '', onSuccess: this._ajax_complete.bind(this)}
            );
}

Mashup_Pref.prototype._ajax_complete = function(oj) {
    eval('this._res='+oj.responseText);
    this.showArea();
}

Mashup_Pref.prototype.showArea = function() {
    $(this._areaid).innerHTML =
        TrimPath.processDOMTemplate(this._areaid + '_tmpl', {'area': this._area});
}

Mashup_Pref.prototype.getPref = function(area_id) {
    this._selarea = area_id;
    var array_pid = this._area[area_id]['code'].split(',');
    var obj_pref  = new Object();
    for(var i=0;i<array_pid.length;i++) {
        obj_pref[i] = this._res[array_pid[i]];
    }
    $(this._prefid).innerHTML =
        TrimPath.processDOMTemplate(this._prefid + '_tmpl', {'pref': obj_pref});
    this._selarea = area_id; 
}

Mashup_Pref.prototype.getinfo = function(id) {
    return this._res[id.substr(0,2)];
}

Mashup_Pref.prototype.clear = function() {
    $(this._prefid).innerHTML = "";
}

Mashup_Pref.prototype.getSelArea = function () {
    if(!this._selarea) return;
    return this._area[this._selarea]['name'];
}

Mashup_Pref.prototype.getIdList = function() {
    var array_id = this._area[this._selarea]['code'].split(',');
    for(var i=0;i<array_id.length;i++) {
        array_id[i] = array_id[i] + "0000";
    }
    return array_id;
}

Mashup_Pref.prototype.getIdList_area = function() {
    var array_id = new Array();
    for(var i=0;i<this._area.length;i++) {
        array_id.push(this._area[i]['id']);
    }
    return array_id;
}

Mashup_Pref.prototype._init = function() {
    this._area = [
                    {
                        'id'  : '0',
                        'name': '北海道',
                        'code': '01'
                    },
                    {
                        'id'  : '1',
                        'name': '東北',
                        'code': '02,03,04,05,06,07'
                    },
                    {
                        'id'  : '2',
                        'name': '関東・北部',
                        'code': '08,09,10'
                    },
                    {
                        'id'  : '3',
                        'name': '関東・首都圏',
                        'code': '13,14,11,12'
                    },
                    {
                        'id'  : '4',
                        'name': '甲信越',
                        'code': '15,16,17'
                    },
                    {
                        'id'  : '5',
                        'name': '北陸',
                        'code': '18,19,20'
                    },
                    {
                        'id'  : '6',
                        'name': '東海',
                        'code': '23,22,21,24'
                    },
                    {
                        'id'  : '7',
                        'name': '近畿',
                        'code': '27,28,26,25,29,30'
                    },
                    {
                        'id'  : '8',
                        'name': '山陰・山陽',
                        'code': '31,32,33,34,35'
                    },
                    {
                        'id'  : '9',
                        'name': '四国',
                        'code': '36,37,38,39'
                    },
                    {
                        'id'  : '10',
                        'name': '九州',
                        'code': '40,41,42,43,44,45,46'
                    },
                    {
                        'id'  : '11',
                        'name': '沖縄',
                        'code': '47'
                    }
                ];
}

function Mashup_Ranking(id) {
    this._id = id;
    this._cd = "";
    this._res = "";
    this._count_par_page = 5;
}

Mashup_Ranking.prototype.setCD = function(cd) {
    this._cd = cd;
}

Mashup_Ranking.prototype.getRanking = function() {
    var url = "./api/getranking.php";
    var ajax = new Ajax.Request(
                    url,
                    {method: 'get', parameters: 'cd='+this._cd+'&time='+getUtime(), onComplete: this._ajax_complete.bind(this)}
                    );
}

Mashup_Ranking.prototype._ajax_complete = function(oj) {
    eval('this._res='+oj.responseText);
    $(this._id).innerHTML =
            TrimPath.processDOMTemplate(this._id + '_tmpl', {'rank_list': this._res});
    init_ibox();
}

Mashup_Ranking.prototype.clear = function() {
    $(this._id).innerHTML = "";
}
function Mashup_Town(id) {
    this._id = id
    this._res = "";
}

Mashup_Town.prototype.getTown = function(cityid) {
    this._res = "";
    var ajax = new Ajax.Request(
            './api/getarea.php',
            {method: 'get', parameters: 'lv=3&cd='+cityid, onComplete: this._ajax_complete.bind(this)}
            );
}

Mashup_Town.prototype._ajax_complete = function(oj) {
    eval('this._res='+oj.responseText);
    $(this._id).innerHTML =
        TrimPath.processDOMTemplate(this._id + '_tmpl', {'town': this._res});
}

Mashup_Town.prototype.clear = function() {
    $(this._id).innerHTML = "";
}

Mashup_Town.prototype.getIdList = function() {
    var array_id = new Array();
    for(var i=0;i<this._res.length;i++) {
        array_id.push(this._res[i]['cd']);
    }
    return array_id;
}

function Mashup_Wikip(id) {
    this._id = id;
    this._res = "";
}

Mashup_Wikip.prototype.getWikip = function(cd) {
    var url = "./api/getyweb_wikip.php";
    var ajax = new Ajax.Request(
                    url,
                    {method: 'get', parameters: 'cd='+cd, onComplete: this._ajax_complete.bind(this)}
                    );
}

Mashup_Wikip.prototype._ajax_complete = function(oj) {
    eval('this._res='+oj.responseText);
    $(this._id).innerHTML =
            TrimPath.processDOMTemplate(this._id + '_tmpl', {'wikip_list': this._res});
}

Mashup_Wikip.prototype.clear = function() {
    $(this._id).innerHTML = "";
}
