function myAlert(message) {
	alert('BArt CMS v3\n(c) 2004-2005\n\n' + message);
}
function strTrim(strText) {
	return strText.replace(/(^\s*)|(\s*$)/g, "");
}

//------------------------------------------------------------------------------------
function validate(form)
{
	return new myForm(form).validate() ;
}

//------------------------------------------------------------------------------------
function capitalize(string, length)
{
	if (string.length >= length)
	{
		return string.substring(0,length).toUpperCase() + string.substring(length,string.length) ;
	}
	else
	{
		return string ;
	}
}

//------------------------------------------------------------------------------------
function leftString(string,find)
{
	var string1 = String(string);
	var find1 = String(find);

	if (contains(find1,string1))
	{
		return String(string1.substring(0, string.indexOf(find1))) ; 
	}
	else
	{
		return string1 ;
	}
}

//------------------------------------------------------------------------------------
function rightString(string, find)
{
	if (contains(find,string))
	{
		return string.substring(string.indexOf(find) + find.length, string.length) ;		
	}
	else
	{
		return string ;
	}
}

//------------------------------------------------------------------------------------
function left(string, index)
{
	return string.substring(0, index) ;
}

//------------------------------------------------------------------------------------
function right(string, index)
{
	return string.substring(string.length - index, string.length) ;
}

//------------------------------------------------------------------------------------
function contains(find,string)
{
	if (isEmpty(find) || isEmpty(string))
		return false ;	
	else
		if (string.toLowerCase().indexOf(find.toLowerCase()) != -1)
			return true ;
		else
			return false ;
}

//------------------------------------------------------------------------------------
function replace(find, replacement, string)
{
	while(contains(find,string))
	{
		string = string.replace(find, replacement) ;
	}

	return string ;
}


//------------------------------------------------------------------------------------
function isEmpty(string)
{
	if (string == null)
	{
		return true ;
	}
	else
	{
		if (string == '')
			return true ;
		else
			return false ;
	}
}

//------------------------------------------------------------------------------------
var myForm = function(form)
{	
	this.form = null ;

	//------------------------------------------------------------------------------------
	this.init = function(form)
	{
		this.form = form ;
	}
	
	//------------------------------------------------------------------------------------
	this.focus_first = function()
	{
		var numOfElm = this.form.length ;
		var ready = false ;
		var i = 0 ; 

		while ((! ready) && (i<numOfElm))
		{
			if (! (this.form.elements[i].type == 'hidden'))
			{
				if (this.form.elements[i].value.length == 0)
				{					
					//this.form.elements[i].focus();
					ready = true ;
				}
			}
			i = i + 1 ;
		}
	}

	//------------------------------------------------------------------------------------
	this.validate = function()
	{
		for (var i=0 ; i < this.form.length ; i++)
		{			
			if (this.form[i].type != undefined) {
				if (! this.checkItem(this.form[i]))
					return false ;
			}
		}
		
		return true ;
	} 
	
	//------------------------------------------------------------------------------------
	this.checkItem = function(frmItem)
	{
		var itemLabel = frmItem.getAttribute("txt");
		
		if(isEmpty(itemLabel)) {
			if (frmItem.getAttribute("alt") != null) {
				itemLabel = frmItem.getAttribute("alt");
			} else {
				itemLabel = frmItem.name;
			}
		}	
	
		itemLabel = itemLabel.replace('[]','') ;
		itemLabel = itemLabel.toUpperCase() ;
		var tag = frmItem.getAttribute("val") ;		
		var temp_req = frmItem.getAttribute("req") ;

		if (isEmpty(temp_req))
		{
			var req = true ;
		}
		else
		{
			if (temp_req == 'no')
				var req = false ;
			else
				var req = true ;
		}
		
		var bln = true ;
		var type = frmItem.type ;
	
		if (isEmpty(type))
		{
			myAlert('Er bestaat een formulier item zonder `val` element') ;
		}	
		else
		{
			if (type == 'text' || type == 'textarea' || type == 'password')
			{
				if (isEmpty(frmItem.value))
				{
					if (! req)
					{
						return true ;
					}
					else
					{
						myAlert('U heeft geen waarde in het veld [' + itemLabel +  '] ingevuld. Dit is wel verplicht.') ;
						try {
							frmItem.focus();
							frmItem.select();
						} catch (err) {}
						return false ;
					}
				}		
				
				if (tag == null)
					return true;
					
				tag = tag.toLowerCase() ;
				
				switch(tag)
				{
					case 'txt':				
						bln = this.isText(frmItem);			
						if(!bln) myAlert('De waarde van het veld [' + itemLabel +'] is geen tekst!');
						break ;					
					case 'int':				
						bln = this.isInteger(frmItem); 		
						if(!bln) myAlert('De waarde van het veld [' + itemLabel +'] is geen getal zonder decimalen!');
						break ;
					case 'intbgzero':		
						bln = this.isIntegerBGZero(frmItem);
						if(!bln) myAlert('De waarde van het veld [' + itemLabel +'] is geen getal zonder decimalen of is kleiner dan 0!');
						break ;
					case 'double':			
						bln = this.isDouble(frmItem);		
						if(!bln) myAlert('De waarde van het veld [' + itemLabel +'] is geen getal!');
						break ;				
					case 'zip':				
						bln = this.isZip(frmItem); 			
						if(!bln) myAlert('De waarde van het veld [' + itemLabel +'] is geen geldige postcode!');
						break ;
					case 'zip1':				
						bln = this.isZip1(frmItem); 			
						if(!bln) myAlert('De waarde van het veld [' + itemLabel +'] is geen geldige postcode!');
						break ;
					case 'zip2':				
						bln = this.isZip2(frmItem); 			
						if(!bln) myAlert('De waarde van het veld [' + itemLabel +'] is geen geldige postcode!');
						break ;
					case 'url':				
						bln = this.isURL(frmItem);			
						if(!bln) myAlert('De waarde van het veld [' + itemLabel +'] is geen URL!');
						break ;
					case 'email':			
						bln = this.isEmail(frmItem);		
						if(!bln) myAlert('De waarde van het veld [' + itemLabel +'] is geen geldig e-mailadres!');
						break ;
					case 'tel':				
						bln = this.isTel(frmItem);			
						if(!bln) myAlert('De waarde van het veld [' + itemLabel +'] is geen geldig telefoonnummer!');
						break ;
					case 'mobile':			
						bln = this.isMobile(frmItem);		
						if(!bln) myAlert('De waarde van het veld [' + itemLabel +'] is geen geldig telefoonnummer!');
						break ;					
					case 'file':			
						bln = this.isFile(frmItem);			
						if(!bln) myAlert('De waarde van het veld [' + itemLabel +'] is geen bestand!');
						break ;
					case 'longdate':			
						bln = this.isLongDate(frmItem);			
						if(!bln) myAlert('De waarde van het veld [' + itemLabel +'] is geen geldige datum!');
						break ;					
					case 'date':			
						bln = this.isDate(frmItem);			
						if(!bln) myAlert('De waarde van het veld [' + itemLabel +'] is geen geldige datum!');
						break ;
					case 'time':			
						bln = this.isTime(frmItem);			
						if(!bln) myAlert('De waarde van het veld [' + itemLabel +'] is geen geldige tijd!');
						break ;
					case 'dummy':			
						bln = true ;						
						break ;					
		
					default:	
						bln = false ;
						myAlert('Ongeldige validatie\n\nveld: [' + itemLabel + ']\nvalidatie: ' + tag);  
							break ;
				}
			}
		
			if (type == 'select-multiple')
			{
				if (req)
				{
					if (frmItem.options.length == 0) 
					{
							frmItem.focus() ;
							myAlert('U bent verplicht een optie in het keuzeveld [' + itemLabel +  '] te kiezen') ;	

						return false ;
					}
				}
			}
		}
		

		if (bln)
		{
			return true ;
		}
		else
		{
			//frmItem.focus() ;
			frmItem.select() ;
			return false ;
		}
	
		return bln ; 
	}

	//------------------------------------------------------------------------------------
	this.isInteger = function(frmItem)
	{
		var waarde	= frmItem.value ;
		var re		= '^[0-9]{1,}$' ;
		var bln		= new RegExp(re).test(waarde) ;
	
		return bln ;
	}
	
	//------------------------------------------------------------------------------------
	this.isIntegerBGZero = function(frmItem)
	{
		var bln = this.isInteger(frmItem) ;
		
		if (bln)
		{
			if (frmItem.value == '0')
			{				
				bln = false ; 
			}
		}
		
		return bln ;
	}
	

	//------------------------------------------------------------------------------------
	this.isDouble = function(frmItem)
	{
		frmItem.value 	= frmItem.value.replace('.',',') ;
		var waarde	= frmItem.value ;
		var re		= '^[0-9]{1,}\,[0-9]$' ;
		var bln		= new RegExp(re).test(waarde) ;
		
		return bln ;
	}

	//------------------------------------------------------------------------------------
	this.isTel = function(frmItem)
	{
		/*
		frmItem.value = frmItem.value.replace('-','');
		frmItem.value = frmItem.value.substring(0,4) + '-' + frmItem.value.substring(4,10) ;

		var waarde 	= frmItem.value ;
		var re		= '^(0[0-9]{3}[-]{1}[0-9]{6})|(0[0-9]{2}[-]{1}[0-9]{7})$' ;
		var bln		= new RegExp(re).test(waarde) ;

		if (bln)
		{
			return true ;
		}
		else
		{
			return this.isMobile(frmItem) ;
		}
		*/
		return true;
	}
	
	//------------------------------------------------------------------------------------
	this.isMobile = function(frmItem)
	{
		var waarde 	= frmItem.value ;
		var re		= '^06\-[0-9]{8}$' ;
		var bln		= new RegExp(re).test(waarde) ;

		return bln ;
	}

	//------------------------------------------------------------------------------------
	this.isZip = function(frmItem)
	{
		frmItem.value = frmItem.value.toUpperCase() ;
		frmItem.value = frmItem.value.replace(' ',''); 
		var waarde 	= frmItem.value ;
		var re		= '^[0-9]{4}[A-Z]{2}$' ;
		var bln 	= new RegExp(re).test(waarde) ;
					
		return bln ;
	}	
	
	//------------------------------------------------------------------------------------
	this.isZip1 = function(frmItem)
	{
		frmItem.value = frmItem.value.toUpperCase() ;
		frmItem.value = frmItem.value.replace(' ',''); 
		var waarde 	= frmItem.value ;
		var re		= '^[0-9]{4}$' ;
		var bln 	= new RegExp(re).test(waarde) ;
					
		return bln ;
	}	
	
	//------------------------------------------------------------------------------------
	this.isZip2 = function(frmItem)
	{
		frmItem.value = frmItem.value.toUpperCase() ;
		frmItem.value = frmItem.value.replace(' ',''); 
		var waarde 	= frmItem.value ;
		var re		= '^[A-Z]{2}$' ;
		var bln 	= new RegExp(re).test(waarde) ;
					
		return bln ;
	}	

	//------------------------------------------------------------------------------------
	this.isEmail = function(frmItem)
	{
		frmItem.value = frmItem.value.toLowerCase() ;
		var waarde 	= frmItem.value ;
//		var re		= '^([_a-z0-9-]+)(\.[_a-z0-9-]+)*@([a-z0-9-]+)(\.[a-z0-9-]+)*(\.[a-z]{2,4})$' ;
		var re		= '^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\.\-]?[a-zA-Z0-9]+)*)\.([A-Za-z]{2,})$';
		var bln		= new RegExp(re).test(waarde) ;
					
		return bln ; 
	}
	
	//------------------------------------------------------------------------------------
	this.isURL = function(frmItem)
	{
		if (frmItem.value.length > 0)
		{
			if (frmItem.value.substring(0,7) != "http://" )
				frmItem.value = "http://" + frmItem.value ;

			str = frmItem.value ;

			frmItem.value = replace("\\","/", str) ;

			if (right(frmItem.value, 1) == "/") 
				frmItem.value = left(frmItem.value, frmItem.value.length - 1) ;
		}
	
		var waarde	= frmItem.value ;
		var re		= '^http://[0-9a-zA-Z~#_\&\?\=\.\/\-]{9,}$' ;
		var bln		= new RegExp(re).test(waarde) ;
		
		return bln ;
	}

	//------------------------------------------------------------------------------------
	this.isFile = function(frmItem)
	{
		return true ;

		var waarde 	= frmItem.value ;
		var re		= '[0-9a-zA-Z.:]{10,}' ;
		var bln		= new RegExp(re).test(waarde) ;

		return bln ;			
	}

	//------------------------------------------------------------------------------------
	this.isText = function(frmItem)
	{
		var waarde	= frmItem.value ;
		var re		= '^[^\^]{1,}$' ;
		var bln		= new RegExp(re).test(waarde) ;
				
		return bln ;	
	}
	
	this.isLongDate = function(frmItem)
	{
		var waarde 	= frmItem.value; 
		waarde = strTrim(waarde);
		if(waarde.match(/^((((0?[1-9]|[12]\d|3[01])[\.\-\/](0?[13578]|1[02])[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|((0?[1-9]|[12]\d|30)[\.\-\/](0?[13456789]|1[012])[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|((0?[1-9]|1\d|2[0-8])[\.\-\/]0?2[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|(29[\.\-\/]0?2[\.\-\/]((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)|00)))|(((0[1-9]|[12]\d|3[01])(0[13578]|1[02])((1[6-9]|[2-9]\d)?\d{2}))|((0[1-9]|[12]\d|30)(0[13456789]|1[012])((1[6-9]|[2-9]\d)?\d{2}))|((0[1-9]|1\d|2[0-8])02((1[6-9]|[2-9]\d)?\d{2}))|(2902((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)|00))))$/)) {
			return true;
		} else {
			return false;
		}
	}
	
	this.isDate = function(frmItem)
	{
		var waarde 	= frmItem.value;
		waarde = strTrim(waarde);
		if(waarde.match(/^((((0?[1-9]|[12]\d|3[01])[\.\-\/](0?[13578]|1[02])[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|((0?[1-9]|[12]\d|30)[\.\-\/](0?[13456789]|1[012])[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|((0?[1-9]|1\d|2[0-8])[\.\-\/]0?2[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|(29[\.\-\/]0?2[\.\-\/]((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)|00)))|(((0[1-9]|[12]\d|3[01])(0[13578]|1[02])((1[6-9]|[2-9]\d)?\d{2}))|((0[1-9]|[12]\d|30)(0[13456789]|1[012])((1[6-9]|[2-9]\d)?\d{2}))|((0[1-9]|1\d|2[0-8])02((1[6-9]|[2-9]\d)?\d{2}))|(2902((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)|00))))$/)) {
			return true;
		} else {
			return false;
		}
	}

	
	this.isTime = function(frmItem)
	{
		var waarde 	= frmItem.value ;
		if(waarde.match(/^(0?[0-9]|1\d|2[0-3]):(0?[0-9]|[12345]\d)$/)) {
			return true;
		} else {
			return false;
		}
	}

	//---------------------------------------------------------------------------------
	this.init(form) ;
}
