var Registration = Class.create({
    
    curStep: 1,
    errorMsg: "",
    errorField: "",
    searchRun: false,
    
    initialize: function(container,indicator, nextBtn, prevBtn, message) {
        var self = this;
        if(!$("step"+this.curStep)) { return false;}
        $$("."+nextBtn).each(function(e,i){
            if(!self.isAnim){
                Event.observe($(e),"click", self.setSteps.bindAsEventListener(this,{self:self,i:i,inc:"+",num:1,container:container,indicator:indicator,message:message}), false);
            }
        });
        
        $$("."+prevBtn).each(function(e,i){
            if(!self.isAnim){
                Event.observe($(e),"click", self.setSteps.bindAsEventListener(this,{self:self,i:i,inc:"-",num:1,container:container,indicator:indicator,message:message}), false);
            }
        });
        
        if($("step"+this.curStep)){
        	$("step"+this.curStep).addClassName('stepsActive');
        }
        
        if($('Postnr') && $('Postnrsok')){
        	        Event.observe($('Postnr'),'change', this.updatePostnr.bindAsEventListener(this,{self:this,field:$('Postnr')}), false);
        }
        
    },
    
    setSteps: function(event,arg){
        Event.stop(event);
		
        if(arg.self.errorField != ""){ $(arg.self.errorField).removeClassName('notValid')};
		
        
        	
    		$$('.'+arg.message).invoke('hide');
    		
	        if(arg.inc == "+"){
	        	
	            if(arg.self.validate()){
	            	
	            	if($('okIcon'+arg.self.curStep)){
	            		$('okIcon'+arg.self.curStep).show();
	            	}
	            	
		            arg.self.slide(arg.self,arg.i,arg.container,+(arg.num));
		            $("step"+arg.self.curStep).removeClassName('stepsActive');
		            (arg.self.curStep) += (arg.num);
		            $("step"+arg.self.curStep).addClassName('stepsActive');
		            
		            arg.self.removeBtnSteps(arg.self,arg.indicator);
		            arg.self.setBtnSteps(arg.self,arg.container,arg.indicator);
	            }else{
	            	
	            	if($('okIcon'+arg.self.curStep)){
	            		$('okIcon'+arg.self.curStep).hide();
	            	}
	            	
		    		$(arg.message+"Box"+arg.self.curStep).show();
		    		$(arg.message+"Content"+arg.self.curStep).update(arg.self.errorMsg);
		    		$(arg.self.errorField).addClassName('notValid');
	    		}
	            
	        }else if(arg.inc == "-"){
	            arg.self.removeBtnSteps(arg.self,arg.indicator);
	            
	            arg.self.slide(arg.self,arg.i,arg.container,-(arg.num));
	            $("step"+arg.self.curStep).removeClassName('stepsActive');
	            (arg.self.curStep) -= (arg.num);
	            $("step"+arg.self.curStep).addClassName('stepsActive');
	            
	            arg.self.setBtnSteps(arg.self,arg.container,arg.indicator);
	        }
    },
    removeBtnSteps: function(self,indicator){
        
        for(var i=1; i<this.curStep; i++){
        	if($(indicator+i)){
            	Event.stopObserving($(indicator+i), "click");
            	$($(indicator+i)).removeClassName('stepsDone');
        	} 
       	} 
    },
    setBtnSteps: function(self,container,indicator){
        for(var i=1; i<this.curStep; i++){
            var num = (this.curStep)-($(indicator+i).innerHTML);
            if($(indicator+i)){
            	Event.observe($(indicator+i),"click", self.setSteps.bindAsEventListener(this,{self:self,i:i,inc:"-",num:num,container:container,indicator:indicator}), false);
            	$($(indicator+i)).addClassName('stepsDone');
            }
        }
    },
    
    slide: function(self,i,container,num){
   
        new Effect.Parallel(
	        [
	        	new Effect.SlideUp($(container+(self.curStep)), {
					duration: 1,
					beforeStart: function(){
						self.isAnim = true;
					},
					afterFinish: function(){
						self.isAnim = false;
					}
				}),
				new Effect.SlideDown($(container+(self.curStep+(num))), {
					duration: 1,
					beforeStart: function(){
						self.isAnim = true;
					},
					afterFinish: function(){
						self.isAnim = false;
					}
		        })
	        ]
        );
    },
    
    updatePostnr: function(elem,arg){
    	$('Postnrsok').value = $(arg.field).value;
    },
    
    validate: function(){
    	
    	switch(this.curStep){
    	
    		case 1:
    		
    			if($('Firmanavn').value == "" || $('Firmanavn').value == null){
    				this.errorMsg = "Firmanavn er ikke gyldig.";
    				this.errorField = "Firmanavn";
    				return false;
    			}	
    			
    			if($('Orgnr').value == "" || $('Orgnr').value == null){
    				this.errorMsg = "Org.nr er ikke gyldig.";
    				this.errorField = "Orgnr";
    				return false;
    			}else{
    				if(!this.isNumeric($('Orgnr').value)){
    					this.errorMsg = "Org.nr er ikke gyldig.";
    					this.errorField = "Orgnr";
    					return false;
    				}
    			}
    			
    			if($('Adresse').value == "" || $('Adresse').value == null){
    				this.errorMsg = "Adressen er ikke gyldig.";
    				this.errorField = "Adresse";
    				return false;
    			}
    			
    			if($('Poststed').value == "" || $('Poststed').value == null){
    				this.errorMsg = "Poststed er ikke gyldig.";
    				this.errorField = "Poststed";
    				return false;
    			}
    			
    			if($('Postnr').value == "" || $('Postnr').value == null){
    				this.errorMsg = "Postnr er ikke gyldig.";
    				this.errorField = "Postnr";
    				return false;
    			}else{
    				if(!this.isNumeric($('Postnr').value)){
    					this.errorMsg = "Postnr er ikke gyldig.";
    					this.errorField = "Postnr";
    					return false;
    				}
    			}
    			
    			return true;
    			
    		break;
    		case 2:
    			if($('Refferanse').value == "" || $('Refferanse').value == null){
    				this.errorMsg = "Kontaktperson er ikke gyldig.";
    				this.errorField = "Refferanse";
    				return false;
    			}
    			
    			if($('Epost').value == "" || $('Epost').value == null){
    				this.errorMsg = "E-post er ikke gyldig.";
    				this.errorField = "Epost";
    				return false;
    			}else{
    				if(!this.isValidEmail($('Epost').value)){
    					this.errorMsg = "E-post er ikke gyldig.";
    					this.errorField = "Epost";
    					return false;
    				}
    			}
    			
    			if($('Telefon').value == "" || $('Telefon').value == null){
    				this.errorMsg = "Telefonnummer er ikke gyldig.";
    				this.errorField = "Telefon";
    				return false;
    			}else{
    				if(!this.isNumeric($('Telefon').value)){
    					this.errorMsg = "Telefonnummer er ikke gyldig.";
    					this.errorField = "Telefon";
    					return false;
    				}
    			}
    			
    			return true;
    		break;
    		case 3:
    			if($('FakturaPostnr').value != ""){
    				if(!this.isNumeric($('FakturaPostnr').value)){
    					this.errorMsg = "Postnr er ikke gyldig.";
    					this.errorField = "FakturaPostnr";
    					return false;
    				}
    			}
    			
    			return true;
    		break;
    		case 4:
    			if($('Forhandler').value == "" || $('Forhandler').value == null){
    				this.errorMsg = "Du må velge en forhandler.";
    				this.errorField = "";
    				return false;
    			}
    			return true;
    		break;
    		
    		default:
    		break;
    		
    		
    	}
    },
    
    isNumeric: function(strString){
		var strValidChars = "0123456789";
		var strChar;
		var blnResult = true;
		
		if (strString.length == 0) return false;
		for (i = 0; i < strString.length && blnResult == true; i++){
			strChar = strString.charAt(i);
			if (strValidChars.indexOf(strChar) == -1){
				blnResult = false;
			}
		}
		return blnResult;
	},
	
	isValidEmail: function(strString){
		return (strString.indexOf(".") > 2) && (strString.indexOf("@") > 0);
	}

});

Event.observe(window, 'load', function() {
    if($('registrerSteps')){
        var newRegistrationClass = new Registration("registrerStepContent","step", "nextBtn", "prevBtn", "message");
    }
    
});

