Array.prototype.in_array = function(v) {
    for (var i = 0; i < this.length; i++) {
        if (v == this[i]) {
            return true;
        }
    }
    return false;
}
String.prototype.replaceAll = function(org, dst) {
    return this.split(org).join(dst);
};
var inq_err = '';
var inquiry_name_err = '';
var inquiry_mail_err = '';
var inquiry_telephone_err = '';
var inquiry_comment_err = '';
var inquiry_privacy_err = '';

function InquiryPost()
{
    contentsValid = isInquiryContentsValid();
    if (contentsValid) {
        Element.removeClassName('inqErr', 'formError');
        Element.removeClassName('inq_list', 'error');
        Element.update('inqErr', '');
    } else {
        Element.addClassName('inqErr', 'formError');
        Element.update('inqErr', inq_err);
        Element.addClassName('inq_list', 'error');
    }

    nameValid = isNameValid();
    if (nameValid) {
        Element.removeClassName('nameErr', 'formError');
        Element.removeClassName('inquiry_name', 'error');
        Element.update('nameErr', '');
    } else {
        Element.addClassName('nameErr', 'formError');
        Element.addClassName('inquiry_name', 'error');
        Element.update('nameErr', inquiry_name_err);
    }
    mailValid = isMailValid();
    if (mailValid) {
        Element.removeClassName('mailErr', 'formError');
        Element.removeClassName('inquiry_mail', 'error');
        Element.update('mailErr', '');
    } else {
        Element.addClassName('mailErr', 'formError');
        Element.addClassName('inquiry_mail', 'error');
        Element.update('mailErr', inquiry_mail_err);
    }

    telephoneValid = isTelephoneValid();
    if (telephoneValid) {
        Element.removeClassName('telephoneErr', 'formError');
        Element.removeClassName('inquiry_telephone', 'error');
        Element.update('telephoneErr', '');
    } else {
        Element.addClassName('telephoneErr', 'formError');
        Element.addClassName('inquiry_telephone', 'error');
        Element.update('telephoneErr', inquiry_telephone_err);
    }

    commentValid = isCommentValid();
    if (commentValid) {
        Element.removeClassName('commentErr', 'formError');
        Element.removeClassName('inquiry_comment', 'error');
        Element.update('commentErr', '');
    } else {
        Element.addClassName('commentErr', 'formError');
        Element.addClassName('inquiry_comment', 'error');
        Element.update('commentErr', inquiry_comment_err);
    }

    if (mailValid && telephoneValid) {
        telephoneMailValid = isTelephoneMailMutualValid();
        if (telephoneMailValid) {
            Element.removeClassName('mailErr', 'formError');
            Element.removeClassName('inquiry_mail', 'error');
            Element.update('mailErr', '');
        } else if (mailValid && telephoneValid) {
            Element.addClassName('mailErr', 'formError');
            Element.addClassName('inquiry_mail', 'error');
            Element.update('mailErr', inquiry_mail_err);
        }
    }

    contentsCommentValid = isContentsCommentMutualValid();
    if (contentsCommentValid) {
        Element.removeClassName('commentErr', 'formError');
        Element.removeClassName('inquiry_comment', 'error');
        Element.update('commentErr', '');
    } else {
        Element.addClassName('commentErr', 'formError');
        Element.addClassName('inquiry_comment', 'error');
        Element.update('commentErr', inquiry_comment_err);
    }

    privacyValid = isPrivacyValid();
    if (privacyValid) {
        Element.removeClassName('privacyErr', 'formError');
        Element.removeClassName('privacy_check', 'error');
        Element.update('privacyErr', '');
    } else {
        Element.addClassName('privacyErr', 'formError');
        Element.addClassName('privacy_check', 'error');
        Element.update('privacyErr', inquiry_privacy_err);
    }
    setScroll("#inquiry_form");
    return contentsValid && nameValid && mailValid && telephoneValid && commentValid && telephoneMailValid && contentsCommentValid && privacyValid;
}

function isInquiryContentsValid()
{
    inq_checked = $A(document.getElementsByTagName('input')).any(function(ipt) {return (ipt.type == 'checkbox' && ipt.id.match(/^inquiry_inq/) && ipt.checked);});
    if (!inq_checked) {
        inq_err = 'お問い合わせ内容を最低1つチェックしてください';
    }
    return inq_checked;
}

function isNameValid()
{
    name = $F('inquiry_name');
    if (name.length == 0) {
        inquiry_name_err = 'お名前が入力されていません';
        return false;
    }
    var ngList = {0:"テスト", 1:"test", 2:'ﾃｽﾄ', 3:'てｓｔ', 4:'^[ァ-ー]$', 5:'^[あ-ん]$'};
    for (var ng in ngList) {
        if (name.match(new RegExp(ngList[ng], 'i'))) {
            inquiry_name_err = '正しい名前を入力してください';
            return false;
        }
    }
    return true;
}

function isMailValid()
{
    var mail = $F('inquiry_mail');
    if (mail.length > 100 || (mail.length != 0 && !mail.match(/^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i))) {
        inquiry_mail_err = "正しいメールアドレスを入力してください";
        return false;
    } else if (isTestMail(mail)) {
        inquiry_mail_err = "正しいメールアドレスを入力してください";
        return false;
    } else if (mail.length > 0) {
        isExists = isMailExists(mail);
        if (!isExists) {
            inquiry_mail_err = "正しいメールアドレスを入力してください";
        }
        return isExists;
    }
    return true;
}

function isTestMail(mail)
{
    m = mail.toLowerCase().split('@');
    if (new Array('chintai.door.ac', 'livesense.co.jp', 'livesense.jp').in_array(m[1])) {
        return mail.toLowerCase() != 'support@chintai.door.ac';
    }
    return false;
}

function isMailExists(mail)
{
    isExists = 'yes';
    new Ajax.Request(
        '/inquiry/check?mail=' + mail,
        {
            method: 'get',
            asynchronous: false,
            onComplete: function(e) {
                isExists = e.responseText;
            }
        }
    );
    return isExists == 'yes';
}

function isTelephoneValid()
{
    $('inquiry_telephone').value = fullToHalf($F('inquiry_telephone')).replace(' ', '');
    telephone = $F('inquiry_telephone');
    if (telephone.length == 0) {
        return true;
    }
    if (!telephone.match(/^[0-9-]*$/)) {
        inquiry_telephone_err = '正しい電話番号を入力してください';
        return false;
    }
    var telephoneWithoutString = telephone.replaceAll('-', '');
    if (isLivesenseTelephone(telephoneWithoutString)) {
        inquiry_telephone_err = '正しい電話番号を入力してください';
        return false;
    }
    if (telephoneWithoutString.match(/^0(5|7|8|9)0/) && telephoneWithoutString.length != 11) {
        inquiry_telephone_err = '正しい電話番号を入力してください';
        return false;
    } else if (telephoneWithoutString.length < 10) {
        inquiry_telephone_err = '市外局番から入力してください';
        return false;
    } else if (!telephoneWithoutString.match(/^0(5|7|8|9)0/) && telephoneWithoutString.length > 10) {
        inquiry_telephone_err = '正しい電話番号を入力してください';
        return false;
    }
    return true;
}

function isLivesenseTelephone(telephone)
{
    telephone = telephone.replaceAll('-', '');
    return new Array('0362753330','0362753331','0362753332','0362753333','0362753334','0362753335','0362753336','0362753337','0362753338','0362753339','0362753370').in_array(telephone);
}

function isCommentValid()
{
    var comment = $F('inquiry_comment');
    if (comment == '') {
        return true;
    }
    var ngList = {0:"^テスト$", 1:"^test$", 2:'^ﾃｽﾄ$', 3:'てｓｔ', 4:'^[ァ-ー]$', 5:'^[あ-ん]$'};
    for (var index in ngList) {
        if (comment.match(new RegExp(ngList[index], 'i'))) {
            inquiry_comment_err = '備考を5文字以上入力してください';
            return false;
        }
    }
    return true;
}

function isTelephoneMailMutualValid()
{
    mail = $F('inquiry_mail');
    telephone = $F('inquiry_telephone');
    if (mail.length == 0 && telephone.length == 0) {
        inquiry_mail_err = 'メールアドレスまたは電話番号のいずれかを入力してください';
        return false;
    }
    return true;
}

function isContentsCommentMutualValid()
{
    comment = $F('inquiry_comment');
    if ($('inquiry_inq_7').checked && comment.length == 0) {
        inquiry_comment_err = '備考に詳細を記入してください';
        return false;
    } else if (!isCommentValid()) {
        inquiry_comment_err = '備考を5文字以上入力してください';
        return false;
    }
    return true;
}

function isPrivacyValid()
{
    if (!$('inquiry_privacy').checked) {
        inquiry_privacy_err = '利用規約及び第4条・開示対象個人情報の取扱と周知について同意してください';
    }
    return $('inquiry_privacy').checked;
}

function fullToHalf(numString)
{
    var fullArray = new Array("０", "１", "２", "３", "４", "５", "６", "７", "８", "９");
    var halfArray = new Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
    for (var index=0; index<fullArray.length; index++) {
        numString = numString.replaceAll(fullArray[index], halfArray[index]);
    }
    numString = numString.replaceAll("ー", "-");
    return numString;
}

function checkTelephone(telephone)
{
    if (telephone == '') {
        return '';
    }
    if (!telephone.match(/^[0-9-]*$/)) {
        return '正しい電話番号を入力してください';
    }
    var telephoneWithoutString = telephone.replaceAll('-', '');
    if (telephoneWithoutString.match(/^0(5|7|8|9)0/) && telephoneWithoutString.length != 11) {
        return '正しい電話番号を入力してください';
    } else if (telephoneWithoutString.length < 10) {
        return '市外局番から入力してください';
    } else if (!telephoneWithoutString.match(/^0(5|7|8|9)0/) && telephoneWithoutString.length > 10) {
        return '正しい電話番号を入力してください';
    }
    return '';
}
