/* ###############################################################################*/
/* Newslettter system class
/* Uses prototype.js for ajax
/* (c) 2007 Joris van Montfort <joris@.loft.nu>
/* ###############################################################################*/
//=================================================================================================
// NewsletterSystem singleton class
NewsletterSystem = {};

// Options
NewsletterSystem.pathToRoot = '';
NewsletterSystem.server = 'index.php?command=mod_newsletter&raw=1';

//=================================================================================================
NewsletterSystem.setAction = function (v) {
	var button = $('newsletterActionButton');
	//alert (v);
	switch (v) {
		case 'subscribe':
			Element.hide('newsletterUnsubscribe/Edit')
			Element.show('newsletterSubscribe');
			Element.show('newsletterSubjects');
			Element.hide('newsletterForgotPass');
			Element.show('actionButton');

			button.value = 'Aanmelden';
			button.onclick = NewsletterSystem.checkSubscribe;
		break;
		case 'unsubscribe':
			Element.show('newsletterUnsubscribe/Edit')
			Element.hide('newsletterSubscribe');
			Element.hide('newsletterSubjects');
			Element.hide('newsletterForgotPass');
			Element.show('actionButton');

			button.value = 'Afmelden';
			button.onclick = NewsletterSystem.checkUnsubscribe;
		break;
		case 'edit':
			Element.show('newsletterUnsubscribe/Edit')
			Element.hide('newsletterSubscribe');
			Element.hide('newsletterSubjects');
			Element.hide('newsletterForgotPass');
			Element.show('actionButton');

			button.value = 'Verder »';
			button.onclick = NewsletterSystem.checkEdit;
		break;
		case 'forgotpass':
			Element.hide('newsletterUnsubscribe/Edit')
			Element.hide('newsletterSubscribe');
			Element.hide('newsletterSubjects');
			Element.show('newsletterForgotPass');
			Element.show('actionButton');

			button.value = 'Wachtwoord opvragen';
			button.onclick = NewsletterSystem.checkForgotPass;
		break;
	}
}
//=================================================================================================
NewsletterSystem.checkSubscribe = function () {
	if ($('newsletterName1').value.length == 0) {
		alert ('Geef een naam op a.u.b.');
		$('newsletterName1').focus();
		return false;
	}

	if (!isEmail($('newsletterEmail1').value)) {
		alert ('Geef een email op a.u.b.');
		$('newsletterEmail1').focus();
		return false;
	}

	if ($('newsletterPass1').value.length == 0 || $('newsletterPass2').value.length == 0) {
		alert('Geef een wachtwoord op a.u.b.');
		$('newsletterPass1').focus();
		return false;
	}

	if ($('newsletterPass1').value != $('newsletterPass2').value){
		alert('De ingevulde wachtwoorden komen niet overeen.\n ');
		return false;
	}

	// Check if any subjects have been selected
	var subjectForm = document.forms['newsletterSubjectsForm'];
	var checked = false;
	for (var i=0; i < subjectForm.elements.length; i++) {
		if (subjectForm.elements[i].checked == true) {
			checked = true;
			break;
		}
	}
	// Make sure at least one subject is selected
	if (NewsletterSystem._checkSubjects()) {
		// Check if email is not already is db, if not send in the subscription
		var pars = 'action=checkEmail&email='+$('newsletterEmail1').value;
		new Ajax.Request(
				NewsletterSystem.pathToRoot+NewsletterSystem.server,
				{
					method: 'get',
					parameters: pars,
					onComplete: NewsletterSystem._doSubscribe
				});
	}
}
//=================================================================================================
NewsletterSystem.checkUnsubscribe = function (){
	if (!isEmail($('newsletterEmail3').value)) {
		alert ('Geef een email op a.u.b.');
		$('newsletterEmail3').focus();
		return false;
	}

	if ($('newsletterPass3').value.length == 0) {
		alert('Geef een wachtwoord op a.u.b.');
		return false;
	}

	var pars = 'action=checklogin&email='+$('newsletterEmail3').value+'&pass='+$('newsletterPass3').value;
	new Ajax.Request(
			NewsletterSystem.pathToRoot+NewsletterSystem.server,
			{
				method: 'get',
				parameters: pars,
				onComplete: NewsletterSystem._doUnsubscribe
			});
}
//=================================================================================================
NewsletterSystem.checkEdit = function () {
	if (!isEmail($('newsletterEmail3').value)) {
		alert ('Geef een email op a.u.b.');
		$('newsletterEmail3').focus();
		return false;
	}

	if ($('newsletterPass3').value.length == 0) {
		alert('Geef een wachtwoord op a.u.b.');
		return false;
	}

	var pars = 'action=checklogin&email='+$('newsletterEmail3').value+'&pass='+$('newsletterPass3').value;
	new Ajax.Request(
			NewsletterSystem.pathToRoot+NewsletterSystem.server,
			{
				method: 'get',
				parameters: pars,
				onComplete: NewsletterSystem._getSubjects
			});
}
//=================================================================================================
NewsletterSystem.checkUpdate = function (){
	// Make sure at least one subject is selected
	if (NewsletterSystem._checkSubjects()) {
		var pars = 'action=updateSubscriber&email='+$('newsletterEmail3').value+'&pass='+$('newsletterPass3').value+'&'+Form.serialize('newsletterSubjectsForm');
		new Ajax.Request(
				NewsletterSystem.pathToRoot+NewsletterSystem.server,
				{
					method: 'get',
					parameters: pars,
					onComplete: NewsletterSystem._afterUpdate
				});
	}
}
//=================================================================================================
NewsletterSystem.checkForgotPass = function (){
	if (!isEmail($('newsletterEmail4').value)) {
		alert ('Geef een email op a.u.b.');
		$('newsletterEmail4').focus();
		return false;
	}

	var pars = 'action=sendpass&email='+$('newsletterEmail4').value;
	new Ajax.Request(
			NewsletterSystem.pathToRoot+NewsletterSystem.server,
			{
				method: 'get',
				parameters: pars,
				onComplete: NewsletterSystem._afterPassSent
			});
}
//=================================================================================================
NewsletterSystem._doSubscribe = function (response) {
	if (response.responseText.length == 0) {
		var pars = 'action=subscribe&'+Form.serialize('newsletterSubscribeForm')+'&'+Form.serialize('newsletterSubjectsForm');
		new Ajax.Request(
			NewsletterSystem.pathToRoot+NewsletterSystem.server,
			{
				method: 'get',
				parameters: pars,
				onComplete: NewsletterSystem._afterSubscribe
			});
	}else {
		alert ('Het email adres '+$('newsletterEmail1').value+' is al aangemeld voor de nieuwsbrief.');
	}
}
//=================================================================================================
NewsletterSystem._doUnsubscribe = function (response) {
	if (response.responseText.length == 0) {
		var pars = 'action=unsubscribe&email='+$('newsletterEmail3').value+'&pass='+$('newsletterPass3').value;
		new Ajax.Request(
			NewsletterSystem.pathToRoot+NewsletterSystem.server,
			{
				method: 'get',
				parameters: pars,
				onComplete: function (response){
						NewsletterSystem.setAction('');
						alert ('U bent afgemeld voor de nieuwsbrief en verwijderd uit het bestand.');
						NewsletterSystem._resetForms();
					}
				});
	}else {
		alert ('Ongeldige email/wachtwoord combinatie.');
	}
}
//=================================================================================================
NewsletterSystem._getSubjects = function (response) {
	if (response.responseText.length == 0) {
		var pars = 'action=getSubjects&'+Form.serialize('newsletterUnsubscribe/Edit');

		new Ajax.Request(
			NewsletterSystem.pathToRoot+NewsletterSystem.server,
			{
				method: 'get',
				parameters: pars,
				onComplete: NewsletterSystem._afterGetSubjects
			});
	}else {
		alert ('Ongeldige email/wachtwoord combinatie.');
	}
}
//=================================================================================================
NewsletterSystem._afterGetSubjects = function (response){
	var button = $('newsletterActionButton');

	Element.hide('newsletterUnsubscribe/Edit');
	Element.show('newsletterSubjects');

	button.value = 'Wijzigen';
	button.onclick = NewsletterSystem.checkUpdate;

	var xml = response.responseXML;
	var subjectNodes = xml.getElementsByTagName('subject');
	for (var i=0; i < subjectNodes.length; i++) {
		node = subjectNodes[i];
		$('newsletterSubject_'+node.getAttribute('id')).checked = true;
	}
}
//=================================================================================================
NewsletterSystem._afterSubscribe = function (response){
	NewsletterSystem.setAction('');
	alert ('U bent aangemeld voor de nieuwsbrief. Controleer uw email voor bevestiging.');
	NewsletterSystem._resetForms();
}
//=================================================================================================
NewsletterSystem._afterUpdate = function (response){
	NewsletterSystem.setAction('');
	alert ('Uw gegevens zijn gewijzigd.');
	NewsletterSystem._resetForms();
}
//=================================================================================================
NewsletterSystem._afterPassSent = function (response){
	if (response.responseText.length == 0) {
		alert ('Ongeldig emailadres.');
	}else {
		alert (response.responseText);
		NewsletterSystem._resetForms();
	}
}
//=================================================================================================
NewsletterSystem._resetForms = function () {
	document.forms['newsletterSubscribeForm'].reset();
	document.forms['newletterAction2'].reset();
	document.forms['newletterAction3'].reset();
	document.forms['newsletterSubjectsForm'].reset();

	Element.hide('newsletterUnsubscribe/Edit')
	Element.hide('newsletterSubscribe');
	Element.hide('newsletterSubjects');
	Element.hide('newsletterForgotPass');
	Element.hide('actionButton');

	$('newsletterAction').selectedIndex = 0;
}
//=================================================================================================
NewsletterSystem._checkSubjects = function (){
	// Check if any subjects have been selected
	var subjectForm = document.forms['newsletterSubjectsForm'];
	var checked = false;
	for (var i=0; i < subjectForm.elements.length; i++) {
		if (subjectForm.elements[i].checked == true) {
			checked = true;
			return true;
			break;
		}
	}
	if (!checked) {
		alert ('Kies minimaal 1 nieuwsbrief onderwerp a.u.b.');
		return false;
	}
}
