// validation data type
var valString                         = "string";
var valInt                                 = "int";
var valFloat                         = "float";
var valDate                         = "date";
var valAlphaNum                        = "alphaNum";
var valPhone                        = "phone";
var valEmail                         = "email";
var valPrice                         = "price";
var valQuantity                        = "quantity";
var valQuantity2                = "quantity2";
var valQuantity3                = "quantity3";
var valAlpha                        = "alpha";

function validDataJoin(checkStr, dataType, checkNull, checkLen, lessThanLen, moreThanLen, name, errMsg){
        // null data check
        if ( checkNull.length != 0 && (isNull(checkStr) || isAllSpace(checkStr)) )
        {
                return false;
        }

        // data type? validation
        if (dataType == valInt)
        {
                if ( !(isNumeric(checkStr)) )
                {
                        return false;
                }
        }
        else if (dataType == valFloat)
        {
                if ( !(isFloat(checkStr)) )
                {
                        alert(errMsg);
                        return false;
                }
        }
        else if (dataType == valDate)
        {
                if ( !(isNumeric(checkStr)) )
                {
                        return false;
                }
                else if ( !(isDate(checkStr)) )
                {
                        alert(errMsg);
                        return false;
                }
        }
        else if (dataType == valAlphaNum)
        {
                if ( !(isAlphaNumeric(checkStr)) )
                {
                        return false;
                }
        }
        else if (dataType == valAlpha)
        {
                if ( !(isAlpha(checkStr)) )
                {
                        return false;
                }
        }
        else if (dataType == valPhone)
        {
                if ( !(isPhone(checkStr)) )
                {
                        return false;
                }
        }
        else if (dataType == valEmail)
        {
                if ( !(isEmail(checkStr)) )
                {
                        return false;
                }
        }
        else if (dataType == valPrice)
        {
                if ( !(isPrice(checkStr)) )
                {
                        alert(errMsg);
                        return false;
                }
        }
        else if (dataType == valQuantity)
        {
                if ( !(isQuantity(checkStr)) )
                {
                        alert(errMsg);
                        return false;
                }
        }
        else if (dataType == valQuantity2)
        {
                if ( !(isQuantity2(checkStr)) )
                {
                        return false;
                }
        }
        else if (dataType == valQuantity3)
        {
                if ( !(isQuantity3(checkStr)) )
                {
                        return false;
                }
        }
        // data length check
        if (checkStr.length > 0) {
                if (checkLen.length != 0 && checkStr.length != eval(checkLen))
                {
                        return false;
                }
        }

        // less than length check
        if (checkStr.length > 0) {
                if (lessThanLen.length != 0 && checkStr.length > eval(lessThanLen))
                {
                        return false;
                }
        }

        // more than length check
        if (checkStr.length > 0) {
                if (moreThanLen.length != 0 && checkStr.length < eval(moreThanLen))
                {
                        return false;
                }
        }

        return true;
}

// valid data check
function validData(checkStr, dataType, checkNull, checkLen, lessThanLen, moreThanLen, name, errMsg)
{
        // null data check
        if ( checkNull.length != 0 && (isNull(checkStr) || isAllSpace(checkStr)) )
        {
                alert("Please enter " + name);
                return false;
        }

        // data type? validation
        if (dataType == valInt)
        {
                if ( !(isNumeric(checkStr)) )
                {
                        alert("Please enter " + name + " in only number.");
                        return false;
                }
        }
        else if (dataType == valFloat)
        {
                if ( !(isFloat(checkStr)) )
                {
                        alert(errMsg);
                        return false;
                }
        }
        else if (dataType == valDate)
        {
                if ( !(isNumeric(checkStr)) )
                {
                        alert("Please enter " + name + " in only number.");
                        return false;
                }
                else if ( !(isDate(checkStr)) )
                {
                        alert(errMsg);
                        return false;
                }
        }
        else if (dataType == valAlphaNum)
        {
                if ( !(isAlphaNumeric(checkStr)) )
                {
                        alert("Please enter " + name + " in English or number or combination of English and number.");
                        return false;
                }
        }
        else if (dataType == valAlpha)
        {
                if ( !(isAlpha(checkStr)) )
                {
                        alert("Please enter " + name + " in only English.");
                        return false;
                }
        }
        else if (dataType == valPhone)
        {
                if ( !(isPhone(checkStr)) )
                {
                        alert("Please enter " + name + " in combination of number and '-'.");
                        return false;
                }
        }
        else if (dataType == valEmail)
        {
                if ( !(isEmail(checkStr)) )
                {
                        alert("It is not a valid e-mail address.  Please enter it again.");
                        return false;
                }
        }
        else if (dataType == valPrice)
        {
                if ( !(isPrice(checkStr)) )
                {
                        alert(errMsg);
                        return false;
                }
        }
        else if (dataType == valQuantity)
        {
                if ( !(isQuantity(checkStr)) )
                {
                        alert(errMsg);
                        return false;
                }
        }
        else if (dataType == valQuantity2)
        {
                if ( !(isQuantity2(checkStr)) )
                {
                        alert("Please enter " + name + " in combination of number and '/'.");
                        return false;
                }
        }
        else if (dataType == valQuantity3)
        {
                if ( !(isQuantity3(checkStr)) )
                {
                        alert("Please enter " + name + " in combination of number, '/' and '-'.");
                        return false;
                }
        }
        // data length check
        if (checkStr.length > 0) {
                if (checkLen.length != 0 && checkStr.length != eval(checkLen))
                {
                        alert("Please enter " + name + " in the maximum " + checkLen + " letters.");
                        return false;
                }
        }

        // less than length check
        if (checkStr.length > 0) {
                if (lessThanLen.length != 0 && checkStr.length > eval(lessThanLen))
                {
                        alert("Please enter " + name + " less than " + lessThanLen + " characters.");
                        return false;
                }
        }

        // more than length check
        if (checkStr.length > 0) {
                if (moreThanLen.length != 0 && checkStr.length < eval(moreThanLen))
                {
                        alert("Please enter " + name + " of more than " + moreThanLen + " characters.");
                        return false;
                }
        }

        return true;
}
function validDataO(checkStr, dataType, checkNull, checkLen, lessThanLen, moreThanLen, name, errMsg)
{
        // null data check
        if ( checkNull.length != 0 && (isNull(checkStr) || isAllSpace(checkStr)) )
        {
                alert("Please enter " + name);
                return false;
        }

        // data type? validation
        if (dataType == valInt)
        {
                if ( !(isNumeric(checkStr)) )
                {
                        alert("Please enter " + name + " in number.");
                        return false;
                }
        }
        else if (dataType == valFloat)
        {
                if ( !(isFloat(checkStr)) )
                {
                        alert(errMsg);
                        return false;
                }
        }
        else if (dataType == valDate)
        {
                if ( !(isNumeric(checkStr)) )
                {
                        alert("Please enter " + name + " in number.");
                        return false;
                }
                else if ( !(isDate(checkStr)) )
                {
                        alert(errMsg);
                        return false;
                }
        }
        else if (dataType == valAlphaNum)
        {
                if ( !(isAlphaNumeric(checkStr)) )
                {
                        alert("Please enter " + name + " in English or number or combination of English and number.");
                        return false;
                }
        }
        else if (dataType == valPhone)
        {
                if ( !(isPhone(checkStr)) )
                {
                        alert("Please enter " + name + " combination of number and '-'.");
                        return false;
                }
        }
        else if (dataType == valEmail)
        {
                if ( !(isEmail(checkStr)) )
                {
                        alert(errMsg);
                        return false;
                }
        }
        else if (dataType == valPrice)
        {
                if ( !(isPrice(checkStr)) )
                {
                        alert(errMsg);
                        return false;
                }
        }

        // data length check
        if (checkLen.length != 0 && checkStr.length != eval(checkLen))
        {
                alert("Please enter " + name + " in " + checkLen + " letters.");
                return false;
        }

        // less than length check
        if (lessThanLen.length != 0 && checkStr.length > eval(lessThanLen))
        {
                alert("Please enter " + name + " in the maximum " + lessThanLen + " letters.");
                return false;
        }

        // more than length check
        if (moreThanLen.length != 0 && checkStr.length < eval(moreThanLen))
        {
                alert("Please enter " + name + " in more than " + moreThanLen + " letters.");
                return false;
        }

        return true;
}

// Null check
function isNull(checkStr)
{
        if (checkStr != null && checkStr.length != 0)
        {
                return false;
        }

        return true;
}

// Alphabet & number check
function isAlphaNumeric(checkStr)
{
//        var checkOK = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789`~!@#$^*()_\+-=||{}[]:;<>?/\\";
        var checkOK = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";

        for (i = 0;  i < checkStr.length;  i++)
        {
                ch = checkStr.charAt(i);
                for (j = 0;  j < checkOK.length;  j++)
                {
                        if (ch == checkOK.charAt(j))
                        {
                                break;
                        }
                }
                if (j == checkOK.length)
                {
                        return false;
                        break;
                }
        }

        return true;
}

// Numeric number check
function isNumeric(checkStr)
{
        var checkOK = "0123456789";

        for (i = 0;  i < checkStr.length;  i++)
        {
                ch = checkStr.charAt(i);
                for (j = 0;  j < checkOK.length;  j++)
                {
                        if (ch == checkOK.charAt(j))
                        {
                                break;
                        }
                }
                if (j == checkOK.length)
                {
                        return false;
                        break;
                }
        }

        return true;
}

// Floating number check
function isFloat(checkStr)
{
        var checkOK = "0123456789.";

        for (i = 0;  i < checkStr.length;  i++)
        {
                ch = checkStr.charAt(i);
                for (j = 0;  j < checkOK.length;  j++)
                {
                        if (ch == checkOK.charAt(j))
                        {
                                break;
                        }
                }
                if (j == checkOK.length)
                {
                        return false;
                        break;
                }
        }

        if (i == 1 && checkStr.charAt(0) == '.')
        {
                return false;
        }

        return true;
}

// Alphabet check
function isAlpha(checkStr)
{
        var checkOK = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";

        for (i = 0;  i < checkStr.length;  i++)
        {
                ch = checkStr.charAt(i);
                for (j = 0;  j < checkOK.length;  j++)
                {
                        if (ch == checkOK.charAt(j))
                        {
                                break;
                        }
                }
                if (j == checkOK.length)
                {
                        return false;
                        break;
                }
        }

        return true;
}

// Phone number check
function isPhone(checkStr)
{
        var checkOK = "0123456789- ";

        for (i = 0;  i < checkStr.length;  i++)
        {
                ch = checkStr.charAt(i);
                for (j = 0;  j < checkOK.length;  j++)
                {
                        if (ch == checkOK.charAt(j))
                        {
                                break;
                        }
                }
                if (j == checkOK.length)
                {
                        return false;
                        break;
                }
        }

        return true;
}

// Email number check
function isEmail(checkStr)
{
        if(checkStr != null && checkStr.length != 0) {
                for (i = 0; i < checkStr.length; i++)
                {
                        ch = checkStr.charAt(i);
                if (ch == '@')
                        {
                                return true;
                        }
                }
                return false;
        }else{
                return true;
        }
}

// positive number check
function isPositive( chekStr )
{
        if ( parseFloat(chekStr) > 0 )
        {
                return true;
        }
        else
        {
                return false;
        }
}

// All Space String Check
function isAllSpace(checkStr)
{
        for (i = 0; i < checkStr.length; i++)
        {
                ch = checkStr.charAt(i);
                if (ch != ' ')
                {
                        return false;
                }
        }

        return true;
}

// Price check
function isPrice(checkStr)
{
        var checkOK = "0123456789.,";
        var len = checkStr.length;
        var strs = checkStr.split(".");
        var n = 0;

          if (len == 1 && (checkStr.charAt(0) == '.' || checkStr.charAt(0) == ','))
          {
                return false;
        }

         if (checkStr.charAt(0) == '.' || checkStr.charAt(0) == ',' || checkStr.charAt(len - 1) == ',')
         {
                return false;
        }

         for (i = 0;  i < checkStr.length;  i++)
        {
                ch = checkStr.charAt(i);
                for (j = 0;  j < checkOK.length;  j++)
                {
                        if (ch == checkOK.charAt(j))
                        {
                                break;
                        }
                }
                if (j == checkOK.length)
                {
                        return false;
                        break;
                }
        }

        if (strs.length > 2)
        {
                return false;
        }

        if (strs.length > 1 && strs[1].length > 2)
        {
                return false;
        }

        for (k = 0; k < strs[0].length; k++)
        {
                if (strs[0].charAt(k) != ',')
                {
                        n++;
                }
        }

        return (n <= 10)? (true) : (false);
}

// Quantity check
function isQuantity(checkStr)
{
        var checkOK = "0123456789,";
        var len = checkStr.length;
        var n = 0;

        if (checkStr.charAt(0) == ',' || checkStr.charAt(len - 1) == ',')
        {
                return false;
        }

        for (i = 0;  i < checkStr.length;  i++)
        {
                ch = checkStr.charAt(i);
                if (ch != ',')
                {
                        n++;
                }

                for (j = 0;  j < checkOK.length;  j++)
                {
                        if (ch == checkOK.charAt(j))
                        {
                                break;
                        }
                }
                if (j == checkOK.length)
                {
                        return false;
                        break;
                }
        }

        return (n <= 10)? (true) : (false);
}

// Quantity check
function isQuantity2(checkStr)
{
        var checkOK = "0123456789/";
        var len = checkStr.length;
        var n = 0;

        if (checkStr.charAt(0) == '/' || checkStr.charAt(len - 1) == '/')
        {
                return false;
        }

        for (i = 0;  i < checkStr.length;  i++)
        {
                ch = checkStr.charAt(i);
                if (ch != '/')
                {
                        n++;
                }

                for (j = 0;  j < checkOK.length;  j++)
                {
                        if (ch == checkOK.charAt(j))
                        {
                                break;
                        }
                }
                if (j == checkOK.length)
                {
                        return false;
                        break;
                }
        }

        return (n <= 10)? (true) : (false);
}

// Quantity check
function isQuantity3(checkStr)
{
        var checkOK = "0123456789/~";
        var len = checkStr.length;
        var n = 0;

        if (checkStr.charAt(0) == '/' || checkStr.charAt(len - 1) == '/' || checkStr.charAt(0) == '~' || checkStr.charAt(len - 1) == '~')
        {
                return false;
        }

        for (i = 0;  i < checkStr.length;  i++)
        {
                ch = checkStr.charAt(i);
                if (ch != '/' && ch != '~')
                {
                        n++;
                }

                for (j = 0;  j < checkOK.length;  j++)
                {
                        if (ch == checkOK.charAt(j))
                        {
                                break;
                        }
                }
                if (j == checkOK.length)
                {
                        return false;
                        break;
                }
        }

        return (n <= 10)? (true) : (false);
}

// Date setting for fromDate vs toDate comparison check
function isDate(value)
{
        var     year  = value.substring(0,4);
        var     month = value.substring(4,6);
        var     day   = value.substring(6,8);
        return ( isYYYY(year) && isMM(month) && isDD(year,month,day) );
}

// fromDate vs toDate comparison check
function Compare(Fd,Td)
{
        if ((isDate(Fd) == true) && (isDate(Td) == true))
        {
                if (Fd > Td)
                {
                        return false;
                }
                else
                {
                        return true;
                }
        }
        else
        {
                return true;
        }
}

// Year check
function isYYYY(value)
{
        return ( (value.length == 4) && (isNumeric(value)) && (eval(value) > 1900) );
}

// Month check
function isMM(value)
{
        return ( (value.length > 0) && (isNumeric(value)) && (0 < eval(value)) && (eval(value) < 13) );
}

// Day check
function isDD(yyyy, mm, value)
{
        var result = false;
        var monthDD = new month_array(31,28,31,30,31,30,31,31,30,31,30,31);
        var index = eval(mm) - 1;
        if (value.length != 2)
        {
                return false;
        }
        if (!isNumeric(value))
        {
                return false;
        }
        if (((yyyy % 4 == 0) && (yyyy % 100 != 0)) || (yyyy % 400 == 0))
        {
                monthDD[1] = 29;
        }

        var dd = eval(value);

        if ((0 < dd) && (dd <= monthDD[index]))
        {
                result = true;
        }

        return result;
}

// Month array for day check
function month_array(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11)
{
        this[0] = m0;
        this[1] = m1;
        this[2] = m2;
        this[3] = m3;
        this[4] = m4;
        this[5] = m5;
        this[6] = m6;
        this[7] = m7;
        this[8] = m8;
        this[9] = m9;
        this[10] = m10;
        this[11] = m11;
}


function trim(str){
  var count = str.length;
  var len = count;
  var st = 0;

  while((st<len)&&(str.charAt(st)<=' ')){
    st++;
  }
  while((st<len)&&(str.charAt(len-1)<=' ')){
    len--;
  }
  return ((st>0)||(len<count)) ? str.substring(st, len) : str ;
}
