$(function() {

    $("#StartPoint").submit(function() {
        rakurakuTaxiApi_searchAll('StartPoint', $('#StartPointKey').val(), $('#StartPointPref').val(), 1, 5);
    });

    $("#EndPoint").submit(function() {
        rakurakuTaxiApi_searchAll('EndPoint', $('#EndPointKey').val(), $('#EndPointPref').val(), 1, 5);
    });

    $("#P1Point").submit(function() {
        rakurakuTaxiApi_searchAll('P1Point', $('#P1PointKey').val(), $('#P1PointPref').val(), 1, 5);
    });

    $("#P2Point").submit(function() {
        rakurakuTaxiApi_searchAll('P2Point', $('#P2PointKey').val(), $('#P2PointPref').val(), 1, 5);
    });

    $("#P3Point").submit(function() {
        rakurakuTaxiApi_searchAll('P3Point', $('#P3PointKey').val(), $('#P3PointPref').val(), 1, 5);
    });

    $("#PriceCalc").submit(function() {
        rakurakuTaxiApi_priceCalc();
    });

    $('#P2Box').hide();
    $('#P3Box').hide();
    rakurakuTaxiApi_resetForm();
});

var rakurakuTaxiApi_baseUrl = '';

var rakurakuTaxiApi_priceCalcParams = {
    stPoint: '',
    enPoint: '',
    paPoint1: '',
    paPoint2: '',
    paPoint3: '',
    stAddress: '',
    enAddress: '',
    paAddress1: '',
    paAddress2: '',
    paAddress3: '',
    stla: '',
    stlo: '',
    edla: '',
    edlo: '',
    pala1: '',
    palo1: '',
    pala2: '',
    palo2: '',
    pala3: '',
    palo3: '',
    date: '',
    car: '',
    url: ''
}

function rakurakuTaxiApi_checkForm() {
    if (rakurakuTaxiApi_priceCalcParams.stla != '' && rakurakuTaxiApi_priceCalcParams.stlo != ''
     && rakurakuTaxiApi_priceCalcParams.edla != '' && rakurakuTaxiApi_priceCalcParams.edlo != '') {
        $('#PriceCalcSubmit').removeAttr('disabled');
        $('#PriceCalcSubmit').attr('src', '../img/call/btn_calc.jpg');
    } else {
        $('#PriceCalcSubmit').attr('disabled', 'disabled');
        $('#PriceCalcSubmit').attr('src', '../img/call/btn_calc_off.jpg');
    }
    if (rakurakuTaxiApi_priceCalcParams.pala2 != '' && rakurakuTaxiApi_priceCalcParams.palo2 != '') {
        $('#P3Box').slideDown('fast');
    } else {
        $('#P3Box').slideUp('fast');
    }
    if (rakurakuTaxiApi_priceCalcParams.pala1 != '' && rakurakuTaxiApi_priceCalcParams.palo1 != '') {
        $('#P2Box').slideDown('fast');
    } else {
        $('#P2Box').slideUp('fast');
    }
}

function rakurakuTaxiApi_set(id, point, address, lat, lon) {
    if (id == 'StartPoint' || id == 'EndPoint' || id == 'P1Point' || id == 'P2Point' || id == 'P3Point') {
        if (id == 'StartPoint') {
            rakurakuTaxiApi_priceCalcParams.stPoint = point;
            rakurakuTaxiApi_priceCalcParams.stAddress = address;
            rakurakuTaxiApi_priceCalcParams.stla = lat;
            rakurakuTaxiApi_priceCalcParams.stlo = lon;
        } else if (id == 'EndPoint') {
            rakurakuTaxiApi_priceCalcParams.enPoint = point;
            rakurakuTaxiApi_priceCalcParams.enAddress = address;
            rakurakuTaxiApi_priceCalcParams.edla = lat;
            rakurakuTaxiApi_priceCalcParams.edlo = lon;
        } else if (id == 'P1Point') {
            rakurakuTaxiApi_priceCalcParams.paPoint1 = point;
            rakurakuTaxiApi_priceCalcParams.paAddress1 = address;
            rakurakuTaxiApi_priceCalcParams.pala1 = lat;
            rakurakuTaxiApi_priceCalcParams.palo1 = lon;
        } else if (id == 'P2Point') {
            rakurakuTaxiApi_priceCalcParams.paPoint2 = point;
            rakurakuTaxiApi_priceCalcParams.paAddress2 = address;
            rakurakuTaxiApi_priceCalcParams.pala2 = lat;
            rakurakuTaxiApi_priceCalcParams.palo2 = lon;
        } else if (id == 'P3Point') {
            rakurakuTaxiApi_priceCalcParams.paPoint3 = point;
            rakurakuTaxiApi_priceCalcParams.paAddress3 = address;
            rakurakuTaxiApi_priceCalcParams.pala3 = lat;
            rakurakuTaxiApi_priceCalcParams.palo3 = lon;
        }
        rakurakuTaxiApi_checkForm();
        $('#'+id+'List').slideUp('fast', function () {
            $('#'+id+'List').empty();
            var selected_label = '';
            if (point == '') {
                selected_label = address;
            } else {
                selected_label = point+' ('+address+')';
            }
            $('#'+id+'List').append('<div class="selectedAddress">'+selected_label+'</div>');
            $('#'+id+'List').slideDown('fast');
        });
    }
}

function rakurakuTaxiApi_reset(id) {
    if (id == 'StartPoint' || id == 'EndPoint' || id == 'P1Point' || id == 'P2Point' || id == 'P3Point') {
        if (id == 'StartPoint') {
            rakurakuTaxiApi_priceCalcParams.stPoint = '';
            rakurakuTaxiApi_priceCalcParams.stAddress = '';
            rakurakuTaxiApi_priceCalcParams.stla = '';
            rakurakuTaxiApi_priceCalcParams.stlo = '';
        } else if (id == 'EndPoint') {
            rakurakuTaxiApi_priceCalcParams.enPoint = '';
            rakurakuTaxiApi_priceCalcParams.enAddress = '';
            rakurakuTaxiApi_priceCalcParams.edla = '';
            rakurakuTaxiApi_priceCalcParams.edlo = '';
        } else if (id == 'P1Point') {
            rakurakuTaxiApi_priceCalcParams.paPoint1 = '';
            rakurakuTaxiApi_priceCalcParams.paAddress1 = '';
            rakurakuTaxiApi_priceCalcParams.pala1 = '';
            rakurakuTaxiApi_priceCalcParams.palo1 = '';
        } else if (id == 'P2Point') {
            rakurakuTaxiApi_priceCalcParams.paPoint2 = '';
            rakurakuTaxiApi_priceCalcParams.paAddress2 = '';
            rakurakuTaxiApi_priceCalcParams.pala2 = '';
            rakurakuTaxiApi_priceCalcParams.palo2 = '';
        } else if (id == 'P3Point') {
            rakurakuTaxiApi_priceCalcParams.paPoint3 = '';
            rakurakuTaxiApi_priceCalcParams.paAddress3 = '';
            rakurakuTaxiApi_priceCalcParams.pala3 = '';
            rakurakuTaxiApi_priceCalcParams.palo3 = '';
        }
        $('#'+id+'List').empty();
        rakurakuTaxiApi_checkForm();
    }
}

function rakurakuTaxiApi_resetForm() {
    if ($('#resultBox').length) {
        $('#resultBox').remove();
    }
    rakurakuTaxiApi_reset('StartPoint');
    rakurakuTaxiApi_reset('EndPoint');
    rakurakuTaxiApi_reset('P1Point');
    rakurakuTaxiApi_reset('P2Point');
    rakurakuTaxiApi_reset('P3Point');
    $('#StartPointList').html('条件を指定して検索してください');
    $('#EndPointList').html('条件を指定して検索してください');
    $('#P1PointList').html('条件を指定して検索してください');
    $('#P2PointList').html('条件を指定して検索してください');
    $('#P3PointList').html('条件を指定して検索してください');
}

function rakurakuTaxiApi_calcAgain() {
    $('#resultBox').slideUp('fast', function () {
        rakurakuTaxiApi_resetForm();
        $('#calcForm').slideDown('fast');
    });
}

function getAjaxLodingTag() {
    return '<div style="width: 100%; padding: 10px 0;"><img src="../img/common/ajax-loader.gif" style="display: block; margin: 0 auto; width: 32px; height: 32px;" /></div>';
}

function rakurakuTaxiApi_search(type, id, key, pref, offset, lim) {
    if (type != 'landmark' && type != 'address') {
        return false;
    }
    if (id != 'StartPoint' && id != 'EndPoint' && id != 'P1Point' && id != 'P2Point' && id != 'P3Point') {
        return false;
    }
    if (!key) {
        key = '';
    }
    if (!pref) {
        pref = '00';
    }
    if (!offset) {
        offset = 1;
    }
    if (!lim) {
        lim = 10;
    } else if (lim > 256) {
        lim = 256;
    }
    $('#'+id+'Submit').attr('disabled', 'disabled');
    $('#'+id+'Box').append('<div id="'+id+'Loading">'+getAjaxLodingTag()+'</div>');
    $('#'+id+'List').slideUp('fast', function () {
        rakurakuTaxiApi_reset(id);
        var requestUrl;
        if (type == 'landmark') {
            requestUrl = rakurakuTaxiApi_baseUrl + '/LandmarkSearch';
        } else if (type == 'address') {
            requestUrl = rakurakuTaxiApi_baseUrl + '/AddressSearch';
        }
        var params = {
            key: key,
            pref: pref,
            offset: offset,
            lim: lim
        }
        $.post(requestUrl, params, function(json) {
            $('#'+id+'Loading').remove();
            if (json.result == '0') {
                var total_count = Number(json.total_count);
                var start_count = Number(json.start_count);
                var end_count = Number(json.end_count);
                if (total_count <= 0) {
                    $('#'+id+'List').append('<div>見つかりませんでした</div>');
                } else {
                    $('#'+id+'List').append('<ul></ul>');
                    if (type == 'landmark') {
                        $.each(json.landmark_list, function(key, landmark) {
                            var listTag = '<li><a href="javascript:void(0)" onclick="rakurakuTaxiApi_set(\''+id+'\',\''+landmark.name+'\',\''+landmark.address+'\',\''+landmark.lat+'\',\''+landmark.lon+'\')">' + landmark.name + ' ('+ landmark.address +')</a></li>';
                            $('#'+id+'List ul').append(listTag);
                        });
                    } else if (type == 'address') {
                        $.each(json.address_list, function(key, address) {
                            var listTag = '';
                            if (address.lat == '' || address.lon == '') {
                                listTag = '<li><a href="javascript:void(0)" onclick="rakurakuTaxiApi_search(\'address\', \''+id+'\',\''+address.address+'\', \''+pref+'\', 1, 10)">' + address.address +'</a></li>';
                            } else {
                                listTag = '<li><a href="javascript:void(0)" onclick="rakurakuTaxiApi_set(\''+id+'\',\'\',\''+address.address+'\',\''+address.lat+'\',\''+address.lon+'\')">' + address.address +'</a></li>';
                            }
                            $('#'+id+'List ul').append(listTag);
                        });
                    }
                    var pageinfo = total_count + '件中' + start_count + '～' + end_count + '件';
                    var prevnav = '';
                    var nextnav = '';
                    if (start_count > 1) {
                        var prev_start_count = Number(start_count - lim);
                        prevnav = '<a href="javascript:void(0)" onclick="rakurakuTaxiApi_search(\''+type+'\', \''+id+'\', \''+key+'\', \''+pref+'\', '+ prev_start_count +', 10)">&lt;&nbsp;前へ</a>&nbsp;&nbsp;';
                    }
                    if (Number(start_count + lim) < total_count) {
                        var next_start_count = Number(start_count + lim);
                        nextnav = '&nbsp;&nbsp;<a href="javascript:void(0)" onclick="rakurakuTaxiApi_search(\''+type+'\', \''+id+'\' , \''+key+'\', \''+pref+'\', '+ next_start_count +', 10)">次へ&nbsp;&gt;</a>';
                    }
                    $('#'+id+'List').append('<div class="pagenav">' + prevnav + pageinfo + nextnav + '</div>');
                    
                }
            } else {
                $('#'+id+'List').append('<div>キーワードを設定してください</div>');
            }
            $('#'+id+'Submit').removeAttr('disabled');
        $('#'+id+'List').slideDown('fast');
        }, 'json');
    });
    return true;
}

function rakurakuTaxiApi_searchAll(id, key, pref, offset, lim) {
    if (id != 'StartPoint' && id != 'EndPoint' && id != 'P1Point' && id != 'P2Point' && id != 'P3Point') {
        return false;
    }
    if (!key) {
        key = '';
    }
    if (!pref) {
        pref = '00';
    }
    if (!offset) {
        offset = 1;
    }
    if (!lim) {
        lim = 10;
    } else if (lim > 256) {
        lim = 256;
    }
    $('#'+id+'Submit').attr('disabled', 'disabled');
    $('#'+id+'Box').append('<div id="'+id+'Loading">'+getAjaxLodingTag()+'</div>');
    $('#'+id+'List').slideUp('fast', function () {
        rakurakuTaxiApi_reset(id);
        var requestUrl;
        var params = {
            key: key,
            pref: pref,
            offset: offset,
            lim: lim
        }
        var resultType = 0; // 0 none, 1 emptyKeyword, 2 notFound, 3 found
        requestUrl = rakurakuTaxiApi_baseUrl + '/LandmarkSearch';

        $.post(requestUrl, params, function(json) {
            if (json.result == '0') {
                var total_count = Number(json.total_count);
                var start_count = Number(json.start_count);
                var end_count = Number(json.end_count);
                if (total_count <= 0) {
                    if (resultType != 3) {
                        resultType = 2;
                    }
                } else {
                    resultType = 3;
                    $('#'+id+'List').append('<div class="landmark"></div>');
                    $('#'+id+'List > .landmark').append('<div class="indexSummary">見つかったランドマーク</div>');
                    $('#'+id+'List > .landmark').append('<ul></ul>');
                    $.each(json.landmark_list, function(key, landmark) {
                        var listTag = '<li><a href="javascript:void(0)" onclick="rakurakuTaxiApi_set(\''+id+'\',\''+landmark.name+'\',\''+landmark.address+'\',\''+landmark.lat+'\',\''+landmark.lon+'\')">' + landmark.name + ' ('+ landmark.address +')</a></li>';
                        $('#'+id+'List > .landmark > ul').append(listTag);
                    });
                    var pageinfo = total_count + '件中' + start_count + '～' + end_count + '件';
                    var nextnav = '';
                    if (Number(start_count + lim) < total_count) {
                        var next_start_count = Number(start_count + lim);
                        nextnav = '&nbsp;&nbsp;<a href="javascript:void(0)" onclick="rakurakuTaxiApi_search(\'landmark\', \''+id+'\' , \''+key+'\', \''+pref+'\', 1, 10)">次へ&nbsp;&gt;</a>';
                    }
                    $('#'+id+'List > .landmark').append('<div class="pagenav">' + pageinfo + nextnav + '</div>');
                }
            } else {
                resultType = 1;
            }
            requestUrl = rakurakuTaxiApi_baseUrl + '/AddressSearch';
            
            $.post(requestUrl, params, function(json) {
                $('#'+id+'Loading').remove();
                if (json.result == '0') {
                    var total_count = Number(json.total_count);
                    var start_count = Number(json.start_count);
                    var end_count = Number(json.end_count);
                    if (total_count <= 0) {
                        if (resultType != 3) {
                            resultType = 2;
                        }
                    } else {
                        resultType = 3;
                        $('#'+id+'List').append('<div class="address"></div>');
                        $('#'+id+'List > .landmark').append('<div class="indexSummary">見つかった住所</div>');
                        $('#'+id+'List > .address').append('<ul></ul>');
                        $.each(json.address_list, function(key, address) {
                            var listTag = '';
                            if (address.lat == '' || address.lon == '') {
                                listTag = '<li><a href="javascript:void(0)" onclick="rakurakuTaxiApi_search(\'address\', \''+id+'\',\''+address.address+'\', \''+pref+'\', 1, 10)">' + address.address +'</a></li>';
                            } else {
                                listTag = '<li><a href="javascript:void(0)" onclick="rakurakuTaxiApi_set(\''+id+'\',\'\',\''+address.address+'\',\''+address.lat+'\',\''+address.lon+'\')">' + address.address +'</a></li>';
                            }
                            $('#'+id+'List > .address > ul').append(listTag);
                        });
                        var pageinfo = total_count + '件中' + start_count + '～' + end_count + '件';
                        var nextnav = '';
                        if (Number(start_count + lim) < total_count) {
                            var next_start_count = Number(start_count + lim);
                            nextnav = '&nbsp;&nbsp;<a href="javascript:void(0)" onclick="rakurakuTaxiApi_search(\'address\', \''+id+'\' , \''+key+'\', \''+pref+'\', 1, 10)">次へ&nbsp;&gt;</a>';
                        }
                        $('#'+id+'List > .address').append('<div class="pagenav">' + pageinfo + nextnav + '</div>');

                    }
                } else {
                    resultType = 1;
                }
                if (resultType == 1) {
                    $('#'+id+'List').append('<div>キーワードを設定してください</div>');
                } else if (resultType == 2) {
                    $('#'+id+'List').append('<div>見つかりませんでした</div>');
                }
                $('#'+id+'Submit').removeAttr('disabled');
                $('#'+id+'List').slideDown('fast');
            }, 'json');
        }, 'json');
    });
    return true;
}

function rakurakuTaxiApi_priceCalc() {
    $('#calcResult').empty();
    $('#PriceCalcSubmit').attr('disabled', 'disabled');
    $('#calcBox').append('<div id="calcResultLoading">'+getAjaxLodingTag()+'</div>');
    $('#calcForm').slideUp('fast', function () {
        var requestUrl = rakurakuTaxiApi_baseUrl + '/PriceCalc';
        var nowdate = new Date();
        var year = String(nowdate.getFullYear());
        var month = String(nowdate.getMonth() + 1);
        var day = String(nowdate.getDate());
        var hour = $('#PriceCalcDateHour').val();
        var min = $('#PriceCalcDateMin').val();
        if (month.length < 2) {month = '0' + month;}
        if (day.length < 2) {day = '0' + day;}
        if (hour.length < 2) {hour = '0' + hour;}
        if (min.length < 2) {min = '0' + min;}
        var date = year + month + day + hour + min;
        rakurakuTaxiApi_priceCalcParams.date = date;
        rakurakuTaxiApi_priceCalcParams.car = $('#PriceCalcCar').val();
        rakurakuTaxiApi_priceCalcParams.url = 'pc';
        $.post(requestUrl, rakurakuTaxiApi_priceCalcParams, function(json) {
            $('#PriceCalcSubmit').removeAttr('disabled');
            $('#calcResultLoading').remove();
            $('#calcBox').append('<div id="resultBox"></div>');
            $('#resultBox').hide();
            $('#resultBox').append('<h3 class="h3_silver">計算結果</h3>');
            $('#resultBox').append('<div class="chapter1"></div>');
            $('#resultBox > .chapter1').append('<div id="resultContents"></div>');
            if (json.result == '0') {
                $('#resultContents').append('<dl><dt>距離</dt><dd id="resultContentDis">&nbsp;</dd><dt>所要時間</dt><dd id="resultContentTime">&nbsp;</dd></dl>');
                $('#resultContents').append('<div id="resultContentPrice">&nbsp;</div>');
                if (json.dis) {
                    var res_dis = json.dis;
                    var res_dis_unit = 'm';
                    if (res_dis >= 10000) {
                        res_dis = res_dis / 1000;
                        res_dis = Math.round(res_dis);
                        res_dis_unit = 'km';
                    }
                    $('#resultContentDis').html(res_dis + res_dis_unit);
                }

                if (json.time) {
                    var res_time = json.time;
                    var res_time_unit1 = '時間';
                    var res_time_unit2 = '分';
                    var res_time_string;
                    if (res_time >= 60) {
                        var time_hour = Math.floor(res_time / 60);
                        var time_min = res_time % 60;
                        res_time_string = time_hour + res_time_unit1 + time_min + res_time_unit2;
                    } else {
                        res_time_string = res_time + res_time_unit2;
                    }
                    $('#resultContentTime').html(res_time_string);
                }

                if (json.d_price || json.n_price) {
                    var res_price;
                    var res_price_unit = '円';
                    if (json.mode == 'night') {
                        res_price = json.n_price;
                    } else {
                        res_price = json.d_price;
                    }
                    $('#resultContentPrice').html('<span>' + res_price + '</span>' + res_price_unit);
                    $('#resultContentPrice > span').comma();
                }
            } else if (json.result == '2') {
                $('#resultContents').append('<div>出発地または到着地が設定されていません</div>');
            } else {
                $('#resultContents').append('<div>経路が存在しませんでした</div>');
            }
            $('#resultContents').append('<div><a href="javascript:void(0)" onclick="rakurakuTaxiApi_calcAgain();">もう1度計算する</a></div>');
            $('#resultBox').slideDown('fast');
        }, 'json');
    });
}

function rakurakuTaxiApi_showParking() {

}

function rakurakuTaxiApi_hideParking() {

}
