// JavaScript Document


function formValidatorSetUp ( setUp )
{
	_errorImgUrl = setUp[0];
	_validImgUrl = setUp[1];
	_iconClass = setUp[2];
}

this._errorImgUrl = "";
this._validImgUrl = "";
this._iconClass = "";

/*
 ************************************************************************
 ************************************************************************
																		*/

function addWarning ( objID )
{
	var errorObj = document.createElement( 'img' );
	errorObj.setAttribute( 'src', "images/form/action_stop.gif" );
	errorObj.setAttribute( 'alt', "error" );
	errorObj.setAttribute( 'class', "textIcon" );
	
	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].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 ) 
	{ 
		form.submit();
	}else{
		document.getElementById( 'warning' ).innerHTML = 
											'Please correct or complete the fields marked with ' +
											'<img src="images/form/action_stop.gif" alt="error" class="'+_iconClass+'"/>' +
											'and submit your query again.';
	}
	
}
