/*
 * form.js - フォーム用JavaScript
 * Copyright (C) 2005 Welva Corporation. All rights reserved.
 *
 * $Id: form.js,v 1.2 2006/01/15 13:27:58 makot-s Exp $
 */

/**
 * コメントフォームの初期化
 */
function initCommentForm() {
    document.comment.style.display = "";
}

/**
 * コメントフォームの送信
 */
function submitComment(btn, url) {
    btn.disabled = true;
    save = btn.value;
    btn.value = '送信処理中です';
    var errors = new Array;
    input_check(btn.form.author, 'お名前', 1, 20, errors);
    input_check(btn.form.email,  '電子メール', 1, 100, errors);
    input_check(btn.form.comment,'コメント', 1, 256, errors);
    /* 不正な名前 */
    if (btn.form.author.value.indexOf('管理者') >= 0) {
        errors[errors.length] = "お名前に「管理者」を使うことはできません。";
    }
    if (errors.length > 0) {
        window.alert(errors.join("\n"));
        btn.value = save;
        btn.disabled = false;
    } else {
        submitMagic(btn, url);
    }
}

/**
 * フォーム送信
 */
function submitMagic(btn, url) {
    magic = new PostMagic(btn.form);
    magic.submit(url);
}

/**
 * PostMagic
 */
function PostMagic(form) {
    this.form = form;
    if (window.XMLHttpRequest) {
        this.req = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
        try {
            this.req = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            this.req = new ActiveXObject("Microsoft.XMLHTTP");
        }
    }
    PostMagic.instance = this;
}

PostMagic._callback = function() {
    var magic = PostMagic.instance;
    if (magic.req.readyState == 4) {
        if (magic.req.status == 200) {
            var val = magic.req.responseText;
            magic.form.magic.value = val;
            magic.form.submit();
        }
    }
}

PostMagic.prototype.submit = function(url) {
    this.req.open('GET', url);
    this.req.onreadystatechange = PostMagic._callback;
    this.req.send(null);
}

/**
 * 文字データのチェック
 */
function input_check(input, name, lenmin, lenmax, errors) {
    /* 前後のスペースを削除 */
    input.value = input.value.replace(/^\s*/, '').replace(/\s*$/, '');
    /* 改行コードの正規化 */
    input.value = input.value.replace(/\r\n/g, "\n");
    input.value = input.value.replace(/\r/g,   "\n");
    /* 連続した改行は１つに */
    input.value = input.value.replace(/\n+/g,  "\n");
    var len = input.value.length;
    if (len < lenmin) {
        if (len == 0) {
            errors[errors.length] = name + "を入力してください。";
        } else {
            errors[errors.length] = name + "が短すぎます。";
        }
    }
    if (len > lenmax) {
        errors[errors.length] = name + "が長すぎます。";
    }
}

