// ViZiLOG.js

//console.log('vizilog.js');

// aタグのonClickについてるところ
function confirmation( message, url ) {
    if (confirm( message )) {
        location.replace( url );
    }
}

// formタグについてるところ
function confirmation_form( message ) {
  if (confirm( message )) {
    return true;
  }
  else {
    return false;
  }
}

/////////////////////////////
// フォーム検証
//

// 文字数規定
var min_str = {
    'passwd1'   : 6,
    'passwd2'   : 6,
    'handle'    : 1,
    'surname'   : 0,
    'givenname' : 0,
    'surkana'   : 0,
    'givenkana' : 0,
    'favorite_game' : 0,
    'comment'   : 0,
    'diary_subject' : 0,
    'diary_body' : 0,
    'diarycomment_body' : 0,
    'community_subject' : 0,
    'community_body' : 0,
    'communitytopic_subject' : 0,
    'communitytopic_body' : 0,
    'communitytopiccomment_body' : 0,
    'works_subject' : 0,
    'works_body' : 0,
    'workstopic_subject' : 0,
    'workstopic_body' : 0,
    'workstopiccomment_body' : 0,
    'mail_title' : 0,
    'mail_body' : 0,
    'friendrequest_body' : 0,
    'star' : 0,
    'inquiry_query' : 0,
    'inquiry_query1000' : 0,
    'gametitle' : 0,
    'title' : 0
  };
var max_str = {
    'passwd1'   : 16,
    'passwd2'   : 16,
    'handle'    : 12,
    'surname'   : 8,
    'givenname' : 8,
    'surkana'   : 8,
    'givenkana' : 8,
    'favorite_game' : 1000,
    'comment'   : 1000,
    'diary_subject' : 16,
    'diary_body' : 2000,
    'diarycomment_body' : 500,
    'community_subject' : 16,
    'community_body' : 2000,
    'communitytopic_subject' : 32,
    'communitytopic_body' : 2000,
    'communitytopiccomment_body' : 500,
    'works_subject' : 32,
    'works_body' : 400,
    'workstopic_subject' : 32,
    'workstopic_body' : 2000,
    'workstopiccomment_body' : 500,
    'mail_title' : 32,
    'mail_body' : 1000,
    'friendrequest_body' : 500,
    'star' : 50,
    'inquiry_query' : 500,
    'inquiry_query1000' : 1000,
    'gametitle' : 300,
    'title' : 32
  };

// テキストフィールドの内容をチェックして
// 文字数を表示（文字数オーバーは色を替えて表示）
// - onKeyUpにセットして、キーが入力されるたびに実行する
function check_textfield(elem, type) {
    var DEFAULT_COLOR = '#789';
    var DEFAULT_BGCOLOR = '#fff';
    var length_id = type + 'len';

    var counter_color = DEFAULT_COLOR;
    // フィールド内のテキストの文字数を表示する
    var len  = _display_lenth_counter(elem, length_id, counter_color, max_str[type]);
    
    // 入力が適切でない場合に表示色などを変更する
    if ((len <= max_str[type]) && (len >= min_str[type])) {
        counter_color = DEFAULT_COLOR;
        elem.style.backgroundColor = DEFAULT_BGCOLOR;
    }
    else if ((type == 'passwd1' || type == 'passwd2') && (len == 0)) { // パスワードは文字数0だと変更無しでOKなので
        counter_color = DEFAULT_COLOR;
        elem.style.backgroundColor = DEFAULT_BGCOLOR;
    }
    else {
        counter_color = '#f00';
        elem.style.backgroundColor = '#fcc';
    }

    // フィールド内のテキストの文字数を表示する（色が変わっているときのためにもう一回表示…）
    len = _display_lenth_counter(elem, length_id, counter_color, max_str[type]);

    return true;
}

// パスワード1が妥当なものかチェックして
// 妥当であれば、パスワード2のフィールドを入力可にする
// - パスワード1のフィールドのonblurにセットする
function open_password2_field(form_name, password1_field, password2_field) {
    var elem1 = document.forms[form_name].elements[password1_field];
    var elem2 = document.forms[form_name].elements[password2_field];

    var valid_err = _validate_text(elem1, min_str['passwd1'], max_str['passwd1']);
    if (valid_err) {
        elem2.disabled = true;
        elem2.style.backgroundColor = '#d3d3d3';
    }
    else {
        elem2.disabled = false;
        elem2.style.backgroundColor = '#fff';
        setTimeout("_focus_element('" + elem2.form.name + "', '" + elem2.name +"')", 0);
    }
}

// パスワード1とパスワード2（確認用）が同一かどうかチェックしていろいろする
// - パスワード2のフィールドのonblurにセットする
function check_password_identity(form_name, password1_field, password2_field) {
    var elem1 = document.forms[form_name].elements[password1_field];
    var elem2 = document.forms[form_name].elements[password2_field];

    var elem2_new = document.createElement('input');
    var password0 = elem1.value;
    var password1 = elem2.value;

    if (password0 == password1) {
        return true;
    }
    else {
        alert('確認用パスワードが一致しません');
        // フォーカスをパスワード1のフィールドに移す
        setTimeout("_focus_element('" + elem1.form.name + "', '" + elem1.name +"')", 0);
        return false;
    }
}

// フィールド内のテキストの"文字数/最大文字数"を表示して、文字数を返す
function _display_lenth_counter(elem, length_id, color, max_length) {
    var counter = document.getElementById(length_id);
    counter.style.color = color;
    var len = elem.value.length;
    // "現在の文字数/最大文字数"という文字列を作る
    var lenstr = len + '/' + max_length;
    // 表示部置換用にテキストノードを生成
    var len_node = document.createTextNode(lenstr);

    // 表示（置換）
    counter.replaceChild(len_node, counter.firstChild);

    return len;
}

// 指定したフィールドにフォーカスを移す
function _focus_element(form_name, elem_name) {
    var elem = document.forms[form_name].elements[elem_name];
    elem.focus();
    elem.select();
}

// 指定したフォーム要素をクリックする
function click_elem(form_name, elem_name, num) {
    var elem = document.forms[form_name].elements[elem_name][num];
    elem.checked = true;
}
