var CategoryPicker = new Class({
	
	// CONSTRUCTOR
	initialize: function(catPickerClass,catPickerActiveClass,jobContainerId,hotelPickersClass,hotelPickersActiveClass) {
		this.catPickers					= $$(catPickerClass);
		this.catPickersActiveClass		= catPickerActiveClass; 
		this.jobContainer				= $(jobContainerId);
		this.hotelPickers				= $$(hotelPickersClass);
		this.hotelPickersActiveClass	= hotelPickersActiveClass;
		this.url						= document.URL.substr(0,document.URL.indexOf(".ch")+3)
		this.hotelIds					= this.__getHotelIds();
		
		this.hotelPickers.each(function(item, index){
			var self = this;
			item.addEvent('click',function(){
				self.__getJobs("hotel",this);
			});
		},this);
		
		this.catPickers.each(function(item, index){
			var self = this;
			item.addEvent('click',function(){
				self.__getJobs("category",this);
			});
		},this);
	},
	
	// METHODS
	__getJobs: function(_triggerType, _trigger) {
		
		var _params			= false;
		
		switch(_triggerType) {
			case "hotel"	:	_params = this.__getParamsByHotelTrigger(_trigger);
								break;
			case "category"	:	_params = this.__getParamsByCategoryTrigger(_trigger);
								break;
		}
		
		this.__sendJobRequest(_params);
	},
	
	__getParamsByHotelTrigger:	function(_trigger) {
		var self					= this;
		var hotelCategoryPickers	= new Array();
		var triggerHotelId			= _trigger.id.replace(/dom__hotelPickers__/g,'');
		
		this.catPickers.each(function(picker,index){
			if(picker.id.indexOf("__"+triggerHotelId+"__") > -1) {
				hotelCategoryPickers.push(picker);
			}
		},self);
				
		if(_trigger.className.indexOf("Active") > -1) {
			_trigger.className = _trigger.className.replace(/Active/g,'');
			hotelCategoryPickers.each(function(picker,index){
				picker.className = picker.className.replace(/Active/g,'');
			},self);
		} else {
			_trigger.className += "Active";
			hotelCategoryPickers.each(function(picker,index){
				if(picker.className.indexOf("Active") == -1)
					picker.className += "Active";
			},self);
		}
		
		return self.__createParams();
	},
	
	__getParamsByCategoryTrigger: function(_trigger) {
		var self						= this;
		var triggerHotelId				= this.__extractHotelIdFromCategoryPicker(_trigger);
		var parentHotelPicker			= $("dom__hotelPickers__"+triggerHotelId);
		var activeHotelCategoryPickers	= false;
		var hasActiveCategoryPickers	= false;
		
		if(_trigger.className.indexOf("Active") == -1) {
			_trigger.className += "Active";
			
			if(parentHotelPicker.className.indexOf("Active") == -1)
				parentHotelPicker.className += "Active";
		} else {
			_trigger.className		= _trigger.className.replace(/Active/g,'');
			activeCategoryPickers	= $$(this.catPickersActiveClass);
			
			activeHotelCategoryPickers	= this.__getCategoryPickerByHotelId(triggerHotelId);
			
			if(activeHotelCategoryPickers.length == 0) {
				parentHotelPicker.className = parentHotelPicker.className.replace(/Active/g,'');
			}
		}
		
		return self.__createParams();	
	},
	
	__createParams: function() {
		var self					= this;
		var activeHotelPickers		= $$(this.hotelPickersActiveClass);
		var activeCategoryPickers	= $$(this.catPickersActiveClass);
		
		var hotelIds				= ""
		var categoryIds				= "";
		
		activeHotelPickers.each(function(picker,index) {
			hotelIds += picker.id.replace(/dom__hotelPickers__/g,'')+",";
		},self);
		
		if(hotelIds.lastIndexOf(',') == (hotelIds.length-1))
			hotelIds = hotelIds.substr(0,hotelIds.lastIndexOf(','));
		
		activeCategoryPickers.each(function(picker,index){
			categoryIds += picker.id.replace(/(dom__categoryPickers__)[0-9]+(_){2}/g,'')+",";
		},self);
		
		if(categoryIds.lastIndexOf(',') == (categoryIds.length-1))
			categoryIds = categoryIds.substr(0,categoryIds.lastIndexOf(','));
		
		return {"categoryParams": categoryIds, "hotelParams": hotelIds};
	},
	
	__sendJobRequest: function(params) {
		var self = this;
		var html					= "";
		var jsonRequest = new Request.JSON({url: this.url+"/__xhr/getJobs.xhr.php", onComplete: function(jobs){
		    jobs.each(function(item,index) {
		    	html += '<div class="stellen">';
		    	html += '<div class="bezeichnung">';
		    	html += '<a href="ergebnis.php?jobId='+item.UID+'">'+item.TITLE+'</a>';
		    	html += '<br />Pensum: '+item.HIRING+'<br />Stellenantritt: '+item.ENTRY_DATE;
				html += '</div>';
				html += '<div class="mehr"><a href="ergebnis.php?jobId='+item.UID+'" class="mehr">mehr</a></div>';
				html += '<div class="clearBoth"></div>';
				html += '</div>';
		    },self);
		    self.jobContainer.innerHTML = html;
		}}).get({'categoryId': params.categoryParams, 'hotelId': params.hotelParams});
	},
	
	__getHotelIds: function() {
		var temp = new Array();
		var self = this;
		this.hotelPickers.each(function(picker,index){
			var pickerId	= parseInt(picker.id.replace(/dom__hotelPickers__/g,''));
			temp.push(pickerId);
			
		},self);
		return temp;
	},
	
	__extractHotelIdFromCategoryPicker: function(_trigger) {
		var returnCode = _trigger.id.replace(/dom__categoryPickers__/g,'');
		var returnCode = returnCode.replace(/(_){2}[0-9]+(_){2}/g,'');
		return parseInt(returnCode);
	},
	
	__getCategoryPickerByHotelId: function(hotelId) {
		var self			= this;
		var returnCode 		= new Array();
		var activePickers	= $$(this.catPickersActiveClass);
		
		activePickers.each(function(picker,index){
			if(picker.id.indexOf("__"+hotelId+"__") > -1)
				returnCode.push(picker);
		},self);
		
		return returnCode;
	}
});