var errors;

function validateLowerAmount(fieldId, fieldBound, equals) {
	var result = false;
	if (document.getElementById(fieldId)) {
    	field = document.getElementById(fieldId);
    	boundValue = document.getElementById(fieldBound).value;
        var error = getFieldTitle(field) + " must be lower than ";
        if (equals) {
        	error = error + "or equals ";
        }
        error = error + boundValue;
        var fieldValue = field.value;
        fieldValue = fieldValue.replace(/\./g, '');
        fieldValue = fieldValue.replace(/\,/g, '');
        var valid = equals && fieldValue <= boundValue;
        valid = valid || !equals && fieldValue < boundValue;
        if (!valid) {
        	addError(error);
            result = true;
        } 	
	}
    return !result;
}

function validateDecimalNumeric(fieldId, allowDecimal)
{
	var result = false;
	if (document.getElementById(fieldId).value != "")
	{
		validateNumericField(fieldId);
		if (errors == "")
		{
			validateFreeAmountField(fieldId);
			if (errors == "")
			{
				if (document.getElementById(fieldId)) {
				    field = document.getElementById(fieldId);
			        error = getFieldTitle(field) +" is not allowed for decimal numbers";
			        if ((!allowDecimal) && (field.value != null) && (field.value.length > 0) && (isDecimalChars(field.value)) ) {
			            addError(error);
			            result = true;
			        }
			    }
			}     		    
		}	
	}
	else
	{
		document.getElementById(fieldId).value = "0";		
	}	
	return !result;
	
}

function addError(error) {
	errors = errors + '\n' + error;
}

function showError(errors) {
	if (errors != "") {
		alert(errors);
	}
	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);
	validateNumericField(fieldId + "Year");
}

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) {
 	if (document.getElementById(fieldId)) {
		field = document.getElementById(fieldId);
		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) {
	return !(value == null || (value == "" || value.replace(/^\s+|\s+$/g,"").length == 0) || (!allowZero && value == "0"));
}

/**
 * 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, true) && isFilled(secondField, true)) {
		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)) {
		notError = validateRequired(secondField, true) && 
		validateRequired(thirdField, true);
	}
	if (notError && second != null && isFilled(second.value)) {
		notError = validateRequired(firstField, true) && 
		validateRequired(thirdField, true);
	}
	if (notError && third != null && isFilled(third.value)) {
		notError = validateRequired(firstField, true) &&
		validateRequired(secondField, true);
	}
}

function isDecimalChars(s) {
  for (var i = 0; i < s.length; i++) {
    if (isDecimalChar(s.charAt(i)))    
      return true;
  }
  return false;
}


function isDecimalChar(c) {
	result = false;
	result = result || (c == '.') 
					|| (c == ',') 
					|| (c == '-');
	return result;
}

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;
}

function checkRadioButton(a)
{
	document.getElementById(a).checked = true;
}

function appearDate(a,b,c,d)
{
	if(document.getElementById(a).checked==true)
	{
		document.getElementById(b).style.display = "inline";
	}
	else
	{
		document.getElementById(b).style.display = "none";
	}
	
	if(document.getElementById(c).checked==true)
	{
		document.getElementById(d).style.display = "inline";
	}
	else
	{
		document.getElementById(d).style.display = "none";
	}
}


