//==============================================================================
// ファイル名   ： common.js
// 機能         ： 共通
// 機能説明     ：
//==============================================================================

//有効期限
var expire_term_day = 30;

//==============================================================================
// 関数名       ： addCookieEstId
// 機能         ： お気に入りに登録する
// 機能説明     ：
// 引数-1       ： 都道府県ID
// 引数-2       ： 物件ID
// 戻り値       ： なし
//==============================================================================
function addCookieEstId(pref_id, estate_id)
{
    //Dateオブジェクトを作成する
    var date = new Date();

    //日時を設定する
    date.setTime(date.getTime() + (expire_term_day * 24 * 60 * 60 * 1000));
    var expires = date.toGMTString();

    //都道府県IDと物件IDが存在するか？
    if(pref_id && estate_id)
    {
        //お気に入りリストを取得する
        var history_cookie = new Array();

        //クッキーが存在するか？
        if (document.cookie)
        {
            //クッキー単位で分割
            var cookies = document.cookie.split('; ');

            //クッキーでループ
            for (var i = 0; i < cookies.length; i++)
            {
                //キーと値で分割
                var array = cookies[i].split('=');

                //0文字目に est_pref_idが存在するか？
                if (array[0].indexOf('est_pref_id') == 0)
                {
                    //履歴に追加
                    history_cookie.push(unescape(array[0]));
                }
            }
        }

        //お気に入りリストが49個になるまで古い順から削除
        while (history_cookie.length > 49)
        {
            //クッキーの期限を過去日に設定する
            document.cookie = history_cookie.shift() + '=0; expires=Fri, 31-Dec-1999 23:59:59 GMT; path=/;';
        }

        //クッキーを登録する
        document.cookie = 'est_pref_id[' + estate_id + ']=' + pref_id + '; expires=' + expires + '; path=/;';

        //正常を返却する
        return true;
    }
}

//==============================================================================
// 関数名       ： addCookieHistoryEstId
// 機能         ： 閲覧した物件をクッキーに登録する
// 機能説明     ：
// 引数-1       ： 都道府県ID
// 引数-2       ： 物件ID
// 戻り値       ： なし
//==============================================================================
function addCookieHistoryEstId(pref_id, estate_id)
{
    //カウンタ
    var i;

    //Dateオブジェクトを作成する
    var date = new Date();

    //日時を設定する
    date.setTime(date.getTime() + (expire_term_day * 24 * 60 * 60 * 1000));
    var expires = date.toGMTString();

    //都道府県IDと物件IDが存在するか？
    if(pref_id && estate_id)
    {
        //クッキーを登録する
        document.cookie = 'last_est_pref_id[' + estate_id + ']=' + pref_id + '; expires=' + expires + '; path=/;';

        //
        var history_cookie = new Array();

        //履歴クッキー数
        var count = 0;

        //履歴クッキー数と履歴クッキーの名前を抽出
        if (document.cookie)
        {
            var cookies = document.cookie.split('; ');

            for (var i = 0; i < cookies.length; i++)
            {
                var str = cookies[i].split('=');

                if(str[0].indexOf('last_est_pref_id') == 0)
                {
                    //履歴クッキーの名前を取得
                    history_cookie[count] = unescape(str[0]);
                    count++;
                }
            }
        }

        //履歴用クッキーが10つ以上ある場合、最新の10つ以外は削除
        dTime = new Date();
        dTime.setYear(dTime.getFullYear() - 1);

        if(count > 9)
        {
            for(i = 0; i < count - 10; i++)
            {
                document.cookie = ' ' + history_cookie[i] + '=0; expires=' + dTime.toGMTString() + '; path=/;';
            }
        }

        //正常を返却する
        return true;
    }
}

//==============================================================================
// 関数名       ： addCookieSearchCondition
// 機能         ： 検索条件をCookieに保存する
// 機能説明     ：
// 引数-1       ： 保存する文字列
// 戻り値       ： なし
//==============================================================================
function addCookieSearchCondition(search_condition)
{
    //Dateオブジェクトを作成する
    var date = new Date();
    //ミリ秒を取得する
    var time = date.getTime();
    //cookie削除に過去の日時を設定する
    date.setYear(date.getFullYear() - 1);

    //保存した検索条件を取得する
    var history_cookie_key = [];
    if (document.cookie)
    {
        var cookies = document.cookie.split('; ');
        for (var i in cookies)
        {
            var array = cookies[i].split('=');
            if (array[0].indexOf('search_query') == 0)
            {
                history_cookie_key.push(unescape(array[0]));

                //同じ検索条件は削除
                if (array[1].indexOf(search_condition) == 0)
                {
                    document.cookie = history_cookie_key.pop() + '=0; expires=' + date.toGMTString() + '; path=/;';
                }
            }
        }
    }

    //保存した検索条件を2個になるまで古い順から削除
    while (2 < history_cookie_key.length)
    {
        document.cookie = history_cookie_key.shift() + '=0; expires=' + date.toGMTString() + '; path=/;';
    }

    //有効期限を設定する
    date.setTime(time + (expire_term_day * 24 * 60 * 60 * 1000));
    //Cookieに保存する
    document.cookie = 'search_query[' + time + ']=' + search_condition + '; expires=' + date.toGMTString() + '; path=/;';
}

//==============================================================================
// 関数名       ： addFavCount
// 機能         ： お気に入りをカウントアップする
// 機能説明     ：
// 引数-1       ： なし
// 戻り値       ： なし
//==============================================================================
function addFavCount()
{
    //現在の件数を取得する
    var favCount = document.getElementById('fav_count').innerHTML;

    //登録されているか？
    if (isNaN(favCount) || favCount == '')
    {
        //登録されていない場合は1件にする
        favCount = 1;
    }
    else if (favCount >= 50)
    {
        //上限を50件とする
        favCount = 50;
    }
    else
    {
        //登録されている場合は件数を増やす
        favCount = parseInt(favCount) + 1;
    }

    //クッキーが存在するか？
    //(クッキーを優先にする)
    if (document.cookie)
    {
    	var counter = 0;
    	
        //クッキー単位で分割
        var cookies = document.cookie.split('; ');

        //クッキーでループ
        for (var i = 0; i < cookies.length; i++)
        {
            //キーと値で分割
            var array = cookies[i].split('=');

            //0文字目に est_pref_idが存在するか？
            if (array[0].indexOf('est_pref_id') == 0)
            {
            	counter++;
            }
        }
        
        favCount = counter;
    }

    //登録件数を設定する
    document.getElementById('fav_count').innerHTML = favCount;
}

//==============================================================================
// 関数名       ： minusFavCount
// 機能         ： お気に入りをカウントダウンする
// 機能説明     ：
// 引数-1       ： なし
// 戻り値       ： なし
//==============================================================================
function minusFavCount()
{
    //現在の件数を取得する
    var favCount = document.getElementById('fav_count').innerHTML;

    //登録されているか？
    if (isNaN(favCount) || favCount == '')
    {
        //登録されていない場合は0件にする
        favCount = 0;
    }
    else if (favCount >= 1)
    {
        //デクリメントする
        favCount--;
    }

    //登録件数を設定する
    document.getElementById('fav_count').innerHTML = favCount;
}

//==============================================================================
// 関数名       ： popupSubmit
// 機能         ：
// 機能説明     ：
// 引数-1       ： Form名称
// 引数-2       ： Ethnaのact値
// 引数-3       ： Formのアクション値(通常はindex.php)
// 戻り値       ： なし
// 備考         ： 未使用化するかも
//==============================================================================
function popupSubmit(form_name, act_value, action_name)
{
    //新しいWindowを開く
    window.open('about:blank', 'popup_submit');

    //フォームデータの送信先のターゲットウィンドウを設定する
    form_name.target = 'popup_submit';

    //act(Ethnaのaction)を設定
    form_name.act.value = act_value;

    //アクションを設定(通常はindex.php)
    form_name.action = action_name;

    //サブミット
    form_name.submit();
}

//==============================================================================
// 関数名       ： IsCheckBoxChecked
// 機能         ： チェックボックスが選択されているか検査する
// 機能説明     ：
// 引数-1       ： チェックボックス名
// 引数-2       ： エラー時の表示名
// 戻り値       ： true=正常, false=エラー
//==============================================================================
function IsCheckBoxChecked(object_name, object_caption)
{
    //オブジェクトを設定する
    var targetObject = document.getElementsByName(object_name);

    //フラグ
    var checkFlg = false;

    //オブジェクトでループする
    for (var i = 0; i < targetObject.length; i++)
    {
        //オブジェクトがチェック済みか？
        if (targetObject[i].checked)
        {
            //正常を返却する
            checkFlg = true;
            break;
        }
    }

    if (!checkFlg)
    {
        alert (object_caption + 'を選択してください');
    }

    //フラグを返却する
    return checkFlg;
}

//==============================================================================
// 関数名       ： IsCheckBoxCheckedCount
// 機能         ： チェックボックスの選択数が有効範囲か検査する
// 機能説明     ：
// 引数-1       ： チェックボックス名
// 引数-2       ： チェック上限＋1
// 引数-3       ： エラー時の表示名
// 戻り値       ： true=正常, false=エラー
//==============================================================================
function IsCheckBoxCheckedCount(object_name, limit_count, object_caption)
{
    //オブジェクトを設定する
    var targetObject = document.getElementsByName(object_name);

    //チェック済みアイテムカウンターを初期化する
    var checkedCount = 0;

    //オブジェクトでループする
    for (var i = 0; i < targetObject.length; i++)
    {
        //オブジェクトがチェック済みか？
        if (targetObject[i].checked)
        {
            //カウンターをインクリメントする
            checkedCount++;
        }

        //上限を超えているか？
        if (checkedCount > limit_count)
        {
            //ループを抜ける
            break;
        }
    }

    //チェック済みアイテムがあるか？
    if(checkedCount == 0)
    {
        //無い場合はエラーメッセージを出して、処理を抜ける
        alert(object_caption + 'を選択してください。');
        return false;
    }

    //チェック済みアイテムが有効範囲内か？
    if(checkedCount < limit_count)
    {
        //正常として処理を抜ける
        return true;
    }
    else
    {
        var message;

        //エラーメッセージを設定する
        message = '';
        message += object_caption + 'が' + limit_count + '個以上選択されています。';
        message += object_caption + 'の選択は' + (limit_count-1) + '個までです。';

        //エラーメッセージを表示する
        alert(message);

        //失敗として処理を抜ける
        return false;
    }
}

//==============================================================================
// 関数名       ： submitCompare
// 機能         ： 物件比較画面に遷移させる
// 機能説明     ：
// 引数-1       ： なし
// 戻り値       ： なし
//==============================================================================
function submitCompare()
{
    //チェックボックスにチェックされた件数をチェックする
    if (IsCheckBoxCheckedCount('estate_id[]', 6, '物件'))
    {
        //パラメータを取得する
        var params = getEstatePrefParams();

        //URLを設定する
        var url = 'http://' + location.hostname + '/estate/compare.php' + params;

        //ウィンドウを開く
        window.open(url, 'compare');
    }
}

//==============================================================================
// 関数名       ： submitEstateInquiry
// 機能         ： お問い合わせ画面に遷移させる
// 機能説明     ：
// 引数-1       ： LID(初期値：null)
// 戻り値       ： なし
//==============================================================================
function submitEstateInquiry(lid)
{
    //チェックボックスにチェックされた件数をチェックする
    if (IsCheckBoxChecked('estate_id[]', '物件'))
    {
        //パラメータを取得する
        var params = getEstatePrefParams();

		//LIDがあったらパラメータにLIDを追加
		lid = lid || null;
		if(lid != null) params += '&lid=' + lid;
		
        //URLを設定する
        var url = 'https://' + location.hostname + '/estateinquiry/input.php' + params;

        //ウィンドウを開く
        window.open(url, 'estate_inquiry');
    }
}

//==============================================================================
// 関数名       ： getEstatePrefParams
// 機能         ： 物件IDと都道府県IDのパラメータを取得
// 機能説明     ：
// 引数-1       ： なし
// 戻り値       ： 物件IDと都道府県IDのパラメータ
//==============================================================================
function getEstatePrefParams()
{
    //パラメータを初期化する
    var params = '';

    var estateIdArray = new Array();

    var prefIdArray = new Array();

    //物件チェックボックスリストを設定する
    var estate_id_list = parent.document.getElementsByName('estate_id[]');

    //物件チェックボックスリストでループする
    for (var i = 0; i < estate_id_list.length; i++)
    {
        //物件チェックボックスを設定する
        var item = estate_id_list[i];

        //チェックされているか？
        if (item.checked)
        {
            //物件IDを設定する
            var estateId = item.value;

            //都道府県IDを設定する
            var prefId = document.getElementById('estate_pref_' + estateId).value;

            if (!(prefId in prefIdArray))
            {
                params += '&pref_id[]=' + prefId;

                //連側配列を設定する
                prefIdArray[prefId] = true;
            }

            if (!(estateId in estateIdArray))
            {
                params += '&estate_id[]=' + estateId;

                //連側配列を設定する
                estateIdArray[estateId] = true;
            }
        }
    }

    if (params.length > 0)
    {
        params = '?' + params.slice(1);
    }

    return params;
}

//==============================================================================
// 関数名       ： selectAll
// 機能         ： 物件を全選択する
// 機能説明     ：
// 引数-1       ： チェック状態を強制的に指定する場合のboolean値　なければneme属性estate_id[]のチェックを参照
// 引数-2       ： ターゲットを指定する場合のname属性の文字列　なければneme属性estate_id[]を取得
// 戻り値       ： なし
//==============================================================================
function selectAll(checkFlg,targetName)
{
    var estate_id_list = (checkFlg != undefined ) ? document.getElementsByName(targetName) : parent.document.getElementsByName('estate_id[]');

    var is_checked = (checkFlg != undefined ) ? checkFlg : !estate_id_list[0].checked;

    for (var i = 0; i < estate_id_list.length; i++)
    {
        estate_id_list[i].checked = is_checked;
    }
}

//==============================================================================
// 関数名       ： setLowHigh
// 機能         ： 最低、最高のプルダウンを入れ替える
// 機能説明     ：
// 引数-1       ： なし
// 戻り値       ： なし
//==============================================================================
function setLowHigh(id1, id2)
{
    var obj1 = parent.document.getElementById(id1);
    var obj2 = parent.document.getElementById(id2);

    var index1 = obj1.selectedIndex;
    var index2 = obj2.selectedIndex;

    if (index2 == 0 || index1 < index2)
    {
    	return;
    }

    obj1.selectedIndex = index2;
    obj2.selectedIndex = index1;
}

//==============================================================================
// 関数名       ： isNumeric
// 機能         ： 数値であるかどうかチェックする
// 機能説明     ：
// 引数-1       ： 文字列
// 戻り値       ： boolean
//==============================================================================
function isNumeric(num)
{
    if (num.match(/[^0-9]/g))
    {
        return false;
    }
    return true;
}

//==============================================================================
// 関数名       ： isPrefID
// 機能         ： 都道府県IDであるかチェックする
// 機能説明     ：
// 引数-1       ： 文字列
// 戻り値       ： boolean
//==============================================================================
function isPrefID(id)
{
    //まずは数値であるかチェック
    if (isNumeric(id))
    {
        //都道府県IDの範囲であれば正を返却する
        if (id > 0 && id <= 47)
        {
            return true;
        }
    }
    return false;
}

//==============================================================================
// 関数名       ： isCityID
// 機能         ： 街力の市区町村IDであるかチェックする
// 機能説明     ： 街力のみで利用
// 引数-1       ： 文字列
// 戻り値       ： boolean
//==============================================================================
function isCityID(id)
{
    //まずは数値であるかチェック
    if (isNumeric(id))
    {
        //市区町村IDの範囲であれば正を返却する
        if (id.length > 0 && id.length <= 7)
        {
            return true;
        }
    }
    return false;
}

//==============================================================================
// 関数名       ： isACityID
// 機能         ： 市区町村IDであるかチェックする
// 機能説明     ：
// 引数-1       ： 文字列
// 戻り値       ： boolean
//==============================================================================
function isACityID(id)
{
    //まずは数値であるかチェック
    if (isNumeric(id))
    {
        //市区町村IDの範囲であれば正を返却する
        if (id.length > 0 && id.length <= 11)
        {
            return true;
        }
    }
    return false;
}

//==============================================================================
// 関数名       ： isRouteID
// 機能         ： 路線IDであるかチェックする
// 機能説明     ：
// 引数-1       ： 文字列
// 戻り値       ： boolean
//==============================================================================
function isRouteID(id)
{
    //まずは数値であるかチェック
    if (isNumeric(id))
    {
        //市区町村IDの範囲であれば正を返却する
        if (id.length > 0 && id.length <= 4)
        {
            return true;
        }
    }
    return false;
}

//==============================================================================
// 関数名       ： getCity
// 機能         ： 市区町村データを取得する
// 機能説明     ：
// 引数-1       ： 都道府県ID
// 引数-2       ： 1=>それ以外、なし=>街力用市区町村
// 戻り値       ： boolean
//==============================================================================
function getCity(pref_id,flg)
{
    //もし都道府県IDが空だったら返却する
    if (pref_id=='')
    {
        return false;
    }

    //都道府県IDが正常であるかどうか確認する
    if (isPrefID(pref_id))
    {
        //URLを作成する
        url = '/top/getprefcity.php?pref_id=' + pref_id;
        //フラグがあれば、通常の市区町村情報を取得するようにする なければ街力用の市区町村情報となる
        if (flg)
        {
            url = url + '&direct_flg=1';
        }
        //ajax通信する
        $.ajax({
              url: url,
              cache: true,
              success: function(html){
                $("#city_option").html(html);
              }
        });
    }
    else
    {
        alert('IDが不正です');
        return false;
    }
}


//==============================================================================
// 関数名       ： incSearchCondition
// 機能         ： 保存した検索条件の件数のインクリメント
// 機能説明     ：
// 引数-1       ： なし
// 戻り値       ： なし
//==============================================================================
function incSearchCondition()
{
	//現在の件数を取得する
	$count = $('#search_con_count').text();
	
	//件数をインクリメントする
	$count++;
	
	//オーバーしていたら最大件数を設定する
	if ($count > 3)
	{
		$count = 3;
	}
	
	//件数を設定する
	$('#search_con_count').text($count);
}

