// 初期設定
jQuery(function(){
    initToggleDetail();
    // ドロップダウンチェックリストの初期化
    initDropdownPref();
    // テキストフィールド(プレースホルダ)の初期化
    initTextField();
    // 検索実行時に送信するクエリを短くする
    attachSearchQueryOptimize();
	// 職種選択ボタンのトグル
	toggleJobTypes();

    attachHopeSalary();
    attachEffectOnSearchExec();

    jumpTopIfNotSettingJobTypeArea();
});

// 都道府県用ドロップダウンスクリプト
function initDropdownPref(){
    var jQselect, uaDefault;

    // 検索結果画面でないときは設定した希望勤務地を初期値にする
    /*
    if (location.href.lastIndexOf('?') === -1) {
        jQselect = jQuery('select#prefValue');
        uaDefault = jQuery.cookie('guppy.www.search.area');
        // 初期値がなく、ブラウザに都道府県が設定されていたら、初期値として設定する
        if (jQselect.val() === null && uaDefault !== '') {
            if (uaDefault == 13) {
                //東京の場合、東京23区のみと23区以外に分け、両方選択状態にする
                jQselect.val(['130','131']);
            } else {
                jQselect.val([uaDefault]);
            }
        }
    }
    */

    $("table#searchBoxBase select[multiple]").each(function(){
        var height, maxHeights;
        maxHeights = {
            prefValue: 260,
            businessValue: 260,
            employValue: 200,
            specialityValue: 190,
            specialistValue: 190
        };
        // 選択肢が少ないときは、少ないなりに高さ調整
        height = jQuery(this).find('option').length * 23;

        if (height > maxHeights[this.id]) {
            height = maxHeights[this.id];
        }

        jQuery(this).dropdownchecklist( { maxDropHeight: height, width: 210 } );
    });
}

function initTextField(){
    var target;
    target = jQuery('input:text[title]');
    target.each(function(){
        options = {
            word: jQuery(this).attr('title')
        }
        jQuery(this).placeholder(options);
    });
    // リロード時に文字列がのこってしまうものの対策
    jQuery(window).unload(function(){
        target.each(function(){
            if (jQuery(this).hasClass('placeholder')){
                jQuery(this).val('');
            }
        });
    });
}

// セレクトボックスのvaluesをinput[type=hidden]にカンマ区切りで置き換える
function attachSearchQueryOptimize(){
    var selectBoxes;
    // 短縮するセレクトボックスのデータ(URLクエリのキー: select要素のjQueryオブジェクト)
    selectBoxes = {
        pref: jQuery('#prefValue'),
        busi: jQuery('#businessValue'),
        employ: jQuery('#employmentValue'),
        subjects: jQuery('#specialityValue'),
        spec: jQuery('#specialistValue')
    };

    // セレクトボックスを短縮できるURLに変換する
    selectBoxes.pref.parents('form:first').submit(function(){
        jQuery.each(selectBoxes, function(name, selectBox){
            var hidden, values;
            hidden = jQuery('<input name="'+name+'" type="hidden" />');
            values = selectBox.val();
            if (values == null) {
                values = [];
            }
            hidden.val(values.toString());
            selectBox.replaceWith(hidden);
        });
    });
}

function attachEffectOnSearchExec() {
    jQuery('form#formTreat').submit(function(){
        /*jQuery('div#detailAllListArea').html("<p class='textCenter'>"+
            "<img src='/img/common/bg/bg_loadingS.gif' alt='' width='20' height='20' />"+
            "<span class='loadingText'>検索中です...</span></p>");*/
        showAjaxStatus(1);
    });
}

function attachHopeSalary() {
    var salarySlider, salarySliderClone, scales, salaryValue, valueLabel, choiceableTypes;
    scales = {
        1: '万円',
        2: '万円',
        3: '円',
        4: '円'
    };
    // スライダーのガワ
    salarySlider = jQuery('#mSlider');

    // スライダーをdestroyしたあとでまたスライダーにすると
    // 数字が狂うので、先にコピーしておいて、切り替えるときに取り出す。
    salarySliderClone = salarySlider.clone();
    // 隠しフィールド
    salaryValue = jQuery('input[name=money_v]');
    // 最低給与表示用
    valueLabel = jQuery('#mValue1');
    // 選択可能な給与タイプ(年収、月給...)
    choiceableTypes = jQuery('input[name=money_c][class!=nochoice]');

    // スライダーの初期化
    // @param salaryTypeOption 給与の種類のラジオボタン要素
    // @param options オプション
    function initSlider(salaryTypeOption, options) {
        var range, salaryType, max, min;
        options = jQuery.extend({
            resetValue: true // スライダーの値を最小値にリセットするか
        }, options);
        // 埋め込んだスライダーの上限と下限を取得するキー
        salaryType = jQuery(salaryTypeOption).attr('id').match(/^salaryType([0-9]+)$/)[1];
        range = jQuery('#salaryLimitRange'+salaryType);
        jQuery('#mValue2').text(scales[salaryType]+'以上');
        salarySlider.replaceWith(salarySliderClone.clone());
        salarySlider = jQuery('#mSlider');

        max = range.find('span.high').text();
        min = range.find('span.low').text();
        salarySlider.slider({
            max: max,
            min: min,
            slide: function(ev, ui) {
                valueLabel.text(ui.value);
                salaryValue.val(ui.value);
            }
        }).slider('enable');
        if (options.resetValue) {
            salarySlider.slider('moveTo', min);
        } else {
            salarySlider.slider('moveTo', salaryValue.val());
        }
    }

    choiceableTypes.click(function(){
        initSlider(this);
    });
    // ページ読み込みのスライダー有効化
    if (jQuery('[id^=salaryType]:checked').length) {
        initSlider(jQuery('[id^=salaryType]:checked'), { resetValue: false });
    }

    // 給与の条件を指定するチェックボックスの振る舞い
    function readySalaryForms(){
        var disableArea;
        disableArea = jQuery('div#notSalary'); // スライダーが使えないことを可視化する
        if (jQuery('#hopeSalaryCheck').attr('checked')) {
            choiceableTypes.removeAttr('disabled');
            disableArea.hide();
        } else {
            choiceableTypes
                .attr('disabled', 'disabled')
                .attr('checked', 0);
            disableArea.show();
            valueLabel.html('&nbsp;');
            salaryValue.val(0);
            salarySlider.slider('destroy');
        }
    }
    // 希望給与を設定チェックボックスの振る舞い
    jQuery('#hopeSalaryCheck').click(function(){
        // 年収を最初に選択された状態にする
        jQuery('#salaryType1').attr('checked','checked').click();
        readySalaryForms();
    });
    readySalaryForms();
}

function initToggleDetail() {
    //クエリdetail_searchで詳細検索divを開くかどうかを引き継いでいる
    if (jQuery('[name=detail_search]').val()=="0") {
        toggleDetail();
    }
}

function toggleDetail() {
    jQuery('#searchBoxMore').toggle();
    if (jQuery('#searchBoxMore:visible').length == 0) {
        jQuery('[name=detail_search]').val(0);
        jQuery('#button-switch-detail').find('img').attr('src', '/img/search/btn/btn_detailToggle_open_o.gif');
    } else {
        jQuery('[name=detail_search]').val(1);
        jQuery('#button-switch-detail').find('img').attr('src', '/img/search/btn/btn_detailToggle_close_o.gif');
    }
    return false;
}

function formReset() {
    var form;
    form = jQuery('div#searchBox');
    form.find('input:checked').attr('checked', 0);
    form.find('input:text').val('').blur();
    jQuery('.ui-dropdownchecklist-dropcontainer').find('input:checkbox:checked').next('span').click();
    return false;
}

function jumpTopIfNotSettingJobTypeArea(){
    if (jQuery('[name=job]').val() === '-1') {
        alert('職種と勤務地を設定してください');
        location.href = '/';
    }
}

/**
 * 職種を開く、職種を閉じるボタンで職種選択の表示on/offを切り替える。
 */
function toggleJobTypes() {
    var anchor = $("a#toggleJobTypes");
    anchor.click( function() {
        if ( anchor.parent("p#jobTypeChangeBtn").attr("class") == "open" ) {
            anchor.html("<img src=\"/img/search/btn_job_open.gif\" alt=\"職種を選択\" width=\"80\" height=\"22\" class=\"btn\" />");
            anchor.parent("p#jobTypeChangeBtn").attr("class", "close");
        } else {
            anchor.html("<img src=\"/img/search/btn_job_close.gif\" alt=\"職種を閉じる\" width=\"80\" height=\"22\" class=\"btn\" />");
            anchor.parent("p#jobTypeChangeBtn").attr("class", "open");
        }
        $("div#jobTypeChangeList").toggle();
    });
}
