// JavaScript Document

this._errorImgUrl = "";
this._validImgUrl = "";
this._iconClass = "";
this._endAction;

function formValidatorSetUp ( setUp )
{
	_errorImgUrl = setUp[0];
	_validImgUrl = setUp[1];
	_iconClass = setUp[2];
	_endAction = setUp[3];
}

/*
 ************************************************************************
 ************************************************************************
																		*/

function addWarning ( objID )
{
	var errorObj = document.createElement( 'img' );
	errorObj.setAttribute( 'src', _errorImgUrl );
	errorObj.setAttribute( 'alt', "error" );
	errorObj.setAttribute( 'class', _iconClass );
	
	var txt = document.getElementById( objID ).innerHTML;
	txt = txt.replace(/<.*>/,"");
	
	document.getElementById( objID ).innerHTML = "";
	var txtObj = document.createTextNode( txt );
				
	document.getElementById( objID ).appendChild( errorObj );
	document.getElementById( objID ).appendChild( txtObj );
	
	document.getElementById('warning').style.display = "inline-block";
}


function removeWarning ( objID )
{
	var txt = document.getElementById( objID ).innerHTML;
	txt = txt.replace(/<.*>/,"");
	document.getElementById( objID ).innerHTML = "";
	var txtObj = document.createTextNode( txt );
	document.getElementById( objID ).appendChild( txtObj );
		
	document.getElementById('warning').style.display = "none";
}

/*
 ************************************************************************
 ************************************************************************
																		*/

function validTextField ( text, minLength )
{
	var res = true;
	if ( trim(text).length < minLength )
		res = false;
	return res;
}

function validEmailField ( email )
{
	var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
	var res = reg.test( trim(email) );
	return res;
}

function validSelectField ( value )
{
	var res = true;
	value = value.toLowerCase();
	if ( value == 'unselected' )
		res = false;
	return res;
}

function getGroupElements ( form, groupName )
{
	var res = new Array();
	for ( var i=0; i < document.forms[form].elements.length; i++ )
	{
		if ( document.forms[form].elements[i].name.indexOf(":G"+groupName) != -1 )
			res.push(document.forms[form].elements[i]);
	}	
	return res;
}

/*
 ************************************************************************
 ************************************************************************
																		*/

function validCheckBox ( obj, group, form )
{
	var res = true;
	if ( group != null )
	{
		var objList = getGroupElements ( form, group );
		var isGroupChecked = false;
		for ( var i=0; i < objList.length; i++ )
		{
			if ( objList[i].checked )
			{
				isGroupChecked = true;
				break;
			}
		}
		res = isGroupChecked;
	}else{
		res = obj.checked;
	}	
	return res;	
}


function getGroupName ( objName )
{
	var groupName = null;
	if ( objName.indexOf(':G') != -1 )
	{
		groupName = objName.substring( objName.indexOf(':G')+2, objName.indexOf('-T') );
	}	
	return groupName;
}

/*
 ************************************************************************
 ************************************************************************
																		*/
																		
function getTargetLabel ( fieldName )
{
	return 	fieldName.substring( 0, fieldName.indexOf('-') );
}
																		
function getGroupTargetLabel ( fieldName )
{
	return 	fieldName.substring( fieldName.indexOf('-T') + 2 );
}

/*
 ************************************************************************
 ************************************************************************
																		*/

function validate ( formNameToValidate )
{		
	var form = document.forms[formNameToValidate];
	var hasError = false;
	
	var checkedGroups = new Array();
	
	for ( var i=0; i < form.elements.length; i++ )
	{
		if ( form.elements[i].tagName == 'INPUT' || form.elements[i].tagName == 'TEXTAREA' || form.elements[i].tagName == 'SELECT' )
		{
			if ( (form.elements[i].name.indexOf('-mandatory') != -1) )
			{
				var elmtTag = form.elements[i].tagName;		
				var isValid = true;			
				var labelTarget = "";
				
				switch (elmtTag)
				{
					case "INPUT":
						switch ( form.elements[i].type )
						{
							case "text":
								if ( form.elements[i].name.indexOf('email') != -1 )
								{
									//email text field
									isValid = validEmailField ( form.elements[i].value );
									labelTarget = getTargetLabel( form.elements[i].name );
									if ( !isValid )
									{
										hasError = true;
										addWarning ( labelTarget );
									}else{
										removeWarning( labelTarget );
									}
								}else{
									//regular text field
									isValid = validTextField ( form.elements[i].value, 3 );
									labelTarget = getTargetLabel( form.elements[i].name );
									if ( !isValid )
									{
										hasError = true;
										addWarning ( labelTarget );
									}else{
										removeWarning( labelTarget );
									}
								}
							break;
							
							case "checkbox":
								var gp = getGroupName( form.elements[i].name );
								if ( gp != null )
								{
									if ( !in_array(gp, checkedGroups) )
									{
										isValid = validCheckBox ( form.elements[i], gp, formNameToValidate );									
										labelTarget = getGroupTargetLabel( form.elements[i].name );
										if ( !isValid )
										{
											addWarning ( labelTarget );
											hasError = true;
										}else{
											removeWarning( labelTarget );
										}
										checkedGroups.push(gp);
									}else{ 
										//alert ('group already checked');
									}
								}else{
									isValid = validCheckBox ( form.elements[i], null, formNameToValidate );	
									labelTarget = getTargetLabel( form.elements[i].name );
									if ( !isValid )
									{
										addWarning ( labelTarget );
										hasError = true;
									}else{
										removeWarning( labelTarget );
									}
								}
							break;
						}				
					break;
					
					//-----------------------------//
					
					case "TEXTAREA":
						isValid = validTextField ( form.elements[i].value, 5 );
						labelTarget = getTargetLabel( form.elements[i].name );
						if ( !isValid )
						{
							addWarning ( labelTarget );
							hasError = true;
						}else{
							removeWarning( labelTarget );
						}
					break;
									
					//-----------------------------//
					
					case "SELECT":
						isValid = validSelectField ( form.elements[i].value );
						labelTarget = getTargetLabel( form.elements[i].name );
						if ( !isValid )
						{
							addWarning ( labelTarget );
							hasError = true;
						}else{
							removeWarning( labelTarget );
						}
					break;	
	
				}
				
			}
		}
	}
	
		
	if ( !hasError ) 
	{
		if ( _endAction != null ) _endAction( formNameToValidate, 'submit' );
		document.getElementById( 'warning' ).style.display = 'none';
	}else{
		document.getElementById( 'warning' ).innerHTML = 
											'Please correct or complete the fields marked with ' +
											'<img src="'+_errorImgUrl+'" alt="error" class="'+_iconClass+'"/>' +
											'and submit your query again.';
		document.getElementById( 'warning' ).style.display = 'block';
		
		if ( _endAction != null ) _endAction( formNameToValidate, 'stop' );
	}
	
}
