function daysInMonth(iMonth, iYear)
{
	return 32 - new Date(iYear, iMonth, 32).getDate();
}

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;}

//			var elem = document.getElementById(of).elements;
//			alert (elem.length);
		// Define error messages and split the required fields
			var errorID='errormsg';
			var errorClass='error'
			var errorMsg='Please enter or change the fields marked with a ';			
			var errorImg='img/alert.jpg';
			var errorAlt='Error';
			var errorTitle='This field has an error!';
			var reqfields=document.getElementById('required').value.split(',');
			if (of.name == "children") {
				 var numofchildren = document.getElementById('n').value;
				for (iii=0; iii<numofchildren; iii++) {
					 var my_date = document.getElementById('dob'+iii).value;
					var date_array = document.getElementById('dob'+iii).value.split('-');
					
					if (date_array[1] == 'Month') {
						alert ("You must select a proper Date of Birth for each child");
						return false;
					}
					if (date_array[2] > daysInMonth(date_array[1],date_array[0])) { 
						alert (date_array[1] + '/' + date_array[2] + '/' + date_array[0] + " is not a valid date");
						return false;
					}
				}
			}

		// 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 old images 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.previousSibling && /img/i.test(f.previousSibling.nodeName))
				{
					f.parentNode.removeChild(f.previousSibling);
				}
				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]);
                                //alert('test');
				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)}				
								 if(f.id=='email' && !cf_isEmailAddr(f.value)){cf_adderr(f)}							
								 break;
					
					case 'password': if(f.value==''){cf_adderr(f)}	break;					
					case 'textarea': if(f.value==''){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){
				// create image, add to and colourise the error fields
				var errorIndicator=document.createElement('img');
					errorIndicator.alt=errorAlt;
					errorIndicator.src=errorImg;
					errorIndicator.title=errorTitle;
					o.className=errorClass;
					o.parentNode.insertBefore(errorIndicator,o);

			// Check if there is no error message
				if(!document.getElementById(errorID))				{
				
					// create errormessage and insert before submit button
					var em=document.createElement('div');					
					var newp=document.createElement('p');
						em.id=errorID;
					 	newp.appendChild(document.createTextNode(errorMsg))
					 	// clone and insert the error image					
					    newp.appendChild(errorIndicator.cloneNode(true));
				     	em.appendChild(newp);
					    // find the submit button 
					
						for(var i=0;i<of.getElementsByTagName('input').length;i++){
							if(/submit/i.test(of.getElementsByTagName('input')[i].type)){
								var sb=of.getElementsByTagName('input')[i];
								break;
							}
						}
					if(sb){
						sb.parentNode.insertBefore(em,sb);
					}	
				} 
			}
			function cf_isEmailAddr(str) 
			{
			    return str.match(/^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]{2,7}$/);
			}
		}

