var validator_form = 
{
	init: function (aSettings) 
	{
		$("form#"+aSettings["formId"]).submit(
			function()
			{
				aError = new Array();
				aValidationTypes = new Array(
					"isRequired", "isEmail", "isNumeric", 
					"isSelectRequire", "isMultiSelect", "wysiwyg"
				);
				
		 		for(n=0; n<aValidationTypes.length; n++) 
				{
					var x = aSettings[aValidationTypes[n]];
					if(x != null) 
					{
						for(i=0; i<x.length; i++) 
						{
							sInputField = $("#"+x[i]);
							switch (aValidationTypes[n]) 
							{
								case "isRequired" :
									bValid = !isRequired(sInputField.val());
									break;
									
								case "isEmail" :
									bValid = isEmail(sInputField.val());
									break;
									
								case "isNumeric" :
									bValid = isNumeric(sInputField.val());
									break;
									
								case "isSelectRequire":
									bValid = !isSelectRequire(sInputField.val());
									break;
									
								case "isMultiSelect":
									bValid = !hasSelected((sInputField.val() || []));
									break;
									
								case "wysiwyg":
									if(in_array(x[i], aSettings["wysiwyg"], false))
									{
										sInputField = $("#"+x[i]+"___Frame");
										var oEditor = FCKeditorAPI.GetInstance(x[i]);
										
										if(oEditor.GetXHTML() == "" || oEditor.GetXHTML() == null)
											bValid = false;
										else
											bValid = true;
									}
									break
							}
							
							if(!bValid) 
							{
								aError.push(x[i]);
								sInputField.addClass("error_colors");
							} 
							else 
								sInputField.removeClass("error_colors");
						}
					}
				}
				
				if(aError.length > 0)
					alert("Proszę wypełnić wymagane pola");
				
				return (aError.length > 0) ? false : true;
			}
		);
	}
};

function hasSelected(oSel)
{
	return (oSel.length > 0) ? false : true;
}

function in_array(needle, haystack, strict) 
{
    if (strict) 
	 	function equals(a,b) { return a === b }
    else 
	 	function equals(a,b) { return a == b }

    for (var i in haystack) 
	 {
        if (equals(haystack[i], needle)) 
		  		return true;
    }
    return false;
}

// returns true if the string is not empty
function isRequired(str)
{
	return (str == null) || (str.length == 0);
}

function isSelectRequire(int)
{
	return (int == "") || (int == 0);
}

// returns true if the string is a bValid email
function isEmail(str)
{
	if(isRequired(str)) return false;
	var re = /^[^\s()<>@,;:\/]+@\w[\w\.-]+\.[a-z]{2,}$/i
	return re.test(str);
}

// returns true if the string only contains characters 0-9 and is not null
function isNumeric(str)
{
	if(isRequired(str)) return false;
	var re = /[\D]/g
	if (re.test(str)) return false;
	return true;
}