function dateValid(fld) {
    var RegExPattern = /^(?=\d)(?:(?:(?:(?:(?:0?[13578]|1[02])(\/|-|\.)31)\1|(?:(?:0?[1,3-9]|1[0-2])(\/|-|\.)(?:29|30)\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})|(?:0?2(\/|-|\.)29\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))|(?:(?:0?[1-9])|(?:1[0-2]))(\/|-|\.)(?:0?[1-9]|1\d|2[0-8])\4(?:(?:1[6-9]|[2-9]\d)?\d{2}))($|\ (?=\d)))?(((0?[1-9]|1[012])(:[0-5]\d){0,2}(\ [AP]M))|([01]\d|2[0-3])(:[0-5]\d){1,2})?$/;
    if ((fld.value.match(RegExPattern)) && (fld.value!='')) {
        return true; 
    } else {
    	return false;
    } 
}
function maxTextArea(id,max) {
	var w = document.getElementById(id);
	if (w.value.length > max) {
		w.value = w.value.substring(0,max);
	}
	document.getElementById(id+"Size").innerHTML = w.value.length;
}
function isValidEmail(e) {
	var emailStr = /^[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$/;
	if (emailStr.test(e) == false) {
		return false;
	} else {
		return true;
	}
}
function placeHolder (input,text) {
	input.style.color = 'black';
	if (input.value == text) {
		input.value = '';
	}
}
var countSuggestions = new Array();
var suggestionPointer = new Array();
function getKeyCode(e, action) {
   e = (!e) ? window.event : e;
   code = (e.charCode) ? e.charCode : ((e.keyCode) ? e.keyCode : ((e.which) ? e.which : 0));
   if (e.type == action) {
	   return code;
   } 
}		
function autoSuggestSelect(text,id) {
	document.getElementById(id).value = text;
	document.getElementById(id).focus();
	var listId = document.getElementById(id+"SuggestionDiv");
	listId.style.display = "none";
}
function autoSuggestLoad(id) {
	var listId = document.getElementById(id+"SuggestionDiv");
	listId.style.display = "block";
	var listId = document.getElementById(id+"SuggestionList");
	var howMany = 20;
	for (var x = 0; x < howMany; x++) {
		listId.innerHTML += "<li><a id='"+id+"-"+(x)+"' href=\"javascript:void(0);\" onclick=\"autoSuggestSelect(this.innerHTML, '"+id+"');\">Word "+x+"</a></li>";
	}
	countSuggestions[id] = howMany;
	suggestionPointer[id] = -1;
}
function autoSuggest(id,e) {
   var keyCode = getKeyCode(e, 'keyup');
   if (keyCode == 40 || keyCode == 38 || keyCode == 13) {return false;}
	//ajax
	autoSuggestLoad(id);
}
function unHighlightSuggestion(id) {
   document.getElementById(id + "-" + suggestionPointer[id]).style.backgroundColor = "#F9F9F9";
   document.getElementById(id + "-" + suggestionPointer[id] ).style.color = "#006";
}
function highlightSuggestion(id) {
   document.getElementById(id + "-" + suggestionPointer[id]).style.backgroundColor = "#555";
   document.getElementById(id + "-" + suggestionPointer[id] ).style.color = "#FFF";   	
}			
function keyboardNav(id,e) {
   var keyCode = getKeyCode(e, 'keydown');
   if (keyCode == 40) { // down arrow
      if (suggestionPointer[id] < countSuggestions[id]-1) {
	     if (suggestionPointer[id] != -1) unHighlightSuggestion(id);
		 suggestionPointer[id]++;
		 highlightSuggestion(id);
		 if (suggestionPointer[id] > 5) {
			document.getElementById(id+"SuggestionList").scrollTop = 30*(suggestionPointer[id]-3);
		 }
	  }
   } else if (keyCode == 38) { // up arrow
	  if (suggestionPointer[id] > 0) {
		 unHighlightSuggestion(id);
		 suggestionPointer[id] --;
		 highlightSuggestion(id);
		if (suggestionPointer[id] > 5) {
			document.getElementById(id+"SuggestionList").scrollTop = 30*(suggestionPointer[id]-3);
		 } else {
			 document.getElementById(id+"SuggestionList").scrollTop = 0;
		 }
	  }
   }
   else if (keyCode == 13 && suggestionPointer[id] > -1)  { // enter
	  var str = document.getElementById(id + "-" + suggestionPointer[id]).innerHTML;
	  autoSuggestSelect(str, id);
   }
}