function validateFields(fields, errorDiv) {
    var validationFields = getValidationFields(fields);
    var formValid = true;
    for (var c = 0; c < validationFields.length; c++) {
        var validationTypes = $("#" + validationFields[c]).val();
        if (validationTypes) {
            formValid = doValidate(fields[c], validationTypes,errorDiv);
            if (formValid == false) {
                return formValid;
            }
        }
    }
    return formValid;
}

function doValidate(field, validationtypes,errordivname) {
    $("#" + errordivname).html("");
    var obj = $("#" + field);
    var aValidations = validationtypes.split(",");
    var bValid = true;
    for (var c = 0; c < aValidations.length; c++) {
        switch (aValidations[c]) {
			case "richtext":
                bValid = checkRichText(field, errordivname);
                break;
            case "empty":
                bValid = checkEmpty(obj,errordivname);
                break;
			case "confirm":
				var matchFieldName = "#" + field + "_match";
				var matchContainer = $(matchFieldName).val();
				var fieldToMatch = $("#" + matchContainer);
                bValid = checkMatch(obj, fieldToMatch, errordivname);
                break;
            case "numeric":
                bValid = checkNumeric(obj,errordivname);
                break;
            case "notnull":
                bValid = checkNull(obj,errordivname);
                break;
            case "checkboxes":
                bValid = checkCheckboxes(field,errordivname);
                break;
            case "checked":
                bValid = checkChecked(obj,errordivname);
                break;
            case "radio":
                var objs = document.getElementsByName(field,errordivname);
                bValid = checkRadios(objs);
                break;
            case "email":
                bValid = checkEmail(obj,errordivname);
                break;
			case "captcha":
				bValid = checkCaptcha(obj, errordivname);
        }

        if (bValid == true) {
            if (obj.hasClass("error")) {
                obj.removeClass("error");
            }
        }
        else {
            if (!obj.hasClass("error")) {
                obj.addClass("error");
            }
            return bValid;
        }
    }

    return bValid;
}


function checkRichText(field, errordivname) {
	var ed = tinyMCE.get(field);
    if (ed.getContent().length > 0) {
        return true;
    }
    else {
        $("#" + errordivname).html("Field cannot be left empty"); 
        return false;
    }
}

function checkCaptcha(field, errordivname) {
	var result = 
	$.ajax({
	   type: "POST",
	   url: "system/control/ajax/captcha_actions.php?action=verifyCode",
	   data: "code=" + field.val(),
	   async: false
	 }).responseText;
	
	if (result == "true") {
        return true;
    }
    else {       
        $("#" + errordivname).html("Wrong verification code");       
        return false;
    }
}

function checkEmpty(obj, errordivname) {
    if (obj.val().length > 0) {
        return true;
    }
    else {       
        $("#" + errordivname).html("Field cannot be left empty");       
        return false;
    }
}

function checkMatch(obj, fieldToMatch, errordivname) {
    if (obj.val() == fieldToMatch.val()) {
        return true;
    }
    else {       
        $("#" + errordivname).html("Fields do not match");       
        return false;
    }
}

function checkCheckboxes(fieldname, errordivname) {
    var checkCount = $("#" + getCountField(fieldname)).val();
    for (var i = 0; i < checkCount; i++) {
        var obj = $("#" + fieldname + "_" + i);
        if (obj.is(':checked')) {
            return true;
        }
    }
    $("#" + errordivname).html("At least one checkbox must be selected");
    return false;
}

function checkChecked(obj, errordivname) {
    if (obj.is(':checked')) {
        return true;
    }
    else {
        $("#" + errordivname).html("Checkbox not ticked");
        return false;
    }
}

function checkRadios(objs, errordivname) {
    for (var i = 0; i < objs.length; i++) {
        if (objs[i].checked) {
            return true;
        }
    }
    $("#" + errordivname).html("No radio button selected");
    return false;
}

function checkEmail(obj, errordivname) {
    var str = obj.val();
    var at = "@"
    var dot = "."
    var lat = str.indexOf(at)
    var lstr = str.length
    var ldot = str.indexOf(dot)
    
    if (str.indexOf(at) == -1) {
        $("#" + errordivname).html("Email address not valid");
        return false
    }

    if (str.indexOf(at) == -1 || str.indexOf(at) == 0 || str.indexOf(at) == lstr) {
        $("#" + errordivname).html("Email address not valid");
        return false
    }

    if (str.indexOf(dot) == -1 || str.indexOf(dot) == 0 || str.indexOf(dot) == lstr) {
        $("#" + errordivname).html("Email address not valid");
        return false
    }

    if (str.indexOf(at, (lat + 1)) != -1) {
        $("#" + errordivname).html("Email address not valid");
        return false
    }

    if (str.substring(lat - 1, lat) == dot || str.substring(lat + 1, lat + 2) == dot) {
        $("#" + errordivname).html("Email address not valid");
        return false
    }

    if (str.indexOf(dot, (lat + 2)) == -1) {
        $("#" + errordivname).html("Email address not valid");
        return false
    }

    if (str.indexOf(" ") != -1) {
        $("#" + errordivname).html("Email address not valid");
        return false
    }

    return true;
}

function checkNumeric(obj, errordivname) {
    var ValidChars = "0123456789.";
    var IsNumber = true;
    var Char;
    var sText = obj.val();

    for (i = 0; i < sText.length && IsNumber == true; i++) {
        Char = sText.charAt(i);
        if (ValidChars.indexOf(Char) == -1) {
            $("#" + errordivname).html("Numeric value expected");
            IsNumber = false;
        }
    }
    return IsNumber;
}

function checkNull(obj, errordivname) {
    if (obj.val() != "null") {
        return true;
    }
    else {
        $("#" + errordivname).html("Please select");
        return false;
    }
}

function getValidationFields(fields) {
    var newFields = new Array();
    for (var i = 0; i < fields.length; i++) {
        if (document.getElementById(fields[i])) {
            newFields[i] = fields[i] + "_validation";
        }
        else if (document.getElementsByName(fields[i]).length == 1) {
            newFields[i] = fields[i] + "_validation";
        }
    }
    return newFields;
}


var divToShowLoading = "";
function doSubmit(obj, divToUpdate, completeFunction){
	if(this.tinyMCE != undefined){
		tinyMCE.triggerSave();
	}
	if(divToUpdate != "" && divToUpdate != null){
		divToShowLoading = divToUpdate;
	}
	if(completeFunction != ""){
		var options = { 
			target:        '#' + divToUpdate, 
			beforeSubmit:  validateFormBeforeAjax, 
			success:      this[completeFunction]
		}; 
	}
	else{
		var options = { 
			target:        '#' + divToUpdate, 
			beforeSubmit:  validateFormBeforeAjax
		}; 	
	}
	$(obj).ajaxSubmit(options); 
}

function validateFormBeforeAjax(formData, jqForm, options) {
    var fieldIds = $("#" + jqForm.attr('name') + "_fieldIds").val();
	var fieldIds = fieldIds.split(',');
	var validateResult = validateFields(fieldIds, jqForm.attr('name') + "_errorDiv");
	if(validateResult){
		if(divToShowLoading != ""){
			$("#" + divToShowLoading).html("<center><img src=\"/media/images/web/loader.gif\" title=\"Loading\" alt=\"Loading. Please Wait\"/></center>");
		}
		return validateResult;
	}
	else{
		return validateResult;
	}
} 


function validateForm(formname) { 
    var fieldIds = $("#" + formname + "_fieldIds").val();
	var fieldIds = fieldIds.split(',');
    return validateFields(fieldIds, formname + "_errorDiv"); 
} 

 
 