function Category(){
    
	var currentLevel = 1;
	
    this.init = function() {
    }
    
    
    this.updateSelectedCategory = function(level, selectedCategory, myself, el){
    	
    	if(myself) 
    		var a = 0;
    	else
    		var a = 1;
	    			
	    if(myself || (el == undefined  || el.isValid())) {
	    		
	    	if(selectedCategory > 0) {
		        dojo.xhrPost({
		            url: "/category/select-category/" + level + "/" + selectedCategory,
		            load: function(data){
		        	
		        		if(dijit.byId('categoryTreeTab'))
		        		meta.refreshTabs(1);
		
		        		if(dijit.byId('categoryPdfTreeTab'))
			        	meta.refreshTabs(2);
		        		
		        		if(dijit.byId('categoryCicolorTreeTab'))
				        meta.refreshTabs(3);
		        	
		        		// refresh affected Dropdowns
		        		for(i = parseInt(level) + a; i <= currentLevel + 1; i++) {
		        			if(dijit.byId('categoryDD_'+i))
		        			dijit.byId('categoryDD_'+i).attr('href', '/category/show-category-dropdown/'+i);
		        		}
		        		self.setCurrentLevel(parseInt(level) + 1);
		        		errorHandler.show();
		                return data;
		            },
		            error: function(data){
		            	errorHandler.show();
		                return data;
		            },
		            handleAs: "json"
		        });
		        
	    	}
	    	else {
	    		
				dijit.byId('categorySelect_1').setValue("");
				dijit.byId('categorySelect_1').validate();
	
		        dojo.xhrPost({
		            url: "/category/select-category/1/0",
		            load: function(data){
		        	
		        		if(dijit.byId('categoryTreeTab'))
		        		meta.refreshTabs(1);
	
		        		if(dijit.byId('categoryPdfTreeTab'))
			        	meta.refreshTabs(2);
		        		
		        		if(dijit.byId('categoryCicolorTreeTab'))
				        meta.refreshTabs(3);
		        		
		        		dijit.byId('categoryDD_'+i)
		        		
		        		// refresh affected Dropdowns
		        		for(i = parseInt(level) + a; i <= currentLevel + 1; i++) {
		        			if(dijit.byId('categoryDD_'+i))
		        			dijit.byId('categoryDD_'+i).attr('href', '/category/show-category-dropdown/'+i);
		        		}
		        		self.setCurrentLevel(parseInt(level) + 1);
		        		errorHandler.show();
		                return data;
		            },
		            error: function(data){
		            	errorHandler.show();
		                return data;
		            },
		            handleAs: "json"
		        });
	    	}
    	}
    }
    
    this.updateSelectedPdfCategory = function(level, selectedCategory, myself){
    	if(myself) 
    		var a = 0;
    	else
    		var a = 1;
    			
    	if(selectedCategory > 0) {
	        dojo.xhrPost({
	            url: "/category/select-category/" + level + "/" + selectedCategory,
	            load: function(data){
	        		meta.refreshTabs(2);
	        	
	        		// refresh affected Dropdowns
	        		for(i = parseInt(level) + a; i <= currentLevel + 1; i++) {
	        			if(dijit.byId('categoryDD_'+i))
	        			dijit.byId('categoryDD_'+i).attr('href', '/category/show-category-pdf-dropdown/'+i);
	        		}
	        		
	        		self.setCurrentLevel(parseInt(level) + 1);
	        		errorHandler.show();
	                return data;
	            },
	            error: function(data){
	            	errorHandler.show();
	                return data;
	            },
	            handleAs: "json" 
	        });
    	}
    }
    
    this.updateSelectedCicolorCategory = function(level, selectedCategory, myself){
    	if(myself)  
    		var a = 0; 
    	else
    		var a = 1;

    	if(selectedCategory > 0) {
	        dojo.xhrPost({
	            url: "/category/select-category/" + level + "/" + selectedCategory,
	            load: function(data){
	        		meta.refreshTabs(3);
	        	
	        		// refresh affected Dropdowns
	        		for(i = parseInt(level) + a; i <= currentLevel + 1; i++) {
	        			if(dijit.byId('categoryDD_'+i))
	        			dijit.byId('categoryDD_'+i).attr('href', '/category/show-category-cicolor-dropdown/'+i);
	        		}
	        		
	            	if(level == 5) {
	          			measurementsStore.close();
	        			dijit.byId('cicolorStatusprintrunDD').setValue("");
	        			dijit.byId('cicolorStatusprintrunDD').validate();	 
	            	}
	            	
	        		self.setCurrentLevel(parseInt(level) + 1);
	        		errorHandler.show();
	                return data;
	            },
	            error: function(data){
	            	errorHandler.show();
	                return data;
	            },
	            handleAs: "json"
	        });
    	}
    	else {
    		
			dijit.byId('categorySelect_1').setValue("");
			dijit.byId('categorySelect_1').validate();

	        dojo.xhrPost({
	            url: "/category/select-category/1/0",
	            load: function(data){
	        	
	        		if(dijit.byId('categoryTreeTab'))
	        		meta.refreshTabs(1);

	        		if(dijit.byId('categoryPdfTreeTab'))
		        	meta.refreshTabs(2);
	        		
	        		if(dijit.byId('categoryCicolorTreeTab'))
			        meta.refreshTabs(3);
	        		
	        		referenceCicolorStore.close();
        			dijit.byId('referenceCicolorDD').setValue("");
        			dijit.byId('referenceCicolorDD').validate();	 
	        		
	        		dijit.byId('categoryDD_'+i)
	        		
	        		// refresh affected Dropdowns
	        		for(i = parseInt(level) + a; i <= currentLevel + 1; i++) {
	        			if(dijit.byId('categoryDD_'+i))
	        			dijit.byId('categoryDD_'+i).attr('href', '/category/show-category-cicolor-dropdown/'+i);
	        		}
	        		self.setCurrentLevel(parseInt(level) + 1);
	        		errorHandler.show();
	                return data;
	            },
	            error: function(data){
	            	errorHandler.show();
	                return data;
	            },
	            handleAs: "json"
	        });
    	}
    }
    
    this.updateSelectedRegisterCategory = function(level, selectedCategory, myself){
    	if(myself)  
    		var a = 0; 
    	else
    		var a = 1;

    	if(selectedCategory > 0) {
	        dojo.xhrPost({
	            url: "/category/select-category/" + level + "/" + selectedCategory,
	            load: function(data){
	        		meta.refreshTabs(4);
	        	
	        		// refresh affected Dropdowns
	        		for(i = parseInt(level) + a; i <= currentLevel + 1; i++) {
	        			if(dijit.byId('categoryDD_'+i))
	        			dijit.byId('categoryDD_'+i).attr('href', '/category/show-category-register-dropdown/'+i);
	        		}
	        		
	            	if(level == 5) {
	          			measurementsStore.close();
	        			dijit.byId('registerStatusprintrunDD').setValue("");
	        			dijit.byId('registerStatusprintrunDD').validate();	 
	            	}
	            	
	        		self.setCurrentLevel(parseInt(level) + 1);
	        		errorHandler.show();
	                return data;
	            },
	            error: function(data){
	            	errorHandler.show();
	                return data;
	            },
	            handleAs: "json"
	        });
    	}
    	else {
    		
			dijit.byId('categorySelect_1').setValue("");
			dijit.byId('categorySelect_1').validate();

	        dojo.xhrPost({
	            url: "/category/select-category/1/0",
	            load: function(data){
	        	
	        		if(dijit.byId('categoryTreeTab'))
	        		meta.refreshTabs(1);

	        		if(dijit.byId('categoryPdfTreeTab'))
		        	meta.refreshTabs(2);
	        		
	        		if(dijit.byId('categoryCicolorTreeTab'))
			        meta.refreshTabs(3);

	        		if(dijit.byId('categoryREgisterTreeTab'))
			        meta.refreshTabs(4);
	        		

	        		dijit.byId('categoryDD_'+i)
	        		
	        		// refresh affected Dropdowns
	        		for(i = parseInt(level) + a; i <= currentLevel + 1; i++) {
	        			if(dijit.byId('categoryDD_'+i))
	        			dijit.byId('categoryDD_'+i).attr('href', '/category/show-category-register-dropdown/'+i);
	        		}
	        		self.setCurrentLevel(parseInt(level) + 1);
	        		errorHandler.show();
	                return data;
	            },
	            error: function(data){
	            	errorHandler.show();
	                return data;
	            },
	            handleAs: "json"
	        });
    	}
    }
    
    
    this.updateSelectedOkCategory = function(level, selectedCategory, myself){
    	if(myself) 
    		var a = 0;
    	else
    		var a = 1;
    			
    	if(selectedCategory > 0) {
	        dojo.xhrPost({
	            url: "/category/select-category/" + level + "/" + selectedCategory,
	            load: function(data){
	        		reference.refreshTabs(4);
	        	
	        		// refresh affected Dropdowns
	        		for(i = parseInt(level) + a; i <= currentLevel + 1; i++) {
	        			if(dijit.byId('categoryDD_'+i))
	        			dijit.byId('categoryDD_'+i).attr('href', '/category/show-category-ok-dropdown/'+i);
	        		}
	        		self.setCurrentLevel(parseInt(level) + 1);
	        		errorHandler.show();
	                return data;
	            },
	            error: function(data){
	            	errorHandler.show();
	                return data;
	            },
	            handleAs: "json"
	        });
	        
    	}
    }
    
    this.createNew = function(level, newCategoryParentId) { 
    	
    	dojo.byId("newCategoryLevel").value = level;
    	dojo.byId("newCategoryParentId").value = newCategoryParentId;
    	dijit.byId('newCategoryDialog').show();
	
    	//dojo.connect(dojo.byId("newCategoryName"), 'onkeypress', function(e) {
    	//	if (e.keyCode == dojo.keys.ENTER) {
    	//		var d = dijit.byId("newCategoryDialog");
    	//		d.execute( d.getValues());
    	//		d.hide();
    	//	}
    	//});
    }
    
    this.doCreateNew = function(level, parentCategoryId, categoryName) {
        dojo.xhrPost({
            url: "/category/create-new-category",
            postData: "level=" + level + "&parentCategoryId=" + parentCategoryId + "&categoryName=" + categoryName ,
            load: function(response, ioArgs){
	    		dojo.byId("newCategoryName").value = "";
        		self.updateSelectedCategory(level, response, true);
        		errorHandler.show();
        		return response;
            },
            error: function(response, ioArgs){
            	errorHandler.show();
                return response;
            },
            handleAs: "text"
        });
    }
    
    this.doCreateNewPdfCategory = function(level, parentCategoryId, categoryName) {
        dojo.xhrPost({
            url: "/category/create-new-category",
            postData: "level=" + level + "&parentCategoryId=" + parentCategoryId + "&categoryName=" + categoryName ,
            load: function(response, ioArgs){
	    		dojo.byId("newCategoryName").value = "";
        		self.updateSelectedPdfCategory(level, response, true);
        		errorHandler.show();
        		return response;
            },
            error: function(response, ioArgs){
            	errorHandler.show();
                return response;
            },
            handleAs: "text"
        });
    }    
    
    this.doCreateNewOkCategory = function(level, parentCategoryId, categoryName) {
        dojo.xhrPost({
            url: "/category/create-new-category",
            postData: "level=" + level + "&parentCategoryId=" + parentCategoryId + "&categoryName=" + categoryName ,
            load: function(response, ioArgs){
	    		dojo.byId("newCategoryName").value = "";
        		self.updateSelectedOkCategory(level, response, true);
        		errorHandler.show();
        		return response;
            },
            error: function(response, ioArgs){
            	errorHandler.show();
                return response;
            },
            handleAs: "text"
        });
    } 

    this.setCurrentLevel  = function(level) {
    	currentLevel = level;
    }
    
    this.removeCategory = function(category_id) {
    	dojo.byId('removeCategoryId').value = category_id;
    	dijit.byId('removeCategoryDialog').show();
    }
    
    this.doRemoveCategory = function(category_id) {
        dojo.xhrPost({
            url: "/category/delete",
            postData: "category_id=" + category_id,
            load: function(response, ioArgs){
    			errorHandler.show();
    			dijit.byId('jobListWrapper').refresh();
    			
                return response;
            },
            error: function(response, ioArgs){
            	errorHandler.show();
                return response;
            },
            handleAs: "text"
        });	
    }    
   
    var self = this;
}

var category = new Category();

dojo.addOnLoad(
  function(){
	  category.init();
  }
);



