function checkRequired(formObj,errorCallback){
	/* do not use if this browser is safari*/
	if((!Context.Common.testBrowser('msie') && !Context.Common.testBrowser('firefox')) || Context.Common.testBrowser('safari'))
		return true;

	var items 	= new Array();
	var result 	= itemType = null;
	var valid 	= true;
	var str 		= '';
	
	//	get required elements (inputs);
	var inputItems = formObj.getElementsByTagName('input');
	for(var i =0;i<inputItems.length;i++){
     	if(itemType=inputItems[i].getAttribute('req')){
			inputItems[i].style.border='1px solid #A5ACB2';
			inputItems[i].style.background='#fff';
     		if(result=validateItem(inputItems[i],itemType,inputItems[i].value))
     			items[items.length] = result;
		}
	}

     //	get required elements (text areas);
	var inputItems2 = formObj.getElementsByTagName('textarea');
	for(var i =0;i<inputItems2.length;i++){
     	if(itemType=inputItems2[i].getAttribute('req')){
			inputItems2[i].style.border='1px solid #A5ACB2';
			inputItems2[i].style.background='#fff';
     		if(result=validateItem(inputItems2[i],itemType,inputItems2[i].value))
     			items[items.length] = result;
		}
	}
	
     //	get required elements (select items);
	var inputItems3 = formObj.getElementsByTagName('select');
	for(var i =0;i<inputItems3.length;i++){
     	if(itemType=inputItems3[i].getAttribute('req')){
			inputItems3[i].style.border='1px solid #A5ACB2';
			inputItems3[i].style.background='#fff';
     		if(result=validateItem(inputItems3[i],itemType,inputItems3[i].value))
     			items[items.length] = result;
		}
	}

	for (var i=0;i<items.length;i++){
		items[i].element.style.border='1px solid red';
		items[i].element.style.background='yellow';
		str += items[i].error +"\n";
		valid = false;
		//items[i].element.focus();
	}
	
	if(!valid){
		if(!errorCallback){
			alert('Please be sure to complete these required fields before you continue.');
		}else{
			errorCallback(str);
		}
	}
	
     return valid;
}

function validateItem(item,itemType,val){
	//	basic checks;
	if(val.replace(/^\s+|\s+$/g,'').length < 1 || val.replace(/^\s+|\s+$/g,'')=='')
		return {'element':item,'error':'This field is required!'};

	//	custom filters;
	switch(itemType){
     	case 'email':
     		filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
          		return (!filter.test(val) ? {'element':item,'error':'Please enter a valid email address for this field!'}: null);

     	case 'date':
     		filter = /^([0-9]{2})+\/([0-9]{2})+\/([0-9]{4})+$/;
          		return (!filter.test(val) ? {'element':item,'error':"Please enter a valid date\nin the format: mm/dd/yyy\nfor this field!"}: null);
          		
     	case 'datefield':
     		switch(item.id.split('_').reverse()[0]){
     			case 'm':
     			case 'd':
     				filter = /^([0-9]{2})+$/;
          				return (!filter.test(val) ? {'element':item,'error':"Please enter a valid date in the format: mm/dd/yyy\nfor this field!"}: null);
     			case 'y':
     				filter = /^([0-9]{4})+$/;
          				return (!filter.test(val) ? {'element':item,'error':"Please enter a valid date in the format: mm/dd/yyy\nfor this field!"}: null);
          		//default:
          			//validateItem(item,'date',val);
			}
		break;

     	default:
     		return null;
	}
}