/*
 * This file is part of HELIOS.CoTV.
 * Copyright (c) Exbridge,inc. <info@exbridge.jp>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * 汎用チェックJavaScript
 *
 * @copyright 2008- EXBRIDGE,Inc. All Rights Reserved.
 * @link      http://exbridge.jp/
 * @package   HELIOS.CoTV
 * @version   svn:$Id: validation.js 62 2009-11-09 03:19:08Z suganuma $
 */
//-----------------------------------------------------------------------------------
//入力チェックライブラリ
// 2007/11/12 Exbridge
//-----------------------------------------------------------------------------------
var E_2000 = '必須項目です。入力してください';
var E_2001 = '半角数字[0-9]で入力してください';
var E_2002 = '半角英数字で入力してください';
var E_2003 = '半角文字で入力してください';
var E_2004 = '全角文字で入力してください';
var E_2005 = '半角数字[0-9]または小数点[.]で入力してください';
var E_2006 = '半角文字%s文字以内または全角文字%s文字以内で入力してください';
var E_2007 = '%s文字以内で入力してください';
var E_2008 = '%s文字以上%s文字以内で入力してください';
var E_2009 = '%s桁以内で入力してください';
var E_2010 = '使用できない文字が含まれています';
var E_2011 = '入力された日付が間違っています。再入力して下さい';
var E_2012 = '期間が使用出来ない期間です';
var E_2013 = '該当しません';
var E_2014 = '最低1件は登録して下さい';
var E_2015 = '入力してください';
var E_2016 = '入力しないでてください';
var E_2017 = '上詰めで入力してください';
var E_2018 = '%s文字で入力してください';
var E_2019 = 'メールアドレスが正しくありません';

/**
 * SQLチェック
 */
function sqlCheck( id, str ){
    var v = j$(id).val();
    if(str==undefined){
        str = ''
    }
    var tmp=v.match(/[<>&'%_"\\]/g); //'
    if (tmp){
        var message =  E_2010;
        alert(message);
        return false;
    }
    return true;
}

/**
 * NULLチェック
 */
function nullCheck(id){
    var v = j$("#" + id).val();
    var error_id = "error_" + id;

    j$("#" + error_id).remove();
    if((v == null) || (v == undefined) || (v.length == 0)){
        var message =  E_2000;
        j$("#" + id).after("<p class='error_small' id='" + error_id +"'></p>");
        j$("#" + error_id).html(message).fadeIn();
        return false;
    }
    return true;
}

/**
 * メールチェック
 */
function mailCheck(id){
    var v = j$("#" + id).val();
    var error_id = "error_" + id;

    j$("#" + error_id).remove();
    if(!v.match(/^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.([a-zA-Z]){2,4})$/)){
        var message =  E_2019;
        j$("#" + id).after("<p class='error_small' id='" + error_id +"'></p>");
        j$("#" + error_id).html(message).fadeIn();
        return false;
    }
    return true;
}

/**
 * 数字チェック
 */
function numberCheck( id, str ){
    if(str==undefined){
        str = ''
    }
    if( isNull(j$(id)) ){
        return true;
    }
    if( j$(id).val() == 0 ){
        return true;
    }

    var v = j$(id).val();

    //左側の「0」を削除する
    v = v.replace(/^0+/,"");

    if(!v.match(/^[1-9]+[0-9]*$/)){
        //「半角数字[0-9]で入力してください」
        var message = E_2001;
        alert(message);
        return false;
    }
    return true;
}

/**
 * 数字(小数)チェック
 */
function decimalCheck( id, str ){
    if(str==undefined){
        str = ''
    }
    var v = j$(id).val();
    if(isNaN(v) || !v.match(/^[0-9.]+$/)){
        //「半角数字[0-9]または小数点[.]で入力してください」
        var message = E_2005;
        alert(message);
        return false;
    }
    return true;
}

/**
 * 半角チェック
 */
function hanCheck( id, str ){
    if(str==undefined){
        str = ''
    }
    if(isNull(j$(id).val())) return true;
    var v = j$(id).val();
    //半角カタカナをすべて含んでいます
    var tmp=v.match(/^[-+\\\[\]w?-wﾝ0-9a-zA-Z!*/,.;:@&$%#"`^~_(){}?=| ]+$/g); //"
    if (!tmp){
        //「半角文字で入力してください」
        var message = E_2003;
        alert(message);
        return false;
    }
    return true;
}

/**
 * 半角英数字チェック
 */
function haneiCheck( id, str ){
    if(str==undefined){
        str = ''
    }

    var v = j$(id).val();

    if(isNull(j$(id).val())) return true;

    if(!v.match(/^[ a-zA-Z0-9.()]+$/)){
        //「半角英数字で入力してください」
        var message = E_2002;
        alert(message);
        return false;
    }
    return true;
}

/**
 * 全角チェック
 */
function zenCheck( id, str ) {
    if(str==undefined){
        str = ''
    }

    var v = j$(id).val();

    for (var i = 0; i < v.length; ++i) {
        var c = v.charCodeAt(i);
        //  半角カタカナは不許可
        if (c < 256 || (c >= 0xff61 && c <= 0xff9f)) {
            //「全角文字で入力してください」
            var message = E_2004;
            alert(message);
            return false;
        }
    }
    return true;
}

/**
 * lengthチェック
 */
function lengthCheck( id, lMin, lMax, str){
    if(str==undefined){
        str = ''
    }
    var v = j$(id).val().length;
    if(v < lMin || v > lMax){
        if(lMin==0){
            //「%s以内で入力してください」
            var message = E_2007;
        }else{
            //「%s以上%s以内で入力してください」
            var message = E_2008;
            message = message.replace(/%s/,lMax);
        }
        message = message.replace(/%s/,str);
        alert(message);
        return false;
    }
    return true;
}
/**
 * lengthチェック(固定)
 */
function lengthCheckKotei( id, len, str){
    if(str==undefined){
        str = ''
    }
    var v = j$(id).val().length;
    if(v != len){
            var message = E_2018;
	        message = message.replace(/%s/,str);
	        alert(message);
	        return false;
    }
    return true;
}

/**
 * バイト数チェック
 */
function byteCheck( id, byteLen, str){
    if(str==undefined){
        str = ''
    }
    var v = j$(id).val();

    var count_byteCheck=0;

    for(i_byteCheck=0;i_byteCheck<v.length;i_byteCheck++){
        (escape(v.charAt(i_byteCheck)).length< 4)?count_byteCheck++:count_byteCheck+=2;
    }

    if(count_byteCheck > byteLen){
        //「半角文字%s文字以内または全角文字%s文字以内で入力してください」
        var message = E_2006;
        var harfLen = parseInt(byteLen/2);

        message = message.replace(/%s/,harfLen);
        message = message.replace(/%s/,str);
        alert(message);
        return false;
    }
    return true;
}

/**
 * 期間チェック()
 */
function fromToCheck(fromYmdId, toYmdId, str){
    if(str==undefined){
        str = ''
    }
    var fromDate = ''+j$(fromYmdId).value;
    var toDate = ''+j$(toYmdId).value;
    if(eval(fromDate) > eval(toDate)){
        //「期間が使用出来ない期間です[%s]」
        var message = E_2012;
        alert(message);
        return false;
    }
    return true;
}

/**
 * 特殊文字（外字）チェック
 */
function externalFontsCheck(id, str){
    var v = j$(id).val();
    if(str==undefined){
        str = ''
    }
    if(v.match(/[①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ㍉㌔㌢㍍㌘㌧㌃㌶㍑㍗㌍㌦㌣㌫㍊㌻㎜㎝㎞㎎㎏㏄㎡㍻〝〟№㏍℡㊤㊥㊦㊧㊨㈱㈲㈹㍾㍽㍼≒≡∫∮∑√⊥∠∟⊿∵∩∪]/)){
        //「使用できない文字が含まれています[%s]」
        var message = E_2010;
        alert(message);
        return false;
    }
    return true;
}

/**
 * 日付チェック
 */
function dateCheck( id, str ){
    var v = j$(id).val();
    if(str==undefined){
        str = ''
    }

    if(!v.match(/^\d{4}\/\d{2}\/\d{2}$/) && !v.match(/^\d{8}$/)){
        var message =  E_2013;
        alert(message);
        return false;
    }

    v = v.replace(/\//g, '');

    var year = v.substr(0, 4);
    var month = v.substr(4, 2);
    var day = v.substr(6, 2);

    if(month >= 1 && month <= 12 && day >= 1 && day <= 31){
        return true;
    }else{
        var message =  E_2011;
        alert(message);
        return false;
    }
}

/**
 * 該当チェック
 */
function GaitouCheck( id, str, list){
    var code = j$(id).val();
    if(code == '0'){
        return true;
    }
    if(str==undefined){
        str = ''
    }
    if(code==''){
        return true;
    }
    if(code in list){
        return true;
    }else{
        if(code != '0'){
            var message =  E_2013;
            alert(message);
            return false;
        }   
    }
}
/**
 * NULLALLチェック
 */
function nullallCheck( id, str, n ){
    var i = 0;
    for(cnt=0;cnt<n;cnt++){
        var v = j$(id[cnt]).val();
        if((v == null) || (v == undefined) || (v.length == 0) || (v == 0)){
                i++;
        }

    }
    
    if(str==undefined){
        str = ''
    }
    if(i == n){
        var message =  E_2014;
        alert(message);
        return false;
    }
    return true;
}
/**
 * 基準値NULLチェック
 */
function nullKijyunCheck( id, kj, str ){
    var v = j$(id).val();
    var k = j$(kj).val();
    if(str==undefined){
        str = ''
    }
    if(k > 5){
        if((v == null) || (v == undefined) || (v.length == 0)){
            var message =  E_2015;
            alert(message);
            return false;
        }
    }    
    if(k < 6){
        if((v != null) && (v != undefined) && (v.length != 0)){
            if(v != 0){
                var message =  E_2016;
                alert(message);
                return false;
            }
        }
    }    
    return true;
}
/**
 * 上詰めチェック
 */
function uedumeCheck( id, str, n ){
    if(str==undefined){
        str = ''
    }
    var i = 0;
    var kfg = 0;
    for(cnt=0;cnt<n;cnt++){
        var v = j$(id[cnt]).val();
        if((v == null) || (v == undefined) || (v.length == 0) || (v == 0)){
                i++;
        }else{
            if( kfg > 0 && i > 0 ){
                var message =  E_2017;
                alert(message);
                return false;        
            }
        }
        kfg++;

    }
    return true;
}
/**
 * NULLチェック(配列)
 */
function nullCheckHairetu( id, i, str ){
    var v = document.getElementsByName(id)[i].value;
    if(str==undefined){
        str = ''
    }
    if((v == null) || (v == undefined) || (v.length == 0)){
        var message =  E_2000;
        alert(message);
        return false;
    }
    return true;
}

//==========================================================================================================================
/**
 * NULL判断(入力値がないとtrueを返す)
 */
function isNull( value ){
    var v = value;
    if((v == null) || (v == undefined) || (v.length == 0) || (v.value == '')){
        return true;
    }
    return false;
}
//==========================================================================================================================
