var GarantSchuh = new Class({
	initialize: function(oCalc) {
		this.calc = oCalc;
		this.init();
		this.setEvents();
	}
	
	,init: function() {
		$$('.premie_error').hide();
	}
	
	,setEvents: function() {
		var me = this;
		
		// form events
		//----------------------------------------------------------------------
		$('home').getElements('input[type=radio]').addEvent('click', this.calcPremie.bind(this));
		$('home').getElements('input[type=checkbox]').addEvent('click', this.calcPremie.bind(this));
		$('home').getElements('input[type=text]').addEvent('keyup', this.calcPremie.bind(this));
		//$('sm_insurance_request').addEvent('click', this.sendInsuranceForm.bind(this));
		$('send').addEvent('click', this.sendInsuranceForm.bind(this));
		
		// show geld opties.
		//$('geld_ja').addEvent('click', function() {$(geld_opties').show();});
		$('glas_ja').addEvent('click', function() {
			if (this.get('checked')) {
				$('glas_opties').show();
			}
			else {
				$('lichtreclame').checked = false;
				$('glas_opties').hide();
			}
		});
		$('glas_opties').hide();
		
		// optstallen (show herbouwwaarde)
		$('opstallen_ja').addEvent('click', function() { 
			$('herbouwwaarde').set('value', '0');
			if(this.get('checked')) 
				$('herbouwaarde_opt').show();
			else
				$('herbouwaarde_opt').hide();
		});
		
		$('herbouwaarde_opt').hide();
		
		$('geld_ja').addEvent('click', function() { 
			$('personen').set('value', '1'); 
		});
		
		// ongevallen (show ongevallen opties)
		$('ongevallen_ja').addEvent('click', function() { 

			if(this.get('checked')) 
				$('ongevallen_opties').show();
			else
				$('ongevallen_opties').hide();

		});
		$('ongevallen_opties').hide();
		
		$('menu').getElements('a').addEvent('click', function(){
			me.hideExtraOptions();
		});
		
		// hide/show extra options.
		$('hide_extra_options').hide();
		$('show_extra_options').addEvent('click',function(oEv) {
			$('oppervlakte2').set('value', $('oppervlakte').get('value'));
			$('extra_options').show();
			this.hide();
			$('overlay').show();
			$('hide_extra_options').show();
			me.calcPremie();
		});
		$('oppervlakte2').addEvent('keyup', function(){
			$('oppervlakte').set('value', $('oppervlakte2').get('value'));
			me.calcPremie();
		});
		$('num_shops').addEvent('keyup',this.calcPremie.bind(this));
		$('extra_options').getElements('input').addEvent('click', this.calcPremie.bind(this));
		$('extra_options').getElements('input').addEvent('keyup', this.calcPremie.bind(this));
		$('extra_options').hide();
		$('hide_extra_options').addEvent('click', function(oEv){
				me.hideExtraOptions();
		});
		
		// Add hover class to hoverable items.
		document.getElements('.hoverable').addEvent('mouseover', function(oEv){
			this.addClass('hover');
		});
		document.getElements('.hoverable').addEvent('mouseout', function(oEv){
			this.removeClass('hover');
		});
		
		// Show/hide message 
		$('total_premie_header').addEvent('mouseenter',function(oEv) {
			$('total_premie_msg').show();
		});
		$('total_premie_header').addEvent('mouseleave',function(oEv) {
			$('total_premie_msg').hide();
		});
		$('omzet_header').addEvent('mouseenter',function(oEv) {
			$('omzet_msg').show();
		});
		$('omzet_header').addEvent('mouseleave',function(oEv) {
			$('omzet_msg').hide();
		});
		
		// omzet format
		//$('omzet').addEvent("focus", this.cleanOmzet.bind(this));
		//$('omzet').addEvent("blur", this.formatOmzet.bind(this));
		this.setMoneyField($('omzet'));
		this.setMoneyField($('herbouwwaarde'));
	}
	
	
	
	,calcPremie:function(oEv) {
		var me = this;
		this.getPremie(function(oResult){
			if (oResult.hasOwnProperty('totaal')) {
				var premie = (oResult.totaal > 0) 
						? new Number(oResult['totaal_round']).round()
						: 0;
				//console.log(me.formatAsMoney(premie));
				$('prijs').set('text'," " +me.formatAsMoney(premie));
			}
		});
	}
	
	,getPremie: function(fReady) {
		var info = this.getPremieInfo();
		this.validatePremie(info);
		fReady(this.calc.calc(info));
	}
	
	,validatePremie: function(oInfo) {
		$$('.premie_error').hide();
		var return_value = true;
		if (oInfo.opstallen && oInfo.herbouwwaarde == 0) {
			return_value = false;
		}
		if (oInfo.ongevallen && oInfo.personen == 0) {
			$('ongevallen_error').show();
			return_value = false;
		}
		return return_value;
	}
	
	,getPremieInfo:function() {
		var omzet = this.getCleanOmzet();
		var herbouwwaarde = this.getCleanHerbouwWaarde();
		var info = {
			"avb":$('avb_ja').get('checked')
			,"geld":$('geld_ja').get('checked') 
			,"opstallen":$('opstallen_ja').get('checked')
			,"ongevallen":$('ongevallen_ja').get('checked')
			,"transport":$('transport_ja').get('checked')
			,"glas":$('glas_ja').get('checked')
			,"lichtreclame":$('lichtreclame').get('checked') && $('glas_ja').get('checked')
			,"omzet":omzet
			,"personen":new Number($('personen').get('value')).round(2) || 0
			,"herbouwwaarde": herbouwwaarde || 0
			,"oppervlakte":$('oppervlakte').get('value')
			,"aantal_winkels":$('num_shops').get('value') || 1
		};
		return info;
	}
	
	,sendInsuranceForm: function(oEv) {
		oEv.stop();
		var info = this.getPremieInfo();
		if (!this.validatePremie(info)) {
			return;
		}
				
		// add the user info
		var fields = [	'name', 'bedrijfsnaam', 'email'
						,'telefoonnummer', 'adres', 'postcode'
						,'plaats'
					 ];
		var validated = true;
		
		fields.each(function(sName) {
			if(!$(sName) || $(sName).get('value').trim() == "") {
				validated = false;
			}
			info[sName] = $(sName).get('value');
		});
		
		if (!validated) {
			return;
		}
		
		var req = new Request.JSON({
			"url":"/control/garantschuh/calc/request"
			,onSuccess:function(oResult) {
				$('offerte_send').show();
			}
		}).post(info);
	}
	,hideExtraOptions: function(oEv) {
		$('oppervlakte').set('value', $('oppervlakte2').get('value'));
		this.calcPremie();
		$('extra_options').hide();
		$('overlay').hide();
		$('hide_extra_options').hide();
		$('show_extra_options').show();
	}
	
	//-------------------------- Money formatting -----------------------------
	,setMoneyField: function(oEl) {
		oEl.store('gs', this);
		oEl.addEvent("focus", this.cleanMoneyField);
		oEl.addEvent("blur", this.formatMoneyField);
	}
	/*
	,cleanOmzet: function() {
		$('omzet').set('value', this.getCleanOmzet());
	}
	*/
	,getCleanOmzet: function() {
		var value = $('omzet').get('value');
		return this.cleanMoneyFormat(value);
	}
	,getCleanHerbouwWaarde: function(){
		var value = $('herbouwwaarde').get('value');
		return this.cleanMoneyFormat(value);
	}
	
	/*
	,formatOmzet: function() {
		var value = $('omzet').get('value');
		value = this.formatAsMoney(value);
		$('omzet').set('value', value);
	}
	*/
		
	,cleanMoneyField: function(oEv) {
		this.set(
			'value'
			,this.retrieve('gs').cleanMoneyFormat(this.get('value'))
		);
	}
	,formatMoneyField: function(oEv) {
		this.set(
			'value'
			,this.retrieve('gs').formatAsMoney(this.get('value'))
		);
	}
	
	,cleanMoneyFormat: function(nValue) {
		var value = nValue;
		value = value.replace(/(\.)*/gi,"");
		value = value.replace(",-","");
		return value;
	}
	
	,formatAsMoney: function(num) {
		num = num.toString().replace(/\$|\,/g,'');
		if(isNaN(num))
		num = "0";
		sign = (num == (num = Math.abs(num)));
		num = Math.floor(num*100+0.50000000001);
		cents = num%100;
		num = Math.floor(num/100).toString();
		if(cents<10)
		cents = "0" + cents;
		for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
		num = num.substring(0,num.length-(4*i+3))+'.'+
		num.substring(num.length-(4*i+3));
		return (((sign)?'':'-') + '' + num + ',-');
		//return (((sign)?'':'-') + '' + num + ',' + cents);
	}
});


window.size = function()
{
	var w = 0;
	var h = 0;

	//IE
	if(!window.innerWidth)
	{
		//strict mode
		if(!(document.documentElement.clientWidth == 0))
		{
			w = document.documentElement.clientWidth;
			h = document.documentElement.clientHeight;
		}
		//quirks mode
		else
		{
			w = document.body.clientWidth;
			h = document.body.clientHeight;
		}
	}
	//w3c
	else
	{
		w = window.innerWidth;
		h = window.innerHeight;
	}
	return {width:w,height:h};
}

window.addEvent('domready', function() {
	var gs_calc = new GarantSchuhCalc();
	var gs = new GarantSchuh(gs_calc);	
	gs.calcPremie();
	
	var img = $('background-image');
	img.hide();
	var size = function() {
	  
	  img.set('height', window.getScrollHeight());
	  img.set('width', window.size().width);
	  
	  img.setStyles({
	  	"width":window.size().width
	  	,"height": window.getScrollHeight()	 
	  });
	  img.show();
	}
	
	window.addEvent('resize',size);
	size();
});


