/*================================================================
	Owner:	KID STOP, LLC
	Title:		kidstopkc.com > Javascript Document
	Author:	Steve Kiernan > http://www.stevenkiernan.com
	Date: 		09/17/09
	Desc:		This javascript document provides custom functions used
					to enhance user experience.  It also provides form
					validations and sends form data via AJAX to the server
					for processing.
=================================================================*/

//==== START: FAQs Toggler ========//
function toggleFAQ(whoClicked) {
	var referrer = whoClicked;
	var refParentNode = whoClicked.parentNode;
	var targetNode = getNextSibling(whoClicked);
	targetNodeClass = targetNode.className;
	if (referrer.className == "Q active") {
		referrer.className = "Q";
		refParentNode.className = "null";
		targetNode.className = "A hide";
	}
	else { 
		referrer.className = "Q active";
		refParentNode.className = "active";
		targetNode.className = "A show";
	}
}

function getNextSibling(n) { //check if the next sibling node is an element node
	x = n.nextSibling;
	while (x.nodeType != 1) {
		x = x.nextSibling;
  }
	return x;
} 
//==== END: FAQs Toggler ========//


//==== START: Contact Form Processing ========//
function clearForm() {
	document.getElementById("errMess").innerHTML = "&nbsp;";
	document.getElementById("senderName").style.background = "#FFF";
	document.getElementById("senderEmail").style.background = "#FFF";
	document.getElementById("senderMessage").style.background = "#FFF";
}
/*------ Start: Email Validation ------*/
function validateForm(thisform, thisformID, formhandler) {
	hasError = false;
	hasFocus = false;
	
	//Get the required values from the form
	var botVal = thisform.contact_body.value;
	var senderName = thisform.senderName.value;
	var senderEmail = thisform.senderEmail.value;
	var senderMessage = thisform.senderMessage.value;
	var errorMessage = document.getElementById("errMess");
	
	//set the tab index after validation
	thisform.senderName.tabIndex = 1;
	thisform.senderEmail.tabIndex = 2;
	thisform.senderMessage.tabIndex = 3;

	//Check to see if any required fields are missing or invalid
	//Checking Required Field #1 (SenderName)
	if( senderName == null || senderName == '' || senderName.charAt(0) == ' ' ) {
		errorMessage.innerHTML = "<p class='error'>Please enter your Name.</p>";
		document.getElementById("senderName").style.background = "#DDDDDD";
		if (hasFocus==false){
			thisform.senderName.focus();
			hasFocus = true;
		}
		hasError = true;
		return false;
	}
	else {
		document.getElementById("senderName").style.background = "#FFF";
		hasError = false;
	}
	//Checking Required Field #2 (SenderEmail)
	if( senderEmail == null || senderEmail == '' || senderEmail.charAt(0) == ' ' || !validateEmail(senderEmail) ) {
		errorMessage.innerHTML = "<p class='error'>Please enter a valid email address.</p>";
		document.getElementById("senderEmail").style.background = "#DDDDDD";
		if (hasFocus==false){
			thisform.senderEmail.focus();
			hasFocus = true;
		}
		hasError = true;
		return false;
	}
	else {
		document.getElementById("senderEmail").style.background = "#FFF";
		hasError = false;
	}
	//Checking Required Field #3 (senderMessage)
	if( senderMessage == null || senderMessage == '' || senderMessage.charAt(0) == ' ' ) {
		errorMessage.innerHTML = "<p class='error'>Please type a Message.</p>";
		document.getElementById("senderMessage").style.background = "#DDDDDD";
		if (hasFocus==false){
			thisform.senderMessage.focus();
			hasFocus = true;
		}
		hasError = true;
		return false;
	}
	else {
		document.getElementById("senderMessage").style.background = "#FFF";
		hasError = false;
	}
	
	//Check to see if the botDiv is empty (spam deterent)
	if (botVal == null || botVal == "") {
		hasError = false; // Human interaction
	}
	else {
		hasError = true; // Non-Human interaction (spambot)
	}
	
	if (hasError == false){ // If form is valid... call Ajax function
		submitTAF(thisform, thisformID, formhandler);
	}
	return false; // Form is not valid... do nothing
}


function validateEmail(strng) { // Email validation function
	var emailReg = "^[\\w-_\.]*[\\w-_\.]\@[\\w]\.+[\\w]+[\\w]$";
	var regex = new RegExp(emailReg);
	return regex.test(strng);
}


function validateMultipleEmail(string) { // Multiple email validation function
	var expression=/^(([a-zA-Z0-9\-\._]+)@(([a-zA-Z0-9\-_]+\.)+)([a-z]{2,3})(,(?!$))?)+$/;
	var regex = new RegExp(expression);	
	return regex.test(string);
}
/*------ End: Email Validation ------*/


/*----- Start: AJAX Calls -----*/
function submitTAF(thisform, thisformID, formhandler) {
	var url = formhandler;
	var formdata = "";
	var xmlHttp;
	
	// Loop through the "Contact" form fields
	for (i=0; i < thisform.length; i++)	{ // Build QueryString
		if (thisform.elements[i].type == "reset" || thisform.elements[i].type == "submit") { // Handle buttons
			formdata = formdata;
		}
		else if (thisform.elements[i].type == "hidden") { // Handle Hidden Textbox's
			formdata = formdata + thisform.elements[i].name + "=" + escape(thisform.elements[i].value) + "&";
		}
		else if (thisform.elements[i].type == "text") { // Handle Textbox's
			formdata = formdata + thisform.elements[i].name + "=" + escape(thisform.elements[i].value) + "&";
		}
		else if (thisform.elements[i].type == "textarea") { // Handle textarea
			formdata = formdata + thisform.elements[i].name + "=" + escape(thisform.elements[i].value) + "&";
		}
	}
	formdata = formdata.slice(0, -1);
	//alert(formdata);
	
	// Setup HttpRequest
	try { xmlHttp=new XMLHttpRequest(); } // Firefox, Opera 8.0+, Safari  
	catch (e) { // Internet Explorer  
		try { xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); } // Internet Explorer 6.0+
	  catch (e) {
			try { xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); } // Internet Explorer 5.5+
	    catch (e) {
				alert("Your browser does not support AJAX!"); // user has a very outdated browser
				return false;     
			}   
		}  
	} 
	
	// Process the Contact Form
	if (thisformID=="contactForm") {
		xmlHttp.onreadystatechange=function() {
			if(xmlHttp.readyState > 0 && xmlHttp.readyState < 4) { // 4 = Loaded (show processing wheel until loaded)
				document.getElementById("errMess").className="hide";
				document.getElementById("Form_overlay").className="show";
				document.getElementById("processing").className="show";
			}
			if(xmlHttp.readyState==4) { // 4 = Loaded
				if (xmlHttp.status==200) { // 200 = OK
					// ...code to execute
					document.getElementById("errMess").className="hide";
					document.getElementById("Form_overlay").className="show";
					document.getElementById("successCopy").className="show";
					document.getElementById("successCopy").innerHTML=xmlHttp.responseText;
					document.getElementById("processing").className="hide";
		    }
				else { 
					document.getElementById("errMess").className="hide";
					document.getElementById("Form_overlay").className="show";
					document.getElementById("errorCopy").className="show";
					document.getElementById("processing").className="hide";
					alert(xmlHttp.responseText); 
				}
			}
		}
		xmlHttp.open("POST", url, true);
		xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		xmlHttp.setRequestHeader("Content-length", formdata.length);
		xmlHttp.setRequestHeader("Connection", "close");
		xmlHttp.send(formdata);
		//staps the form from submitting normally
		return false;
	}
	
	// Handle Exception
	else {
		alert('There was an unexpected error processing the request.');
		return false;
	}
}
/*----- End: AJAX Calls -----*/
//==== END: Contact Form Processing ========//