// JavaScript Document
function getE(e) {
  if(typeof(e)!='string') return e;
  if(document.getElementById) e=document.getElementById(e);
  else if(document.all) e=document.all[e];
  else e=null;
  return e;
}
function addEvent(e,evType,fn,useCapture) {
	if(e.addEventListener) {
		e.addEventListener(evType,fn,useCapture);
		return true;
	} else if (e.attachEvent) {
		var r = e.attachEvent('on'+evType, fn);
		return r;
	} else e['on'+evType]=fn;
}
function trim(value) {
   var temp = value;
   var obj = /^(\s*)([\W\w]*)(\b\s*$)/;
   if (obj.test(temp)) temp = temp.replace(obj, '$2');
   return temp;
}
function checkFormDOM(frm) {
// Test if DOM is available and there is an element called required
	
	if(!document.getElementById || !document.createTextNode){return;}
	if(!getE('htbReqElems')){return;}
	// Define error messages and split the required fields
	var errorID='errorMsg';
	var errorClass='sError'
	var errorMsg=' Please correct the fields marked above.';
	var errorImg='/images/alert.gif';
	var errorAlt='missing or invalid entry';
	var errorTitle='missing or invalid entry';
	var reqfields=getE('htbReqElems').value.split(',');

	// if there is an old errormessage field, delete it
	
	if(getE(errorID)) {
		var em=getE(errorID);
		em.parentNode.removeChild(em);
	}/**/

	// remove old error images and err class from the required fields
	for(var i=0;i<reqfields.length;i++) {
		var f=getE(reqfields[i]);
		if(!f){continue;}
		/*if(f.previousSibling && /img/i.test(f.previousSibling.nodeName)) {  //image after
			f.parentNode.removeChild(f.previousSibling);
		}*/
		if(f.nextSibling && /img/i.test(f.nextSibling.nodeName)) { //image before
			f.parentNode.removeChild(f.nextSibling);
		}/**/
		f.className='';
	}
	
	// loop over required fields
	for(var i=0;i<reqfields.length;i++) {
		var f=getE(reqfields[i]);
		if(!f){continue;}
		// test if the required field has an error, according to its type
		switch(f.type.toLowerCase()) {
			case 'text':
			case 'hidden':
				if(trim(f.value)=='' && f.id.toLowerCase().indexOf('email')==-1){addErr(f)}							
				// email is a special field and needs checking
				if(f.id.toLowerCase().indexOf('email')>-1 && !isEmail(f.value)){addErr(f)} 
				break;
			case 'textarea':
				if(f.value==''){addErr(f)} 
				break;
			case 'checkbox':
			case 'radio':
				if(!f.checked){addErr(f)} 
				break;
			case 'select-one':
				//if(!f.selectedIndex && f.selectedIndex==0){addErr(f)} break;
				if(f.value==''){addErr(f)} 
				break;
		}
	}
	
	//alert(getE('htbReqElems').value);	
	return !getE(errorID);

	function addErr(o) {
		// create image, add to and colorise the error fields
		var errorIndicator=document.createElement('img');
		errorIndicator.alt=errorAlt;
		errorIndicator.src=errorImg;
		errorIndicator.title=errorTitle;
		var errorIndicator2=document.createElement('img');
		errorIndicator2.alt=errorAlt;
		errorIndicator2.src=errorImg;
		errorIndicator2.title=errorTitle;		
		o.className=errorClass;
		//o.parentNode.insertBefore(errorIndicator,o); //image after
		o.parentNode.insertBefore(errorIndicator,o.nextSibling); //image before
		// Check if there is no error message
		if(!getE(errorID)) {
			// create errormessage and insert before submit button
			var em=document.createElement('div');
			em.id=errorID;
			var newp=document.createElement('p');
			newp.appendChild(errorIndicator2);
			newp.appendChild(document.createTextNode(errorMsg));
			newp.className=errorClass;
			
			em.appendChild(newp);
			/* added for linked list 
			var newul=document.createElement('ul');		
			em.appendChild(newul);
			/* end added for linked list */
			// find the submit button 
			
			for(var i=2;i<document.getElementsByTagName('input').length;i++) {
				if(/submit/i.test(document.getElementsByTagName('input')[i].type)) {
					var sb=document.getElementsByTagName('input')[i];
					break;
				}
			}
			
			if(sb) sb.parentNode.insertBefore(em,sb);
		} 
		/* added for linked list 
		var em=getE(errorID).getElementsByTagName('ul')[0];
		var newli=document.createElement('li');
		var newa=document.createElement('a');
		for(var i=0;i<frm.getElementsByTagName('label').length;i++) {
			if(frm.getElementsByTagName('label')[i].htmlFor==o.id) {
				var txt=frm.getElementsByTagName('label')[i].firstChild.nodeValue;
				break;
			}
		}

		newa.appendChild(document.createTextNode(txt));
		newa.href='#'+f.id;
		newa.onclick=function() {
			var loc=this.href.match(/#(\w.+)/)[1];
			getE(loc).focus();
			return false;
		}
		newli.appendChild(newa);
		em.appendChild(newli);
		/* end added for linked list */
	}
	function isEmail(str) {
		//alert(str);
		return str.match(/^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]{2,7}$/);
	}
		
}

