var errors;

function removeHTMLTags(strInputCode){
 	strInputCode = strInputCode.replace(/&(lt|gt);/g, function (strMatch, p1){
	 	return (p1 == "lt")? "<" : ">";
	});
	var strTagStrippedText = strInputCode.replace(/<\/?[^>]+(>|$)/g, "");
	return strTagStrippedText;
}


function addError(error) {
	errors = errors + '\n' + error;
}

function showError(errors) {
	if (errors != "") {
		alert(removeHTMLTags(errors.replace(/^\s+/, '').replace(/\s+$/, '')));
	}
	return errors == "";
}

function validateEmailField(fieldId) {
	validateRequiredField(fieldId);
	validateEmail(fieldId);
}

function validateAmountField(fieldId) {
	if (validateRequired(fieldId, true)) {
		validateAmount(fieldId, 0, false);
	}
}

function validateFreeAmountField(fieldId) {
	if (validateRequired(fieldId, true)) {
		validateAmount(fieldId, 0, true);
	}
}

function validateRequiredField(fieldId) {
	return validateRequired(fieldId, true);
}

function validatePasswordField(fieldId) {
	if (validateRequiredField(fieldId)) {
 		validateNoSpecialChar(fieldId);
		validateMinLength(fieldId, 8);
	}
}

function validateDateField(fieldId) {
	validateRequired(fieldId + "Date", false);
	validateRequired(fieldId + "Month", false);
	validateRequired(fieldId + "Year", false);
}

function validateVpinField(vpinId) {
	validateRequired(vpinId + "_1", true);
	validateNoSpecialChar(vpinId + "_1", true);
	validateMaxLength(vpinId + "_1", 1);
	validateRequired(vpinId + "_2", true);
	validateNoSpecialChar(vpinId + "_2", true);
	validateMaxLength(vpinId + "_2", 1);
	validateRequired(vpinId + "_3", true);
	validateNoSpecialChar(vpinId + "_3", true);
	validateMaxLength(vpinId + "_3", 1);
	validateRequired(vpinId + "_4", true);
	validateNoSpecialChar(vpinId + "_4", true);
	validateMaxLength(vpinId + "_4", 1);
	validateRequired(vpinId + "_5", true);
	validateNoSpecialChar(vpinId + "_5", true);
	validateMaxLength(vpinId + "_5", 1);
	validateRequired(vpinId + "_6", true);
	validateNoSpecialChar(vpinId + "_6", true);
	validateMaxLength(vpinId + "_6", 1);
}

function validateCaptchaField() {
	validateRequiredField('captchafield');
}

function validateNumericField(fieldId) {
	if (validateRequired(fieldId, true)) {
		validateNumeric(fieldId, true);
	}
}

function validateUserNameField(fieldId) {
	if (validateRequired(fieldId, true)) {
		validateUserName(fieldId);
	}
}

/**
 * Validasi untuk field tipe email
 */
function validateEmail(fieldId) {
	var errors = false;
	if (document.getElementById(fieldId)) {
	    field = document.getElementById(fieldId);
        var error = "The " + getFieldTitle(field) +" you entered is not valid Ex: support@payglobalone.com";
        if (field.value != null && field.value.length > 0 && field.value.match(/\b(^[_A-Za-z0-9-]+(\.[_A-Za-z0-9-]+)*@([A-Za-z0-9-])+(\.[A-Za-z0-9-]+)*((\.[A-Za-z0-9]{2,})|(\.[A-Za-z0-9]{2,}\.[A-Za-z0-9]{2,}))$)\b/gi)==null) {
            addError(error);
            errors = true;
        }
    }
    return !errors;
}

function validatePhoneNumber(fieldId) {
	var errors = false;
	if (document.getElementById(fieldId)) {
		field = document.getElementById(fieldId);
		var error = "The " + getFieldTitle(field) + " you entered is not valid. Ex: 021-123124326";
		if (field.value != null && field.value.length > 0 && field.value.match(/\b[0-9]+[-][0-9]+\b/gi)==null) {
			addError(error);
			errors=true;
		}
	}
	return !errors;
}

/**
 * validasi untuk field tipe bilangan, yang harus > 0
 * equals = true bila boleh >= 0
 * equals = false bila hanya boleh > 0
 */
function validateAmount(fieldId, bound, equals) {
	validateNumeric(fieldId, true);
	var errors = false;
	if (document.getElementById(fieldId)) {
    	field = document.getElementById(fieldId);
        var error = getFieldTitle(field) + " must be greater than ";
        if (equals) {
        	error = error + "or equals ";
        }
        error = error + bound;
        var fieldValue = field.value;
        fieldValue = fieldValue.replace(/\./g, '');
        fieldValue = fieldValue.replace(/\,/g, '');
        var valid = equals && fieldValue >= bound;
        valid = valid || !equals && fieldValue > bound;
        if (!valid) {
        	addError(error);
            errors = true;
        }
	}
    return !errors;
}

/**
 * validasi untuk field yang harus diisi
 */
function validateRequired(fieldId, allowZero) {
	field = document.getElementById(fieldId);
 	if (field) {
		if (field.disabled == true) {
			return true;
		}
		var error = getFieldTitle(field) + " is required.";
		if (!isFilled(field.value, allowZero)) {
			addError(error);
			return false;
        }
 	}
 	return true;
}

function isFilled(value, allowZero) {
	allowedValue = "";
	if(allowZero == false) {
		allowedValue = "0";
	} else if(allowZero != true) {
		allowedValue = allowZero;
	}
	return (value != null && value != "" && value.replace(/^\s+|\s+$/g,"").length != 0 && (allowedValue == "" || (allowedValue != "" && value != allowedValue)));
}

/**
 * Validasi untuk panjang minimal dari field
 */
function validateMinLength(fieldId, length) {
	var errors = false;
 	if (document.getElementById(fieldId)) {
		field = document.getElementById(fieldId);
		var error = getFieldTitle(field) + " must contain minimum " + length + " characters.";
		if (field.value != null && field.value.length < length) {
			addError(error);
			errors = true;
        }
 	}
}

/**
 * Validasi untuk panjang maximal dari field
 */
function validateMaxLength(fieldId, length) {
	var errors = false;
 	if (document.getElementById(fieldId)) {
		field = document.getElementById(fieldId);
		var error = getFieldTitle(field) + " can't be longer than " + length + "characters.";
		if (field.value != null && field.value.length > length) {
			addError(error);
			errors = true;
        }
 	}
}

/**
 * Validasi untuk field yang tidak boleh mengandung spasi
 */
function validateNoSpecialChar(fieldId) {
	var errors = false;
 	if (document.getElementById(fieldId)) {
		field = document.getElementById(fieldId);
		var error = "The " + getFieldTitle(field) + " you entered is not valid : cannot contain character | ; = and space";
		if (field.value != null && field.value.length > 0 && !passwordCharsValid(field.value)) {
			addError(error);
			errors = true;
        }
 	}
}

/**
 * Validasi untuk user name = alphanumeric, titik, underscore
 */
function validateUserName(fieldId) {
	var errors = false;
 	if (document.getElementById(fieldId)) {
		field = document.getElementById(fieldId);
		var error = "The " + getFieldTitle(field) +" you entered is not valid : can only contain alphabets, numbers and characters . -";
		if (field.value != null && field.value.length > 0 && !usernameCharsValid(field.value)) {
			addError(error);
			errors = true;
        }
 	}
}

/**
 * Validasi hanya boleh mengandung angka
 */
function validateNumeric(fieldId, numbersOnly) {
	var errors = false;
	if (document.getElementById(fieldId)) {
		field = document.getElementById(fieldId);
		var error = "The " + getFieldTitle(field) + " can only contain numbers";
        if (field.value != null && field.value.length > 0 && !numberCharsValid(field.value, numbersOnly)) {
            addError(error);
            errors = true;
        }
    }
    return !errors;
}

/**
 * Validasi untuk 2 field yang harus sama
 */
function validatePairAndEqual(firstField, secondField) {
	if (isFilled(firstField, false) && isFilled(secondField, false)) {
		if (document.getElementById(firstField)) {
			first = document.getElementById(firstField);
			if (document.getElementById(secondField)) {
				second = document.getElementById(secondField);
				if (first.value != second.value) {
					addError(getFieldTitle(first) + " is not the same with "+ getFieldTitle(second));
				} else {
					return true;
				}
			}
		}
	}
	return false;
}

/**
 * Validasi untuk 2 field yang harus sama2 diisi atau sama2 tidak diisi
 */
function validatePair(firstField, secondField, thirdField) {
	var notError = true;
	first = document.getElementById(firstField);
	second = document.getElementById(secondField);
	third = document.getElementById(thirdField);
	if (first != null && isFilled(first.value, false)) {
		notError = validateRequired(secondField, true) &&
		validateRequired(thirdField, true);
	}
	if (notError && second != null && isFilled(second.value, false)) {
		notError = validateRequired(firstField, false) &&
		validateRequired(thirdField, true);
	}
	if (notError && third != null && isFilled(third.value, false)) {
		notError = validateRequired(firstField, false) &&
		validateRequired(secondField, true);
	}
}

function passwordCharValid(c)	 {
	return !((c == "|") || (c == "=") || (c == ";") || (c == " "));
}

function passwordCharsValid(s) {
	for (var i=0 ; i < s.length; i++) {
		if (!passwordCharValid(s.charAt(i))) {
			return false;
		}
	}
	return true;
}

function usernameCharValid(c) {
  return ( ((c >= 'a') && (c <= 'z')) ||
           ((c >= 'A') && (c <= 'Z')) ||
           ((c >= '0') && (c <= '9')) ||
           (c == '.') ||
           (c == "_") );
}

function usernameCharsValid(s) {
  for (var i = 0; i < s.length; i++) {
    if (!usernameCharValid(s.charAt(i)))
      return false;
  }
  return true;
}

function numberCharValid(c, numbersOnly) {
	result = (c >= '0') && (c <= '9');
	result = result || (c == '.')
					|| (c == ',')
					|| (c == '-');
	if (!numbersOnly) {
		result = result || (c == ')')
						|| (c == '(')
						|| (c == '+')
						|| (c == ' ');
	}
	return result;
}

function numberCharsValid(s, numbersOnly) {
  for (var i = 0; i < s.length; i++) {
    if (!numberCharValid(s.charAt(i), numbersOnly))
      return false;
  }
  return true;
}

function getFieldTitle(field) {
	return field.title;
}

/**
 * Validasi untuk 2 field yang harus sama2 diisi atau sama2 tidak diisi
 */
function validateValue(firstField, secondField, thirdField) {
	var notError = true;
	first = document.getElementById(firstField);
	second = document.getElementById(secondField);
	third = document.getElementById(thirdField);
	if (first != null && isFilled(first.value, false)) {
		if(first.value == second.value ||
		   first.value == third.value){
//		   addError("Bank Account Number is already exists");
		}
	}
}
 
function validateBankAccount(fieldId) {
	 	if (document.getElementById(fieldId)) {
			field = document.getElementById(fieldId);
			if (field.disabled == true) {
				return true;
			}
			var error = getFieldTitle(field) + " is supposed to be filled with Your Bank Account.";
			if (field.value == '3731200775' || field.value == '1170012007753') {
				addError(error);
				return false;
	        }
	 	}
	 	return true;
	}

