/* init */

var formValidatorManager

function ValidatorManager()
{
	formValidatorManager = this;
	this.elements = [];
	this.errors = [];
}

ValidatorManager.prototype.addElement = function(name, type, error)
{
	if(document.getElementById( name ))
	{
		this.elements[ this.elements.length ] = {'name':name, 'type':type, 'error':error};
		
		var element = document.getElementById( name );
		
		if(element.addEventListener)
        {
        	element.addEventListener("blur",check,false);
        }
        else if(element.attachEvent)
        {
        	element.attachEvent("onblur",check);
        }
        else if(element.onblur)
        {
        	var oldHandler = element.onblur;
        	element.onblur= function piggyback()
        	{
        		oldHandler();
        		check();
        	};
        }
        else
        {
        	element.onblur = check;
        }

	}
}

ValidatorManager.prototype.checkElements = function(name)
{
	var i = 0;
	var cnt = this.elements.length;
	var element = null;

	for(i=0; i<cnt; i++)
	{
		if(this.elements[i]['name'] != name)
			continue;
		
		element = document.getElementById( this.elements[i]['name'] );
		
		this.removeError(element.id);

		switch(this.elements[i]['type'])
		{
			case 'email':
				if(!emailValidator(element.value))
					this.addError(element.id, this.elements[i]['error']);
				break;
			case 'empty':
				if(!emptyValidator(element.value))
					this.addError(element.id, this.elements[i]['error']);
				break;
		}
	}
	return true;
}

ValidatorManager.prototype.addError = function (name, message)
{
	var inp = document.getElementById(name);
	inp.className = inp.className + ' error';
	
	var labels = document.getElementsByTagName('label');
	var i = 0;
	
	for(i=0; i< labels.length; i++)
	{
		if(labels[i].getAttribute('for') == name)
		{
			labels[i].className = labels[i].className + ' error';
			if(message)
				this.insertMessage(labels[i], message);
		}
	}
	
	return true;
}

ValidatorManager.prototype.insertMessage = function (label, message)
{
	var strMsg = document.createElement('STRONG');
	
	var strText = document.createTextNode(message);
	strMsg.appendChild(strText);
	strMsg.appendChild(document.createElement('BR'));
	label.appendChild(strMsg);
	return true;
}

ValidatorManager.prototype.removeError = function (name)
{
	var inp = document.getElementById(name);
	inp.className = inp.className.replace('error','');

	var labels = document.getElementsByTagName('label');
	var i = 0;
	
	for(i=0; i< labels.length; i++)
	{
		if(labels[i].getAttribute('for') == name)
		{
			labels[i].className = labels[i].className.replace('error','');
			//labels[i].className = labels[i].className + ' error';
			this.removeMessages(labels[i]);
		}
	}
	
	return true;
}

ValidatorManager.prototype.removeMessages = function (label)
{
	var elements = label.getElementsByTagName('STRONG');
	
	var cnt = elements.length;
	var i = 0;
	
	for(i=(cnt-1); i>=0; i--)
	{
		label.removeChild(elements[i]);
	}
	
	return true;
}



function check()
{
	formValidatorManager.checkElements(this.id);
}

function emailValidator(value)
{
	if(value == '')
		return true;
		
	if(value.indexOf('@') == -1)
		return false;
	return true;
}

function emptyValidator(value)
{
	
	if(value != '')
		return true;
	return false;
}
