//--- PIXELL.BE FORMBUILDER --------------------------------------------------------------
//
//		version:	PixellFormbuilder.js v 1.0
//		author:		Jan Vangenechten
//		date:		2006/07/13
//










//--- INITIALIZE SOME STUFF --------------------------------------------------------------
var iCursorPositionX = 0;
var iCursorPositionY = 0;
var oErrorDivToShow = null;
document.onmousemove = FollowTheCursor;
var bIE = (document.all) ? true : false;
//--- INITIALIZE SOME STUFF --------------------------------------------------------------










//--- FOLLOW THE CURSOR ------------------------------------------------------------------
function FollowTheCursor(e) {
	x = (bIE) ? window.event.x + document.documentElement.scrollLeft : e.pageX;
	y = (bIE) ? window.event.y + document.documentElement.scrollTop  : e.pageY;
	if (oErrorDivToShow != null) {
		oErrorDivToShow.style.left = (x + 1) + "px";
		oErrorDivToShow.style.top 	= (y + 1) + "px";
		//window.status = window.event.y + "  -  " + y
	}
}
//--- FOLLOW THE CURSOR ------------------------------------------------------------------










//--- POSITION OF AN OBJECT --------------------------------------------------------------
function ObjectPositionX(obj_id)
{
	var obj = document.getElementById(obj_id);
	var iX = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			iX += obj.offsetLeft;
			obj = obj.offsetParent;
		}
	}
	else if (obj.x)
		iX += obj.x;
	return iX;
}

function ObjectPositionY(obj_id)
{
	var obj = document.getElementById(obj_id);
	var iY = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			iY += obj.offsetTop;
			obj = obj.offsetParent;
		}
	}
	else if (obj.y)
		iY += obj.y;
	return iY;
}
//--- POSITION OF AN OBJECT --------------------------------------------------------------










//--- SHOW AND HIDE ERROR-DIV--------------------------------------------------------------
function AttachErrorDiv(error_id) {
	var obj = document.getElementById(error_id);
	oErrorDivToShow = obj;
	obj.style.display = "block";
}

function DetachErrorDiv(error_id) {
	var obj = document.getElementById(error_id);
	oErrorDivToShow = obj;
	obj.style.display = "none";
}

function ClearErrorDiv(error_id) {
	var obj = document.getElementById(error_id);
	if(bIE) obj.style.filter = 'alpha(opacity=0)';
	if(!bIE) obj.style.opacity = 0;
	obj.innerHTML = "";
}
//--- SHOW AND HIDE ERROR-DIV--------------------------------------------------------------










//--- STRINGVALIDATION --------------------------------------------------------------------
//IsEmpty: checks if the string is anything but ""
function IsEmpty (pString)
{
	if (pString == "")
	{
		return true;
	}
	return false;
}



//Is Email: checks if the string can be an emailaddress
function IsEmail (pString)
{
	
		
	var emailPat=/^(.+)@(.+)$/
	var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"
	var validChars="\[^\\s" + specialChars + "\]"
	var quotedUser="(\"[^\"]*\")"
	var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/
	var atom=validChars + '+'
	var word="(" + atom + "|" + quotedUser + ")"
	var userPat=new RegExp("^" + word + "(\\." + word + ")*$")
	var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$")

	if (pString=="" || pString==null || pString.indexOf(" ")!=-1)
		return false;
		
	var matchArray=pString.match(emailPat)
	if (matchArray==null) {
		return false
	}

	var user=matchArray[1]
	var domain=matchArray[2]
	if (user.match(userPat)==null) {
	    return false
	}

	var IPArray=domain.match(ipDomainPat)
	if (IPArray!=null) {
		  for (var i=1;i<=4;i++) {
		    if (IPArray[i]>255) {
			return false
		    }
	    }
	    return true
	}

	var domainArray=domain.match(domainPat)
	if (domainArray==null) {
	    return false
	}
	
	var atomPat=new RegExp(atom,"g")
	var domArr=domain.match(atomPat)
	var len=domArr.length
	if (domArr[domArr.length-1].length<2 || 
	    domArr[domArr.length-1].length>3) {
	   return false
	}

	if (len<2) {
	   return false
	}

	return true;
}

function IsURL(pString)
{
	
	var specialChars="\\(\\)><@,;:\\\\\\\"\\.\\[\\]";
	var validChars="\[^\\s" + specialChars + "\]";
	var atom=validChars + '+';
	var urlPat=/^http:\/\/(\w*)\.([\-\+a-z0-9]*)\.(\w*)/;
	
	pString=pString.toLowerCase();
	
	var matchArray=pString.match(urlPat);
	
	if (matchArray==null)
		return false
				
	var user=matchArray[2];
	var domain=matchArray[3];
		
	// Check for invalid characters
	for (i=0; i<user.length; i++) 
		if (user.charCodeAt(i)>127) 
			return false
		
	for (i=0; i<domain.length; i++) 
		if (domain.charCodeAt(i)>127) 
			return false
		
	var atomPat=new RegExp("^" + atom + "$");
	var domArr=domain.split(".");
	var len=domArr.length;
	
	// Checks valid domain
	for (i=0;i<len;i++)
		if (domArr[i].search(atomPat)==-1) 
			return false
	
	if (domArr[domArr.length-1].length!=2 && domArr[domArr.length-1].search(knownDomsPat)==-1)
		return false
	
	// Valid URL
	return true;
}



//Is TextOnly: checks if string only contains a..z or A..Z
function IsTextOnly (pString)
{
	// A..Z  ==>  chr(65)..chr(90)
	// a..z  ==>  chr(97)..chr(122)
	// 'space'  ==>  chr(32)

	if (pString=="") return false;
	for(var i=0;i<pString.length;i++)
	{
		var theCharCode = pString.charCodeAt(i);
		if (!(((theCharCode>=65)&&(theCharCode<=90))||((theCharCode>=97)&&(theCharCode<=122))||(theCharCode==32))) return false;
	}
	return true;
}



//Is Numeric: checks if string only contains 0..9
function IsNumeric (pString)
{
	// 0..9  ==>  chr(48)..chr(57)

	var j=0;

	if (pString=="") return false;

	for(var i=0;i<pString.length;i++)
	{
		var theCharCode = pString.charCodeAt(i);
		if (!((theCharCode>=48)&&(theCharCode<=57))) return false;
	}
	return true;
}



//Is Number: checks if string only contains 0..9 (or a "-" as first char)
function IsNumber (pString)
{
	// 0..9  ==>  chr(48)..chr(57)
	// "-" ==> chr(45)					????????? is this correct ?????????????????????????????????????????????????????

	var j=0;

	if (pString=="") return false;
	if (pString.charCodeAt(0)==45) j=1;

	for(var i=j;i<pString.length;i++)
	{
		var theCharCode = pString.charCodeAt(i);
		if (!((theCharCode>=48)&&(theCharCode<=57))) return false;
	}
	return true;
}



//Is Decimal: checks if string only contains 0..9
function IsDecimal (pString)
{
	// 0..9  ==>  chr(48)..chr(57)
	// "-" ==> chr(45)					????????? is this correct ?????????????????????????????????????????????????????
	// "." ==> chr(46)

	var j=0;
	var iDots=0;

	if (pString=="") return false;
	if (pString.charCodeAt(0)==45) j=1;

	for(var i=j;i<pString.length;i++)
	{
		var theCharCode = pString.charCodeAt(i);
		if (!(((theCharCode>=48)&&(theCharCode<=57))||(theCharCode==46)||(theCharCode==44))) return false;
		if (((i==j)&&(theCharCode==46))||((i==j)&&(theCharCode==44))) return false;
		if ((theCharCode==46)||(theCharCode==44)) iDots++;
	}
	
	if (iDots>1) return false;
	
	return true;
}



//Is AlfaNumeric: checks if string only contains a..z A..Z or 0..9
function IsAlfaNumeric (pString)
{
	// A..Z  ==>  chr(65)..chr(90)
	// a..z  ==>  chr(97)..chr(122)
	// 'space'  ==>  chr(32)

	if (pString=="") return false;
	for(var i=0;i<pString.length;i++)
	{
		var theCharCode = pString.charCodeAt(i);
		if (!(((theCharCode>=65)&&(theCharCode<=90))||((theCharCode>=97)&&(theCharCode<=122))||((theCharCode>=48)&&(theCharCode<=57)))) return false;
	}
	return true;
}



//Is Date: checks if string is of format 00/00/0000 and is an existing date
function IsDate (pString)
{
	// 00/00/0000 and the date exists

	if (pString=="") return false;

	var aDate = pString.split("/");
	
	if(aDate.length!=3) return false;

	var dDay = aDate[0];
	var dMonth = aDate[1];
	var dYear = aDate[2];
	
	if ((dYear < 1900)||(dYear >= 2100)) return false;

	var dTempDate = new Date(dYear,dMonth-1,dDay);
	var dTempDay = dTempDate.getDate();
	var dTempMonth = dTempDate.getMonth()+1;
	var dTempYear = dTempDate.getFullYear();
	
	return (dYear==dTempYear) && (dMonth==dTempMonth) && (dDay==dTempDay)
}

function IsCorrectExtention(pString,pExtentionString)
{
	var aExt = pExtentionString.split(",");
	var sExt = pString.substring(pString.lastIndexOf(".")+1);
	
	for (var i=0; i<aExt.length; i++)
	{
		if(aExt[i].toLowerCase()==sExt.toLowerCase()) return true;
	}
	return false;
}
//--- STRINGVALIDATION --------------------------------------------------------------------










//--- FORMVALIDATION ----------------------------------------------------------------------
//Textfield: NOT EMPTY
function Validate_NotEmpty (field_id,error_id,err_message_wrong,err_message_empty,cssFieldBasicClass,cssFieldErrorClass)
{
	var obj_field = document.getElementById(field_id);
	var obj_error = document.getElementById(error_id);

	var opacity_value = 0;
	var innerhtml_value = "";
	var bIsRequired = false;
	var bThrowError = false;
	obj_field.className = cssFieldBasicClass;

	if(err_message_empty!="") bIsRequired = true;
	
	if (IsEmpty(obj_field.value))
	{
		if(bIsRequired)
		{
			bThrowError = true;
			opacity_value = 100;
			innerhtml_value = err_message_empty;
			obj_field.className = cssFieldErrorClass;
		}
	}

	if(bIE) obj_error.style.filter = 'alpha(opacity=' + opacity_value + ')';	//for IE-browsers: opacity-filter from 0 to 100
	if(!bIE) obj_error.style.opacity = opacity_value/100;						//for non IE-browsers: opacity from 0 to 1
	obj_error.innerHTML = innerhtml_value;
	return !(bThrowError);
}

//Textfield: TEXT ONLY
function Validate_TextOnly (field_id,error_id,err_message_wrong,err_message_empty,cssFieldBasicClass,cssFieldErrorClass)
{
	var obj_field = document.getElementById(field_id);
	var obj_error = document.getElementById(error_id);

	var opacity_value = 0;
	var innerhtml_value = "";
	var bThrowError = false;
	var bIsRequired = false;
	obj_field.className = cssFieldBasicClass;

	if(err_message_empty!="") bIsRequired = true;
	
	if (IsEmpty(obj_field.value))
	{
		if(bIsRequired)
		{
			bThrowError = true;
			opacity_value = 100;
			innerhtml_value = err_message_empty;
			obj_field.className = cssFieldErrorClass;
		}
	}
	else
	{
		if (!(IsTextOnly(obj_field.value)))
		{
			bThrowError = true;
			opacity_value = 100;
			innerhtml_value = err_message_wrong;
			obj_field.className = cssFieldErrorClass;
		}
	}

	if(bIE) obj_error.style.filter = 'alpha(opacity=' + opacity_value + ')';	//for IE-browsers: opacity-filter from 0 to 100
	if(!bIE) obj_error.style.opacity = opacity_value/100;						//for non IE-browsers: opacity from 0 to 1
	obj_error.innerHTML = innerhtml_value;
	return !(bThrowError);
}

//Textfield: NUMERIC
function Validate_Numeric (field_id,error_id,err_message_wrong,err_message_empty,cssFieldBasicClass,cssFieldErrorClass)
{
	var obj_field = document.getElementById(field_id);
	var obj_error = document.getElementById(error_id);

	var opacity_value = 0;
	var innerhtml_value = "";
	var bThrowError = false;
	var bIsRequired = false;
	obj_field.className = cssFieldBasicClass;

	if(err_message_empty!="") bIsRequired = true;
	
	if (IsEmpty(obj_field.value))
	{
		if(bIsRequired)
		{
			bThrowError = true;
			opacity_value = 100;
			innerhtml_value = err_message_empty;
			obj_field.className = cssFieldErrorClass;
		}
	}
	else
	{
		if (!(IsNumeric(obj_field.value)))
		{
			bThrowError = true;
			opacity_value = 100;
			innerhtml_value = err_message_wrong;
			obj_field.className = cssFieldErrorClass;
		}
	}

	if(bIE) obj_error.style.filter = 'alpha(opacity=' + opacity_value + ')';	//for IE-browsers: opacity-filter from 0 to 100
	if(!bIE) obj_error.style.opacity = opacity_value/100;						//for non IE-browsers: opacity from 0 to 1
	obj_error.innerHTML = innerhtml_value;
	return !(bThrowError);
}


//Textfield: DECIMAL
function Validate_Decimal (field_id,error_id,err_message_wrong,err_message_empty,cssFieldBasicClass,cssFieldErrorClass)
{
	var obj_field = document.getElementById(field_id);
	var obj_error = document.getElementById(error_id);

	var opacity_value = 0;
	var innerhtml_value = "";
	var bThrowError = false;
	var bIsRequired = false;
	obj_field.className = cssFieldBasicClass;

	if(err_message_empty!="") bIsRequired = true;
	
	if (IsEmpty(obj_field.value))
	{
		if(bIsRequired)
		{
			bThrowError = true;
			opacity_value = 100;
			innerhtml_value = err_message_empty;
			obj_field.className = cssFieldErrorClass;
		}
	}
	else
	{
		if (!(IsDecimal(obj_field.value)))
		{
			bThrowError = true;
			opacity_value = 100;
			innerhtml_value = err_message_wrong;
			obj_field.className = cssFieldErrorClass;
		}
	}

	if(bIE) obj_error.style.filter = 'alpha(opacity=' + opacity_value + ')';	//for IE-browsers: opacity-filter from 0 to 100
	if(!bIE) obj_error.style.opacity = opacity_value/100;						//for non IE-browsers: opacity from 0 to 1
	obj_error.innerHTML = innerhtml_value;
	
	obj_field.value = obj_field.value.replace(/,/g, ".");
	
	return !(bThrowError);
}


//Textfield: EMAIL
function Validate_Email (field_id,error_id,err_message_wrong,err_message_empty,cssFieldBasicClass,cssFieldErrorClass)
{
	var obj_field = document.getElementById(field_id);
	var obj_error = document.getElementById(error_id);

	var opacity_value = 0;
	var innerhtml_value = "";
	var bThrowError = false;
	var bIsRequired = false;
	obj_field.className = cssFieldBasicClass;

	if(err_message_empty!="") bIsRequired = true;
	
	if (IsEmpty(obj_field.value))
	{
		if(bIsRequired)
		{
			bThrowError = true;
			opacity_value = 100;
			innerhtml_value = err_message_empty;
			obj_field.className = cssFieldErrorClass;
		}
	}
	else
	{
		if (!(IsEmail(obj_field.value)))
		{
			bThrowError = true;
			opacity_value = 100;
			innerhtml_value = err_message_wrong;
			obj_field.className = cssFieldErrorClass;
		}
	}

	if(bIE) obj_error.style.filter = 'alpha(opacity=' + opacity_value + ')';	//for IE-browsers: opacity-filter from 0 to 100
	if(!bIE) obj_error.style.opacity = opacity_value/100;						//for non IE-browsers: opacity from 0 to 1
	obj_error.innerHTML = innerhtml_value;
	return !(bThrowError);
}

//Textfield: EMAIL
function Validate_URL (field_id,error_id,err_message_wrong,err_message_empty,cssFieldBasicClass,cssFieldErrorClass)
{
	var obj_field = document.getElementById(field_id);
	var obj_error = document.getElementById(error_id);

	var opacity_value = 0;
	var innerhtml_value = "";
	var bThrowError = false;
	var bIsRequired = false;
	obj_field.className = cssFieldBasicClass;

	if(err_message_empty!="") bIsRequired = true;
	
	if (IsEmpty(obj_field.value))
	{
		if(bIsRequired)
		{
			bThrowError = true;
			opacity_value = 100;
			innerhtml_value = err_message_empty;
			obj_field.className = cssFieldErrorClass;
		}
	}
	else
	{
		if (!(IsURL(obj_field.value)))
		{
			bThrowError = true;
			opacity_value = 100;
			innerhtml_value = err_message_wrong;
			obj_field.className = cssFieldErrorClass;
		}
	}

	if(bIE) obj_error.style.filter = 'alpha(opacity=' + opacity_value + ')';	//for IE-browsers: opacity-filter from 0 to 100
	if(!bIE) obj_error.style.opacity = opacity_value/100;						//for non IE-browsers: opacity from 0 to 1
	obj_error.innerHTML = innerhtml_value;
	return !(bThrowError);
}


//Textfield: DATE
function Validate_Date (field_id,error_id,err_message_wrong,err_message_empty,cssFieldBasicClass,cssFieldErrorClass)
{
	var obj_field = document.getElementById(field_id);
	var obj_error = document.getElementById(error_id);

	var opacity_value = 0;
	var innerhtml_value = "";
	var bThrowError = false;
	var bIsRequired = false;
	obj_field.className = cssFieldBasicClass;

	if(err_message_empty!="") bIsRequired = true;
	
	if (IsEmpty(obj_field.value))
	{
		if(bIsRequired)
		{
			bThrowError = true;
			opacity_value = 100;
			innerhtml_value = err_message_empty;
			obj_field.className = cssFieldErrorClass;
		}
	}
	else
	{
		if (!(IsDate(obj_field.value)))
		{
			bThrowError = true;
			opacity_value = 100;
			innerhtml_value = err_message_wrong;
			obj_field.className = cssFieldErrorClass;
		}
	}

	if(bIE) obj_error.style.filter = 'alpha(opacity=' + opacity_value + ')';	//for IE-browsers: opacity-filter from 0 to 100
	if(!bIE) obj_error.style.opacity = opacity_value/100;						//for non IE-browsers: opacity from 0 to 1
	obj_error.innerHTML = innerhtml_value;
	return !(bThrowError);
}

//File
function Validate_File (field_id,error_id,err_message_wrong,err_message_empty,cssFieldBasicClass,cssFieldErrorClass,sExtentions)
{
	var obj_field = document.getElementById(field_id);
	var obj_error = document.getElementById(error_id);

	var opacity_value = 0;
	var innerhtml_value = "";
	var bThrowError = false;
	var bIsRequired = false;
	obj_field.className = cssFieldBasicClass;

	if(err_message_empty!="") bIsRequired = true;
	
	if (IsEmpty(obj_field.value))
	{
		if(bIsRequired)
		{
			bThrowError = true;
			opacity_value = 100;
			innerhtml_value = err_message_empty;
			obj_field.className = cssFieldErrorClass;
		}
	}
	else
	{
		if (!(IsCorrectExtention(obj_field.value,sExtentions)))
		{
			bThrowError = true;
			opacity_value = 100;
			innerhtml_value = err_message_wrong;
			obj_field.className = cssFieldErrorClass;
		}
	}

	if(bIE) obj_error.style.filter = 'alpha(opacity=' + opacity_value + ')';	//for IE-browsers: opacity-filter from 0 to 100
	if(!bIE) obj_error.style.opacity = opacity_value/100;						//for non IE-browsers: opacity from 0 to 1
	obj_error.innerHTML = innerhtml_value;
	return !(bThrowError);
}

//Checkboxgroup
function Validate_Checkboxgroup (field_container,error_id,err_message_empty,cssFieldBasicClass,cssFieldErrorClass)
{	
	// field_name instead of field_id !!!
	var obj_fieldContainer = document.getElementById(field_container);
	var obj_fieldValues = document.getElementsByName(field_container.substr(46));
	var obj_error = document.getElementById(error_id);

	var opacity_value = 0;
	var innerhtml_value = "";
	var bThrowError = false;
	var bIsRequired = false;
	obj_fieldContainer.className = cssFieldBasicClass;

	if(err_message_empty!="")
	{
		if(obj_fieldValues.length>0)
		{
	        var checked = false;
	        for (var r = 0; r < obj_fieldValues.length; r++)
	        {
				checked = obj_fieldValues[r].checked;
				if (checked) break;
			}
			if (!checked) bThrowError = true;
		}
	}

	if (bThrowError)
	{
		opacity_value = 100;
		innerhtml_value = err_message_empty;
		obj_fieldContainer.className = cssFieldErrorClass;
	}

	if(bIE) obj_error.style.filter = 'alpha(opacity=' + opacity_value + ')';	//for IE-browsers: opacity-filter from 0 to 100
	if(!bIE) obj_error.style.opacity = opacity_value/100;						//for non IE-browsers: opacity from 0 to 1
	obj_error.innerHTML = innerhtml_value;
	return !(bThrowError);
}
//--- FORMVALIDATION ----------------------------------------------------------------------





















