// form validation function //

// Messages:
	msg1 = '<strong>Oops</strong><br />This is required.';

//

function validate(formName) {

    form = document.getElementById(formName);
    if(formName == 'frmLogin')
	{	
    	for (i=0;i<document.forms[formName].elements.length;i++) {
			thisEl = document.forms[formName].elements[i];
			if (thisEl.id=='firstName') {
	          if (!validateName(thisEl)) return false;
			}
			if (thisEl.id=='lastName') {
		          if (!validateName(thisEl)) return false;
			}
			if (thisEl.id=='email') {
		          if (!validateEmail(thisEl)) return false;
			}	
			if (thisEl.id=='password') {
		          if (!validatePassword(thisEl)) return false;
			}				

    	}
		return true;
    }
    else if(formName == 'frmRegister')
    {	
        for (i=0;i<document.forms[formName].elements.length;i++) {
			thisEl = document.forms[formName].elements[i];
			
			if (thisEl.id=='firstName') {
	          if (!validateName(thisEl)) return false;
			}
			if (thisEl.id=='lastName') {
		          if (!validateName(thisEl)) return false;
			}
			if (thisEl.id=='address1') {
		          if (!validateRequired(thisEl)) return false;
			}
			if (thisEl.id=='city') {
		          if (!validateRequired(thisEl)) return false;
			}
			if (thisEl.id=='state') {
		          if (!validateRequired(thisEl)) return false;
			}			
			if (thisEl.id=='zip') {
		          if (!validateZip(thisEl)) return false;
			}
			if (thisEl.id=='email') {
		          if (!validateEmail(thisEl)) return false;
			}	
			if (thisEl.id=='emailVerify') {
		          if (!validateMatch(thisEl, 'email')) return false;
			}				
			if (thisEl.id=='password') {
		          if (!validatePassword(thisEl)) return false;
			}				
			if (thisEl.id=='passwordVerify') {
		          if (!validateMatch(thisEl, 'password')) return false;
			}				

    	}
		return true;
	}	
    else if(formName == 'frmTAF')
    {
        return true;
    }
    else if(formName == 'frmPreRegister')
	{	
    	for (i=0;i<document.forms[formName].elements.length;i++) {
			thisEl = document.forms[formName].elements[i];
			if (thisEl.id=='email') {
	          if (!validateEmail(thisEl)) return false;
			}
		}
		return true;
    }
}

// Only to be used on text, checkboxes and single selects.
function validateRequired(element) {
	
	var reqEl = '';
    
    if (element.type=='checkbox') { 
        if (element.checked) reqEl='1';
    } else if (element.type=='select-one') {
    	reqEl=element.options[element.selectedIndex].text;
    } else {
    	var reqEl = element.value;
    }
    
    reqEl = ltrim(rtrim(reqEl));
    if(reqEl == '') {
      // If you need custom messsages, put in a switch statement here
      inlineMsg(element.id,msg1,2);
      
      return false;
    }

    return true;
}

function validateMatch(element, matches) {
	
    var reqEl = element.value;
    var matchesEl = document.getElementById(matches).value;
    
    if(reqEl != matchesEl) {
      inlineMsg(element.id,'<strong>Oops</strong><br />Does not match ' + matches +'.',2);
      return false;
    }

    return true;
}

function validateEmail(element) {
	
    var email = element.value;
    var emailRegex = /^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$/;
    if(email == "") {
      inlineMsg(element.id,'<strong>Oops</strong><br />Please enter your email address.',2);
      return false;
    }
    if(!email.match(emailRegex)) {
      inlineMsg(element.id,'<strong>Oops</strong><br />Please enter a valid email address.',2);
      return false;
    }
    return true;
}

function validateName(element) {
	
    var name = element.value;
    var nameRegex = /^[a-zA-Z]+(([\'\,\.\- ][a-zA-Z ])?[a-zA-Z]*)*$/;

    if(name == "") {
        inlineMsg(element.id,'<strong>Oops</strong><br />Please enter a valid name.',2);
        return false;
      }
    if(!name.match(nameRegex)) {
      inlineMsg(element.id,'<strong>Oops</strong><br />Please enter a valid name.',2);
      return false;
    }
    return true;
}

function validateZip(element) {
	
    var zip = element.value;
    var zipcodeRegex = /^\d{5}([\-]\d{4})?$/;
    if(zip == "") {
      inlineMsg(element.id,'<strong>Oops</strong><br />Please enter your zip code.',2);
      return false;
    }
    if(!zip.match(zipcodeRegex)) {
      inlineMsg(element.id,'<strong>Oops</strong><br />Please enter a valid zip code.',2);
      return false;
    }
    return true;
}

function validatePassword(element) {
	
    var password = element.value;
    
    var passwordRegex = /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{6,}$/;
    //var passwordRegex = /^(?=.*[A-Za-z])(?=.*[0-9])(?!.*[^A-Za-z0-9])(?!.*\s).{5,12}$/;
    if(password == "") {
      inlineMsg(element.id,'<strong>Oops</strong><br />Please enter a password.',2);
      return false;
    }
    if(!password.match(passwordRegex)) {
      inlineMsg(element.id,'<strong>Oops</strong><br />Password must be at least six characters and contain one number, one lower case character and one upper case character',2);
      return false;
    }
    return true;
}

function IsDate (s)
{
	var daysInMonth;
	var year;
	var month;
	var day;
	var delimiter;
	var stemp;
	
	// check for illegal characters
	if (s.search(/[^0-9-\/_]/) != -1)
		return false;
		
	// parse string to get year, month and day
	if (s.search(/\/{1}/) != -1)
		delimiter = "/";
	else
	{
		if (s.search(/-{1}/) != -1)
			delimiter = "-";
		else
			return false;
	}
	stemp = s;
	DelimAt = stemp.indexOf(delimiter);
	month = stemp.substring(0,DelimAt);
	stemp = stemp.substring(DelimAt + 1, stemp.length);
	DelimAt = stemp.indexOf(delimiter);
	day = stemp.substring(0,DelimAt);
	year = stemp.substring(DelimAt + 1, stemp.length);
		
    // Explicitly change type to integer to make code work in both
    // JavaScript 1.1 and JavaScript 1.2.
    var intYear = parseInt(year,10);
    var intMonth = parseInt(month,10);
    var intDay = parseInt(day,10);
    
	// catch invalid years (not 4-digit)
	if (intYear < 0) return false;
    if (year.length != 4) return false;

	// catch invalid months
	if (!(intMonth >=1 && intMonth <=12)) return false;
	
    // catch invalid days, except for February
    if (!(intDay >=1 && intDay <=31)) return false;
    switch (intMonth)
    {
		case 1:
		case 3:
		case 5:
		case 7:
		case 8:
		case 10:
		case 12:
			daysInMonth = 31;
			break;
		case 4:
		case 6:
		case 9:
		case 11:
			daysInMonth = 30;
			break;
		case 2:
			daysInMonth = ((intYear % 4 == 0) && ( (!(intYear % 100 == 0)) || (intYear % 400 == 0) ) ) ? 29 : 28;
			break;
	}
	    
    if (intDay > daysInMonth) return false; 

    return true;
}

// START OF MESSAGE SCRIPT //

var MSGTIMER = 20;
var MSGSPEED = 5;
var MSGOFFSET = 3;
var MSGHIDE = 3;

// build out the divs, set attributes and call the fade function //
function inlineMsg(target,string,autohide) {
  var msg;
  var msgcontent;
  if(!document.getElementById('msg')) {
    msg = document.createElement('div');
    msg.id = 'msg';
    msgcontent = document.createElement('div');
    msgcontent.id = 'msgcontent';
    document.body.appendChild(msg);
    msg.appendChild(msgcontent);
    msg.style.filter = 'alpha(opacity=0)';
    msg.style.opacity = 0;
    msg.alpha = 0;
  } else {
    msg = document.getElementById('msg');
    msgcontent = document.getElementById('msgcontent');
  }
  msgcontent.innerHTML = string;
  msg.style.display = 'block';
  var msgheight = msg.offsetHeight;
  var targetdiv = document.getElementById(target);
  targetdiv.focus();
  var targetheight = targetdiv.offsetHeight;
  var targetwidth = targetdiv.offsetWidth;
  var topposition = topPosition(targetdiv) - ((msgheight - targetheight) / 2);
  var leftposition = leftPosition(targetdiv) + targetwidth + MSGOFFSET;
  msg.style.top = topposition + 'px';
  msg.style.left = leftposition + 'px';
  clearInterval(msg.timer);
  msg.timer = setInterval("fadeMsg(1)", MSGTIMER);
  if(!autohide) {
    autohide = MSGHIDE;  
  }
  window.setTimeout("hideMsg()", (autohide * 1000));
}

// hide the form alert //
function hideMsg(msg) {
  var msg = document.getElementById('msg');
  if(!msg.timer) {
    msg.timer = setInterval("fadeMsg(0)", MSGTIMER);
  }
}

// face the message box //
function fadeMsg(flag) {
  if(flag == null) {
    flag = 1;
  }
  var msg = document.getElementById('msg');
  var value;
  if(flag == 1) {
    value = msg.alpha + MSGSPEED;
  } else {
    value = msg.alpha - MSGSPEED;
  }
  msg.alpha = value;
  msg.style.opacity = (value / 100);
  msg.style.filter = 'alpha(opacity=' + value + ')';
  if(value >= 99) {
    clearInterval(msg.timer);
    msg.timer = null;
  } else if(value <= 1) {
    msg.style.display = "none";
    clearInterval(msg.timer);
  }
}

// calculate the position of the element in relation to the left of the browser //
function leftPosition(target) {
  var left = 0;
  if(target.offsetParent) {
    while(1) {
      left += target.offsetLeft;
      if(!target.offsetParent) {
        break;
      }
      target = target.offsetParent;
    }
  } else if(target.x) {
    left += target.x;
  }
  return left;
}

// calculate the position of the element in relation to the top of the browser window //
function topPosition(target) {
  var top = 0;
  if(target.offsetParent) {
    while(1) {
      top += target.offsetTop;
      if(!target.offsetParent) {
        break;
      }
      target = target.offsetParent;
    }
  } else if(target.y) {
    top += target.y;
  }
  return top;
}

// preload the arrow //
if(document.images) {
  arrow = new Image(7,80); 
  arrow.src = "../images/msg_arrow.gif"; 
}


function trim(stringToTrim) {
	return stringToTrim.replace(/^\s+|\s+$/g,"");
}
function ltrim(stringToTrim) {
	return stringToTrim.replace(/^\s+/,"");
}
function rtrim(stringToTrim) {
	return stringToTrim.replace(/\s+$/,"");
}
function isPhone (s)
{
	var k;
	var valid;
	var stemp;
	var re;
	
	if (s == null)
		return false;
	if (s.length != 12)
       	return false;
    if (s.length == 12 && s.search(/-/) == -1)
		return false;
   	valid = true;
   	re = /-/gi;
   	stemp = s.replace(re, "");
   	for (k=0;k<9;k++)
   	{
       	if (stemp.charAt(k) < "0" || stemp.charAt(k) > "9")
       	{
         	valid = false;
          	break;
       	}
       	
   	}
   	return (valid);
}



