// global variables
var newsletterRequest = false;
var newsletterURL = "";
var loadingDiv="";
var formDiv="";
var alpha = 1;

//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;
}

//fade out the form
function StartFade(url,fdiv,ldiv) {
   newsletterURL = url;
   formDiv = fdiv;
   loadingDiv = ldiv;
   tStart   = new Date();
   showDiv();
   timerID  = setTimeout("FadeOut()", 100);
}

//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()", 100);
  }
}

//gets the values inserted in the newsletterFormDiv
function get() {
  var obj = document.getElementById("newsletterForm");

  var getstr = "?";
  var params = new Array();
  for (i=0; i<obj.elements.length; i++) {
     elem = obj.elements[i]
     if (elem.tagName == "INPUT") {
        if (elem.type == "text") {
           params[elem.name] = elem.value;
        }
        if (elem.type == "checkbox") {
           if (elem.checked) {
              params[elem.name] = elem.value;
           } else {
              params[elem.name] = "";
           }
        }
        if (elem.type == "radio") {
           if (elem.checked) {
              params[elem.name] = elem.value;
           }
        }
        if (elem.type == "hidden") {
           params[elem.name] = elem.value;
        }
     }
     if (elem.tagName == "SELECT") {
        params[elem.name] = elem.options[elem.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 hideDiv(){
	if (document.getElementById) { // DOM3 = IE5, NS6
		document.getElementById(loadingDiv).style.display = 'none';
	}
	else {
		if (document.layers) { // Netscape 4
			document.loadingDiv.display = 'none';
		}
		else { // IE 4
			document.all.loadingDiv.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 + ")";

}
