

//<![CDATA[

	// declare these now, need 'em later
	var digits = "0123456789";
		
	window.onload = initForm;
		
	//handle form validation onsubmit
	function checkForm(){ 
		var labels = this.getElementsByTagName("label");
		var error = false;
		var first = null;
		
		for (var i = 0; i < labels.length; i++)	{
			var label = labels[i];
			if (label.className.classExists("required") && label.parentNode.style.display != "none" ) {
				
				var input = label.getElementsByTagName("input")[0] || label.getElementsByTagName("textarea")[0] || label.getElementsByTagName("select")[0];
				var spans = label.getElementsByTagName("span");
				var errorText = null;
				var labelText = label.firstChild.nodeValue;
					
				if (input != null) {
					if (input.value == ""){
						errorText = "Please fill in your " + labelText.toLowerCase().replace(/:/, "").replace("(required)", "");
					}
					if ((input.type == "radio") && (inputChecked(input.parentNode) != true)) {
						errorText = "Please select an option";
					}
					if ((input.type == "checkbox") && (inputChecked(input.parentNode)!= true)) {
						errorText = "Please select one or more options";
					}
					if (label.className.classExists("requiredEmail") && !input.value.validEmail())	{
						errorText = "Please supply a valid e-mail address";
					}
					else if (label.className.classExists("requiredZip") && validZip(input.value, label)) {
						errorText = "Please supply a valid ZIP code";
					}
					else if (label.className.classExists("requiredPhone") && validPhone(input.value, label)) {
						errorText = "Please supply a valid phone number";
					}
					if (errorText != null) {
						if (first == null) {
							first = input;
						}
						error = true;
						writeCorrection(label, errorText);
						
						// onchange validation event handling
						if (input.nodeName.toLowerCase() == "input" && input.getAttribute("type") == "text") {
							input.onkeyup = checkValidity;
						}
						//  for radio buttons
						else if (input.nodeName.toLowerCase() == "input" && input.getAttribute("type") == "radio") {
							var parent = input.parentNode;
							for (j = 0; j < parent.childNodes.length; j++) {
								if (parent.childNodes[j].nodeName.toLowerCase() == "input" && parent.childNodes[j].getAttribute("type") == "radio") {
									parent.childNodes[j].onclick = checkValidity;
									
									
								}	
							}
						}
						// and check boxes
						else if (input.nodeName.toLowerCase() == "input" && input.getAttribute("type") == "checkbox") {
							var parent = input.parentNode;
							for (k = 0; k < parent.childNodes.length; k++) {
								if (parent.childNodes[k].nodeName.toLowerCase() == "input" && parent.childNodes[k].getAttribute("type") == "checkbox") {
									parent.childNodes[k].onclick = checkValidity;
									
								}	
							}
						}
						// and selects
						else if (input.nodeName.toLowerCase() == "select"){
							input.onchange = checkValidity;
						}
					}
					else {
						//writeCorrection(label); //seems to break things. Don't know why.
					}
				}
			}
		}
		if (error) {
			first.focus();
			return false;
		}
		return true;
	}
		
	// write out the correction in the label, replacing the old one as necessary
	function writeCorrection(label, text, correct) {
		var spans = label.getElementsByTagName("span");
		var input = label.getElementsByTagName("input")[0] || label.getElementsByTagName("textarea")[0] || label.getElementsByTagName("select")[0];
		var image = label.getElementsByTagName("img")[0];
		
		if (typeof text == "undefined")	{
			if (image != null){
				label.removeChild(image);
			}
			for (var j = 0; j < spans.length; j++) {
				if (spans[j].className.classExists("correctionText")) {
					label.removeChild(spans[j]);
					break;
				}
			}
		}
		else {
			if (image == null) {
				image = document.createElement("img");
				image.className = "correctionIcon";
					
				var newText = document.createElement("span");
				newText.className = "correctionText";
				label.appendChild(newText);
			}
			var spans = label.getElementsByTagName("span");
			for (var j = 0; j < spans.length; j++) {
				if (spans[j].className.classExists("correctionText")) {
					var correctionText = spans[j];
					break;
				}
			}
			if (correct == true) {
				image.setAttribute("src", "http://img2.silpada.com/public/icons/good.gif");
				image.setAttribute("alt", "OK ");
				correctionText.className = correctionText.className.removeClass("warning");
			}
			else {
				image.setAttribute("src", "http://img2.silpada.com/public/icons/bad.gif");
				image.setAttribute("alt", " X ");
				correctionText.className = correctionText.className.addClass("warning");
			}
			writeSpan(correctionText, text);
			correctionText.insertBefore(image, correctionText.firstChild);
		}
		return true;
	}
	// write the span the warning will go in.
	function writeSpan(span, text) {
		var children = span.childNodes;
		for (var i = 0; children.length > 0;) {
			span.removeChild(children[i]);
		}
		var textNode = document.createTextNode(text);
		span.appendChild(textNode);
		return true;
	}
	
	//triggered onchange (for dynamic feedback)
	function checkValidity() { 
		var label = this.parentNode;
		var labelText = null;
		var labelText = label.firstChild.nodeValue;
			
		if (this.value == "")	{
			writeCorrection(label, "Please fill in your " + labelText.toLowerCase().replace(/:/, "").replace("(required)", ""));
		}
		// special messages for email, zip and phone
		else if (label.className.classExists("requiredEmail") && !this.value.validEmail()) {
			writeCorrection(label, "Please supply a valid e-mail address");
		}
		else if (label.className.classExists("requiredZip") && validZip(this.value, label)) {
			writeCorrection(label, "Please supply a valid ZIP code.");
		}
		else if (label.className.classExists("requiredPhone") && validPhone(this.value, label)) {
			writeCorrection(label, "Please supply a valid phone number.");
		}
		else {
			writeCorrection(label, "Thank you", true);
		}
		if (this.getAttribute("type") == "checkbox" && this.checked == true && this.id != null && document.getElementById(this.id + 'Fields') != null) {
			checkOn(this.id+'Fields',this.id);
		}
		if (this.getAttribute("type") == "checkbox" && this.className != null && document.getElementById(this.className + 'Fields') != null) {
			multiOn(this.className+"Fields", this.className);
		}
		if (this.getAttribute("type") == "radio" && this.parentNode.id != null && document.getElementById(this.parentNode.id + 'Target') != null) {
			radioOn(this.parentNode.id+'Yes', this.parentNode.id+'No', this.parentNode.id+'Target');
		}
		
		return true;
	}
	//check to see if at least one of a group of radio buttons or checkboxes is checked
	function inputChecked(parent) {
		for (i = 0; i < parent.childNodes.length; i++) {
			if(parent.childNodes[i].checked == true) {
				return true;
			}
		}
		return false;
	}
	function inputCheckedByClass(parent, classCheck) {
		for (i = 0; i < parent.childNodes.length; i++) {
			if(parent.childNodes[i].checked == true && parent.childNodes[i].className == classCheck) {
				return true;
			}
		}
		return false;
	}
	// check that zip field is 5 characters and only valid digits
	function validZip(field, label) {
		/*
		
		for (var m=0; m < field.length; m++) {
			temp = "" + field.substring(m, m+1);
			if ((digits.indexOf(temp) == "-1") || (field.length !=5)) {
				return true;
			}
		}
		*/
		return true;
	}
	// make sure phone is 10 digits (area+phone-delimiters) and only digits
	// cleanstring is the digits-only version, if you want it.
	function validPhone(field, label) {
		var delimiters = "()- ";
		var valid = digits + delimiters;
		var cleanString = "";
		for (n = 0; n < field.length; n++) {   
	       	var c = field.charAt(n);
	       	if (delimiters.indexOf(c) == -1) {
	       		cleanString += c;
	       	}
	        if (valid.indexOf(c) == -1 ){
	       		return true;
	        }     
	   }
	   if (cleanString.length != 10) {return true }  
	}
	
	// radio button hide/show
	function radioOn(on, off, triggerTarget) {
		var on = document.getElementById(on);
		var off = document.getElementById(off);
		var triggerTarget = document.getElementById(triggerTarget);
		
		if (on == null || off == null || triggerTarget == null) return;
	
		if (!on.checked) {
			triggerTarget.style.display = "none";
			triggerTarget.className=triggerTarget.className.replace(/required/g, "hidden");
			
		}
		else if (on.checked) {
			triggerTarget.style.display = "block";
			triggerTarget.className=triggerTarget.className.replace(/hidden/g, "required");
			
		}
		on.onclick=function() {
			if (on.checked) {
				triggerTarget.style.display = "block";
				triggerTarget.className=triggerTarget.className.replace(/hidden/g, "required");
			}		
		}
		off.onclick=function() {
			if (off.checked) {
				triggerTarget.style.display = "none";
				triggerTarget.className=triggerTarget.className.replace(/required/g, "hidden");
			}		
		}
	}
	// show hide checkbox-triggered areas
	function checkOn(aimId, triggerId) {
	    var aim = document.getElementById(aimId);
	    var trigger = document.getElementById(triggerId);
		
	    if (aim == null || trigger == null) return;
	    if (trigger.checked) {aim.style.display = "block";}
	    
	    else if(!trigger.checked) {
			aim.style.display =  "none";
			aim.className = "";
		}
		
	    trigger.onclick = function() {
	        if (trigger.checked) {
	        	aim.style.display= "block";
	        	aim.className = "showing";
	        	return;
	 		}
		    else {
		    	aim.style.display= "none";
		    	aim.className = "";
		       	return;
			}
		}
	}
	
	// show hide checkbox-triggered areas
	function multiOn(aimId, triggerId) {
		var multiAim = document.getElementById(aimId);
	    var triggers = getElementsByClassName(triggerId);
	  
	    if (multiAim == null || triggers == null) return;
	    	       
	    for (i = 0; i < triggers.length; i++) { 
		    if(triggers[i].checked == true || multiAim.className == "showing") {
				multiAim.style.display = "block";
				multiAim.className = "showing";
			}
			else if(!triggers[i].checked) {
				multiAim.style.display =  "none";
			}
			triggers[i].onclick = function() {
		        if (inputChecked(this.parentNode) == true) {
		           	multiAim.style.display= "block";
		        	multiAim.className = "showing";
		        	return;
		 		}
			    else {
			    	multiAim.style.display= "none";
			    	multiAim.className = "";
			       	return;
				}
			} 
	   }
	}
	// begin form help handling /////
	function addHelp(objHelpform) {
	  	var strID, objHelp;
	  	// Check we're working with a DOM compliant browser
	  	if (document.getElementById && document.appendChild && document.removeChild) {
		    var objAnchors = objHelpform.getElementsByTagName('a');
		    
		    // Iterate through all anchors in the form
		    for (var iCounter=0; iCounter < objAnchors.length; iCounter++) {
		    	// Locate the associated help text's container and hide it
		      	strID = getIDFromHref(objAnchors[iCounter].href);
		      	objHelp = document.getElementById(strID);
		      	objHelp.style.display = 'none';
				objAnchors[iCounter].className += " helpIcon";
				
				var helpIcon = document.createElement("img");
				helpIcon.src = "http://img2.silpada.com/public/icons/question.gif";
				helpIcon.setAttribute("alt", "[Help]");
				
				var newtitle = objAnchors[iCounter].innerHTML;
				objAnchors[iCounter].title = newtitle;
				objAnchors[iCounter].innerHTML = "";
				objAnchors[iCounter].appendChild(helpIcon);
			
		      	// Add events to reveal/hide
		      	objAnchors[iCounter].onclick = function(event){return expandHelp(this, event);}
		      	objAnchors[iCounter].onkeypress = function(event){return expandHelp(this, event);}
		
		      	// Move beneath current form field
		      	objAnchors[iCounter].parentNode.appendChild(objHelp);
		    }
		    
		    // Remove the remainder of the old help section
		    var objOldnode = document.getElementById('help');
		    objOldnode.parentNode.removeChild(objOldnode);
		
		    // Release memory to prevent IE memory leak
		    objHelpform = null;
		    objHelp = null;
		    objAnchors = null;
		}
	}
	// Return the ID of the element from the "href" attribute
	function getIDFromHref(strHref) {
	  var iOffset = strHref.indexOf('#') + 1;
	  var iEnd = strHref.length;
	  return strHref.substring(iOffset, iEnd);
	}
		
	function expandHelp(objAnchor, objEvent) {
	 	var iKeyCode;
	 	// If from the keyboard, check the user is activating it rather than tabbing through
		if (objEvent && objEvent.type == 'keypress') {
			if (objEvent.keyCode)
		    	iKeyCode = objEvent.keyCode;
		    else if (objEvent.which)
		      	iKeyCode = objEvent.which;
		    if (iKeyCode != 13 && iKeyCode != 32)
		      return true;
		 }
		 strID = getIDFromHref(objAnchor.href);
		 objHelp = document.getElementById(strID);
		
		 // Toggle on and off
		 if (objHelp.style.display == 'none')
		  	objHelp.style.display = 'block';
		 else
		    objHelp.style.display = 'none';
		return false;
	}
	////////////////////////// generic string handling functions
	/* Add a class to a string */
	String.prototype.addClass = function(theClass) {
		if (this != ""){
			if (!this.classExists(theClass)){
				return this + " " + theClass;
			}
		}
		else {
			return theClass;
		}
		return this;
	}
	/* Check if a class exists in a string */
	String.prototype.classExists = function(theClass) {
		var regString = "(^| )" + theClass + "\W*";
		var regExpression = new RegExp(regString);
		if (regExpression.test(this)) {
			return true;
		}
		return false;
	}
	String.prototype.removeClass = function(theClass) {
		var regString = "(^| )" + theClass + "\W*";
		var regExpression = new RegExp(regString);
		return this.replace(regExpression, "");
	}
	String.prototype.validEmail = function() {
		if (this.match(/^[\w\.\-]+@([\w\-]+\.)+[a-zA-Z]+$/)){
			return true;
		}
		return false;
	}
function getElementsByClassName(classname) {

    var a = [];

    var re = new RegExp('\\b' + classname + '\\b');

    var els = document.all?document.all:document.getElementsByTagName("*");

    for(var i=0,j=els.length; i<j; i++)

        if(re.test(els[i].className))a.push(els[i]);

    return a;
}
function evalWorkingWithSDRSelection(radioObj)
{
	if ( (radioObj) && (radioObj.type == "radio") && (radioObj.value == "yes") )
	{
		document.getElementById("knowSDRTarget").style.display = "block";
	}
	else
	{
		document.getElementById("knowSDRTarget").style.display = "none";
	}
}
//]]>