// Validation for eCore change suggestion form
//

function textCounter(field, countfield, maxlimit) {

  if (field.value.length > maxlimit) { 
  	field.value = field.value.substring(0, maxlimit); 
  } else {
  	countfield.value = maxlimit - field.value.length;
  }

}

function checkform(of)
{
// Test if DOM is available and there is an element called required
	if(!document.getElementById || !document.createTextNode){return;}
	if(!document.getElementById('required')){return;}

// Define error messages and split the required fields
	var errorID='errormsg';
	var errorClass='error';
	var errorMsg='Error - Please update the form where indicated.';
	//var errorText='Required';
	var reqfields=document.getElementById('required').value.split(',');

// Cleanup old mess
	// if there is an old errormessage field, delete it
	if(document.getElementById(errorID))
	{
		var em=document.getElementById(errorID);
		em.parentNode.removeChild(em);
	}
	// remove spans and classes from the required fields
	for(var i=0;i<reqfields.length;i++)
	{
		var f=document.getElementById(reqfields[i]);
		if(!f){continue;}
		if(f.parentNode.lastChild && /span/i.test(f.parentNode.lastChild.nodeName))
		{
			f.parentNode.removeChild(f.parentNode.lastChild);
		}
		f.className='';
	}
// loop over required fields
	for(var i=0;i<reqfields.length;i++)
	{
// check if required field is there
		var f=document.getElementById(reqfields[i]);
		if(!f){continue;}
// test if the required field has an error, 
// according to its type
		switch(f.type.toLowerCase())
		{
			case 'text':
				if(f.value=='' && f.id!='email'){cf_adderr(f)}							
// email is a special field and needs checking
				if(f.id=='email' && !cf_isEmailAddr(f.value)){cf_adderr(f,'Invalid email address')}							
			break;
			case 'textarea':
				if(f.value==''){cf_adderr(f)}							
			break;
			case 'checkbox':
				if(!f.checked){cf_adderr(f)}							
			break;
			case 'select-one':
				if(!f.selectedIndex && f.selectedIndex==0){cf_adderr(f)}							
			break;
		}
	}
	return !document.getElementById(errorID);

	/* Tool methods */
	function cf_adderr(o, errorText)
	{
		var errorText = (errorText == null) ? "Required" : errorText;
		// create image, add to and colourise the error fields
		var errorIndicator=document.createElement('span');
		errorIndicator.appendChild(document.createTextNode(errorText));
		errorIndicator.className=errorClass;
		o.className=errorClass;
		o.parentNode.appendChild(errorIndicator);

	// Check if there is no error message
		if(!document.getElementById(errorID))
		{
		// create errormessage and insert before submit button
			var em=document.createElement('div');
			em.id=errorID;
			em.className=errorClass;
			var newp=document.createElement('p');
			newp.appendChild(document.createTextNode(errorMsg))
			// clone and insert the error image
			em.appendChild(newp);
			
			var frmTop = document.getElementById('ecore_change');
			frmTop.parentNode.insertBefore(em,frmTop);
		} 
	}
	function cf_isEmailAddr(str) 
	{
	    return str.match(/^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]{2,7}$/);
	}
}
