// global variables
var newsletterRequest = false;
var newsletterURL = "";
var loadingDiv="";
var formDiv="";
var emailContainer = "";
var alpha = 1;

// email validation check code

	function allValidChars(email) {
		  var parsed = true;
		  var validchars = "abcdefghijklmnopqrstuvwxyz0123456789@.-_";
		  for (var i=0; i < email.length; i++) {
		    var letter = email.charAt(i).toLowerCase();
		    if (validchars.indexOf(letter) != -1)
		      continue;
		    parsed = false;
		    break;
		  }
		  return parsed;
	}
	
	function isValidEmail(email) {
	    if (email==null) {
	           return false;
	    }
	    if (email.length==0) {
	           return false;
	    }
	    if (! allValidChars(email)) {  // check to make sure all characters are valid
	        return false;
	    }
	    if (email.indexOf("@") < 1) { //  must contain @, and it must not be the first character
	        return false;
	    } else if (email.lastIndexOf(".") <= email.indexOf("@")) {  // last dot must be after the @
	        return false;
	    } else if (email.indexOf("@") == email.length) {  // @ must not be the last character
	        return false;
	    } else if (email.indexOf("..") >=0) { // two periods in a row is not valid
		return false;
	    } else if (email.indexOf(".") == email.length) {  // . must not be the last character
		return false;
	    }
	    return true;
	}
	
	
// end of email validation chek code
//submit the form via ajax
function makeRequest(parameters) {
  createRequestObject();  
  newsletterRequest.setVar("email", parameters["email"]);
  newsletterRequest.setVar("newsletter", parameters["newsletter"]);
  newsletterRequest.method = 'GET';
  newsletterRequest.element = formDiv;
  newsletterRequest.onCompletion = alertContents;
  newsletterRequest.runAJAX();
  
}

//create the communication object
function createRequestObject() {
  newsletterRequest = new sack(newsletterURL);
}

//act on the server response
function alertContents() {
	FadeIn();           
}

//prints the server response
function printResponse(){
  alert(http_request.responseText);
  var response = http_request.responseXML.documentElement;
  var n = response.getElementsByTagName('result')[0].firstChild.nodeValue;
  
  message= response.getElementsByTagName('message')[0].firstChild.nodeValue;
  document.getElementById(formDiv).innerHTML = message;
  hideEmailContainerDiv();
}

function errorHilights(element) {
	$(element).animate( { backgroundColor: 'pink' }, 300)
    .animate( { backgroundColor: 'none' }, 300)
    .animate( { backgroundColor: 'pink' }, 300)
    .animate( { backgroundColor: 'none' }, 300)
    .animate( { backgroundColor: 'pink' }, 300)
	.animate( { backgroundColor: 'none' }, 300);
}

//fade out the form
function StartFade(url,fdiv,ldiv,econt) {
if(isValidEmail(document.getElementById('email').value)){
   newsletterURL = url;
   formDiv = fdiv;
   loadingDiv = ldiv;
   emailContainer = econt;
   tStart   = new Date();
   showDiv();
   timerID  = setTimeout("FadeOut()", 100);
}else{
	$('#newsletterFormDiv #email').animate( { backgroundColor: 'pink' }, 300)
    .animate( { backgroundColor: '#fff' }, 300)
    .animate( { backgroundColor: 'pink' }, 300)
    .animate( { backgroundColor: '#fff' }, 300)
    .animate( { backgroundColor: 'pink' }, 300)
	.animate( { backgroundColor: '#fff' }, 300);
	//alert('invalid');
}
}

//handles the fadeout of the formDiv element
function FadeOut(){
  alpha -= 0.1;
  if(alpha < 0){
    alpha = 0;
    get();
  }else{
    obj = document.getElementById(formDiv);
    setOpacity(obj, alpha);
    setTimeout("FadeOut()", 100);
  }
}

//handles the fadein of the formDiv element
function FadeIn(){
  alpha += 0.1;
  if(alpha > 1){
    hideDiv();
    alpha = 1;
  }else{
    obj = document.getElementById(formDiv);
    setOpacity(obj, alpha);
    setTimeout("FadeIn()", 1);
  }
}

//gets the values inserted in the newsletterFormDiv
function get() {
  var obj = document.getElementById("newsletterFormDiv");
  
  var getstr = "?";
  var params = new Array();
  for (i=0; i<obj.childNodes.length; i++) {
     if (obj.childNodes[i].tagName == "INPUT") {
        if (obj.childNodes[i].type == "text") {
           //getstr += obj.childNodes[i].name + "=" + obj.childNodes[i].value + "&";
           params[obj.childNodes[i].name] = obj.childNodes[i].value;
           
        }
        if (obj.childNodes[i].type == "checkbox") {
           if (obj.childNodes[i].checked) {
              //getstr += obj.childNodes[i].name + "=" + obj.childNodes[i].value + "&";
              params[obj.childNodes[i].name] = obj.childNodes[i].value;
           } else {
              //getstr += obj.childNodes[i].name + "=&";
              params[obj.childNodes[i].name] = "";
           }
        }
        if (obj.childNodes[i].type == "radio") {
           if (obj.childNodes[i].checked) {
              //getstr += obj.childNodes[i].name + "=" + obj.childNodes[i].value + "&";
              params[obj.childNodes[i].name] = obj.childNodes[i].value;
           }
        }
        if (obj.childNodes[i].type == "hidden") {
           //getstr += obj.childNodes[i].name + "=" + obj.childNodes[i].value + "&";
           params[obj.childNodes[i].name] = obj.childNodes[i].value;
        }
     }   
     if (obj.childNodes[i].tagName == "SELECT") {
        var sel = obj.childNodes[i];
        //getstr += sel.name + "=" + sel.options[sel.selectedIndex].value + "&";
        params[sel.name] = sel.options[sel.selectedIndex].value;
     }
     
  }
  makeRequest(params);
}

//shows a div for progress information
function showDiv(){
  if (document.getElementById) { // DOM3 = IE5, NS6
	   	document.getElementById(loadingDiv).style.display = 'block';
	}
	else {
		if (document.layers) { // Netscape 4
			document.loadingDiv.display = 'block';
		}
		else { // IE 4
			document.all.loadingDiv.style.display = 'block';
		}
	}
  
}
//hides a div with the progress information
function hideEmailContainerDiv(){
	if (document.getElementById) { // DOM3 = IE5, NS6
		document.getElementById(emailContainer).style.display = 'none';
	}
	else {
		if (document.layers) { // Netscape 4
			document.emailContainer.display = 'none';
		}
		else { // IE 4
			document.all.emailContainer.style.display = 'none';
		}
	}
}
//hides a div with the progress information
function hideDiv(){
    //document.getElementById('newsletterForm').style.display = 'none';
	if (document.getElementById) { // DOM3 = IE5, NS6
		document.getElementById('newsletterForm').style.display = 'none';
	}
	else {
		if (document.layers) { // Netscape 4
			document.newsletterForm.display = 'none';
		}
		else { // IE 4
			document.all.newsletterForm.style.display = 'none';
		}
	}
}

/*
* Function to put the new input in the document
*/
function setOuterHTML(element, toValue)
{
	if (typeof(element.outerHTML) != 'undefined')
		element.outerHTML = toValue;
	else
	{
		var range = document.createRange();
		range.setStartBefore(element);
		element.parentNode.replaceChild(range.createContextualFragment(toValue), element);
	}
}		

/**
Method:       setOpacity(HTMLElement, Int)
Description:  Sets the opacity of an element
Parameters:
     HTMLElement aElm  - The HTML element to set the opacity for
     Float aOpac       - The value for the element's opacity. 0.0 - 1.0
                         Where 0.0 is invisible and 1.0 is completely 
                         visible
*/
function setOpacity(aElm,aOpac) {
    var object = aElm.style; 
    object.opacity = (aOpac ); 
    object.MozOpacity = (aOpac ); 
    object.KhtmlOpacity = (aOpac ); 
    object.filter = "alpha(opacity=" + aOpac*100 + ")"; 

}

