function Check()
{
	/**
	 * Function to check email
	 * @param {string} email
	 */
	this.email = function(str)
	{
		if (str == '') 
		{
			return false;
		}
		var filter = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;
		if (filter.test(str)) 
		{
			return true;
		}
		else 
		{
			return false
		}
	}
	
	/**
	 * Function to check url
	 */
	this.url = function(theUrl)
	{
		if (theUrl.match(/^((((H|h)(T|t)|(F|f))(T|t)(P|p)((S|s)?))\:\/\/)?(www.|[a-zA-Z0-9].)[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,6}(\:[0-9]{1,5})*(\/($|[a-zA-Z0-9\.\,\;\?\'\\\+&amp;%\$#\=~_\-]+))*$/)) 
		{
			return true;
		}
		else 
		{
			return false;
		}
	}
	
	/**
	 * Function to check date
	 * @param {Object} date
	 */
	this.date = function(date)
	{
		var validformat = /^\d{2}\.\d{2}\.\d{4}$/ //Basic check for format validity
		if (!validformat.test(date)) 
		{
			return false;
		}
		else 
		{
			var month = date.split(".")[1]
			var day = date.split(".")[0]
			var year = date.split(".")[2]
			var dayobj = new Date(year, month - 1, day)
			if ((dayobj.getMonth() + 1 != month) || (dayobj.getDate() != day) || (dayobj.getFullYear() != year)) 
			{
				return false;
			}
		}
		return true;
	}
	
	/**
	 * Check is the string is numeric
	 * @param {Object} sText
	 */
	this.number = function(string)
	{
		if (string == "")
		{
			return false;
		}
		var tmpString = string.replace(',','');
		tmpString = tmpString.replace('.','');
		tmpString = tmpString.replace(' ','');
		if (tmpString.match(/\D/) || tmpString == "") 
		{
			return false;
		}
		else 
		{
			return true
		}
	}
	
	this.compareNot = function(fromValue,notValue)
	{
		if (notValue != false)
		{
			if (fromValue == notValue)
			{
				return true
			}
			else
			{
				return false
			}
		}
		else
		{
			return false;
		}
	}
}

var Check = new Check();



/**
 * Eemaldame elemendi kontrolli
 * @param {Object} checkboxID : checkbox ID
 * @param {Object} itemID, elemen
 * @param {Object} itemValidationType
 */
function disableItemValidation(checkboxID,itemID,itemValidationType)
{
	if (!$(checkboxID))
	{
		alert("EI leia checkbox");
		return false;
	}
	if ($(checkboxID).checked == true)
	{
		value = '';
	}
	else
	{
		value = itemValidationType;
	}
	var itemID = getIDFromName(itemID);
	if (!$(itemID))
	{
		alert('Element "'+ itemID +'" not found');
		return false;
	}
	$(itemID+'_required').innerHTML = value;
}

/**
 * Genereerime id name parameetirs
 * Example : getIDFromName('nimi[234234234][asdasd]'), result = nimi_234234234_asdasd
 * @param {Object} string
 */
function getIDFromName(string)
{
	var callAgain = false;
	if (string.indexOf(']')>0)
	{
		string = string.replace(']','');
		if (string.indexOf(']')>0)
		{
			callAgain = true;
		}
	}
	if (string.indexOf('[')>0)
	{
		string = string.replace('[','_');
		if (string.indexOf('[') > 0)
		{
			callAgain = true;
		}
	}
	if (callAgain == true)
	{
		return getIDFromName(string);
	}
	else
	{
		return string;
	}
}





function validOnInsertedElement(valid,title,val,validNotValue)
{
	var msg = new Array();
	msg['type'] = '';
	msg['msg'] = '';
	var comp = Check.compareNot(val,validNotValue);
	if (valid == 'number')
	{
		if (!Check.number(val) || comp)
		{
			msg['type'] = 'number';
		}
	}
	else if (valid == 'url')
	{
		if (!Check.url(val) || comp)
		{
			msg['type'] = 'url';
		}
	}
	else if (valid == 'notnull')
	{
		if (val == 0 || val == '' || !Check.number(val) || comp)
		{
			msg['type'] = 'notnull';
		}
	}
	else if (valid == 'date')
	{
		if (!Check.date(val) || comp)
		{
			msg['type'] = 'date';
		}
	}
	else if (valid == 'email')
	{
		if (!Check.email(val) || comp)
		{
			msg['type'] = 'email';
		}
	}
	else if (valid == 'url')
	{
		if (!Check.url(val) || comp)
		{
			msg['type'] = 'url';
		}
	}
	if (msg['type'] == '')
	{
		return true;
	}
	else
	{
		msg['msg'] = title;	
	}
	return msg;
}

function countSelected(ID)
{
	var nr = 0;
	for (i = 0; i < $(ID).options.length; i++)
	{
		if ($(ID))
		{
			if ($(ID).options[i].selected && $(ID).options[i].value != '')
			{
				nr++;
			}
		}
	}
	return nr;
}


function validElement(valid,title,val,elementID,validNotValue)
{
	var msg = new Array();
	msg['type'] = '';
	msg['msg'] = '';
	var comp = Check.compareNot(val,validNotValue);
	if (valid == "number")
	{
		val = val.replace(',','.');
	}
	if (!title)
	{
		alert('Elemendi title on määramata');
	}
	if (valid == 'selected' && val == '' && (val == '' || comp))
	{
		msg['type'] = 'selected';
	}
	else if (valid == 'checked' &&  $(elementID).checked == false)
	{
		msg['type'] = 'checked';
	}
	else if (valid == 'text' &&  (val == '' || comp))
	{
		msg['type'] = 'text';
	}
	else if (valid == 'password')
	{
		var forID = $(elementID).getAttribute("for");
		if (forID != "")
		{
			if (val == "" && $(forID).value == '')
			{
				msg['type'] = 'text';
			}
			else
			{
				if (val != $(forID).value)
				{
					msg['type'] = 'password';
				}
			}
		}
		else
		{
			if (val == '')
			{
				msg['type'] = 'text';
			}
		}
	}
	else if (valid == 'email' &&  (!Check.email(val) || comp))
	{
		msg['type'] = 'email';
	}
	else if (valid == 'number' && (!Check.number(val) || comp ))
	{
		msg['type'] = 'number';
	}
	else if (valid == 'notnull' && (val == 0 || val == '' || !Check.number(val) || comp ))
	{
		msg['type'] = 'notnull';
	}
	else if (valid == 'date' && (!Check.date(val)  || val == '' || comp ))
	{
		msg['type'] = 'date';
	}
	else if (valid == 'url' && (!Check.url(val) ||  comp))
	{
		msg['type'] = 'url';
	}
	if (msg['type'] == '')
	{
		return true;
	}
	else
	{
		msg['msg'] = title;
	}
	return msg;
}


function checkForm(formID,errorMsgTitle)
{
	if(typeof formID == "object")
	{
		var vorm = formID
	}
	else
	{
		var vorm = $(formID);
	}
	
	if (!vorm)
	{
		alert('Form "'+formID+'" not found');
		return false;
	}
	var len = vorm.elements.length;
	var error = '';
	var errorFields = new Array();
	var countError = 0;
	var nonErrorFields = new Array();
	var countNonError = 0;
	
	var errorTypes = new Array;
	for (i = 0; i <= len; i++)
	{
		if (vorm.elements[i])
		{
			var el = vorm.elements[i];
			if (el.type == 'select-one' || el.type == 'select-multiple' || el.type == 'text' || el.type == 'hidden' || el.type == 'textarea' || el.type == 'password' || el.type == 'checkbox' || el.type == 'file')
			{
				var validDivID = el.id+'_required';
				if ($(validDivID))
				{
					var validType = $(validDivID).innerHTML;
					
					var title = el.title;
					var val = el.value;
					var ID =  el.id;
					if (el.type == 'hidden')
					{
						var ID = $(el.id+'_valinputid').value;
					}
					//Vaatame kas vormi elementi on vaja siis kontrollida kui sinna on midagi sisestatud
					var validNotValue = false;
					if ($(ID+'_validNotValue'))
					{
						validNotValue = $(ID+'_validNotValue').innerHTML
					}
					if (validType.substr(0,10) == 'onInserted' && val != '')
					{
						var valid = validOnInsertedElement(validType.substr(10),title,val,validNotValue);
					}
					else
					{
						if ($(el.id+'_extraMsg'))
						{
							title = $(el.id+'_extraMsg').innerHTML;
						}
						var valid = validElement(validType,title,val,el.id,validNotValue);
					}
					if (valid != true)
					{
						if (errorTypes[valid['type']])
						{
							errorTypes[valid['type']] += '"'+valid['msg']+'", ';
						}
						else
						{
							errorTypes[valid['type']] = '"'+valid['msg']+'", ';
						}							
						errorFields[countError] = ID;
						countError++;
					}
					else
					{
						nonErrorFields[countNonError] = ID;
						countNonError++;
					}
				}
			}
		}
	}
	var formISOk = false;
	if (errorFields.length > 0)
	{
		var allTypes = new Array('selected','text','number','notnull','date','email','url','checked','password');
		var typeMsgs = new Array();
		typeMsgs['selected'] = 'peab olema valitud';
		typeMsgs['checked'] = 'peab olema valitud';
		typeMsgs['text'] = 'peab olema täidetud';
		typeMsgs['email'] = 'peab olema korrektne email(nimi@aadress.ee)';
		typeMsgs['number'] = 'peab olema number';
		typeMsgs['notnull'] = 'peab olema number ja suurem kui null';
		typeMsgs['date'] = 'peab olema kuupäev (Formaadis dd.mm.YYYY)';
		typeMsgs['url'] = 'peab olema korrektne URL http|ftp|https://www.neti.ee';
		typeMsgs['password'] = ' peavad kattuma';
		errorMsg = '';
		for (i = 0; i <= allTypes.length; i++)
		{
			var curType = allTypes[i];
			var elementType = errorTypes[curType];
			var typeMsg = typeMsgs[curType];
			if (elementType)
			{
				elementType = elementType.substr(0,(elementType.length-2))+' ';
				errorMsg += '<B style="color:red">( '+elementType+')</B> ' + typeMsg+"<br />";
			}
		}
		Msg.isErrorDiv = true;
		Msg.pop(errorMsg,'Viga',"70%");
		//createFormEl("NOTOK")
		return false;
	}
	//createFormEl("OK")
	return true;
}

function createFormEl(value)
{
	var input = document.createElement("input");
	input.setAttribute("name","___FORM_VALIDATION");
	input.setAttribute("value",value);
	$('tmpDiv').innerHTML = '';
	$('tmpDiv').appendChild(input);
}



