/*
Project:		Online.nl Pakketkiezer
File:			javascript/pakketkiezer.js
Description:	Javascript xml parser 
Author:			Frank Broersen - Pit Group
Created:		12/01/2010
Last update:	14/01/2010
*/
(function() {

	var pakketKiezer = {

		/*
		 * Url to the xml file
		 */
		xmlFile : 'http://www.online.nl/js/pakketkiezer/pakketten.xml',

		/*
		 * Object that holds the filters
		 */
		filter : {
			internet : 20,
			bellen : 'w',
			hdtv : ''
		},

		/*
		 * Object that holds the result package
		 */
		pakket : {

			gratis: {
				mbi		: 0,
				bellen	: 0,
				wifi	: 0
			},

			promoprijs: 0,

			listprijs: 0,

			link: '',

			clicktag: '',

			/*
			 * setGratis
			 * setter for "gratis" object
			 */
			setGratis: function( name, value ) {
				switch( name ) {
					case 'mbi':
						this.gratis.mbi = value
						break;
					case 'wifi':
						this.gratis.wifi = value
						break;
					case 'bellen':
						this.gratis.bellen = value
						break;
				}
			}

		},

		/*
		 * Parse the xml using the filter & package object
		 */
		parseXml: function ( ) {

			/*
			 * Open xml file
			 */
			if (window.XMLHttpRequest)  {
			  xhttp = new XMLHttpRequest();
			} else {
			  xhttp = new ActiveXObject("Microsoft.XMLHTTP");
			}
			xhttp.open("GET", pakketKiezer.xmlFile, false );
			xhttp.send("");
			xmlDoc = xhttp.responseXML;

			/*
			 * Loop through packages, if all filters apply, show the package
			 */
			var packages = xmlDoc.getElementsByTagName("pakket");
			var total = packages.length;
			for ( var i = 0; i < total; i++) {
				// if all filters apply, fill the package object
				if( packages[i].getAttribute('internet') == this.filter.internet ) {
					if( packages[i].getAttribute('bellen') == this.filter.bellen ) {
						if( packages[i].getAttribute('hdtv') == this.filter.hdtv ) {

							if( packages[i].getElementsByTagName('promoprijs')[0].firstChild != null ) {
								this.pakket.promoprijs = packages[i].getElementsByTagName('promoprijs')[0].firstChild.nodeValue;
							}else {
								this.pakket.promoprijs = '';
							}

							if( packages[i].getElementsByTagName('listprijs')[0].firstChild != null ) {
								this.pakket.listprijs = packages[i].getElementsByTagName('listprijs')[0].firstChild.nodeValue;
							} else {
								this.pakket.listprijs = '';
							}

							if( packages[i].getElementsByTagName('link')[0].firstChild != null ) {
								this.pakket.link = packages[i].getElementsByTagName('link')[0].firstChild.nodeValue;
							}

							if( packages[i].getElementsByTagName('clicktag')[0].firstChild != null ) {
								this.pakket.clicktag = packages[i].getElementsByTagName('clicktag')[0].firstChild.nodeValue;
							}
							
							if( packages[i].getElementsByTagName('gratis') != null ) {
								var gratis = packages[i].getElementsByTagName('gratis');
								for ( var j = 0; j < 3; j++) {
									this.pakket.setGratis( gratis[j].getAttribute('name'), gratis[j].firstChild.nodeValue );
								}
							}

							break; // no need to finish the loop if we have the right product
						}
					}
				}
			}
			return true;
		},

		/*
		 * UpdateCart
		 * Update the shopping cart
		 */
		updateCart: function() {

			/*
			 * Show the "Gratis" messages if a package has this option selected
			 */
			if( this.pakket.gratis.mbi == 1 ) {
				document.getElementById('g-mbi').style.display = 'block'; 
			} else {
				document.getElementById('g-mbi').style.display = 'none'; 
			}
			if( this.pakket.gratis.bellen == 1 ) {
				document.getElementById('g-bellen').style.display = 'block';
			} else {
				document.getElementById('g-bellen').style.display = 'none';
			}
			if( this.pakket.gratis.wifi == 1 ) {
				document.getElementById('g-wifi').style.display = 'block';
			} else {
				document.getElementById('g-wifi').style.display = 'none';
			}

			/*
			 * Update the cart prices
			 * If there is no promotion price, show the "Altijd lage prijs" div
			 */
			if( this.pakket.promoprijs != '' ) {
				document.getElementById('p-change').style.display = 'block';
				document.getElementById('p-noChange').style.display = 'none';
				document.getElementById('p-promo-prijs1').innerHTML = '&euro; ' + this.pakket.promoprijs + ',-';
				document.getElementById('p-list-prijs1').innerHTML = '&euro; ' + this.pakket.listprijs + ',-';
			} else {
				document.getElementById('p-change').style.display = 'none';
				document.getElementById('p-noChange').style.display = 'block';
				document.getElementById('p-promo-prijs2').innerHTML = '&euro; ' + this.pakket.listprijs + ',-';
			}
			
			/*
			 * Update the url and the click tag
			 */
			document.getElementById('p-link').setAttribute('href', this.pakket.link + this.pakket.clicktag );
		},

		/*
		 * setActive
		 * Set active tick for a product
		 */
		setActive: function( name, type ) {
			switch( name ) {
				case 'internet':
					if( type == 4 ) {
						this.filter.internet = 4;
						document.getElementById('c-internet-20').style.display = 'none';
					    document.getElementById('c-internet-4').style.display = 'block';
						document.getElementById('internet-20').style.display = 'none';
						document.getElementById('internet-4').style.display = 'block';

						/*
						 * disable "bellen"
						 */
						this.filter.bellen = '';
						document.getElementById('c-bellen-o').style.display = 'none';
						document.getElementById('c-bellen-w').style.display = 'none';
						document.getElementById('bellen-w').style.display = 'none';
						document.getElementById('bellen-o').style.display = 'none';

						document.getElementById('nb').style.display = 'block'; /* show the overlay */
					} else if( type == 20 ) {
						this.filter.internet = 20;
					    document.getElementById('c-internet-4').style.display = 'none';
					    document.getElementById('c-internet-20').style.display = 'block';
						document.getElementById('internet-4').style.display = 'none';
						document.getElementById('internet-20').style.display = 'block';

						document.getElementById('nb').style.display = 'none'; /* hide the overlay */
					} 
					break;
				case 'bellen':
					if( this.filter.internet != 4 ) {
						if( type == 'o' && this.filter.bellen != 'o' ) {
							this.filter.bellen = 'o';
						    document.getElementById('c-bellen-w').style.display = 'none';
							document.getElementById('c-bellen-o').style.display = 'block';
							document.getElementById('bellen-o').style.display = 'block';
							document.getElementById('bellen-w').style.display = 'none';
						} else if( type == 'w' && this.filter.bellen != 'w' ) {
							this.filter.bellen = 'w';
						    document.getElementById('c-bellen-o').style.display = 'none';
							document.getElementById('c-bellen-w').style.display = 'block';
							document.getElementById('bellen-o').style.display = 'none';
							document.getElementById('bellen-w').style.display = 'block';
						} else {
							this.filter.bellen = '';
							document.getElementById('c-bellen-o').style.display = 'none'; 
							document.getElementById('c-bellen-w').style.display = 'none'; 
							document.getElementById('bellen-o').style.display = 'none';
							document.getElementById('bellen-w').style.display = 'none';
						}
					}
					break;
				case 'hdtv':
					if( type == 'e' && this.filter.hdtv != 'e' ) {
						this.filter.hdtv = 'e';
						document.getElementById('hdtv-f').style.display = 'none';
						document.getElementById('hdtv-e').style.display = 'block';
						document.getElementById('c-hdtv-f').style.display = 'none';
						document.getElementById('c-hdtv-e').style.display = 'block';
					} else if( type == 'f' && this.filter.hdtv != 'f' ) {
						this.filter.hdtv = 'f';
						document.getElementById('c-hdtv-e').style.display = 'none';
						document.getElementById('c-hdtv-f').style.display = 'block';
						document.getElementById('hdtv-e').style.display = 'none';
						document.getElementById('hdtv-f').style.display = 'block';
					} else {
						this.filter.hdtv = '';
						document.getElementById('c-hdtv-e').style.display = 'none';
						document.getElementById('c-hdtv-f').style.display = 'none';
						document.getElementById('hdtv-f').style.display = 'none';
						document.getElementById('hdtv-e').style.display = 'none';
					}
					break;
			}
		}

	}

	/*
	 * Check of the "pakketKiezer" is already defined elsewhere in the javascript
	 */
	if( ! window.pakketKiezer ) {
		window.pakketKiezer = pakketKiezer;
	} else {
		throw('Pakketkiezer is already defined.');
	}

})();