var DOMEvent = function()
{
	var EventColl = [];
	var counter = 0;
	
	function DOMEvent()
	{
		var self = this;
		
		this.addEvent = function(oElement, handler, callback, capture)
		{
			if (oElement.addEventListener)
			{
				oElement.addEventListener(handler, callback, capture);
			}
			else if(oElement.attachEvent)
			{
				var prop = [handler, callback].join("");
				if (oElement[prop]) return;
				
				if (!EventColl[oElement._eventid])
				{
					oElement._eventid = counter++;
					EventColl[oElement._eventid] = {'oElement' : oElement};
				}
				EventColl[oElement._eventid][prop] = [handler, callback];
				
				oElement[prop] = function()
				{
					callback.call(oElement, event);
				}
				oElement.attachEvent('on' + handler, oElement[prop]);
			}
		}
		
		this.removeEvent = function(oElement, handler, callback, capture)
		{
			if (oElement.removeEventListener)
			{
				oElement.removeEventListener(handler, callback, capture);
			}
			else if (oElement.detachEvent)
			{
				var prop = [handler, callback].join("");
				if (oElement[prop])
				{
					oElement.detachEvent('on' + handler, oElement[prop]);
					oElement[prop] = null;
					EventColl[oElement._eventid][prop] = null;
				}
			}
		}
		
		function breakEventLeak()
		{
			var curr = null;
			var j = null;
			for (var i = 0, len = EventColl.length; i < len; i++)
			{
				curr = EventColl[i];
				for (j in curr)
				{
					if (j != 'oElement')
					{
						self.removeEvent(curr.oElement, curr[j][0], curr[j][1]);
					}
				}
				curr.oElement._eventid = null;
			}
			EventColl = null;
			counter = null;
		}
		if (window.attachEvent) window.attachEvent('onunload', breakEventLeak);
	}
	return new DOMEvent();
}();

DOMEvent.preventDefault = function(event)
{
	event.returnValue = false;
	if (event.preventDefault)
	{
		event.preventDefault();
	}
}

DOMEvent.stopPropagation = function(event)
{
	if (event.stopPropagation)
	{
		event.stopPropagation();
		return;
	}
	event.cancelBubble = true;
}



function TabsMenu(properties)
{
	var default_class = properties.default_class || '',
		active_class = default_class + ' ' + (properties.active_class || 'active_tab'),
		active_index = properties.active_tab_index || 0,
		tabs_holder = document.getElementById(properties.tabs_root_id),
		tabs = tabs_holder.getElementsByTagName(properties.tabs_tag_name),
		change_event = properties.change_event || 'click',
		onChange = properties.onChange || changeTab,
		delay_animation = properties.delay_animation || 2000,
		timer = null,
		self = this;
	
	this.setActiveTab = function(index)
	{
		if (index < 0 || index >= tabs.length) return; 
		
		if (onChange)
		{
			onChange(properties.tabs_root_id, index, active_index, properties.tabs_tag_name); 
		}
		
		tabs[active_index].className = default_class;
		tabs[index].className = active_class;
		active_index = index;
	}
	
	this.nextTab = function()
	{
		var curr = active_index;
		self.setActiveTab((++curr >= tabs.length ? 0 : curr)); 
	}
	
	this.prevTab = function()
	{
		var curr = active_index;
		self.setActiveTab((--curr < 0 ? tabs.length - 1 : curr));
	}
	
	this.startAnimation = function()
	{
		timer = setInterval(self.nextTab, delay_animation);
	}
	
	this.stopAnimation = function()
	{
		clearInterval(timer);
	}
	
	for (var i = 0, len = tabs.length; i < len; i++)
	{
		DOMEvent.addEvent(tabs[i], change_event, 
			(function(index){
				return function(e){self.setActiveTab(index); DOMEvent.preventDefault(e);}
			})(i), false);
	}
	var button_obj = null;
	if (button_obj = document.getElementById(properties.prev_button_id))
	{
		DOMEvent.addEvent(button_obj, change_event, function(e){self.prevTab(); DOMEvent.preventDefault(e);}, false);
	}
	if (button_obj = document.getElementById(properties.next_button_id))
	{
		DOMEvent.addEvent(button_obj, change_event, function(e){self.nextTab(); DOMEvent.preventDefault(e);}, false);
	}
	
	this.setActiveTab(active_index);
	
	function changeTab(root_id, new_index, old_index)
	{
		var obj;
		if (obj = document.getElementById(root_id + '_' + old_index))
		{
			obj.style.visibility = 'hidden';
			//obj.style.display = 'none';
		}
		if (obj = document.getElementById(root_id + '_' + new_index))
		{
			obj.style.visibility = 'visible';
			//obj.style.display = 'block';
		}
	}
}



function Paging()
{
	var paging = document.getElementById("paging");
	var gallery_page = document.getElementById("gallery_page").getElementsByTagName("div")[0];
	var scroll_by = 400;
	//alert(gallery_page.offsetHeight + " " + gallery_page.scrollHeight);
	
	this.createPaging = function()
	{
		var scroll_height = gallery_page.scrollHeight;
		var count = Math.ceil(scroll_height/scroll_by);
		paging.innerHTML = "";
		for (var i=1; i <= count; i++)
		{
			paging.innerHTML += "<a href='#'>" + i + "</a>";
		}

		var top_news_tabs = new TabsMenu({
			'tabs_root_id' : 'paging',
			'tabs_tag_name' : 'a',
			'active_tab_index' : 0,
			'onChange' : scrollPage
		});
	}

	function scrollPage()
	{
		var active_tab = arguments[1];
		gallery_page.style.marginTop = -1 * active_tab * scroll_by + "px";
	}

	DOMEvent.addEvent(window, 'resize', this.createPaging, false);
}
