	/**
	 * Class
	 * 
	 * Calculator / Risk Package
	 * 
	 * This class contain method and parameters 
	 * for calculation of Risk Package
	 * 
	 * @author Marko Lecic / Eximius Solutions
	 */
	function calculatorRiskPackage()
	{
		// define class params
		
		// global
		this.objYearsOld 				= 0; 	// how old is object (years)
		this.insDuration 				= 0; 	// insurance duration (years)
		this.objectType					= ''; 	// object insurance type
		this.inhabitedHow				= ''; 	// how the object is inhabited
		this.inhabitedRate				= 0; 	// multiple rate / InhabitedHow > Inssurance Duration
		this.kmz						= 0; 	// set kmz package
		this.kmzRate					= 0; 	// multiple rate / Kzm > Inssurance Duration
		
		// calculation
		
		// flat
		this.flatArea					= 0; 	// flat area
		this.flatMeterPrice				= 0; 	// price of square meter
		this.flatTotalPrice				= 0; 	// total flat prices
		
		// house
		this.houseArea					= 0; 	// house area / total
		this.houseMeterPrice			= 0; 	// price of square meter / total
		this.houseTotalPrice			= 0; 	// total house price
		
		// object insurance price
		this.objectInsPrice; 	// object insurance price; flat/house
		this.objectInsStuffPrice; 	// object insurance stuff price; furniture, tech, etc...		
		this.objectTotalInsPrice; 	// total insurance price; objectInsPrice + objectInsStuffPrice
		
		
		/**
		 * Calculator / Risk Package
		 * 
		 * Check if object years is in insurance range
		 * Object needs to be less than 60 years old
		 * 
		 * @param years		= int
		 * @return none
		 */
		this.calcObjectYears = function calcObjectYears(years){
		
			var years = parseInt(years);
			
			// set HTML elements to display or not
			// if success enable next question
			if( years == 60 || years == 0)
			{
				$('#objectOld div.error').slideDown('normal');
				
				document.getElementById('insDuration').disabled 		= true;
				document.getElementById('insObject').disabled 			= true;
				document.getElementById('objectInhabited').disabled 	= true;
				document.getElementById('objectFiremen').disabled 		= true;
				
				this.objYearsOld = 0; // set value
			}
			else
			{
				$('#objectOld div.error').css('display', 'none');
				
				document.getElementById('insDuration').disabled 		= false;
				
				this.objYearsOld = years; // set value				
			}
		}
		
		/**
		 * Calculator / Risk Package
		 * 
		 * Check if insurance duration is set
		 * 
		 * @param years		= int
		 * @return none
		 */
		this.calcInsDurationYears = function calcInsDurationYears(years){
			
			// set HTML elements to display or not
			// if success enable next question
			if( years != 0 )
			{		
				$('#insDuration div.error').css('display', 'none');
				
				document.getElementById('insObject').disabled = false;
					
				this.insDuration = years; // set value				
			}
			else
			{
				$('#insDuration div.error').slideDown('normal');
				
				document.getElementById('insObject').disabled 			= true;
				document.getElementById('objectInhabited').disabled 	= true;
				document.getElementById('objectFiremen').disabled 		= true;
				
				this.insDuration = 0; // set value	
			}
			
		}
		
		/**
		 * Calculator / Risk Package
		 * 
		 * Activate form Object Type | Flat / House
		 * 
		 * @param type		= string
		 * @return none
		 */
		this.calcActivateObjectType = function calcActivateObjectType(type){
			
			// activate object type form
			switch(type)
			{
				case 'flat':
					
					$('#insObject div.insObjectFlatForm').slideDown('slow');
					$('#insObject div.insObjectHouseForm').css('display', 'none');
					
					$('#insObject div.error').css('display', 'none');
					
					document.getElementById('objectInhabited').disabled = false;
					
					this.objectType = type;
					
				break;
				
				case 'house':
					
					$('#insObject div.insObjectHouseForm').slideDown('slow');
					$('#insObject div.insObjectFlatForm').css('display', 'none');
					
					$('#insObject div.error').css('display', 'none');
					
					document.getElementById('objectInhabited').disabled = false;
					
					this.objectType = type;
					
				break;
				
				default:
					
					$('#insObject div.error').slideDown('normal');
					$('#insObject div.insObjectHouseForm').css('display', 'none');
					$('#insObject div.insObjectFlatForm').css('display', 'none');
					
					document.getElementById('objectInhabited').disabled = true;
					document.getElementById('objectFiremen').disabled = true;
				
				break;
			}			
		}
		
		/**
		 * Calculator / Risk Package
		 * 
		 * Check if object inhabited is set
		 * 
		 * @param type		= string
		 * @return none
		 */
		this.calcObjInabitedHow = function calcObjInabitedHow(type){
			
			// set HTML elements to display or not
			// if success enable next question
			if( type != 0 )
			{		
				$('#objectInhabited div.error').css('display', 'none');
				
				document.getElementById('objectFiremen').disabled = false;
					
				this.inhabitedHow = type; // set value		
				
				// set inhabited rate for further calc
				this.inhabitedRate = this.callUrl(site_url + 'bs/calculatorRiskPackage/calcInhabitedRate/insDuration/' + this.insDuration + '/inhabitedHow/' + this.inhabitedHow);
				
			}
			else
			{
				$('#objectInhabited div.error').slideDown('normal');
				
				document.getElementById('objectFiremen').disabled = true;
				
				this.inhabitedHow = ''; // set value	
			}
			
		}
		
		/**
		 * Calculator / Risk Package
		 * 
		 * Check answer for fireman and set KMZ
		 * 
		 * @param duration		= string
		 * @return none
		 */
		this.calcObjFiremanUnit = function calcObjFiremanUnit(duration){
			
			// set HTML elements to display or not
			// if success enable next question
			if( duration != 0 )
			{		
				$('#objectFiremen div.error').css('display', 'none');
				
				this.kmz = duration; // set value	
				
				// set kzm rate for further calc
				this.kzmRate = this.callUrl(site_url + 'bs/calculatorRiskPackage/calcKZMRate/kzm/' + this.kmz + '/insDuration/' + this.insDuration);
				
			}
			else
			{
				$('#objectFiremen div.error').slideDown('normal');
				
				this.kmz = ''; // set value	
			}
			
		}
			
		/**
		 * Calculator / Risk Package
		 * 
		 * Helper method for asynhron calls
		 * 
		 * @param url		= string to call (url); URL EXAMPLE: lang flag > class > method > params (optional)
		 * @return none
		 */
		this.callUrl = function callUrl(url){
			
			var urlData = null;
			
			$.ajax({
				url: url,
				type: 'get',
				async: false,
				success: function(data) {
					urlData = data;
				}
			});	
			
			return urlData;
			
		}
		
		/**
		 * Calculator / Risk Package
		 * 
		 * Calculate flat price 
		 * CALCULATION: FlatArea * FlatPrice = TOTAL
		 * 
		 * @return
		 */
		this.calcFlat = function calcFlat(){
			
			var insObjectFlatArea 		= parseFloat( document.getElementById('insObjectFlatArea').value );
			var insObjectFlatPrice		= parseFloat( $("#calculatorRiskPackage input[name='insObjectFlatPrice']:checked").val() );
						
			// check for user price
			var insObjectFlatUserPrice	= parseFloat( document.getElementById('insObjectFlatUserPrice').value );
			
			this.flatArea 				= insObjectFlatArea;
			this.flatMeterPrice 		= (insObjectFlatUserPrice != '') ? insObjectFlatUserPrice : insObjectFlatPrice;
						
			// set flat meter price
			if( !isNaN(insObjectFlatUserPrice) )
			{
				if( insObjectFlatUserPrice < flatAreaPrice2 )
				{
					alert('Cijena mora biti veća od ponuđenih.');
					
					return false;
				}
				
				this.flatMeterPrice = insObjectFlatUserPrice;
			}
			else
			{
				this.flatMeterPrice = insObjectFlatPrice;
			}
						
			// calculation
			this.flatTotalPrice			= parseFloat( this.flatArea * this.flatMeterPrice );
			
		}
		
		/**
		 * Calculator / Risk Package
		 * 
		 * Calculate house price 
		 * CALCULATION: calculate each house area and take 20% off
		 * 
		 * @return
		 */
		this.calcHouse = function calcHouse(){
			
			//////////////////////////////////////
			// PODRUM
			//////////////////////////////////////
				var insObjectHousePodrumArea 		= parseFloat( document.getElementById('insObjectHousePodrumArea').value );
				var insObjectHousePodrumPrice		= parseFloat( $("#calculatorRiskPackage input[name='insObjectHousePodrumPrice']:checked").val() );
							
				// check for user price
				var insObjectHousePodrumUserPrice	= parseFloat( document.getElementById('insObjectHousePodrumUserPrice').value );
				
				
				// check if values exist
				if( insObjectHousePodrumArea != '' && 
					insObjectHousePodrumPrice != '' || 
					insObjectHousePodrumUserPrice != '' )
				{		
					var podrumArea 						= insObjectHousePodrumArea;
					var podrumPrice		 				= (insObjectHousePodrumUserPrice != '') ? insObjectHousePodrumUserPrice : insObjectHousePodrumPrice;
								
					// set podrum meter price
					if( !isNaN(insObjectHousePodrumUserPrice) )
					{
						if( insObjectHousePodrumUserPrice < houseAreaPodrumPrice2 )
						{
							alert('Cijena mora biti veća od ponuđenih.');
							
							return false;
						}
						
						podrumPrice = insObjectHousePodrumUserPrice;
					}
					else
					{
						podrumPrice = insObjectHousePodrumPrice;
					}
										
					// calculation
					podrumTotalPrice			= parseFloat( podrumArea * podrumPrice );
				}
				
			//////////////////////////////////////
			// PRIZEMLJE
			//////////////////////////////////////
				var insObjectHousePrizemljeArea 		= parseFloat( document.getElementById('insObjectHousePrizemljeArea').value );
				var insObjectHousePrizemljePrice		= parseFloat( $("#calculatorRiskPackage input[name='insObjectHousePrizemljePrice']:checked").val() );
								
				// check for user price
				var insObjectHousePrizemljeUserPrice	= parseFloat( document.getElementById('insObjectHousePrizemljeUserPrice').value );
					
					
				// check if values exist
				if( insObjectHousePrizemljeArea != '' && 
					insObjectHousePrizemljePrice != '' || 
					insObjectHousePrizemljeUserPrice != '' )
				{		
					var prizemljeArea			= insObjectHousePrizemljeArea;
					var prizemljePrice	 		= (insObjectHousePrizemljeUserPrice != '') ? insObjectHousePrizemljeUserPrice : insObjectHousePrizemljePrice;
									
					// set prizemlje meter price
					if( !isNaN(insObjectHousePrizemljeUserPrice) )
					{
						if( insObjectHousePrizemljeUserPrice < houseAreaPrice2 )
						{
							alert('Cijena mora biti veća od ponuđenih.');
							
							return false;
						}
						
						prizemljePrice = insObjectHousePrizemljeUserPrice;
					}
					else
					{
						prizemljePrice = insObjectHousePrizemljePrice;
					}		
						
					// calculation
					prizemljeTotalPrice			= parseFloat( prizemljeArea * prizemljePrice );	
				}
			
			//////////////////////////////////////
			// 1. SPRAT
			//////////////////////////////////////
				var insObjectHouse1spratArea 		= parseFloat( document.getElementById('insObjectHouse1spratArea').value );
				var insObjectHouse1spratPrice		= parseFloat( $("#calculatorRiskPackage input[name='insObjectHouse1spratPrice']:checked").val() );
									
				// check for user price
				var insObjectHouse1spratUserPrice	= parseFloat( document.getElementById('insObjectHouse1spratUserPrice').value );
										
				// check if values exist
				if( insObjectHouse1spratArea != '' && 
					insObjectHouse1spratPrice != '' || 
					insObjectHouse1spratUserPrice != '' )
				{		
					var sprat1Area			= insObjectHouse1spratArea;
					var sprat1Price	 		= (insObjectHouse1spratUserPrice != '') ? insObjectHouse1spratUserPrice : insObjectHouse1spratPrice;
									
					// set 1. sprat meter price
					if( !isNaN(insObjectHouse1spratUserPrice) )
					{
						if( insObjectHouse1spratUserPrice < houseAreaPrice2 )
						{
							alert('Cijena mora biti veća od ponuđenih.');
								
							return false;
						}
							
						sprat1Price = insObjectHouse1spratUserPrice;
					}
					else
					{
						sprat1Price = insObjectHouse1spratPrice;
					}		
							
					// calculation
					sprat1TotalPrice			= parseFloat( sprat1Area * sprat1Price );
				}
				
			//////////////////////////////////////
			// 2. SPRAT
			//////////////////////////////////////
				var insObjectHouse2spratArea 		= parseFloat( document.getElementById('insObjectHouse2spratArea').value );
				var insObjectHouse2spratPrice		= parseFloat( $("#calculatorRiskPackage input[name='insObjectHouse2spratPrice']:checked").val() );
										
				// check for user price
				var insObjectHouse2spratUserPrice	= parseFloat( document.getElementById('insObjectHouse2spratUserPrice').value );
											
				// check if values exist
				if( insObjectHouse2spratArea != '' && 
					insObjectHouse2spratPrice != '' || 
					insObjectHouse2spratUserPrice != '' )
				{		
					var sprat2Area			= insObjectHouse2spratArea;
					var sprat2Price	 		= (insObjectHouse2spratUserPrice != '') ? insObjectHouse2spratUserPrice : insObjectHouse2spratPrice;
										
					// set 2. sprat meter price
					if( !isNaN(insObjectHouse2spratUserPrice) )
					{
						if( insObjectHouse2spratUserPrice < houseAreaPrice2 )
						{
							alert('Cijena mora biti veća od ponuđenih.');
									
							return false;
						}
								
						sprat2Price = insObjectHouse2spratUserPrice;
					}
					else
					{
						sprat2Price = insObjectHouse2spratPrice;
					}		
								
					// calculation
					sprat2TotalPrice			= parseFloat( sprat2Area * sprat2Price );	
				}
				
			//////////////////////////////////////
			// 3. SPRAT
			//////////////////////////////////////
				var insObjectHouse3spratArea 		= parseFloat( document.getElementById('insObjectHouse3spratArea').value );
				var insObjectHouse3spratPrice		= parseFloat( $("#calculatorRiskPackage input[name='insObjectHouse3spratPrice']:checked").val() );
											
				// check for user price
				var insObjectHouse3spratUserPrice	= parseFloat( document.getElementById('insObjectHouse3spratUserPrice').value );
												
				// check if values exist
				if( insObjectHouse3spratArea != '' && 
					insObjectHouse3spratPrice != '' || 
					insObjectHouse3spratUserPrice != '' )
				{		
					var sprat3Area			= insObjectHouse3spratArea;
					var sprat3Price	 		= (insObjectHouse3spratUserPrice != '') ? insObjectHouse3spratUserPrice : insObjectHouse3spratPrice;
											
					// set 3. sprat meter price
					if( !isNaN(insObjectHouse3spratUserPrice) )
					{
						if( insObjectHouse3spratUserPrice < houseAreaPrice2 )
						{
							alert('Cijena mora biti veća od ponuđenih.');
										
							return false;
						}
									
						sprat3Price = insObjectHouse3spratUserPrice;
					}
					else
					{
						sprat3Price = insObjectHouse3spratPrice;
					}		
									
					// calculation
					sprat3TotalPrice			= parseFloat( sprat3Area * sprat3Price );		
				}
				
			//////////////////////////////////////
			// Mansarda
			//////////////////////////////////////
				var insObjectHouseMansardaArea 		= parseFloat( document.getElementById('insObjectHouseMansardaArea').value );
				var insObjectHouseMansardaPrice	= parseFloat( $("#calculatorRiskPackage input[name='insObjectHouseMansardaPrice']:checked").val() );
												
				// check for user price
				var insObjectHouseMansardaUserPrice	= parseFloat( document.getElementById('insObjectHouseMansardaUserPrice').value );
													
				// check if values exist
				if( insObjectHouseMansardaArea != '' && 
					insObjectHouseMansardaPrice != '' || 
					insObjectHouseMansardaUserPrice != '' )
				{		
					var mansardaArea		= insObjectHouseMansardaArea;
					var mansardaPrice 		= (insObjectHouseMansardaUserPrice != '') ? insObjectHouseMansardaUserPrice : insObjectHouseMansardaPrice;
												
					// set mansarda meter price
					if( !isNaN(insObjectHouseMansardaUserPrice) )
					{
						if( insObjectHouseMansardaUserPrice < houseAreaPrice2 )
						{
							alert('Cijena mora biti veća od ponuđenih.');
											
							return false;
						}
										
						mansardaPrice = insObjectHouseMansardaUserPrice;
					}
					else
					{
						mansardaPrice = insObjectHouseMansardaPrice;
					}	
										
					// calculation
					mansardaTotalPrice		= parseFloat( mansardaArea * mansardaPrice );
									
				}
						
				// calculate total house area
				var calcTotalHouseArea = 0;
				
				if( !isNaN(podrumArea) ) 		calcTotalHouseArea 	+= parseFloat(podrumArea);
				if( !isNaN(prizemljeArea) ) 	calcTotalHouseArea 	+= parseFloat(prizemljeArea);
				if( !isNaN(sprat1Area) ) 		calcTotalHouseArea 	+= parseFloat(sprat1Area);
				if( !isNaN(sprat2Area) ) 		calcTotalHouseArea 	+= parseFloat(sprat2Area);
				if( !isNaN(sprat3Area) ) 		calcTotalHouseArea 	+= parseFloat(sprat3Area);
				if( !isNaN(mansardaArea) ) 		calcTotalHouseArea 	+= parseFloat(mansardaArea);
					
				this.houseArea					= calcTotalHouseArea;
								
				// calculate total house area price
				var calcTotalHouseMeterPrice = 0;
				
				if( !isNaN(podrumPrice) ) 		calcTotalHouseMeterPrice 	+= parseFloat(podrumPrice);
				if( !isNaN(prizemljePrice) ) 	calcTotalHouseMeterPrice 	+= parseFloat(prizemljePrice);
				if( !isNaN(sprat1Price) ) 		calcTotalHouseMeterPrice 	+= parseFloat(sprat1Price);
				if( !isNaN(sprat2Price) ) 		calcTotalHouseMeterPrice 	+= parseFloat(sprat2Price);
				if( !isNaN(sprat3Price) ) 		calcTotalHouseMeterPrice 	+= parseFloat(sprat3Price);
				if( !isNaN(mansardaPrice) ) 	calcTotalHouseMeterPrice 	+= parseFloat(mansardaPrice);
					
				this.houseMeterPrice			= calcTotalHouseMeterPrice;
				
				// calculate total house price
				var calcTotalHousePrice = 0;
				
				if( !isNaN(podrumTotalPrice) ) 		calcTotalHousePrice 	+= parseFloat(podrumTotalPrice);
				if( !isNaN(prizemljeTotalPrice) ) 	calcTotalHousePrice 	+= parseFloat(prizemljeTotalPrice);
				if( !isNaN(sprat1TotalPrice) ) 		calcTotalHousePrice 	+= parseFloat(sprat1TotalPrice);
				if( !isNaN(sprat2TotalPrice) ) 		calcTotalHousePrice 	+= parseFloat(sprat2TotalPrice);
				if( !isNaN(sprat3TotalPrice) ) 		calcTotalHousePrice 	+= parseFloat(sprat3TotalPrice);
				if( !isNaN(mansardaTotalPrice) ) 	calcTotalHousePrice 	+= parseFloat(mansardaTotalPrice);
					
				this.houseTotalPrice = calcTotalHousePrice;
				
		}
		
		/**
		 * Calculator / Risk Package
		 * 
		 * Validate email
		 * 
		 * @return boolean
		 */	
		this.checkEmail = function checkEmail(eMailInput)
		{			
			if(eMailInput != '')
			{
				var eMailReg = new RegExp("^[0-9a-zA-Z\.]+@[0-9a-zA-Z]+[\.]{1}[0-9a-zA-Z]+[\.]?[0-9a-zA-Z]+$");
	
				var eMailReturn = eMailReg.test(eMailInput);
				if(eMailReturn == false)
				{
					return false;
				}
				return true;
			}
		}
		
		/**
		 * Calculator / Risk Package
		 * 
		 * Calculate final insurance price
		 * 
		 * @return price
		 */		
		this.calcResult = function calcResult(){
			
			// calculate price
			switch( this.objectType )
			{
				case 'flat':
					
					this.calcFlat();
					
					// calculate object inssurance * kzm
					this.objectInsPrice = this.flatTotalPrice * this.kzmRate;
					
					// calculate stuff price
					// set area price for stuff; depending of inhabitance 
					switch( this.inhabitedHow )
					{
						case 'nastanjeno': 		var inhabitedPrice = flatRateNastanjen; break;
						case 'nenastanjeno': 	var inhabitedPrice = flatRateNenastanjen; break;
						case 'apartman': 		var inhabitedPrice = flatRateApartman; break;
					}
					
					this.objectInsStuffPrice = parseFloat(this.flatArea * inhabitedPrice) * this.inhabitedRate;
					
					// calculate total inssurance price
					this.objectTotalInsPrice = (this.objectInsPrice + this.objectInsStuffPrice) / 1000;				
				
				break;
				
				case 'house':
					
					this.calcHouse();
					
					// calculate object inssurance * kzm
					this.objectInsPrice = this.houseTotalPrice * this.kzmRate;
															
					// calculate stuff price
					// set area price for stuff; depending of inhabitance 
					switch( this.inhabitedHow )
					{
						case 'nastanjeno': 		var inhabitedPrice = houseRateNastanjen; break;
						case 'nenastanjeno': 	var inhabitedPrice = houseRateNenastanjen; break;
						case 'apartman': 		var inhabitedPrice = houseRateApartman; break;
					}
					
					this.objectInsStuffPrice = parseFloat( (this.houseArea * 0.80) * inhabitedPrice ) * this.inhabitedRate; // decrase the house area by 20%
					
					// calculate total inssurance price
					this.objectTotalInsPrice = (this.objectInsPrice + this.objectInsStuffPrice) / 1000;			
						
				break;	
					
			}
					
			// check if result exist and return
			if( this.objectTotalInsPrice != 'undefind' && this.objectTotalInsPrice != 0 && !isNaN(this.objectTotalInsPrice) )
			{
				var email = document.getElementById('userInfoEmail').value;
				
				// check if email has been entered
				if( this.checkEmail(email) == false)
				{
					alert('Unesite validnu e-mail adresu.');
					return false;
				}
				
				
				document.getElementById('totalInsPrice').value = this.objectTotalInsPrice.toFixed(2);
				
				return true;
			}
			else
			{
				alert('Unesite sve neophodne parametre.');
				
				return false;
			}
									
		}
		
	}
	
	// create an istance of calculator
	var calculatorRiskPackage = new calculatorRiskPackage();
