/**********************
* cssFormValidator    *
* David Morrison      *
* 8/29/06             *
**********************/

// http://www.demoniusrex.com/cssformvalidator

// requires yahoo.js and dom.js from the YUI library
// http://developer.yahoo.com/yui/

var CSSFormValidator = function(form, invalidHandler) {
 var f = form;
 if (f) {
  var q=0;
  var v=true;
  var m="";
  var c;
  var r = {};
  
  var invalidDefaultHandler = function(message) { alert(message); };

  var l = f.getElementsByTagName("label");
  var i = f.getElementsByTagName("input");
  var s = f.getElementsByTagName("select");
  var t = f.getElementsByTagName("textarea");  
  
  for(q=0; q<l.length; q++) {
   if(checkLabel(l[q])) {
    // field ok
   } else {
     v=false;
	 if(!c) { c = l[q]; }
	 if(l[q].title) {
		m += l[q].title + " is a required field\n";
	 } else if(l[q].name) {
	 	m += l[q].name + " is a required field\n";
	 }
   }
  }
  
  for(q=0; q<i.length; q++) {
   if(checkInput(i[q])) {
    // field ok
   } else {
     v=false;
	 if(!c) { c = i[q]; }
	 if(i[q].title) {
		m += i[q].title + " is a required field\n";
	 } else if(i[q].name) {
	 	m += i[q].name + " is a required field\n";
	 }
   }
  }
  for(q=0; q<s.length; q++) {
   if(checkSelect(s[q])) {
    // field ok
   } else {
     v=false;
	 if(!c) { c = s[q]; }
	 if(s[q].title) {
		m += s[q].title + " is a required field\n";
	 } else if(s[q].name) {
	 	m += s[q].name + " is a required field\n";
	 }
   }
  }
  for(q=0; q<t.length; q++) {
   if(checkInput(t[q])) {
    // field ok
   } else {
     v=false;
	 if(!c) { c = t[q]; }
	 if(t[q].title) {
		m += t[q].title + " is a required field\n";
	 } else if(t[q].name) {
	 	m += t[q].name + " is a required field\n";
	 }
   }
  }
  if(c && c.focus) {c.focus();}
  if(m != "") {
	if(invalidHandler) {
		invalidHandler(m);
	} else {
		invalidDefaultHandler(m);
	}
  }
  return v;
 } else {
  return true;
 }
};


var checkLabel = function (l) {
 if (YAHOO.util.Dom.hasClass(l,"required")) {
  var i = document.getElementsByName(l.htmlFor);
  if (i.length) {
   var valid = false;
   for (var c=0; c<i.length; c++) {
     if (i[c].type) {
	  if (i[c].type == "text" && i[c].value != "") { valid = true; }
	  else if (i[c].type == "password" && i[c].value != "") { valid  = true; }
	  else if (i[c].type == "hidden" && i[c].value != "") { valid  = true; }
	  else if (i[c].type == "file" && i[c].value != "") { valid  = true; }
	  else if (i[c].type == "textarea" && i[c].value != "") { valid  = true; }
	  else if (i[c].type == "checkbox" && i[c].checked) { valid  = true; }
	  else if (i[c].type == "radio" && i[c].checked) { valid  = true; }
	  else if (i[c].type == "select-multiple" && i[c].selectedIndex >= 0 && i[c].options[i[c].selectedIndex].value != "") { valid  = true; }
	  else if (i[c].type == "select-one" && i[c].selectedIndex >= 0 && i[c].options[i[c].selectedIndex].value != "") { valid  = true; }
	 }	 
   }
   if(valid) {
	YAHOO.util.Dom.replaceClass(l,"incomplete","complete");
   }
   else {
	YAHOO.util.Dom.replaceClass(l,"complete","incomplete");
	return false;
   }
  }
  else {
   YAHOO.util.Dom.replaceClass(l,"incomplete","complete");
  }
 }
 return true;
};

var checkInput = function (i) {
 if (YAHOO.util.Dom.hasClass(i,"required")) {
  if(i.value == "") {
   YAHOO.util.Dom.replaceClass(i,"complete","incomplete");
   return false;
  }
  else {
   YAHOO.util.Dom.replaceClass(i,"incomplete","complete");
  }
 }
 return true;
};

var checkSelect = function (i) {
 if (YAHOO.util.Dom.hasClass(i,"required")) {
  if(i.selectedIndex < 0) {
   YAHOO.util.Dom.replaceClass(i,"complete","incomplete");
   return false;
  } else {
   YAHOO.util.Dom.replaceClass(i,"incomplete","complete");
  }
 }
 return true;
};



