/**
 * This file contains the functions of Controlling Searching.
 *
 * @package     webroot
 * @subpackage  js
 * @author      GMG
 * @created     2009/3/5
 */

var cmbIndex = new Object();
var selectedArea = -1;

$(document).ready(function() {

    initializeCookie();
    countOfCommunication = 0;
    initForIE();
    setStaticJob();
    initComboItems();
    toggleRailwayForm();

    //  refresh ad
    var job_id = getCookie('job', 1);
    var emptyAd = new Array();
    if( job_id != -1 && job_id != null )
        loadAdData(job_id);
    else
        refreshAdver(emptyAd);
});

function initComboItems() {
    var numberOfCombobox = $('ul.navOne').size();
    for ( var i=0; i<numberOfCombobox; i++) {
        var thisUl = 'ul#nav' + i;
        var thisNth = "li:nth-child(1)";
        var thisID = $(thisUl).children(thisNth).attr('ID');
        var thisLi = "li#" + thisID;

        cmbIndex[thisID] = i;
        var masterComboCondition = $(thisLi).children('input#' + thisID + 'Value').val();
        if (masterComboCondition == "" || masterComboCondition == 0 || masterComboCondition == -1)
        {
            masterComboCondition = getCookie(thisID, 1);
        }
        //initMasterComboItems(thisID, masterComboCondition);
    }
}

function initMasterComboItems(comboID, masterComboCondition) {

    var thisJson = getJsonURL(comboID);

    //  check whether job is static or not
    if( isStatisJob == true && comboID == 'job' )
    {
        return;
    }

    showAjaxStatus(1);

    $.ajax({
        type: 'POST',
        url: thisJson,
        data:{'comboID':comboID,'masterComboCondition':masterComboCondition},
        success: function(data) {
            refreshMasterComboItems(data);
            //initRailways(selectedArea, 1);
            showAjaxStatus(2);
        }
    });
}

function refreshMasterComboItems( data )
{
    eval("var jsonData="+data);
    var comboID = jsonData.comboID;
    var masterComboCondition = jsonData.masterComboCondition;
    var thisLi = "li#" + comboID;

    var new_text = new Array();
    var allLength = jsonData.point.length;
    for (var v=0; v<allLength; v++) {
        var thisLID = jsonData.point[v].key;
        if (thisLID == masterComboCondition) {
            new_text[v] = ('<li class="bgOrange" id="' + thisLID + '"><a class="bgOrange" href="#">' + jsonData.point[v].title + '</a></li>');
            $(thisLi).children('input#' + comboID + 'Txt').val(jsonData.point[v].title);
        } else {
            new_text[v] = ('<li class="grayHover" id="' + thisLID + '"><a class="grayHover" href="#">' + jsonData.point[v].title + '</a></li>');
        }
    }
    var new_html = new_text.join("");
    var new_html = '<ul class="navTwo" id="nt' + cmbIndex[comboID] + '">' + new_html + '</ul>';
    $(thisLi).append(new_html);

    if (masterComboCondition == -1) {
        $(thisLi).children('input#' + comboID + 'Txt').attr("disabled","true");
        $(thisLi).children('input#' + comboID + 'Txt').val(getDefaultComboText(comboID));
        masterComboCondition = getDefaultComboValue(comboID);
    } else {
        $(thisLi).children('input#' + comboID + 'Txt').attr("disabled","");
    }
    $(thisLi).children('input#' + comboID + 'Value').val(masterComboCondition);

    if( comboID == 'place' )
    {
        selectedArea = masterComboCondition;
    }

    //  append onclick-handler & hover-handler
    settingClickEffect($(thisLi));
    settingHoverEffect($(thisLi));
}

function settingClickEffect(elementObj) {
    if (elementObj == null) {
        elementObj = $('ul.navOne').children('li');
    }
    elementObj.children('ul').children('li').click(function(){
        var clickedValue = $(this).attr('ID');
        var oldSelectedValue = getCookie($(this).parent('ul').parent('li').attr('ID'), 1);

        if( $(this).parent('ul').parent('li').attr('ID') == 'place' )
        {
            oldSelectedValue = selectedArea;
        }

        if ((oldSelectedValue != -1) && (clickedValue == oldSelectedValue)) {
            return false;
        } else {
            var comboID = $(this).parent('ul').parent('li').attr('ID');
            var clickedText = $(this).children('a').text();
            $(this).parent('ul').parent('li').children('input#' + comboID + 'Txt').val(clickedText);
            $(this).parent('ul').parent('li').children('input#' + comboID + 'Value').val(clickedValue);

            chGrayBg($(this).parent('ul').children('li.bgOrange'));
            chOrangeBg($(this));
            $(this).parent('ul').parent('li').children('input#' + comboID + 'Txt').attr("disabled","");
            //設定を保存するタイミングは検索ボタンを押したとき
            //setCookie($(this).parent('ul').parent('li').attr('ID'), $(this).attr('ID'), 1);
            //setCookie($(this).parent('ul').parent('li').attr('ID')+'name', $(this).children('a').text(), 1);

            if( comboID == 'place' )
            {
                selectedArea = clickedValue;
            }

            if (comboID == 'place') {
                $('li#rail').text('');
                $('input#railway_id').val(-1);
                $('input#area_name').val('');
                $('input#railway_name').val('');
                initRailways(clickedValue, 'change');
            }

            //  refresh ad
            if( comboID == 'job' )
                loadAdData(clickedValue);
        }
        return false;
    });
}

/**
 * 選択された都道府県に応じて路線を表示する。
 */
function initRailwayForm() {
    areaID = $("select#prefValue option:selected").val();

    if (areaID == -1 || areaID == "") {
        areaID = getDefaultComboValue('place');
        toggleRailwayForm();
        return;
    }

    var railwayID = getCookie('railway', 1);

    var thisJson = "/ajax/railways?areaID=" + areaID;

    showAjaxStatus(1);

    $.ajax({
        type: 'POST',
        url: thisJson,
        data:{'areaID':areaID, 'mode':'change', 'railwayID':railwayID},
        success: function(data) {

            eval("var jsonData="+data);
            var areaID = jsonData.areaID;
            var mode = jsonData.mode;
            var railwayID = jsonData.railwayID;

            var countArea = jsonData.point.length;
            var countRailway;

            var group = new Array();
            for (var i = 0; i<countArea; i++) {
                group[i] = ('<div class="railWayBox clearfix"><div class="railWayName"><p>' + jsonData.point[i].group + '</p></div>');
                countRailway = jsonData.point[i].railways.length;
                var railway = new Array();
                for (j=0; j<countRailway; j++) {
                    if (jsonData.point[i].railways[j].key == railwayID) {
                        railway[j] = ('<li><input type="radio" name="railway" value="' + jsonData.point[i].railways[j].key + '" id="railway' + jsonData.point[i].railways[j].key + '" checked="checked" /><label for="railway' + jsonData.point[i].railways[j].key + '">' + jsonData.point[i].railways[j].title + '</label></li>');
                        $('li#rail').text(jsonData.point[i].railways[j].title);
                        $('input#railway_id').val(jsonData.point[i].railways[j].key);
                        $('input#railway_name').val(jsonData.point[i].railways[j].title);
                        $('input#area_name').val(jsonData.point[i].group);
                    } else {
                        railway[j] = ('<li><input type="radio" name="railway" value="' + jsonData.point[i].railways[j].key + '" id="railway' + jsonData.point[i].railways[j].key + '" /><label for="railway' + jsonData.point[i].railways[j].key + '">' + jsonData.point[i].railways[j].title + '</label></li>');
                    }
                }
                var newGroup = railway.join("");
                newGroup = '<ul>' + newGroup + '</ul>';
                group[i] = group[i] + newGroup + '</div>';
            }
            var new_html = group.join("");

            if (mode == 'change') {
                $('div#railway_list').html(new_html);
            } else {
                $('div#railway_list').append(new_html);
            }

            _setWidthOfRailWayBox();
            settingRadioClick();
            showAjaxStatus(2);
            toggleRailwayForm();
        }
    });
}

function _setWidthOfRailWayBox() {
    var maxItemLength = 0;
    var curLen = 0;
    var pxLength = maxItemLength * 1.15;
    var itemLength = 0;
    var itemsPerLine = 0;

    maxItemLength = 0;
    $('div.railWayBox').children('ul').children('li').each(function() {
        curLen = $(this).children('label').text().length;
        if( curLen > maxItemLength )
        maxItemLength = curLen;
    });

    $('div.railWayBox').children('ul').each(function() {
            var i = $(this).children('li').size();
        if( i > itemLength )
        itemLength = i;
    });

    //  reset all items' length
    if (maxItemLength != 0)
    {
        itemsPerLine = parseInt(50/(maxItemLength+2));
        if (itemsPerLine > itemLength)
        {
            itemsPerLine = itemLength;
        }
        pxLength = Math.round($('div#searchBox').width() * 0.95 / itemsPerLine, 10); /* ul.width = 98% of div */
        $('div.railWayBox').children('ul').children('li').each(function() {
                // 複数列にすると文字列が重なって崩れることがあるのですべて1行にする
                $(this).css("width", "570px");
            }
        );
        // IE7で、都道府県選択後にマウスを動かすと、表示がくずれて大きな空白が
        // できるバグに対処
        if (navigator.userAgent.match(/MSIE 7\.0/)) {
            $('#blockSearchBody').css('height', '25px');
        }
    }
}

function settingRadioClick() {
    $("input:radio").click(function(){
        $('li#rail').text($(this).next('label').text());

        var idValue = $(this).attr('ID');
        idValue = idValue.replace('railway', '');
        //設定を保存するタイミングは検索ボタンを押したとき
        //setCookie('railway', idValue, 1);

        $('input#railway_id').val(idValue);
        $('input#area_name').val($(this).parent('li').parent('ul').prev('div').children('p').text());
        $('input#railway_name').val($(this).next('label').text());

        return true;
    });
}

function form_submit()
{
    var conditions = new Array();
    // クッキー設定状態を判別する。
    if (!$("select#prefValue").children("option:selected").val() || !$("input#jobValue").val())
    {
        displayAlert();
        return false;
    }

    // 入力チェック（路線の選択有無）
    if (($("input[name=railway]:checked").val() == -1) || ($("input[name=railway]:checked").val() == '') ||
       $("div#railway_list input[@checked='1']").size() == 0 )
    {
        alert(ERROR_NOT_SELECTED_RAILWAY);
        return false;
    }

    // 検索条件を集める。（ エリア、職種、選択された路線）
    conditions['pref'] = $("select#prefValue").children("option:selected").val();
    conditions['job'] = $("input#jobValue").val();
    conditions['railway'] = $("input[name=railway]:checked").val();
    //conditions['from'] = "train";

    //検索の際に設定を保持する
    //setCookie('place', $("input#placeValue").val(), 1);
    //setCookie('placename', $("input#placeTxt").val(), 1);
    //setCookie('railway', $("input[name=railway]:checked").val(), 1);

    // パラメータQUERY文字列を構成する。
    var params = 'from=train';
    for( var itemID in conditions )
    {
        if( params.length > 0 )
            params = params + "&";

        params = params + itemID + "=" + conditions[itemID];
    }

    // 検索条件を発信する。
    location.href = $('form#railForm').attr('action') + "?" + params;

    return false;
}

function initializeCookie()
{
    var value = '';
    /*
    // エリア
    value = $("input#placeValue").val();
    cookie_value = getCookie('place', 0);
    if( value.length > 0 && value != '-1' && value != cookie_value )
    {
        setCookie('place', value, 0);
        value = $("input#area_name").val();
        setCookie('placename', value, 0);
    }
    // 職種
    value = $("input#jobValue").val();
    cookie_value = getCookie('job', 0);
    if( value.length > 0 && value != '-1' && value != cookie_value )
    {
        setCookie('job', value, 0);
        value = $("input#job_name").val();
        setCookie('jobname', value, 0);
    }
    //refreshCookieArea();
    // 路線
    value = $("input#railway_id").val();
    cookie_value = getCookie('railway', 0);
    if( value.length > 0 && value != '-1' && value != cookie_value )
        setCookie('railway', value, 0);
    */
}


/**
 * 都道府県を選択すると路線選択フォームを表示する。
 */
function toggleRailwayForm() {
    if ( $("select#prefValue option:selected").val() != '' ) {
        //$("div#inputBtnTable").show();
        $("div#railWayArea").children("p").html("ご希望の路線をお選び下さい。");
        $("div#railWaySearchBtnBox").show();
    } else {
        //$("div#inputBtnTable").hide();
        $("div#railWayArea").children("p").html("都道府県を選択して検索してください。");
        $("div#railWaySearchBtnBox").hide();
    }
}
