var nbsp = 160;		// non-breaking space char
var node_text = 3;	// DOM text node-type
var emptyString = /^\s*$/ ;

function msg(fld,     // id of element to display message in
             msgtype, // class to give element ("warn" or "error")
             message) // string to display
{
  // setting an empty string can give problems if later set to a 
  // non-empty string, so ensure a space present. (For Mozilla and Opera one could 
  // simply use a space, but IE demands something more, like a non-breaking space.)
  var dispmessage;
  if (emptyString.test(message)) 
    dispmessage = String.fromCharCode(nbsp);    
  else  
    dispmessage = message;

  var elem = document.getElementById(fld);
  //alert(fld);
  elem.innerHTML = dispmessage;  
  
  elem.className = msgtype;   // set the CSS class to adjust appearance of message
} 

function commonCheck    (valfield,   // element to be validated
						 msk,
                         infofield,  // id of element to receive info/error msg
                         required)   // true if required
{
  if (!document.getElementById) 
    return '';  // not available on this browser - leave validation to the server
  var elem = document.getElementById(msk+infofield);
  if (!elem.firstChild) return '';  // not available on this browser 
  if (elem.firstChild.nodeType != node_text) return '';  // infofield is wrong type of node  

  if (emptyString.test(valfield.value)) {
    if (required) {
      msg (msk+infofield, "error", "*");  
      //setfocus(valfield);
      return 'is Required.';
    }
    else {
      msg (msk+infofield, "warn", "");   // OK
      return '';  
    }
  }
  return '';
}

function validatePresent(fld,fldMsg,msk)
{
	//alert(document.getElementById(msk+fldMsg).innerHTML);
	
	var stat = commonCheck (fld, msk, fldMsg, true);
	if (stat != '') return stat;

	msg (msk+fldMsg, "warn", "");  
	  
	return '';
}


function validateCombobox(fld,fldMsg,msk,req)
{
	//alert(document.getElementById(msk+fldMsg).innerHTML);
	
	var stat = commonCheck (fld, msk, fldMsg, req);
	if (stat != '') return stat;

	if(req && fld.value<0)
	{
		msg (msk+fldMsg, "error", "is Required."); 
		return 'is Required.';
	}
	msg (msk+fldMsg, "warn", "");  
	return '';
}

function validateDate(fld,fldMsg,msk,req){
	var ret=commonCheck(fld, msk, fldMsg, req);
	if (ret=='' && !emptyString.test(fld.value))
	{
		var reg2 = /^\d{1,2}(\-|\/|\.)\d{1,2}\1(\d{2}|\d{4})$/;
		//reg2=/^\b(0?[1-9]|[12][0-9]|3[01])[- /.](0?[1-9]|1[012])[- /.](19|20)?[0-9]{2}\b$/;
		// If it doesn't conform to the right format (with either a 2 digit year or 4 digit year), fail
		if (!reg2.test(fld.value)) {
			msg(msk+fldMsg, "error","?");
			return 'must be a valid date (ex 1/12/2001)';		
		}
		var parts = fld.value.split(RegExp.$1); // Split into 3 parts based on what the divider was
		// Check to see if the 3 parts end up making a valid date
		var mm = parts[0]-1;
		var dd = parts[1];
		var yy = parts[2];
		if (yy.length==2) {
			if(yy>50)
				yy=19+yy
			else
				yy=20+yy;
		}
			
		var dt = new Date(yy, mm, dd);
		//alert(dt);
		if (dd != dt.getDate()) {
			msg(msk+fldMsg, "error","?");
			return 'must be a valid date (ex 1/12/2001)';		
		}
		if (mm != dt.getMonth()) {
			msg(msk+fldMsg, "error","?");
			return 'must be a valid date (ex 1/12/2001)';		
		}
		msg (msk+fldMsg, "warn", ""); 
		return '';
	}
	return ret;
}

function validateTime(fld,fldMsg,msk,req){
	var ret=commonCheck(fld, msk, fldMsg, req);
	if (ret=='' && !emptyString.test(fld.value))
	{
		var reg2 = /^(\d{1,2}):(\d{2})([ap]m)?$/;
		//reg2=/^\b(0?[1-9]|[12][0-9]|3[01])[- /.](0?[1-9]|1[012])[- /.](19|20)?[0-9]{2}\b$/;
		// If it doesn't conform to the right format (with either a 2 digit year or 4 digit year), fail
		if (!reg2.test(fld.value)) {
			//alert(0);
			msg(msk+fldMsg, "error","?");
			return 'must be a valid time (ex 5:30pm)';		
		}
		var regs = fld.value.match(reg2);
		if(regs[3]) {
			if(regs[1]<1 || regs[1]>12) {
				msg(msk+fldMsg, "error","?");
				return 'must be a valid time (ex 5:30pm)';
			}
		} else {
			if(regs[1]>23) {
				msg(msk+fldMsg, "error","?");
				return 'must be a valid time (ex 5:30pm)';
			}
		}
		if(regs[2] > 59) {
			msg(msk+fldMsg, "error","?");
			return 'must be a valid time (ex 5:30pm)';
		}
		msg (msk+fldMsg, "warn", ""); 
		return '';
	}
	return ret;
}
var bBypassValidation=false;

function validate_Event(thisform, msk)
{
	if (bBypassValidation)
		return true;
	var fmsg='';
	var smsg;
	with (thisform)
	{
		smsg=validatePresent(EventName, 'inf_EventName', msk);
		if (!smsg.length==0)
		{
			fmsg+='* Event Name '+smsg+'</br>';	
		}
		smsg=validateDate(StartDate, 'inf_StartDate', msk,true);
		if (!smsg.length==0)
		{
			fmsg+='* Start Date '+smsg+'</br>';	
		}
		smsg=validateDate(EndDate, 'inf_EndDate', msk,false);
		if (!smsg.length==0)
		{
			fmsg+='* End Date '+smsg+'</br>';	
		}		
	}
	if (fmsg.length==0)
	{
		msg(msk+'ErrSum',"warn","");
	} else
	{
		//document.getElementById(msk+'ErrSum').innerHTML="Test";
		msg(msk+'ErrSum',"error",fmsg);
	}
	
	return (fmsg.length==0);
}

function validate_League_Event(thisform, msk)
{
	if (bBypassValidation)
		return true;
	var fmsg='';
	var smsg;
	//return false;
	with (thisform)
	{
		smsg=validateCombobox(CourseID, 'inf_CourseID', msk, true);
		if (!smsg.length==0)
		{
			fmsg+='* Course '+smsg+'</br>';	
		}
		smsg=validateDate(EDate, 'inf_EDate', msk,true);
		if (!smsg.length==0)
		{
			fmsg+='* Date '+smsg+'</br>';	
		}
		smsg=validateTime(EDate_time, 'inf_EDate_time', msk,true);
		if (!smsg.length==0)
		{
			fmsg+='* Date '+smsg+'</br>';	
		}	
	}
	if (fmsg.length==0)
	{
		msg(msk+'ErrSum',"warn","");
	} else
	{
		//document.getElementById(msk+'ErrSum').innerHTML="Test";
		//alert(msk+'ErrSum');
		msg(msk+'ErrSum',"error",fmsg);
	}
	
	return (fmsg.length==0);
}

function validate_League_Season_Sub(thisform, msk)
{
	if (bBypassValidation)
		return true;
	var fmsg='';
	var smsg;
	//return false;
	with (thisform)
	{
		smsg=validatePresent(SubSeason, 'inf_SubSeason', msk);
		if (!smsg.length==0)
		{
			fmsg+='* Subseason Name '+smsg+'</br>';	
		}
		smsg=validateDate(StartDate, 'inf_StartDate', msk,true);
		if (!smsg.length==0)
		{
			fmsg+='* Start Date '+smsg+'</br>';	
		}
		smsg=validateDate(EndDate, 'inf_EndDate', msk,true);
		if (!smsg.length==0)
		{
			fmsg+='* End Date '+smsg+'</br>';	
		}
	}
	if (fmsg.length==0)
	{
		msg(msk+'ErrSum',"warn","");
	} else
	{
		//document.getElementById(msk+'ErrSum').innerHTML="Test";
		//alert(msk+'ErrSum');
		msg(msk+'ErrSum',"error",fmsg);
	}
	
	return (fmsg.length==0);
}

function validate_League_Season(thisform, msk)
{
	if (bBypassValidation)
		return true;
	var fmsg='';
	var smsg;
	//return false;
	with (thisform)
	{
		smsg=validatePresent(SeasonName, 'inf_SeasonName', msk);
		if (!smsg.length==0)
		{
			fmsg+='* Season Name '+smsg+'</br>';	
		}
		smsg=validateDate(StartDate, 'inf_StartDate', msk,true);
		if (!smsg.length==0)
		{
			fmsg+='* Start Date '+smsg+'</br>';	
		}
		smsg=validateDate(EndDate, 'inf_EndDate', msk,true);
		if (!smsg.length==0)
		{
			fmsg+='* End Date '+smsg+'</br>';	
		}
	}
	if (fmsg.length==0)
	{
		msg(msk+'ErrSum',"warn","");
	} else
	{
		//document.getElementById(msk+'ErrSum').innerHTML="Test";
		//alert(msk+'ErrSum');
		msg(msk+'ErrSum',"error",fmsg);
	}
	
	return (fmsg.length==0);
}

function validate_League_File(thisform, msk)
{
	if (bBypassValidation)
		return true;
	var fmsg='';
	var smsg;
	//return false;
	with (thisform)
	{
		smsg=validateCombobox(FileTypeID, 'inf_FileTypeID', msk, true);
		if (!smsg.length==0)
		{
			fmsg+='* File Type '+smsg+'</br>';	
		}
		smsg=validatePresent(Title, 'inf_Title', msk);
		if (!smsg.length==0)
		{
			fmsg+='* Schedule Title '+smsg+'</br>';	
		}
		smsg=validateDate(ShowStartDate, 'inf_ShowStartDate', msk,true);
		if (!smsg.length==0)
		{
			fmsg+='* Sidebar Start Date '+smsg+'</br>';	
		}
		smsg=validateDate(ShowEndDate, 'inf_ShowEndDate', msk,true);
		if (!smsg.length==0)
		{
			fmsg+='* Sidebar End Date '+smsg+'</br>';	
		}
		var ssmsg;
		/*
		ssmsg=validatePresent(relPath_old, 'inf_relPath', msk);
		if (!ssmsg.length==0)
		{
			smsg=validatePresent(relPath, 'inf_relPath', msk);
			if (!smsg.length==0)
			{
				fmsg+='* File '+smsg+'</br>';	
			}
		}*/
	}
	if (fmsg.length==0)
	{
		msg(msk+'ErrSum',"warn","");
	} else
	{
		//document.getElementById(msk+'ErrSum').innerHTML="Test";
		//alert(msk+'ErrSum');
		msg(msk+'ErrSum',"error",fmsg);
	}
	
	return (fmsg.length==0);
}

function confirmDelete(txt)
{
	var verify=confirm(txt);
	if (verify)
		bBypassValidation=true;
	return verify;
}

