// Een optie bestaat uit een naam en een bedrag
function Optie(naam, bedrag, infoid)
{
	var mNaam = naam;
	var mBedrag = bedrag;
	var mId = infoid;
	
	// Maak de functies 'text' en 'value' public
	this.text = text;
	this.value = value;
	this.infoId = infoId;
	
	function infoId()
	{
		return mId;	
	}
	function text()
	{
		return mNaam;
	}
	
	function value()
	{
		return mBedrag;
	}
}

// Een woning bestaat uit een woningwaarde (bv. 100-125) en een lijst met opties
function Woning(woningWaarde, opties)
{
	var mWaarde = woningWaarde;
	var mOpties = createOpties();
	
	// Maak 'waarde', 'optie', en 'woningOpties' public
	this.waarde = waarde;
	this.optie = optie;
	this.woningOpties = woningOpties;
	
	function createOpties()
	{
		var optieArray = new Array();
		
		for (var i = 0; i < opties.length; i++)
		{
			var optie = opties[i];
			
			// Speciaal voor IE: Bij de test werd er 1 entry te veel gevonden!
			if (optie == undefined)
			{
				continue;
			}
			
			var naam = optie['naam'];
			var bedrag = optie['bedrag'];
			var infoid = optie['id'];
			
			// Sla de optie op in de array onder de key 'naam'
			optieArray[naam] = new Optie(naam, bedrag, infoid);
		}
		
		return optieArray;
	}
	
	function optie(naam)
	{
		return mOpties[naam];
	}
	
	function waarde()
	{
		return mWaarde;
	}
	
	function woningOpties()
	{
		return mOpties;
	}
}

// De database met woningen. Woningen is een JSON object
function Database(woningen)
{
	var mWoningen = createWoningen();
	
	// Maak 'woning' en 'waardes' public
	this.woning = woning;
	this.waardes = waardes;
	
	function createWoningen()
	{
		var woningArray = new Array();
		
		for (var i = 0; i < woningen.length; i++)
		{
			var woning = woningen[i];
			
			var waarde = woning['waarde'];
			var opties = woning['opties'];
			
			// Maak een nieuwe woning aan met een woningwaarde en de opties
			var w = new Woning(waarde, opties);
			
			woningArray[waarde] = w;
		}
		
		return woningArray;
	}
	
	function woning(waarde)
	{
		return mWoningen[waarde];
	}
	
	function waardes()
	{
		// Het aanmaken van de array met alle waardes gebeurt maar een keer
		if (this.mWaardes == undefined)
		{
			this.mWaardes = new Array();
			
			for (var waarde in mWoningen)
			{
				var woning = mWoningen[waarde];
				
				this.mWaardes[this.mWaardes.length] = woning.waarde();
			}
		}
		
		return this.mWaardes;
	}
}

// De controller voor het afhandelen van events. Db is een instantie van Database
function Controller(db)
{
	var waardes = db.waardes();
	
	function setup()
	{
		// De select voor alle woningwaardes
		var element = document.getElementById('waardes');
		
		// Maak de select leeg
		element.options.length = 0;
		
		// De eerste optie is de uitleg
		element.options[0] = new Option('Selecteer de waarde van uw huis', '0');
		
		for (var i = 0; i < waardes.length; i++)
		{
			var waarde = waardes[i];
			
			element.options[i + 1] = new Option(waarde, waarde);
		}
		
		element.onchange = waardes_OnChange;
	}
	
	// Een helper om het element waarvandaan de event is gekomen op te halen.
	// Er wordt uitgegaan van een valid event object
	function getEventElement(e)
	{
		var element;
	
		// Er zijn twee manieren om het element op te halen: e.target en e.srcElement (alleen voor IE)
		if (e.target)
		{
			element = e.target;
		}
		else if (e.srcElement)
		{
			element = e.srcElement;
		}
		
		// Safari bug
		if (element.nodeType == 3) element = element.parentNode;
		
		return element;
	}
	
	function waardes_OnChange(e)
	{
		// Of e is al een geldig event-object of maak er window.event van (speciaal voor IE).
		e = e || window.event;
		
		// Het element dat voor de event heeft gezorgd
		var element = getEventElement(e);
		var value = element.options[element.selectedIndex].value;
		
		// Haal de woning op die bij de geselecteerde optie hoort
		var woning = db.woning(value);
		
		// Maak het formulier aan
		populateOptions(woning);
	}
	
	function populateOptions(woning)
	{
//		var total = document.getElementById('total');
		var optiesElement = document.getElementById("opties");
		optiesElement.innerHTML = "";
//		total.innerHTML = "&euro; 0";
//		total.attributes['current'].value = 0;

		// Dit kan gebeuren als er de omschrijving-optie wordt geselecteerd
		if (woning == undefined)
		{
			return;
		}
		
		// Alle opties die bij deze woning hoort
		var opties = woning.woningOpties();
		
		for (var naam in opties)
		{
			var optie = opties[naam];
			// Voeg de optie toe aan de select
			attachOptie(optiesElement, optie);
		}
		
		document.getElementById("prijsklasse_totaal").value = document.getElementById("waardes").value;	

		updateSelectedList(document.verkoop.elements);
	}
	
	function attachOptie(element, optie)
	{
		/**
		 * De structuur is als volgt:
		 * <div id="opties">
		 *     <div>
		 *         <div class="label">
		 *             <label title="{Naam van de optie}">
		 *                 <input bedrag="{Bedrag van optie}" type="checkbox" />
		 *                 {Naam van de optie}
		 *             </label>
		 *         </div>
		 *         <div class="bedrag">&euro; {Bedrag van optie}</div>
		 *     </div>
		 * </div>
		 **/
		var text = optie.text();
		var text = " " + text;
		var value = optie.value();
		var infoId = optie.infoId();
		
		var div = document.createElement("div");

		var labelDiv = document.createElement("div");
		labelDiv.className = "label";

		var label = document.createElement("label");
		label.title = text;
		
		var informatielink = document.createElement("a"); 
		informatielink.onclick = function() { showInfo("/info/"+ infoId +".html"); };
		informatielink.className = 'infolink';
		
		var img = document.createElement('img');
        img.setAttribute('src', '../images/informatie.jpg');

		informatielink.appendChild(img);
 
		var checkbox = document.createElement("input");
		checkbox.setAttribute('bedrag', value * 1.02);
		checkbox.setAttribute('naam', text);
		checkbox.setAttribute('infoId', infoId);
		
		checkbox.type = "checkbox";
		checkbox.onclick = updateTotal;
		checkbox.name = "checkboxes[]";
		checkbox.value = text;
		
		var textElement = document.createTextNode(text);
		
		label.appendChild(informatielink);
		label.appendChild(checkbox);

		label.appendChild(textElement);
		labelDiv.appendChild(label);

		div.appendChild(labelDiv);
		
		/*var bedrag = document.createElement("div");
		bedrag.className = "bedrag";
		bedrag.innerHTML = "&euro; " + value;
		div.appendChild(bedrag);*/
		element.appendChild(div);
		
		var gepost = document.getElementById('extern').value;
		if(gepost)
		{
			var geklikteopties = new Array();
			geklikteopties[3] = "1";
			geklikteopties[4] = document.getElementById('intranet').value;
			geklikteopties[5] = document.getElementById('fotopresentatie').value;
			geklikteopties[6] = document.getElementById('verkooptekst').value;
			geklikteopties[7] = document.getElementById('brochure').value;
			geklikteopties[8] = document.getElementById('verkoopbord').value;
			geklikteopties[9] = document.getElementById('woonhuisfilm').value;
			geklikteopties[10] = document.getElementById('hoogtefoto').value;
			geklikteopties[11] = document.getElementById('bouwkeuring').value;
			geklikteopties[12] = document.getElementById('bezichtigingoverdag').value;
			geklikteopties[13] = document.getElementById('bezichtigingsavonds').value;
			geklikteopties[14] = document.getElementById('koopakte').value;
			geklikteopties[15] = document.getElementById('notaris').value;
			geklikteopties[16] = document.getElementById('hypotheekadviseur').value;
			geklikteopties[17] = document.getElementById('verzekeringsadvies').value;
			
			if(geklikteopties[infoId] == "1")
			{
				checkbox.setAttribute('checked',true);     
			}
		}
		else
		{
			if(infoId == "9" || infoId == "10" || infoId == "11")
			{
				
			}
			else
			{
				checkbox.setAttribute('checked',true);
			}
			if(infoId == "3")
			{
				checkbox.setAttribute('disabled',true);
			}
		}
	}
	
	function updateTotal(e)
	{
		e = e || window.event;
		var element = getEventElement(e);
		
		if (element.value == " Extra bezichtigingen buiten kantooruren")
		{
			if (element.checked) 
			{
				document.verkoop.elements[30].checked = true;
			}
		}
		else if(element.value == " Bezichtigingen tijdens kantooruren")
		{
			if (element.checked == false)
			{
				document.verkoop.elements[31].checked = false;
			}
		}
		
		updateSelectedList(document.verkoop.elements);
	}
	
	function updateSelectedList(fields)
	{
		var lijst = document.getElementById('gekozenopties_totaal');

		var totaal = 0;
		lijst.innerHTML = '';
		
		var lijstje = "";
		
		for (i = 0; i < fields.length; i++)
		{
			if (fields[i].checked && fields[i].name == "checkboxes[]")
			{
				naam = fields[i].attributes['naam'].value;
				bedrag = fields[i].attributes['bedrag'].value;
				infoId = fields[i].attributes['infoId'].value;
				totaal += parseFloat(bedrag);
	
				lijst.innerHTML += '<li class="grijs" >' + naam + ' </li>';
				
				lijstje = lijstje + "<br />- " + naam;
			}
		}
		
		document.getElementById('lijstkeuze').value = lijstje + "<br />";
		document.getElementById('total_kort').innerHTML = "&euro; " + number_format(totaal, 2, ',', '.');
		document.getElementById('total2').value = number_format(totaal, 2, ',', '.');
	}

	// Begin met de functie 'setup'
	return setup;
}

function validateMakelaardij()
{
	var validated = true;
	var melding;
	cijfers = "0123456789";
	letters = "ABCDEFGHIJKLMNOPQRSTUWVXYZ";
	
	var form = document.forms['verkoop'];
	
//voornaam
	if (form.naam.value.length < 1)
	{
		melding = "Verplicht veld!";
		validated = false;
	}
	else
	{
		melding = "";	
	}
	document.getElementById("foutNaam").innerHTML = melding;



//telefoonnummer
	if (form.telefoon.value.length < 1)
		{
			 	melding = "Verplicht veld!";
				validated = false;
		}
		else
		{
			melding="";
		}
	
		document.getElementById("foutTelefoon").innerHTML = melding;	
		
//email	
	if (form.email.value.length > 0)
	{
		if (form.email.value.indexOf("@") > 0  && form.email.value.indexOf(".") > 0  )
		{
			melding = "";			
		}
		else
		{
			melding = "Verplicht veld!";
			validated = false;
		}
	}
	else
	{
		melding = "Verplicht veld!";
		validated = false;
	}
	
	document.getElementById("foutEmail").innerHTML = melding;	
	
	if (validated)
	{
		form.submit();
	}
}