function CurrentSituation(dossierUpdater)
{
	this.dossierUpdater = dossierUpdater;
	
	this.hasContract = false;
	this.currentSupplier = 0;
	this.currentProduct = null;
	this.isAvailable = false;
	
	this.onChange = null;

	// Add the form elements as properties to this object.
	this.hasContractRadio = document.forms[0].HasContract;
	this.supplierListbox = document.forms[0].CurrentSupplier;
	this.productListbox = document.forms[0].CurrentProduct;
	this.availabilityRadio = document.forms[0].IsAvailable;

	// Add this object as a property named "situation" to the form elements.
	this.hasContractRadio[0].situation = this.hasContractRadio[1].situation = this;
	this.supplierListbox.situation = this;
	this.productListbox.situation = this;
	this.availabilityRadio[0].situation = this.availabilityRadio[1].situation = this;
		
	// One method that handles all the changes in the form.
	this.hasContractRadio[0].onclick = this.hasContractRadio[1].onclick = 
	this.supplierListbox.onchange =
	this.productListbox.onchange = 
	this.availabilityRadio[0].onclick = this.availabilityRadio[1].onclick =
	function()
	{
		var situation = this.situation;
		
		// Change the state of the situation based on the changed form element.
		switch(this.name)
		{
			case "HasContract" :
				situation.hasContract = (this.value == "true") ? true : false; 
				break;
			case "CurrentSupplier" :
				situation.currentSupplier = this.options[this.selectedIndex].value;
				break;
			case "CurrentProduct" :
				// This is a little hack. The currentProduct property should contain a product
				// object, but we only know the ID. After te callback we give this property
				// a proper value.
				situation.currentProduct = { id: this.options[this.selectedIndex].value };
				break;
			case "IsAvailable" :
				situation.isAvailable = (this.value == "true") ? true : false;
				break;
		}
		
		situation.dossierUpdater.callback = function(command, result)
		{
			situation.currentSupplier = result.data.currentSituation.supplier;
			situation.currentProduct = result.data.currentSituation.product;
			situation.fillProductListbox(result.data.products);
			situation.updateFormFields();

			document.getElementById("divNotComplete").style.display = (result.data.possibilities == null) ? "block" : "none";

			if(situation.onChange != null)
			{
				situation.onChange(situation, result.data.possibilities, result.data.choice);
			}
		}

		situation.dossierUpdater.setCurrentSituation(this.situation);
	}
}

CurrentSituation.prototype.hideHasCurrentContract = function()
{
	document.getElementById("divHasContract").style.display = "none";
}

CurrentSituation.prototype.hideAvailability = function()
{
	document.getElementById("divIsAvailable").style.display = "none";
}

CurrentSituation.prototype.initialize = function(information)
{
	// Set the situation fields
	this.hasContract = information.currentSituation.hasContract;
	this.currentSupplier = information.currentSituation.supplier;
	this.currentProduct = information.currentSituation.product;
	this.isAvailable = information.currentSituation.isAvailable;	

	// Initialize the current supplier and current product listboxes.
	this.fillSupplierListbox(information.suppliers);
	this.fillProductListbox(information.products);
	
	// Update the form fields
	this.updateFormFields();	
}

CurrentSituation.prototype.updateFormFields = function()
{
	this.hasContractRadio[0].checked = this.hasContract;
	this.hasContractRadio[1].checked = !this.hasContract;

	document.getElementById("divCurrentProduct").style.display = this.hasContract ? "block" : "none";
	
	for(var i=0; i<this.supplierListbox.options.length; i++)
	{
		if(this.supplierListbox.options[i].value == this.currentSupplier)
		{
			this.supplierListbox.selectedIndex = i; 
			break;
		}
	}
	
	if(this.currentProduct != null)
	{
		for(var i=0; i<this.productListbox.options.length; i++)
		{
			if(this.productListbox.options[i].value == this.currentProduct.id)
			{
				this.productListbox.selectedIndex = i;
				break;
			}
		}
	}
	
	this.availabilityRadio[0].checked = this.isAvailable;
	this.availabilityRadio[1].checked = !this.isAvailable;	
}

CurrentSituation.prototype.fillSupplierListbox = function(suppliers)
{
	this.supplierListbox.options.add(new Option("Kies uw leverancier...", "0"));
	
	for(var i=0; i<suppliers.length; i++)
	{
		var supplier = suppliers[i];
		this.supplierListbox.options.add(new Option(supplier.name, supplier.id));
	}
}

CurrentSituation.prototype.fillProductListbox = function(products)
{
	this.productListbox.options.length = 0;
	
	if(products != null)
	{
		this.productListbox.options.add(new Option("Kies uw huidige product...", "0"));	
		
		for(var i=0; i<products.length; i++)
		{
			var product = products[i];
			this.productListbox.options.add(new Option(product.name, product.id));		
		}
	}
}