var formHandler = function($){
    
    var priv = {
        
    };
    
    return {
		zip : null,
		houseNumber : -1,
		validAddress : false,
		zipSearch : true,
		checkZipURL : "includes/script/check_zip_wrapper.php",
		streetField : null,
		cityField : null,
        hiddenStreetField : null,
        hiddenCityField : null,
        arrMagazinePrices : new Array(0, 5.95, 10.50, 15.00, 17.50, 19.00, 19.95),
	
        loadStreetAndCity : function (asyncValue, ignoreChange){
			
			var checkZip = $('#zipcode').val() + $('#zipcodeChars').val();
			var checkHouseNumber = $('#houseNr').val();
			  
			// check if they are filled in otherwise query is useless
			if(checkZip.length == 6 && checkHouseNumber.length > 0){
				
				var checkAddress = false;
				
				if(ignoreChange != null){
					checkAddress = true;
				}
				else if(checkZip != formHandler.zip || checkHouseNumber != formHandler.houseNumber){
				    checkAddress = true;
                }
				
				if(checkAddress){
					formHandler.zip = checkZip;
                    formHandler.houseNumber = checkHouseNumber;
                    var asyncVal = true;
                    if(asyncValue != null){
                        asyncVal = asyncValue;
                    }
                    
                    formHandler.getPostalCode(asyncValue);
				}
			}
			else {
				// if the values for zip and houseNumber are not correctly filled , the address can never be valid
				formHandler.validAddress = false;
			}
			
		},
		
		submitForm : function () {
			var valid = true;
            var validColor = '#ffffff';
            var errColor = 'rgb(255, 135,0)';
            
			$('#lblgender').css('color', validColor);
            $('#lblfirstname').css('color', validColor);
            $('#lbllastname').css('color', validColor);
            $('#lblzipcode').css('color', validColor);
            $('#lblhouseNr').css('color', validColor);
            $('#lbladdress').css('color', validColor);
            $('#lblcity').css('color', validColor);
            $('#lblbirthdate').css('color', validColor);
            $('#lblemail').css('color', validColor);
            $('#lblnewsletter').css('color', validColor);


            formHandler.loadStreetAndCity(false, true);
            
//			if($(":checkbox:checked").length == 0){
//				alert('U heeft geen brochures geselecteerd.');
//                return false;
//				valid = false;
//			}
			
			if($("input[@name=gender]:checked").val() == null){
		        $('#lblgender').css('color', errColor);
				valid = false;
			}
			
			if($("#firstname").val().length < 1){
                $('#lblfirstname').css('color', errColor);
                valid = false;
            }
			
			if($("#lastname").val().length < 1){
                $('#lbllastname').css('color', errColor);
                valid = false;
            }
			
    		if(!formHandler.isValidAddress()){
				$('#lblzipcode').css('color', errColor);
				$('#lblhouseNr').css('color', errColor);
				$('#lbladdress').css('color', errColor);
				$('#lblcity').css('color', errColor);
            	valid = false;
			}
            if($("#birthDay").val() != null && $("#birthMonth").val() != null && $("#birthYear").val()){
                if($("#birthDay").val().length < 1 || $("#birthMonth").val().length < 1 || $("#birthYear").val().length < 1){
                    $('#lblbirthdate').css('color', errColor);
                    valid = false;
                }
            }
            else {
                $('#lblbirthdate').css('color', errColor);
                valid = false;
            }
//
//            if(isNAN($("#birthDay").val()) || isNAN($("#birthMonth").val())|| isNAN($("#birthYear").val())){
//                $('#lblbirthdate').css('color', errColor);
//            	valid = false;
//            }
            if(!$("#newsletter").is(":checked")){
                $('#lblnewsletter').css('color', errColor);
				valid = false;
            }
			
			if(!formHandler.checkEmail()){
				$('#lblemail').css('color', errColor);
				valid = false;
			}
			return valid;
			
		},

        calculateMagazines : function (){
            
            // fucntion copied from old code, so no jQery use
            theForm = document.getElementById('frmMain');
            magazineCounter = 0;
            for (i=0,n=theForm.elements.length;i<n;i++) {
                if (theForm.elements[i].name.indexOf('mag') !=-1) {
                    if(theForm.elements[i].checked == true) {
                        magazineCounter++;
                    }
                }
            }
            var strShowprice = ''+formHandler.cent(formHandler.arrMagazinePrices[magazineCounter]+2.95);
            if(magazineCounter == 0)
                strShowprice = '0.00';
            document.getElementById('showprice').innerHTML = strShowprice.replace('.',',');
            document.getElementById('showcount').innerHTML = magazineCounter;
            document.getElementById('price').value = formHandler.arrMagazinePrices[magazineCounter]+2.95;
        },

        cent : function (amount) {
            amount -= 0;
            return (amount == Math.floor(amount)) ? amount + '.00' : (  (amount*10 == Math.floor(amount*10)) ? amount + '0' : amount);
        },

		isValidAddress : function (){
			if(formHandler.zipSearch){
				return formHandler.validAddress; 
			}
			else {
				if(formHandler.streetField.val() != "vul in" && formHandler.cityField.val() != "vul in"){
					return true;
				}
				else {
					return false;
				}
			}
		},
		
		getPostalCode : function(asyncValue){
            if(!formHandler.zipSearch)
			    return;
		    $('#lblFormError').html('');
			formHandler.streetField.val('zoeken...');
            formHandler.cityField.val('zoeken...');
            // get information about the address
					$.ajax({
				   		url: formHandler.checkZipURL,
						async: asyncValue,
						type : "GET",
				   		data: "zip=" + this.zip + "&houseNumber=" + this.houseNumber,
				   		success: function(results){
							var result = results;//eval(results);
							
							var street = result.split(";")[0];
							var city = result.split(";")[1];
							
							if(street != 'error'){
								formHandler.streetField.val(street);
								formHandler.cityField.val(city);
                                formHandler.hiddenCityField.val(city);
                                formHandler.hiddenStreetField.val(street);
								formHandler.validAddress = true;
							}
							else {
								formHandler.streetField.val('Geen adres gevonden');
	                            formHandler.cityField.val('Geen adres gevonden');
								formHandler.validAddress = false;
							}
							
				   		},
						error : function(results){
							formHandler.streetField.val('vul in');
							formHandler.streetField.attr('disabled', '');
                            formHandler.cityField.val('vul in');
							formHandler.cityField.attr('disabled', '');
							formHandler.zipSearch = false;
						}
				 	});	
		},
		
		init : function (){
			$('#zipcode').blur(
				function(){
					formHandler.loadStreetAndCity();
				}
			);
			
			$('#zipcodeChars').blur(
                function(){
                    formHandler.loadStreetAndCity();
                }
            );
			
			$('#houseNr').blur(
				function(){
					formHandler.loadStreetAndCity();
				}
			);
			
			$("form").submit(
				function () { 
					return formHandler.submitForm(); 
				}
			);

            $(".chk_magazines").click(
                function(){
                    formHandler.calculateMagazines();
                }
            );

			formHandler.streetField = $('#address');
            formHandler.cityField = $('#city');
            formHandler.hiddenStreetField = $('#addressHidden');
            formHandler.hiddenCityField = $('#cityHidden');
            
			formHandler.loadStreetAndCity();
            formHandler.calculateMagazines();
		},
		
		checkEmail : function(){
            var valid = false;
            var email = $('#email').val();
            
            var filter=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;
            if (filter.test(email)) {
                valid = true;
            }
            
            if(!valid){
                return false;
            }
            else {
                return true;
            }
        }
    }
}(jQuery);

$(document).ready(
    function(){
        formHandler.init();
    } 
);
