
	/**
	 * @copyright Wingweb Communications
	 * @author Ariaan Bruinsma
	 * @version 2009-01-14
	 */

	var NewsLetter = {
		'xmlHTTP': null,
		'requestFile': null,
	
		// Event hooks
		'onNotify': function(msg){ return null; },
		'onError': function(msg){ return null; },
		'onStateChange': function(stateText){ return null; },
		
		// Object pointers
		'newsName': null,
		'newsEmail': null,
		'newsRegister': null,
		
		'init': function (requestFile, newsName, newsEmail, newsRegister)
		{
			this.resetAjax(); // IE fix
			this.requestFile = requestFile || './processrequest.php';
			
			this.newsName = document.getElementById( newsName || 'newslName' );
			this.newsEmail = document.getElementById( newsEmail || 'newslEmail' );
			this.newsRegister = document.getElementById( newsRegister || 'newslRegister' );
			
			if( this.newsName != null && this.newsEmail != null && this.newsRegister != null )
			{
				this.newsName.onchange = this.newsName.onkeyup = this.checkName;
				this.newsEmail.onchange = this.newsEmail.onkeyup = this.checkEmail;
				
				this.newsRegister.onclick = this.registerUser;
				this.checkName();
				this.checkEmail();
				this.toggleRegisterUser();
			}
			else
				this.onError('U kunt zich tijdelijk niet aanmelden voor de nieuwsbriefmodule, probeert u het later nog eens.');
		},
		
		'getXMLHttpObject': function()
		{
			try{ return new XMLHttpRequest(); } catch(e) {
				try{ return new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) {
					try{ return new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) {
						return null;
					}
				}
			}
		},
		
		 // IE fix
		'resetAjax': function()
		{
			NewsLetter.xmlHTTP = NewsLetter.getXMLHttpObject();
			NewsLetter.xmlHTTP.onreadystatechange = NewsLetter.ajaxCheck;
		},
		
		'ajaxCheck': function()
		{
			// switch-case without breaks, because the function will return a value
			switch(NewsLetter.xmlHTTP.readyState)
			{
				case 0:
					return NewsLetter.onStateChange('wait');
				
				case 1: case 2: case 3:
					return NewsLetter.onStateChange('load');
				
				case 4:
					if ( NewsLetter.xmlHTTP.status != '200' )
					{
						NewsLetter.onError('U kunt zich tijdelijk niet aanmelden voor de nieuwsbriefmodule, probeert u het later nog eens.');
					}
					else
					{
						var jsonObj = eval('(' + NewsLetter.xmlHTTP.responseText + ')');
						if ( jsonObj.status == 'failed' )
						{
							NewsLetter.onError(jsonObj.error);
							NewsLetter.onStateChange('error');
						}
						else
						{
							NewsLetter.onNotify(jsonObj.msg);
							NewsLetter.onStateChange('success');
						}
					}
					return NewsLetter.resetAjax();
			}
		},
		
		'checkName': function()
		{
			NewsLetter.newsName.className = NewsLetter.newsName.className.replace(/(inputSuccess|inputFail)/gi, '');
			if( NewsLetter.newsName.value.length > 0 )
				NewsLetter.newsName.className += ' ' + (NewsLetter.newsName.value.length >= 2 ? 'inputSuccess' : 'inputFail' );
			NewsLetter.toggleRegisterUser();
		},
		
		'checkEmail': function()
		{
			NewsLetter.newsEmail.className = NewsLetter.newsEmail.className.replace(/(inputSuccess|inputFail)/gi, '');
			if( NewsLetter.newsEmail.value.length > 0 )
				NewsLetter.newsEmail.className += ' ' + (NewsLetter.newsEmail.value.match(/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/) ? 'inputSuccess' : 'inputFail' );
			NewsLetter.toggleRegisterUser();
		},
		
		'registerUser': function()
		{
			NewsLetter.xmlHTTP.open("GET", NewsLetter.requestFile + '?mode=subscribe&name=' + NewsLetter.newsName.value + '&email=' + NewsLetter.newsEmail.value, true);
			NewsLetter.xmlHTTP.send(null);
		},
		
		'toggleRegisterUser': function()
		{
			NewsLetter.newsRegister.disabled = NewsLetter.newsName.className.match(/inputSuccess/) && NewsLetter.newsEmail.className.match(/inputSuccess/) ? false : true;
		}
	}

