var validator_form = {
	init: function (aSettings){
	
		var aDefaults = {
			showPrompt: true,
			errorInfo: "Proszę wypełnić pola oznaczone '*'",
			errorEmail: 'Podany adres email jest nieprawidłowy',
			errorPassword: 'Podane hasła się różnią!',
			isStars: []
		}  
		var aSettings =  $.extend(aDefaults, aSettings); 
	
		$("form#"+aSettings["formId"]).submit(function(){
				var sErrorInfo = $('#errorInfoTxt span');	
				sErrorInfo.html('');
				
				aError = [];
				aValidationTypes = [
					"isRequired", "isEmail", "isNumeric", 
					"isSelectRequire", "isMultiSelect", "wysiwyg",
					"isCheckPasswd", "isChecked", "isStars"
				];
				
		 		for(n=0; n<aValidationTypes.length; n++) 
				{
					var x = aSettings[aValidationTypes[n]];
					if(x != null) 
					{
						if(aValidationTypes[n] == 'isCheckPasswd')
						{
							sInputField1 = $("#"+x[0]);
							sInputField2 = $("#"+x[1]);
							bValid = (sInputField1.val() == sInputField2.val()) ? true : false;
							
							if(!bValid)
							{
								aError.push(x[i]);
								sInputField1.addClass("error_colors");
								sInputField2.addClass("error_colors");
								$('#errorInfoTxt span').append('<div>'+aSettings.errorPassword+'</div>');
							}
						}
						else if(aValidationTypes[n] == 'isStars')
						{
							if(typeof aSettings['isStars'][0] != undefined)
							{
								if(aSettings['isStars'][0] == x[i])
								{
									bValid = !isRequired(sInputField.val());
									sInputField = $("#"+aSettings['isStars'][1]);
									
									if(!bValid) 
									{
										aError.push(x[i]);
										sInputField.addClass("error_colors");
									} 
									else 
										sInputField.removeClass("error_colors");
								}
							}
						}
						else
						{
							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());
										if(!bValid)
											$('#errorInfoTxt span').append('<div>'+aSettings.errorEmail+'</div>');
										break;
										
									case "isNumeric":
										bValid = isNumeric(sInputField.val());
										break;
										
									case "isSelectRequire":
										bValid = !isSelectRequire(sInputField.val());
										break;
										
									case "isMultiSelect":
										bValid = !hasSelected((sInputField.val() || []));
										break;
										
									case 'isChecked':
										bValid = sInputField.attr("checked");								
										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)
				{
					if(aSettings.showPrompt)
						$.prompt(VALID_ALL_EMPTY_FIELDS, { buttons: { ZAMKNIJ: true } });
					else
					{
						alert(aSettings.errorInfo);
					
						$('#errorInfoTxt span').append('<div>'+aSettings.errorInfo+'</div>');
						$('#errorInfoTxt').show();
					}
				}
				else if(aSettings.showPrompt)
				{
					$('#errorInfoTxt span').html('');
					$('#errorInfoTxt').hide();
				}
				
				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;
}
