﻿addNamespace('Application.Form');
addNamespace('Application.Calculator');
addNamespace('Application.Apply');

Application.Calculator = {
    update: function() {
        
        var success = function(msg) { 
			var updateAmount = msg.toString();
			updateAmount = updateAmount.replace(/\./g,',');
	        $('#premie').html(updateAmount);
	        
	        pageTracker._trackEvent('Pluspaketet', 'Update Calculator', '',amount);
        }
        var failed = function(msg) { Application.Errors.showGeneralError(msg); }
        
        var amount = $('#Calculator_Amount').val();
        
        amount = amount.replace(/^\s*|\s*$/g,'');
        amount = amount.replace(/ /g,'');
        
        if(isNaN(amount)) {
			amount = 1000;
        }
        
        if(amount < 1000) amount=1000;
               
        amount = Math.round(amount/1000)*1000
        
        if(amount < 1000) amount=1000;
        if(amount > 20000) amount=20000;
        
        $('#Calculator_Amount').val(amount);

        IkanoInsurance.Web.Service.Model.updateCalculation(amount,success,failed); 
    },
    
	load: function (defaultValue) {
		var success = function(msg) { 
			pageTracker._trackEvent('Pluspaketet', 'Open Calculator', '',defaultValue);
			popup.displayHTML(msg);
		}
		
		var cookieValue = Fivestarday.Cookies.getCookie('calculator_value');
		
		if(!defaultValue) {
			defaultValue = ''
			if(cookieValue) defaultValue = cookieValue;
		}
				
		var failed = function(msg) { Application.Errors.showGeneralError(msg); }

		IkanoInsurance.Web.Service.View.getCalculator(defaultValue,success,failed); 
	},

	insertFlashCalculator: function (path,elementID,width,height) {
		var success = function(msg) { 
			var flashvars = {};
			flashvars.startValue = Fivestarday.Cookies.getCookie('calculator_value');
			flashvars.steps = msg;
			var params = {};
			params.allowScriptAccess = "always";
			var attributes = {};
			attributes.id = elementID;
			swfobject.embedSWF(path, "flash-container", width, height, "9.0.0", false, flashvars, params, attributes);
		}
		
		var failed = function(msg) { Application.Errors.showGeneralError(msg); }

		IkanoInsurance.Web.Service.Model.getStepValues(success,failed); 
	}

};

Application.Apply = {
    submitSocialSecurity: function() {
        var failed = function(msg) {
			$('#ajax-loader').hide();
			//alert('err');
        }
        
        var failed_updateApplicant = function(msg) {
			$('#ajax-loader').hide();
			$('#socialSecurityNumber').parent().addClass('error');
			
			if(msg.ExceptionType == 'IkanoInsurance.ClassLibrary.Exceptions.HandledException')
				$('#socialSecurityNumber_error').html(msg.Message);
        }

		var handle_getSummary = function(msg) { 
			$('#ajax-loader').hide();
			popup.displayHTML(msg);  
			pageTracker._trackEvent('Pluspaketet', 'Application Summary');      
		}

        var handle_updateCalculation = function() {
			$('#ajax-loader').hide();
			var socsec = $('#socialSecurityNumber').val();
			IkanoInsurance.Web.Service.View.getSummary(handle_getSummary,failed);
        }

        var handle_updateApplicant = function(msg) { 
			$('#ajax-loader').hide();
			$('#socialSecurityNumber').parent().removeClass('error');
			
        	var amount = $('#Calculator_Amount').val();
			IkanoInsurance.Web.Service.Model.updateCalculation(amount,handle_updateCalculation,failed); 
        }

		var socsec = $('#socialSecurityNumber').val();
        
        if($('#accept_terms').attr('checked')) {
			$('#accept_terms').parent().parent().removeClass('error')
			$('#ajax-loader').show();
			IkanoInsurance.Web.Service.Model.updateApplicant(socsec,handle_updateApplicant,failed_updateApplicant);        
        }
        else{
			$('#accept_terms').parent().parent().addClass('error')
        }
    }

};

Application.Errors = {
	showGeneralError: function () {
		var success = function(msg) { 
			popup.displayHTML(msg);
		}
		
		var failed = function(msg) { alert('Guru meditation in [showGeneralError]')  }

		IkanoInsurance.Web.Service.View.getGeneralError(success,failed); 
	},
	
	showAlreadyCustomerError: function () {
		var success = function(msg) { 
			popup.displayHTML(msg);
		}
		
		var failed = function(msg) { Application.Errors.showGeneralError(msg); }

		IkanoInsurance.Web.Service.View.getAlreadyCustomerError(success,failed); 
	}
}

Application.Finish = {
	sendConfirmation: function () {
		var success = function(msg) { 
			$('#btnSendEmail').hide();
		}
		
		var failed = function(msg) { Application.Errors.showGeneralError(msg); }

		IkanoInsurance.Web.Service.Model.sendConfirmation(success,failed); 
	},

	load: function () {
		var success = function(msg) { 
			popup.displayHTML(msg);
			$('#ajax-loader').hide();
		}
		
		var failed = function(msg) { Application.Errors.showGeneralError(msg); }

		$('#ajax-loader').show();
		IkanoInsurance.Web.Service.View.getFinish(success,failed); 
	},

	submit: function () {
		// returns true if the string is empty
		var isEmpty =  function(str){
			return (str == null) || (str.length == 0);
		}		
		
		var success = function(msg) { 
			Application.Finish.load();
		}
		
		var failed = function(msg) {
			$('#ajax-loader').hide();
						 
			if(msg.Message.indexOf('state 35') > 0){
				Application.Errors.showAlreadyCustomerError();
			}
			else {
				alert(msg.Message);
				Application.Errors.showGeneralError();
			}
			
		}
		
		var email = $('#email').val()
		var phone = $('#phone').val()
		var hasError = false;
		
		var regEmail=/^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3} \.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-_]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/ 
		var regPhone=/^[0-9\- ]+$/ 
		
		if(!isEmpty(email)){
			if(!regEmail.test(email)) {
				hasError = true;
				$('#email').parent().parent().addClass('error')
			}
			else{
				hasError = false;
				$('#email').parent().parent().removeClass('error')
			}
		}
		else {
			$('#email').parent().parent().removeClass('error')
		}

		if(!isEmpty(phone)){
			if(!regPhone.test(phone)){
				hasError = true;
				$('#phone').parent().parent().addClass('error')
			}
			else{
				$('#phone').parent().parent().removeClass('error')
			}
		}
		else  {
			$('#phone').parent().parent().removeClass('error')
		}
		
		if(!hasError){ 
			$('#ajax-loader').show();
			IkanoInsurance.Web.Service.Model.submitFinish(email,phone,success,failed)
			pageTracker._trackEvent('Pluspaketet', 'Submit Application');  
		}; 
	}

};


Application.Form = {

    _init: function() {
        
        $('#elements input')
            .unbind('click')
            .bind('click', function() {
                Application.Form.updateCalculation();
            });
        
        /* Disabled for now..
        $('.costs input')
            .unbind('blur')
            .bind('blur', function() {
                Application.Form.updateCalculation();
            });
        */
    },
    
    updateCalculation: function() {
        
        var success = function(msg) { 
            $('#premie').html(msg);
        }
        var failed = function(msg) { Application.Errors.showGeneralError(msg); }
        
        var p = Application.Form.getProductElements();
        var c = Application.Form.getCosts();

        IkanoInsurance.Web.API.Model.updateCalculation(p,c,success,failed); 
    },
    
    getPersonalInformation: function() {
    
    },
    
    submitApplication: function() {
        
        var success = function(msg) { 
            $('#message').html(msg);
        }
        var failed = function(msg) { Application.Errors.showGeneralError(msg); }
        
        var p = Application.Form.getProductElements();
        var c = Application.Form.getCosts();

        IkanoInsurance.Web.API.Service.submitApplication(p,c,success,failed); 
    },
    
    getProductElements: function() {
        var productElements = new Array();
        var index = 0;
        
        /*
        $('#elements input').each( function() {
            if (this.checked) {
                productElements[index] = this.value;
                index++;
            }
        });   
         */
         
        productElements[0] = '104003001';
        productElements[1] = '104005001';
        productElements[2] = '104006001';
        
        return productElements;
    },
    
    getCosts: function() {       
        var costs = new Array();
        /*
        $('#costs input').each( function(index) {
            if (this.value.length == 0)  {
                costs[index] = 0;
            } else {
                costs[index] = this.value;
            }
        });
        */
        
        costs[0] = 500;
        return costs;
    },
    
    getPersonalInfo: function() {       
        var costs = new Array();
        $('#personalinfo input').each( function(index) {
            if (this.value.length == 0)  {
                costs[index] = 0;
            } else {
                costs[index] = this.value;
            }
        });
        return costs;
    }
    
}

$(window).load(function(){
	Application.Form._init();
});

