   var http = createRequestObject();
   function createRequestObject() {
       var tmpXmlHttpObject;
       if(window.XMLHttpRequest) {
           tmpXmlHttpObject = new XMLHttpRequest(); // native Fx and IE7
       } else {
           try {
               tmpXmlHttpObject = new ActiveXObject('MSXML2.XMLHTTP.6.0'); // latest ActiveX
           } catch (e) {
               try {
                   tmpXmlHttpObject = new ActiveXObject('Microsoft.XMLHTTP'); // older ActiveX
               } catch (e) {
		           alert(e);
                   tmpXmlHttpObject = false;
               }
           }
       }
       return tmpXmlHttpObject;
   }
   
   function subscribeUserHTML() {
	   var email = document.signupPromoForm.email.value;
	   var newsletterId = document.signupPromoForm.newsletterId.value;
	   var newsletterName = document.signupPromoForm.newsletterName.value;
	   document.getElementById('email').className = 'signuppromoinput validation-passed';		
	   if(email == null || email.trim() == ''){
		   document.getElementById('email').className = 'signuppromoinput validation-failed';
     	   alert("Please enter the email address");
     	   document.getElementById('email').focus();     	
     	   return false;
       }
       if ( ! checkEmail( email ) )  {
       	   document.getElementById('email').className = 'signuppromoinput validation-failed';
     	   alert("Please enter a valid email address.");     	
     	   return false;
       }       		
	   var url='/useraccount/newsletterSignUp?parameter=newslettersignup';
	   var params='email='+ email + '&newsletterIds=' + newsletterId + '&newsletterName=' + newsletterName;
	   http.open('POST', url,true);
	   http.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 	
	   http.setRequestHeader("Content-length", params.length);
	   http.send(params);
       http.onreadystatechange=handleResponse; 
       return false;
   }

   function subscribeUser() {
       var email = document.signupPromoForm.email.value;
	   var newsletterId = document.signupPromoForm.newsletterId.value;
	   var newsletterName = document.signupPromoForm.newsletterName.value;
	   var promoType = document.signupPromoForm.promoType.value; 
	   document.getElementById('email').className = 'signuppromoinput validation-passed';		
	   if(email.length==0){
	   	   	document.getElementById('email').className = 'signuppromoinput validation-failed';
     	   	alert("Please enter the email address");
     	   	document.getElementById('email').focus();     	
     	   	return false;
       }
       if(validateSignupPromoForm(document.signupPromoForm)) {    
	        if(promoType=='gorp_signup'){
	        	pageTracker._trackPageview("/G1/gorpsubscibe");
	        }              		
	       var url='/useraccount/newsletterSignUp?parameter=newslettersignup';
	       var params='email='+ email + '&newsletterIds=' + newsletterId + '&newsletterName=' + newsletterName + '&promoType=' + promoType;
	       http.open('POST', url,true);
	 	   http.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 	
		   http.setRequestHeader("Content-length", params.length);
		   http.send(params);
		   http.onreadystatechange=handleResponse;
	   } else {
		   document.getElementById('email').className = 'signuppromoinput validation-failed';
		   document.getElementById('email').focus();
		   return false;
	   }
	   return false;
   }
   function subscribeUserForGorp() {
       var email = document.signupPromoForm.email.value;
	   var newsletterId = document.signupPromoForm.newsletterId.value;
	   var newsletterName = document.signupPromoForm.newsletterName.value;
	   var promoType = document.signupPromoForm.promoType.value; 
	   document.getElementById('email').className = 'signuppromoinput validation-passed';		
	   if(email.length==0){
	   	   	document.getElementById('email').className = 'signuppromoinput validation-failed';
     	   	alert("Please enter the email address");
     	   	document.getElementById('email').focus();     	
     	   	return false;
       }
       if(validateSignupPromoForm(document.signupPromoForm)) {    
	        if(promoType=='gorp_signup'){
	        	pageTracker._trackPageview("/G1/gorpsubscibe");
	        }              		
	       var url='/useraccount/newsletterSignUp?parameter=newslettersignup';
	       var params='email='+ email + '&newsletterIds=' + newsletterId + '&newsletterName=' + newsletterName + '&promoType=' + promoType;
	       http.open('POST', url,true);
	 	   http.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 	
		   http.setRequestHeader("Content-length", params.length);
		   http.send(params);
		   http.onreadystatechange=handleResponseForGorp;
	   } else {
		   document.getElementById('email').className = 'signuppromoinput validation-failed';
		   document.getElementById('email').focus();
		   return false;
	   }
	   return false;
   }
   function handleResponseForGorp() {	
		if(http.readyState == 4 && http.status == 200){ 		
			if(http.responseText!=null && http.responseText!='' && http.responseText!='\r\n' && typeof(http.responseText)!='undefined'){
				$('#alertBox').show();
					var response = '';
					response = http.responseText;
            		$('#alertBox').html(response);
		   	}
	   }
	   }
   
  
   // TODO: Need to streamline all subscribeUser() functions. They are there in multiple places.
   function subscribeUserMain() {
       var email = document.signupPromoForm.email.value;
	   var newsletterId = document.signupPromoForm.newsletterId.value;
	   var newsletterName = document.signupPromoForm.newsletterName.value;
	   document.getElementById('userEmail').className = 'signuppromoinput validation-passed';		
	   if(email == null || email.trim() == ''){
	   	   	document.getElementById('userEmail').className = 'signuppromoinput validation-failed';
     	   	alert("Please enter the email address");
     	   	document.getElementById('userEmail').focus();     	
     	   	return false;
       }
       if(validateSignupPromoForm(document.signupPromoForm)) {           		
	       var url='/useraccount/newsletterSignUp?parameter=newslettersignup';
	       var params='email='+ email + '&newsletterIds=' + newsletterId + '&newsletterName=' + newsletterName;
	       http.open('POST', url,true);
	 	   http.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 	
		   http.setRequestHeader("Content-length", params.length);
		   http.send(params);
		   http.onreadystatechange=handleResponse;
	   } else {
		   document.getElementById('userEmail').className = 'signuppromoinput validation-failed';
		   document.getElementById('userEmail').focus();
		   return false;
	   }
	   return false;
   }
    
   
   /**
    * Subscribe to Multiple NewsLetter at same time.
    */
   function subscribeToNewsletter(msg)
   {	   
	   var email = document.signupPromoForm.email.value;
	   var newsletterId = "";
	   for(var i=0;i<document.signupPromoForm.newsletterId.length;i++){
		   if(document.signupPromoForm.newsletterId[i].checked==true){
			   newsletterId = newsletterId+document.signupPromoForm.newsletterId[i].value+"|";
		   }
	   }
	   if(newsletterId == ""){
		   alert(msg);
		   return false;
	   }
	   
	   document.getElementById('email').className = 'signuppromoinput validation-passed';		
	   if(email == null || email.trim() == ''){
	   	   	document.getElementById('email').className = 'signuppromoinput validation-failed';
     	   	alert("Please enter the email address");
     	   	document.getElementById('email').focus();     	
     	   	return false;
       }
       
       if(validateSignupPromoForm(document.signupPromoForm)) {           
        	pageTracker._trackPageview('/G1/awaysubscibe');		
	       var url='/useraccount/newsletterSignUp?parameter=signUpMultipleNewsletters';
	       var params='email='+ email + '&newsletterIds=' + newsletterId;
	       http.open('POST', url,true);
	 	   http.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 	
		   http.setRequestHeader("Content-length", params.length);
		   http.send(params);
		   http.onreadystatechange=handleResponse;
	   } else {
		   document.getElementById('email').className = 'signuppromoinput validation-failed';
		   document.getElementById('email').focus();
		   return false;
	   }
	   return false; 
   }
   function handleResponse() {	
		if(http.readyState == 4 && http.status == 200){ 		
			if(http.responseText!=null && http.responseText!='' && http.responseText!='\r\n' && typeof(http.responseText)!='undefined'){
				var index = (http.responseText).lastIndexOf('.');
            	var response = '';
            	if(index!= -1){
            		response = (http.responseText).substring(0,index+1);
            	}else{
            		response = http.responseText;
            	}
            	alert(response);
		   	}
	   }
   }
   
 /**
  * This method sends a YDE news letters Subscription.
  * It calls the "newsletterSignUp" ManageRegistrationAction.java method.   
  */
   function subscribeToNewsLetterYDE()
   {	   
	   var email = document.signUpNewsLetterYDE.ydeuseremail.value;	   
	   var newsletterId = document.signUpNewsLetterYDE.newsletterId.value;
	   var newsletterName = document.signUpNewsLetterYDE.newsletterName.value;
	   
	   document.getElementById('ydeuseremail').className = 'signuppromoinput validation-passed';		

	   var isValidEmail = checkValidEmail(email);	   
	   if(email == null || email.trim() == '' || !isValidEmail )
	   {
	   	   	document.getElementById('ydeuseremail').className = 'signuppromoinput validation-failed';
     	   	alert("Please enter a valid email address");
     	   	document.getElementById('ydeuseremail').focus();     	
     	   	return false;
       }
      
           pageTracker._trackPageview('/G1/awaysubscibe');
	       var url='/useraccount/newsletterSignUp?parameter=newslettersignup';
	       var params='email='+ email + '&newsletterIds=' + newsletterId + '&newsletterName=' + newsletterName;
	       http.open('POST', url,true);
	 	   http.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 	
		   http.setRequestHeader("Content-length", params.length);
		   http.send(params);
		   http.onreadystatechange=handleResponse; 
	  
   }

   /**
    * This method validates a correct email pattern. 
    */
   function checkValidEmail(emailStr) 
   {
       if (emailStr.length == 0) {
           return true;
       }
       var emailPat=/^(.+)@(.+)$/;
       var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]";
       var validChars="\[^\\s" + specialChars + "\]";
       var quotedUser="(\"[^\"]*\")";
       var ipDomainPat=/^(\d{1,3})[.](\d{1,3})[.](\d{1,3})[.](\d{1,3})$/;
       var atom=validChars + '+';
       var word="(" + atom + "|" + quotedUser + ")";
       var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
       var domainPat=new RegExp("^" + atom + "(\\." + atom + ")*$");
       var matchArray=emailStr.match(emailPat);
       if (matchArray == null) {
           return false;
       }
       var user=matchArray[1];
       var domain=matchArray[2];
       if (user.match(userPat) == null) {
           return false;
       }
       var IPArray = domain.match(ipDomainPat);
       if (IPArray != null) {
           for (var i = 1; i <= 4; i++) {
              if (IPArray[i] > 255) {
                 return false;
              }
           }
           return true;
       }
       var domainArray=domain.match(domainPat);
       if (domainArray == null) {
           return false;
       }
       var atomPat=new RegExp(atom,"g");
       var domArr=domain.match(atomPat);
       var len=domArr.length;
       if ((domArr[domArr.length-1].length < 2) ||
           (domArr[domArr.length-1].length > 3)) {
           return false;
       }
       if (len < 2) {
           return false;
       }
       return true;
   }
   
   /**
    * Enhance an input box by displaying a default text when the used
    * does not have focus on the element and he/she did not type anything
    * on it.
    *  
    * @param selector Input selector
    * @param defContent Default message to display
    * @return
    */
   function enhanceEmailInput(selector, defContent)
   {
	   $(selector).focus(
			   function ()
			   {
				   if($(this).val() == defContent) 
				   {
					   $(this).val('');
				   }
			   }
	   ).blur(
			   function ()
			   {
				   if ($(this).val() == '')
				   {
					   $(this).val(defContent);
				   }
			   }
		);
   }
   
   
   function openCloseDiv(id)
   {
	   var style = document.getElementById(id).style;

	   if(style.display == "block")
	   {
		   style.display = "none";
	   }
	   
   }

