var Event = new Object();
Event.observe = function(element, name, observer, useCapture)
{
	var element = document.getElementById(element);
	if (element.addEventListener) {
		element.addEventListener(name, observer, useCapture);
	} else if (element.attachEvent) {
		element.attachEvent('on' + name, observer);
	}
	
}

Event.stop = function(event) 
{
	event.stopped = true;
	if (event.preventDefault) {
		event.preventDefault();
		event.stopPropagation();
	} else {
		event.returnValue = false;
		event.cancelBubble = true;
	}
}

function Required()
{
	this.fields = [];
	//this.errMessage = 'Required field';
	this.validate = function()
	{
		for (i=0;i < this.fields.length;i++)
		{
			this.fields[i].label.style.color = "";
			if (this.fields[i].element.value == "" ){
				this.fields[i].label.style.color= "red";
				//this.fields[i].label.innerHTML += this.errMessage;
				Validator.prototype.showError = true;
			}
		}
		
	}
}


function Integer()
{
	this.fields = [];
	this.validate = function()
	{
		for (i=0;i < this.fields.length;i++)
		{
			this.fields[i].label.style.color = "";
			var num = parseInt(this.fields[i].element.value);
                  
			if (isNaN(num) || num.toString() != this.fields[i].element.value)
			{
				this.fields[i].label.style.color = "red";
				Validator.prototype.showError = true;
				
			}
			else{
			 	if (this.fields[i].min != 'n/a' && this.fields[i].element.value < this.fields[i].min )
                {
                    this.fields[i].label.style.color = "red";
					Validator.prototype.showError = true;
                }
                
                if (this.fields[i].max != 'n/a' && this.fields[i].element.value > this.fields[i].max )
                {
                    this.fields[i].label.style.color = "red";
					Validator.prototype.showError = true;
                }
			}
		}
		
	}
}
function ValidInt()
{
	this.fields = [];
	this.validate = function()
	{
		for (i=0;i < this.fields.length;i++)
		{
			this.fields[i].label.style.color = "";
			//var num = parseInt(this.fields[i].element.value);
			var num = this.fields[i].element.value;
			if (num.toString() == '')
			{
				return true;
			}
            if (!num.match(/^\d{1,9}$/))
            {
            	this.fields[i].label.style.color = "red";
				Validator.prototype.showError = true;
				Validator.prototype.errorMessages += '<br/><b>Цена:</b> Само цели числа до 9 цифри';
            }
		}
		
	}
}
function Select()
{
	this.fields = [];
	this.validate = function()
	{
		for (i=0;i < this.fields.length;i++)
		{
			this.fields[i].label.style.color = "";
			valid = false;
			if (this.fields[i].element.selectedIndex != 0 && this.fields[i].element.value != '')
			{
				valid = true;
			}
			if (!valid)
			{
				this.fields[i].label.style.color= "red";
				Validator.prototype.showError = true;
			}
		}
	}
}

function StrLenght()
{
	this.fields = [];
	this.validate = function()
	{
		for (i=0;i < this.fields.length;i++)
		{
			this.fields[i].label.style.color = "";
			if (this.fields[i].element.value.length > this.fields[i].maxlen){
				//alert('Текста на обявата е по-дълъг от '+this.fields[i].maxlen)
				this.fields[i].label.style.color= "red";
				Validator.prototype.showError = true;
			}
		}
		
	}
	
}

function Validator(frmOBJ,errContainer)
{
	Validator.prototype.errorMessages='';
	
	
	this.form_obj = document.getElementById(frmOBJ);
	
	this.required = new  Required();
	this.integer = new Integer();
	this.select = new Select();
	this.strlength = new StrLenght();
	this.validint= new ValidInt();
	this.errorContainer=errContainer;
	
	this.addRequired = function(field_id , label_id)
	{
		this.required.fields.push(
			{
				element: (document.getElementById(field_id)),
				label: document.getElementById(label_id),
				valid: true
			}
		);
	}
	
	this.addInteger  = function(field_id , label_id)
	{
		var field = {element: $(field_id), label: $(label_id), min: 'n/a', max: 'n/a'};
                
        if(arguments.length > 2 && arguments[2] !== undefined)
        {
            field.min = arguments[2];
        }
        
        if(arguments.length > 3 && arguments[3] !== undefined)
        {
            field.max = arguments[3];
        }
        this.integer.fields.push(field);
		/*this.integer.fields.push(
			{
				element: (document.getElementById(field_id)),
				label: document.getElementById(label_id),
				valid: true
			}
		);*/
	}
	
	this.addSelect  = function(field_id , label_id)
	{
		this.select.fields.push(
			{
				element: (document.getElementById(field_id)),
				label: document.getElementById(label_id),
				valid: true
			}
		);
	}
	
	this.checkStrLen = function(field_id , label_id, max_len)
	{
		
		this.strlength.fields.push(
			{
				element: (document.getElementById(field_id)),
				label: document.getElementById(label_id),
				maxlen: max_len,
				valid: true
			}
		);
	}
	
	this.addValidInt = function (field_id , label_id)
	{
		this.validint.fields.push(
			{
				element: (document.getElementById(field_id)),
				label: document.getElementById(label_id),
				valid: true
			}
		);
	}
	this.validate = function(e)
	{
		//alert(e)
		delete Validator.prototype.showError;
		
		this.required.validate();
		this.integer.validate();
		this.select.validate();
		this.validint.validate();
		if (Validator.prototype.showError){
			prev_validation_err = 1;
		}
		else{
			prev_validation_err = 0;
		}
		this.strlength.validate();
		
		if ($(this.errorContainer) && Validator.prototype.showError && prev_validation_err)
		{
			$(this.errorContainer).innerHTML='<div class="errorMsg"><h4>Внимание!</h4><p>Не сте въвели коректно информацията в  полетата, отбелязани като задължителни.'+Validator.prototype.errorMessages+'</p></div>';
			
		}
		if (this.showError === true)
		{
			$(this.errorContainer).innerHTML='<div class="errorMsg"><h4>Внимание!</h4><p>Не сте въвели коректно информацията в  полетата, отбелязани като задължителни.'+this.errorMessages+'</p></div>';
			Event.stop(e);
		}
		Validator.prototype.errorMessages='';
	}
}

