jQuery.fn.validation = function(config)
{
	config['inputColors'] = config['inputColors']  || ['#EDEDED', '#FFFFFF'];
	config['errorColors'] = config['errorColors']  || ['#EDEDED', '#FFFFFF'];
	config['array'] = config['array'] || null;
	config['flag'] = config['flag'] || false;
	config['animation'] = config['animation'] || false;
	config['name']= this.attr('name');
	config['windowTop']= config['windowTop'] || '30%';
	config['windowWidth']= config['windowWidth'] || '300px;';
	config['image']= config['image'] || '../../images/icons/alert_icon.gif';
	config['flagTitle'] = config['flagTitle'] || "A mező kitöltése kötelező";
	config['flagText'] = config['flagText'] || "*";
	config['flagStyle'] = config['flagStyle'] || "height:10px;color:red;font-size:20px;font-family:Times;vertical-align:top;margin-left:5px;";
	config['validationTypes'] = new Array("isChecked","isCoordinate","isRequired", "isEmail", "isNumeric","inArray","isFile","isEqual");
	var x =config["isRequired"];
	if (x!=null)
	{
			for (var i=0; i<x.length;i++)
			{
				$('#'+x[i]).next('span').remove();
			}
	}
	jQuery(this).unbind('submit');
	if (config['flag'])
	{
		var x =config["isRequired"];
		if (x!=null)
		{
				for (var i=0; i<x.length;i++)
				{
					$('#'+x[i]).after('<span style="'+config['flagStyle']+';cursor:pointer;" title="'+config['flagTitle']+'">'+config['flagText']+'</span>');
				}
		}
	}
	jQuery(this).submit(function()
	{
		error = validate();
		if(error.length < 1) {
			return true;
		} else {
			printError(error);
			return false;
		};
	});
	function validate()
	{
		error='';
		error = '';
		validationTypes = config['validationTypes']
		for(n=0; n<validationTypes.length; n++)
		{
			var x =config[validationTypes[n]];
			if (validationTypes[n]=='isEqual')
			{	
				valid=true;
				if (x!=null)
				{
					for (var i=0; i<x.length;i++)
					{
						inputField = document.getElementById(x[i]);
						valid_temp = (inputField.value == document.getElementById(x[0]).value);
						if (!valid_temp)
						{
							valid = false;
							errorMsg = jsLang.lang['isequal'];
						}
					}
					if(!valid) {
						error += errorMsg;
						for (var a=0; a<x.length;a++)
						{
							inputField = document.getElementById(x[a]);
							inputField.style.background = config["errorColors"][0];
						}
					} else {
						for (var i=0; i<x.length;i++)
						{
							inputField = document.getElementById(x[i]);
							inputField.style.background = config["inputColors"][0];
						}
					}
				}
			}else{
				if(x != null) {
					for(i=0; i<x.length; i++) 
					{
						inputField = document.getElementById(x[i]);
						if (document.getElementById(x[i])!=null)
						{
						switch (validationTypes[n]) {
							case "isChecked" :
								if (inputField.checked)
								{
									continue;
								}else{
									valid = false;
									errorMsg = jsLang.lang['check_this'];
								}
							break;
							case "isFile" :
								var a = 0;
								$("span").each(function(i)
								{
									if ($(this).attr('w')==inputField.name) a++;
								});
								valid = (a>0);
								if (config['animation'])
								{
									if (valid) document.getElementById('animation').style.display="";
								}
								errorMsg = jsLang.lang['no_selected_file'];
							break;
							case "isRequired" :
							valid = !isRequired(inputField.value);
							errorMsg = jsLang.lang['required'];
							break;
							case "isCoordinate" :
							if (!isWhitespace(inputField.value))
								{
									valid = isCoordinate(inputField.value);
									errorMsg = jsLang.lang['is_coordinate'];
							}else{
									continue;
								};
							break;
							case "isEmail" :
								if (!isWhitespace(inputField.value))
								{
									valid = isEmail(inputField.value);
									errorMsg = jsLang.lang['not_valid_mail'];
								}else{
									continue;
								};
							break;
							case "isNumeric" :
								if (!isWhitespace(inputField.value))
								{
									valid = isNumeric(inputField.value);
									errorMsg = jsLang.lang['only_number'];
								}else{
									continue;
								};
							break;
							case "inArray" :
								if (config['array']=='null')
								{
									alert('Az inArray nem hajtható végre!!\n(Hiányzó tömb)');
								}else{
									if (!isWhitespace(inputField.value))
									{
										valid = !isInArray(config['array'],inputField.value);
										errorMsg = jsLang.lang['already_in'];
									}else{
										continue;
									};
								}
							break;
						}
						if(!valid) {
							error += '<font color="red">'+inputField .title+"</font> "+errorMsg+"</br>";
							//inputField.style.background = config["errorColors"][0];
							//inputField.style.border = "1px "+config["errorColors"][1];
						} else {
							//inputField.style.background = config["inputColors"][0];
							//inputField.style.border = '1px ';
						}
						}
					}
				}
			}
		}
		return error;
	};
	function printError(error)
	{
		$.prompt('<table><tr><td valign="top"><img src="'+config['image']+'" width="40" align="left"></td><td>'+error+'</td></td></table>',{buttons:{ Ok:true },show:'slideDown',top:config['windowTop'],width:config['windowWidth']});
	};
// returns true if the string is not empty
	function isRequired(str){
		return isWhitespace(str);
	}
// returns true if the string is a valid 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;
	}
	function isCoordinate(str)
	{
		if (isRequired(str)) return false;
		var re =/[0-9]{1,4}\.[0-9]{2,}/;
		if (str.match(re)==null) return false;
		return true; 
	}
	var whitespace = " \t\n\r";

	function isEmpty(s)
	{
		return ((s == null) || (s.length == 0));
	};
	function isInArray(cA,cV)
	{
		var i;
		for (var i=0; i < cA.length; i++) {
			if (cA[i] == cV)
			{
				return true;
			};
		};
		return false;
	};
	function isWhitespace (s)
	{
		var i;
		if (isEmpty(s)) return true;
		for (i = 0; i < s.length; i++)
		{
			var c = s.charAt(i);
			if (whitespace.indexOf(c) == -1) return false;
	    };
	    return true;
	};
};
