/*
# javascript voor de tickets
# ###############
# Onderdeel van sQuarecoW CMS
# © 2006-2008 sQuarecoW new media
# Versie: 2.0
# Module: tickets
# ###############
*/

function elfProef(field) {
	error = false;
	
	csom = 0;                            // variabele initialiseren 
	pos = 9;                             // het aantal posities waaruit een bankrekeningnr hoort te bestaan

	for (i = 0; i < field.get('value').length; i++) {

		num = field.get('value').substr(i,1);       // bekijk elk karakter van de ingevoerde string

		if ( !isNaN( num )){           // controleer of het karakter numeriek is
			
			csom += num * pos;                        // bereken somproduct van het cijfer en diens positie 
			pos--;                           // naar de volgende positie
		}
	}

	postb = (pos > 1) && (pos < 7);    // True als resterende posities tussen 1 en 7 => Postbank
	mod = csom % 11;                                        // bereken restwaarde van somproduct/11. 
	
	if (!(postb || (pos ==  0 || mod ==  0)))
		error = true;
		
	return error;
}

function formatPrice(price) {
	var price = price.toString();
	// is er helemaal geen punt?
	if (!price.contains('.')) {
		result = price + ',00';
	}
	// anders kijken of er nog een 0 bij moet
	else {
		var parts = price.split('.');
		if (parts[1].length == 1)
			price = price + '0';
		// en sowieso even de punt vervangen
		result = price.replace('.', ',');
	}
	// klaar
	return result;
}

// defaulttext laden
function setDefault(input) {
	input.set({
		'value': input.get('title'),
		'class': 'default',
		'events': {
			'focus': function() {
				this.set('value', '').removeClass('default');
				this.toggleClass('active');
			},
			'blur': function() {
				if (this.get('value') == '' || this.get('value') == this.get('title')) {
					this.set('value', this.get('title')).addClass('default');
					this.toggleClass('active');
				}
			}
		}
	});
}

// tickets + totaalbedrag optellen
function countTickets() {

	var total_price = 0;
	$$('input.ticket-count').each(function(field) {
		// ingevuld en meer dan 0?
		if (field.get('value') != '' && field.get('value') > 0) {
			var options = JSON.decode(field.get('rel'));
			total_price = total_price + (field.get('value') * options.price.toFloat());
		}
	});
	// prijzen invullen
	if (total_price > 0) {
		$('confirm').setStyle('display', 'block');
		$$('.total-price').set('html', '&euro; ' + formatPrice(total_price));
	}
}

window.addEvent('domready', function() {

	// voeg de groepen en de tickets toe
	concerts_groups.each(function(group) {

		// kopje maken
		var li = new Element('li', {
			'html': group.title,
			'class': 'group'
		}).inject($('concerts_groups'));
		// alle bijbehorende concerten zoeken
		concerts.each(function(concert) {
			var ticket_box = new Element('div');
			if (concert.group_id == group.id) {
				// concert invoegen
				var li = new Element('li', {
					'html': concert.datetime_start_short + '&nbsp;&nbsp;<strong>' + (concert.subject.length > 19 ? concert.subject.substring(0, 18) + '..' : concert.subject) + '</strong>',
					'class': 'concert',
					'events': {
						'click': function() {
							
							var concert_id = this.retrieve('concert_id');
							// markeren
							$$('li.selected').removeClass('selected');
							this.addClass('selected');
							// concertgegevens weergeven
							buildConcertBox(concert_id);
							// machtiging enz verstoppen
							$('confirm').setStyle('display', 'none');
							$$('.total-price').set('html', '');
							
							// eerste keer klaar: ad weghalen en div plaatsen
							if ($('panel_right').getElement('div.ticket-box').getStyle('display') != 'block') {
								$('panel_right').getElement('img.ad-image').setStyle('display', 'none');
								$('panel_right').getElement('div.ticket-box').setStyle('display', 'block');
							}
						}
					}
				}).store('concert_id', concert.id).inject($('concerts_groups'));
				
			}
		});
	});
	
	// linker paneel vullen
	// eerst advertentie invullen
	new Element('img', {
		'src': ad_image,
		'class': 'ad-image',
		'styles': {
			'width': 630
		}
	}).inject($('panel_right'));
	
	// ticketbox (verstopt)
	ticket_box = new Element('div', {
		'id': 'ticket_box',
		'class': 'ticket-box',
		'styles': {
			'display': 'none'
		}
	}).inject($('panel_right'));
	// begin formulier
	var form = new Element('form', {
		'name': 'tickets',
		'id': 'ticket_form'
	}).inject(ticket_box);
	// plaats voor de concertdata
	var concert_box = new Element('div', {
		'id': 'concert_box',
		'class': 'concert-box'
	}).inject(form);
	// gegevens klant
	var data_div = new Element('div', {
		'html': '<div class="form-header"><h3>Vul je gegevens in</h3></div>'
	}).inject(form);
	// formulier
	var data_ul = new Element('ul', {
		'id': 'data_ul',
		'class': 'data-ul'
	}).inject(data_div);
	// vriend van Sela
	var fieldset = new Element('fieldset', {
		'class': 'personal vriendenvansela',
		'html': '<span class="header">Vriend van Sela</span>'
	}).inject(data_ul);
	var li = new Element('li').inject(fieldset);
	var input = new Element('input', {
		'type': 'checkbox',
		'name': 'friend',
		'id': 'friend',
		'events': {
			'click': function() {
				if (this.checked) {
					
					var li = new Element('li', {
						'html': '<input type="text" name="friend_number" id="friend_number" title="Vriend van Sela nummer" />'
					}).inject(this.getParent('fieldset'));
					setDefault(li.getElement('input#friend_number'));
				}
			}
		}
	}).inject(li);
	var label = new Element('label', {
		'for': 'friend',
		'html': 'Ik ben Vriend van Sela'
	}).inject(li);
	// naam
	var fieldset = new Element('fieldset', {
		'class': 'personal',
		'html': '<span class="header">Naam</span>'
	}).inject(data_ul);
	var li = new Element('li', {
		'html': '<input type="text" name="firstname" id="firstname" title="Voornaam"><input type="text" name="middlename" id="middlename" title="Tussenvoegsel"><input type="text" name="lastname" id="lastname" title="Achternaam">'
	}).inject(fieldset);
	// adress
	var fieldset = new Element('fieldset', {
		'class': 'address',
		'html': '<span class="header">Adres</span>'
	}).inject(data_ul);
	var li = new Element('li', {
		'html': '<input type="text" name="street" id="street" title="Straat"><input type="text" name="number" id="number" title="Huisnummer"><input type="text" name="extension" id="extension" title="Toevoeging">'
	}).inject(fieldset);
	var li = new Element('li', {
		'html': '<input type="text" name="zip" id="zip" title="Postcode"><input type="text" name="place" id="place" title="Woonplaats">'
	}).inject(fieldset);
	// contact
	var fieldset = new Element('fieldset', {
		'class': 'address',
		'html': '<span class="header">Contactgegevens</span>'
	}).inject(data_ul);
	var li = new Element('li', {
		'html': '<input type="text" name="email" id="email" title="E-mailadres"><input type="text" name="phone" id="phone" title="Telefoonnummer">'
	}).inject(fieldset);
	// bevestigen
	var confirm = new Element('div', {
		'id': 'confirm',
		'styles': {
			'display': 'none'
		}
	}).inject(form);
	new Element('div', {
		'html': '<div class="form-header"><h3>Machtiging</h3></div>'
	}).inject(confirm);
	// machtiging
	var authorization_ul = new Element('ul', {
		'id': 'authorization_ul',
		'class': 'data-ul'
	}).inject(confirm);
	var fieldset = new Element('fieldset', {
		'class': 'address'
	}).inject(authorization_ul);
	var li = new Element('li', {
		'html': '<input type="checkbox" name="authorization" id="authorization" /><label for="authorization">Hierbij machtig ik Stichting Selamusic het verschuldigde bedrag van <span class="total-price"></span> af te schrijven van mijn rekening.</label>'
	}).inject(fieldset);
	var li = new Element('li', {
		'html': '<input type="text" name="account" id="account" title="Rekeningnummer"/><span class="error"></span>'
	}).inject(fieldset);
	// bestellen!
	new Element('span', {
		'html': 'Bestel je kaarten',
		'events': {
			'click': function() {
				validateForm();
			}
		}
	});

	// aan alle inputs een actie hangen
	$$('input[type=text]').each(function(input) {
		setDefault(input);
	});
	// account monitoren
	$('account').addEvent('keyup', function() {
		this.getNext('span.error').set('html', '');
		if (this.get('value').length > 5 && elfProef(this))
			this.getNext('span.error').set('html', '<img src="images/silkicons/exclamation.png" />');
	});
});

// concert gegevens laden
function buildConcertBox(concert_id) {
	// loading..
	$('concert_box').set('html', 'Bezig met laden..').addClass('concert-box-loading');
	
	var concert_tickets = [];
	// zoek de gegevens van het concert
	concerts.each(function(item) {
		if (item.id == concert_id)
			concert = item;
	});
	// toon de verschillende kaarten voor dit concert
	var concert_div = new Element('div', {
		'html': '<div class="description"><h3>' + concert.subject + ' - ' + concert.datetime_start_long + '</h3>' + concert.description + '</div><div class="form-header"><h3>Kies je kaarten</h3></div>'
	});
	var ticket_description = new Element('div', {
		'class': 'explanation',
		'html': ''
	}).inject(concert_div);
	// alle tickets voor dit concert toevoegen tickets toevoegen
	concerts_tickets.each(function(concerts_ticket) {
		if (concerts_ticket.concert_id == concert_id) {
			concert_tickets.include(concerts_ticket.ticket_id)
		}
	});
	// zijn er tickets?
	if (concert_tickets.length > 0) {
		var ticket_ul = new Element('ul', {
			'id': 'ticket_ul'
		}).inject(concert_div);
		concert_tickets.each(function(concerts_ticket) {
			// zoek het ticket op
			tickets.each(function(ticket) {
				if (ticket.id == concerts_ticket) {
					var ticket_li = new Element('li', {
						'html': ''
					}).inject(ticket_ul);
					new Element('input', {
						'type': 'text',
						'id': 'ticket_' + ticket.id,
						'name': 'ticket_' + ticket.id,
						'class': 'ticket-count',
						'rel': '{"price": "' + ticket.price + '"}',
						'events': {
							'keyup': function() {
								alert(this.get('value'));
							}
						}
					}).inject(ticket_li);
					ticket_li.set('html', ticket_li.get('html') + ' ' + ticket.title + ' - &euro;' + formatPrice(ticket.price));
				}
			});
		});
	}
	// anders melden
	else {
		new Element('div', {
			'class': 'description',
			'html': 'Geen kaarten beschikbaar'
		}).inject(concert_div);
	}
	// klaar
	(function() {
		$('concert_box').removeClass('concert-box-loading');
		$('concert_box').set('html', concert_div.get('html'));
		// actie toevoegen
	$$('input.ticket-count').each(function(field) {
		field.set({
			'events': {
				'keyup': function() {						
					countTickets();
				}
			}
		});
	});
	}).delay(500);
	
}
