﻿/*  yard JavaScript, version 0.4.2
 *  (c)I.S.T Pro 2007-07-04
 *
 *  2007-10-06 対象なしのとき「広域に～」のメッセージ表示
 *  2008-10-14 ズーム範囲毎に表示条件が変わっていたのをやめる
 *             緑マークを黄マークに変更
 *  2009-01-30 引数でx,yを受取った場合、地図をそこに移動する
 *  2010-01-25 引数がtypeのみでも受け取れるように変更する
 *  2010-02-22 引数typeでオプション内容を変更する
 */
var cYard;
var cEvent;
var cTbl = new Array();
var cTnm = [];
var cCnt = 0;
var UrlParam = [];

function getUrlParam() {
    if ( window.location.search ) {
        var n = window.location.search.split('?');
        var a = n[1].split('&');
        for ( var i = 0; i < a.length; i++ ) {
            var b = a[i].split('=');
            UrlParam[b[0]] = b[1];
        }
        return true;
    }
    return false;
}

function setListIndex(sel, val) {
    for( var i = 0; i < sel.options.length; i++ ){
        if( sel.options[i].value == UrlParam['type'] ){
            sel.selectedIndex = i;
            return i;
        }
    }
    sel.selectedIndex = -1;
    return -1;
}

function loadBoxType(map) {
    var ycode = '';
    var bu = '';
    if( getUrlParam() ){
        if( UrlParam['x'] ){
            map.setCenter(new GLatLng(UrlParam['y'], UrlParam['x']));
        }
        if( UrlParam['type'] ){
            var sel = $('boxtype');
            clearOptions(sel);
            switch( UrlParam['type'] ) {
            case '3': case '30': case '31': case '32': case '33':
                sel.options[0] = new Option('バイク全て', 30);
                sel.options[1] = new Option('バイクボックス', 3);
                sel.options[2] = new Option('バイク屋外置場', 31);
                sel.options[3] = new Option('バイク屋内置場', 32);
                sel.options[4] = new Option('コンテナ(バイク)', 33);
                $('divHelp2').style.display = 'none';
                $('divHelp3').style.display = '';
                break;
            default:
                sel.options[0] = new Option('コンテナボックス', 0);
                sel.options[1] = new Option('トランクルーム', 1);
                sel.options[2] = new Option('コンテナボックス,トランクルーム', 10);
                $('divHelp3').style.display = 'none';
                $('divHelp2').style.display = '';
            }
            if( setListIndex($('boxtype'), UrlParam['type']) >= 0 ){
                if( UrlParam['code'] ){
                    ycode = UrlParam['code'];
                    bu = UrlParam['bu'];
                }
            }
        }
    }
    changeType(map, bu, ycode);
}

function changeBoxPrice(map) {
    changeBoxSize(map);
}

function changeBoxSize(map) {
    progressOn();
    setTimeout(function () {
        deleAllLabel(map);
        refresh(map, cYard);
        progressOff();
    }, 100);
}

function changeBoxType(map) {
    changeType(map, '', '');
}

function changeType(map, bu, cd) {
    progressOn();
    setTimeout(function () {
        deleAllLabel(map);
        if(!cYard){
            cYard = new ActiveXObject('microsoft.XMLDOM');
            cYard.async = false;
        }
        if(cEvent){
            GEvent.removeListener(cEvent);
            cEvent = null;
        }
        var url = '../rent/data/YARD_MAST/yard_'+ $('boxtype').value +'.xml';
        new Ajax.Request(url, {
            method: "get",
            onSuccess: function(objHttp) {
                var ty = $('boxtype').value;
                var nm;
                cYard.loadXML(objHttp.responseText);
                if( cd != '' ){
                    var nd = cYard.selectSingleNode('/root/yard[@code=' + cd + "][bu='" + bu + "']");
                    if(nd){
                        nm = nd.selectSingleNode('name').text;
                        map.setCenter(new GLatLng(nd.selectSingleNode('lat').text, nd.selectSingleNode('lng').text));
                        nd = nd.selectSingleNode('type');
                        if(nd){
                            ty = nd.text;
                        }
                    }
                }
                setBoxItem("size", cYard);
                setBoxItem("price", cYard);
                cEvent = GEvent.addListener(map, 'moveend', function () {
                    progressOn();
                    setTimeout(function () {
                        refresh(map, cYard);
                        progressOff();
                    }, 100);
                } );
                refresh(map, cYard);
                if( cd != '' ){
                    openChildWindow(bu, cd, nm, ty)
                }
                progressOff();
            },
            onFailure: function(objHttp) {
                cYard.loadXML("");
                clearOptions($('boxsize'));
                clearOptions($('boxprice'));
                progressErr("Error!! Can't read file[" + url + "]");
            }
        });
    }, 100);
}

function setBoxItem(itm, dom) {
    var sel = $("box" + itm);
    clearOptions(sel);
    setNodes(sel, dom, "/root/" + itm + "list/" + itm);
    sel.selectedIndex = 0;
}

function refresh(map, dom) {
    var zm = map.getZoom();
    var ct = map.getCenter();
    var bd = map.getBounds();
    var sw = bd.getSouthWest();
    var ne = bd.getNorthEast();
    var tb = new Array();
    var xp = cntaXPath();

    var nds = dom.selectNodes('/root/yard[lat>' + sw.lat() + '][lat<' + ne.lat() + '][lng>' + sw.lng() + '][lng<' + ne.lng() + ']');
    for( var i = 0; i < nds.length; i++ ) {
     if( nds[i].getAttributeNode('net').value == 'True' ) {
      if( nds[i].selectNodes('cnta').length > 0 ) {
        if ( nds[i].selectSingleNode('service').text == 'True' )
            tb.push(new myLabel(ct, makeLabel(map, nds[i], xp), '◎'));
        else {
//            if ( zm > 13 )
                tb.push(new myLabel(ct, makeLabel(map, nds[i], xp), ''));
//            else {
//                if ( (zm > 11) && (nds[i].selectNodes(xp).length > 0) )
//                    tb.push(new myLabel(ct, makeLabel(map, nds[i], xp), ''));
//                else {
//                    deleLabel(map, nds[i]);
//                }
//            }
        }
      }
     }
    }

    var yd = $("yard");
    for( var i = yd.rows.length - 1; i > 0; i-- ) {
        yd.deleteRow(i);
    }
    tb.sort(cmpLabel);
    for( var i = 0; (i < tb.length) && (i < 10); i++ ) {
        add_row(yd, tb[i].getKm(), tb[i].label.content, tb[i].service);
    }
    if(tb.length == 0){
        add_row(yd, '', '広域にしてみてください', '');
    }
}

function progressOn() {
    $('filetime').innerHTML = 'しばらくお待ちください';
}

function progressOff() {
    $('filetime').innerHTML = cYard.selectSingleNode('/root/filetime').text;
}

function progressErr(msg) {
    $('filetime').innerHTML = msg;
}

function cntaXPath() {
    return 'cnta' + itemXPath('size') + itemXPath('price');
}

function itemXPath(itm) {
    var i = parseInt($('box' + itm).value);
    if(i > 0)
        return "[@" + itm + "='" + i + "']";
    return "";
}

function myLabel(ct, label, ser) {
    this.mt = ct.distanceFrom(label.anchorLatLng);
    this.label = label;
    this.service = ser;
    this.getKm = function() {
        return parseFloat(parseInt(this.mt)) / 1000.0;
    }
}

function cmpLabel(a, b) {
    return a.mt - b.mt;
}

function add_col(nr, html) {
    var nc = nr.insertCell();
    nc.innerHTML = html;
}

function add_row(tb, km, tx, sr) {
    var nr = tb.insertRow();
    add_col(nr, km);
    add_col(nr, tx);
    add_col(nr, '<div align="center" style="height:25px;white-space:nowrap;background-color:#ccc;padding:2px;font-size:0.7em;">' + sr + '</div>');
}

function add_param(itm) {
    var i = parseInt($('box' + itm).value);
    if(i > 0) {
        var nd = cYard.selectSingleNode("/root/" + itm + "list/" + itm + "[@value='" + i + "']");
        return param_node(nd, itm, 'from') + param_node(nd, itm, 'to');
    }
    return '';
}

function param_node(nd, itm, atr) {
    return '&' + itm + atr + '=' + nd.getAttributeNode(atr).value;
}

function openChildWindow(bu, cd, nm, ty) {
    var tt = "win" + cd;
    if(!$(tt)){
        var url = "../../cgi-bin/rent/yard_vacant.cgi?bu=" + bu + "&code=" + cd + '&type=' + ty + add_param('size') + add_param('price');
//alert(url);
        var x = (cCnt % 8) * 25;
        var nw = new Window(tt, {
            className:"childWindowStyle",
            title:nm,
            left:(50 + x), top:(120 + x),
            width:650, height:250,
            zIndex:2 + cCnt,
            opacity:1,
            resizable: true,
            maximizable: false, minimizable: false,
            url:url
        });
        nw.setDestroyOnClose();
        nw.show();
    }
    else {
        $(tt).style.zIndex = 2 + cCnt;
    }
    cCnt = (cCnt + 1) % 100;
}

function makeLabel(map, nd, xp) {
    var cd = nd.selectSingleNode('code').text;
    var label = cTbl['tlbl' + cd];
    if ( !label ){
        var lat = nd.selectSingleNode('lat').text;
        var lng = nd.selectSingleNode('lng').text;
        var nm = nd.selectSingleNode('name').text;
        var bu = nd.selectSingleNode('bu').text;
        var ty = nd.selectSingleNode('type');
        if( ty )
            ty = ty.text;
        else {
            ty = $('boxtype').value;
        }
        
        var cnt;
        if( nd.getAttributeNode('net').value == 'False' )
            cnt = '<div style="white-space:nowrap;background-color:#ccc;padding:2px;font-size:0.7em;"><a href="http://www.kase3535.com/search/details/' + cd + '.htm" target="_blank">' + nm + '</a></div>';
        else {
            if ( nd.selectNodes(xp).length ) {
                if ( nd.selectSingleNode('service').text == 'True' )
                    cnt = 'r';
                else {
//                    cnt = 'g';
                    cnt = 'b';
                }
            }
            else {
//                cnt = 'x';
                cnt = 'y';
            }
//            cnt = '<div style="white-space:nowrap;background-color:#ccc;padding:2px;font-size:0.7em;"><img src="img/icons/icon' + ty + cnt + '.png" style="height:17px;width:10px;background-color:#ccc;"><a href="javascript:openChildWindow(\'' + bu + '\', \'' + cd + '\', \'' + nm + '\', \'' + ty + '\');">' + nm + '</a></div>';
            cnt = '<div style="white-space:nowrap;background-color:#ccc;padding:2px;font-size:0.7em;"><img src="img/icons/icon' + ty + cnt + '.png" style="height:24px;width:17px;background-color:#ccc;"><a href="javascript:openChildWindow(\'' + bu + '\', \'' + cd + '\', \'' + nm + '\', \'' + ty + '\');">' + nm + '</a></div>';
        }
        label = new TLabel();
        label.id = 'tlbl' + cd;
        label.anchorLatLng = new GLatLng(lat, lng);
        label.anchorPoint = 'bottomLeft';
        label.content = cnt;
        label.percentOpacity = 70;

        map.addTLabel(label);
        cTbl[ label.id ] = label;
        cTnm.push( nd );
    }
    return label;
}

function deleAllLabel(map) {
    var nd;
    while( nd = cTnm.pop() ){
        deleLabel(map, nd);
    }
}

function deleLabel(map, nd) {
    var cd = nd.selectSingleNode('code').text;

    if ( cTbl['tlbl' + cd] ){
        map.removeTLabel(cTbl['tlbl' + cd]);
        cTbl['tlbl' + cd] = null;
    }
}
