var KPAjaxContent = Class.create(
{
	prefix: 'ajax-',
	loadingbarId: 'loadingbar',
	firstLoad: 0,
	loadAtStart: true,
	current: 0,
	active: 0,
	categoryTitle: '',
	menuElements: [],
	
	initialize: function(menuContainerClassname, contentContainerId)
	{
		var self = this;
	//	self.current = $$('#ajax-content')[0].getAttribute('class').replace(/ajax-content-/g, '');
		if($($$('.'+menuContainerClassname)[0]) && $(contentContainerId))
		{
			self.contentContainer = $(contentContainerId);
			$$('.'+menuContainerClassname).each(function(elem, index)
			{
				var menuArray = new Array();

				var menuItems = $(elem).getElementsByTagName('a');
				if($($$('.'+menuContainerClassname+' li.active')[0]))
				{
					self.current = self._getCategoryId($($$('.'+menuContainerClassname+' li.active a')[0]));
					self.categoryTitle = $($$('.'+menuContainerClassname+' li.active a')[0]).getAttribute('rel');
				}					
				var menuLength = menuItems.length;
				for(var i=0;i<menuLength;i++)
				{
					menuArray.push(menuItems[i]);

					self.setObserver(menuItems[i]);
				}
				self.menuElements.push(menuArray);
			});
			self.menuElements[0].each(function(elem, index)
			{
				self.setHashObserver(elem);
			});
			if(this.loadAtStart)
			{
				var catId = this._getCategoryId(self.menuElements[0][this.firstLoad]);
				if(typeof catId != 'number')
					throw('No category id was found on element: '+this);
			}
		}

		
	},
	
	setObserver: function(element)
	{
		
		var self = this;
		$(element).observe('click', function()
		{
			var elementHash = $(this).getAttribute('href').replace(window.location.pathname, '').replace('/','');
			window.location.hash = elementHash;
			self._traceCategory(elementHash);
		
			var catId = self._getCategoryId(this);
			self.categoryTitle = $(this).getAttribute('rel');
			if(typeof catId == 'number')
			{
				if(self.current != catId)
				{
					var arr = self.menuElements.flatten().each(function(elem)
					{
						if($(elem))
							if($($(elem).parentNode))
								if($($(elem).parentNode).hasClassName('active'))
									$($(elem).parentNode).removeClassName('active');
					});
		
					if(self.menuElements[0])
					{
						var index1 = self.menuElements[0].indexOf(this);					
						if($(self.menuElements[0][index1]))
						{
							if(self.menuElements[0])
							if($($(self.menuElements[0][index1]).parentNode))
								$($(self.menuElements[0][index1]).parentNode).addClassName('active');
							
							if(self.menuElements[1])
							if($(self.menuElements[1][index1]))
								if($($(self.menuElements[1][index1]).parentNode))
									$($(self.menuElements[1][index1]).parentNode).addClassName('active');
						}
					}
					if(self.menuElements[1])
					{
						var index2 = self.menuElements[1].indexOf(this);	
						if($(self.menuElements[1][index2]))
						{
							if($($(self.menuElements[1][index2]).parentNode))
								$($(self.menuElements[1][index2]).parentNode).addClassName('active');
							
							if($(self.menuElements[0][index2]))
								if($($(self.menuElements[0][index2]).parentNode))
									$($(self.menuElements[0][index2]).parentNode).addClassName('active');
						}						
					}	
					self._getContent(catId);
				}				
			}
		});
		
		
	},
	
	setHashObserver: function(element)
	{
		var elementHash = $(element).getAttribute('href').replace(window.location.pathname, '').replace('/','');
		var self = this;
		$Hash.addObserver(elementHash, function(hashObj)
		{
			
			self._traceCategory(this.hash);
			var catId = self._getCategoryId(element);
			self.categoryTitle = this.uid;
			if(typeof catId == 'number')
			{
				if(self.current != catId)
				{
					var arr = self.menuElements.flatten().each(function(elem)
					{
						if($(elem))
							if($($(elem).parentNode))
								if($($(elem).parentNode).hasClassName('active'))
									$($(elem).parentNode).removeClassName('active');
					});
		
					if(self.menuElements[0])
					{
						var index1 = self.menuElements[0].indexOf(element);					
						if($(self.menuElements[0][index1]))
						{
							if(self.menuElements[0])
							if($($(self.menuElements[0][index1]).parentNode))
								$($(self.menuElements[0][index1]).parentNode).addClassName('active');
							
							if(self.menuElements[1])
							if($(self.menuElements[1][index1]))
								if($($(self.menuElements[1][index1]).parentNode))
									$($(self.menuElements[1][index1]).parentNode).addClassName('active');
						}
					}
					if(self.menuElements[1])
					{
						var index2 = self.menuElements[1].indexOf(element);	
						if($(self.menuElements[1][index2]))
						{
							if($($(self.menuElements[1][index2]).parentNode))
								$($(self.menuElements[1][index2]).parentNode).addClassName('active');
							
							if($(self.menuElements[0][index2]))
								if($($(self.menuElements[0][index2]).parentNode))
									$($(self.menuElements[0][index2]).parentNode).addClassName('active');
						}						
					}	
					self._getContent(catId);
				}	
			}
		}, $(element).getAttribute('rel'));
	},
	
	_getContent: function(catId)
	{
		var self = this;
		var XHR = new Ajax.Request('/index.php',
		{
			method: 'get',
			parameters: {
				'c_' : 'CategoryContentGUI',
				'm_' : 'writeCategoryAjax',
				'cid' : catId
			},
			onCreate: function()
			{
				self.current = catId;
				
				if($('changeNotifier'))
					$('changeNotifier').setAttribute('value', catId);
				
				if($(self.loadingbarId))
					$(self.loadingbarId).show();
			},
			onSuccess: function(transport)
			{
				if($(self.loadingbarId))
					$(self.loadingbarId).hide();
					
				var content = transport.responseText;
				$(self.contentContainer).update(content);

				if(sIFR)
				{
					if(window.CurrentsIFR)
						window.CurrentsIFR.activate();
				}
				XHR = null;
				
				// Her sjekkes det p� om lightbox objectet eksisterer, og kj�rer gjennom nye observere.
				if(window.HalogenEmployeeBox)
				{
					window.HalogenEmployeeBox.setObservers();
					window.HalogenEmployeeBox.setCurrentCategoryId(catId);
					window.HalogenEmployeeBox.setCurrentCategoryTitle(self.categoryTitle);
				}
			}
		});
	},
	
	_getCategoryId: function(element)
	{
		return eval(($(element).className).replace(this.prefix, ''));
	},
		
	_traceCategory: function(categoryUrl)
	{
		if(typeof categoryUrl == 'string')
		{
			if(window.pageTracker)
				pageTracker._trackPageview(categoryUrl);
		}
	}
});

// Initialized in initializers.js