var TabsClass = Class.create();

TabsClass.prototype = {
	
	initialize: function (id, target, action_target, closable, tablink, tab_box_width)
	{
		this.tabs=new Object();
		this.actions=new Object();
		this.my_width = new Object();
		this.target=target;
		this.id=id;
		if (!tab_box_width)
		{
			this.tab_box_width="100%";
		}
		else
		{
			this.tab_box_width=tab_box_width+"px";
		}
		if (!action_target)
		{
			this.action_target="tabs_content_";
		}
		else
		{
			this.action_target=action_target.id;
		}
		this.closable=closable;
		this.tablink=tablink;
		this.start();
	},
	start: function ()
	{
		$(this.target).innerHTML='<div id="tabs_space_'+this.id+'" style="height:0px; width:'+this.tab_box_width+'; position: relative; z-index:2;"></div>';
		if (this.action_target=="tabs_content_")
		{
			$(this.target).innerHTML+='<div id="tabs_content_'+this.id+'" style="position:relative; z-index:1; margin-top:-1px;width:'+this.tab_box_width+'"></div>';
			this.action_target+=this.id;
		}
		this.register();
	},
	setTabs: function (tabs) // ���������� ����� � ���������
	{
		if (arguments[1])
			actions = arguments[1];
		else
			actions = false;
		if (arguments[2])
			active = arguments[2];
		else
			active = false;
		this.tabs=tabs;
//		this.actions=actions;
		$('tabs_space_'+this.id).innerHTML='';
		for (i in this.tabs)
		{
			if (actions)
				this.actions[i]=actions[i];
			else
				this.actions[i]=false;
			divelement=document.createElement('DIV');
			divelement.id='tabs_'+this.id+'_'+i;
			divelement.style.position='absolute';
			divelement.style.left='0px';
			divelement.style.top='0px';
			divelement.className='passivetab class_tab_'+this.id;
			divelement.innerHTML='<div style="min-width:20px; cursor: pointer"  onclick="Tabs.click($(\'tabs_'+this.id+'_'+i+'\'), \''+this.id+'\'); return false;"><table cellpadding="0" cellspacing="0" style="height:26px;" ><tr><td class="ear"><img src="/img/inv.gif" class="leftear"></td><td valign="middle" align="center" style="height:26px; min-width:100%;" class="tabname"><a>'+this.tabs[i]+'</a></td>'+(this.closable?'<td width="11px" class="closetab"><img src="/img/tabs/closetab.gif"  onclick="Tabs.closeTab('+ i +', \''+this.id+'\'); Event.stop(event);return false;" /></td>':'')+'<td valign="top" style="width:7px; height: 26px"><img src="/img/inv.gif" class="rightear" /></td></tr></table></div>';
			$('tabs_space_'+this.id).appendChild(divelement);
//			Element.addClassName($('tabs_'+this.id+'_'+i), 'class_tab_'+this.id);
			temp=i;
			this.my_width[i]=$('tabs_'+this.id+'_'+i).offsetWidth;
		}
		this.update();
		if (!active)
		{
			this.activate(temp);
		}
	},
	activate: function (ident) 
	{
		Tabs.click($('tabs_'+this.id+'_'+parseInt(ident)), this.id);
	},
	addTab: function (newTabs)
	{
		newActions = false;
		if (arguments[1])
			newActions = arguments[1];
		active_flag = false;
		if (arguments[2])
			active_flag = arguments[2];
		var acttab=$$('div.activetab')[0].id;
		for (i in newTabs)
		{
			this.tabs[i] = newTabs[i];
			if (newActions)
				this.actions[i] = newActions[i];
			else
				this.actions[i] = false;
		}
		this.setTabs(this.tabs,this.actions,true);
		if (!active_flag)
		{
			Element.removeClassName ($(acttab), 'passivetab');
			Element.addClassName ($(acttab), 'activetab');
//			Element.addClassName ($(acttab), 'activetab');
//			Element.removeClassName ($(acttab).next(4).next(), 'closetabpassive');
//			Element.addClassName ($(acttab).next(4).next(), 'closetabactive');
//			Element.addClassName ($(acttab).next(4).next(1).next(), 'activetabright');

//			Tabs.click($(acttab), this.id);
		}
		else
		{
			this.activate (active_flag);
		}
	},
	update: function ()
	{
		tabs=$$('div.class_tab_'+this.id);
/*
			temp_html = new Array();

			for (i=0;i<tabs.length;i++)
			{
				temp_html[i]=tabs[i].innerHTML;
			}

			$('tabs_space_' + this.id).innerHTML='';

*/
		divelement=document.createElement('DIV');
		divelement.id="tabs_line_"+this.id+'_1';
		divelement.style.position='absolute';
		divelement.style.left='0px';
		divelement.style.top='0px';
		divelement.style.width='0px';
		$('tabs_space_'+this.id).appendChild(divelement);
		tabs[0].style.left='0px';
		line=1;

		for (i=0; i<tabs.length; i++)
//		for (i in tabs)
		{
//			tabs[i].innerHTML=temp_html[i];
			if(($("tabs_line_"+this.id+'_'+line).offsetWidth+tabs[i].offsetWidth)>$('tabs_space_'+this.id).offsetWidth)
			{
				line++;
				divelement=document.createElement('DIV');
				divelement.id="tabs_line_"+this.id+'_'+line;
				divelement.style.position='absolute';
				divelement.style.left='0px';
				divelement.style.top=((line-1)*26)+'px';
				$('tabs_space_'+this.id).appendChild(divelement);
			}

			line_width=0;
			for (k=0; k<$("tabs_line_"+this.id+'_'+line).childNodes.length; k++)
			{
				line_width+=$("tabs_line_"+this.id+'_'+line).childNodes[k].offsetWidth;
			}
			tabs[i].style.left=line_width+'px';
			$("tabs_line_"+this.id+'_'+line).style.width=(line_width+tabs[i].offsetWidth)+'px';
			$("tabs_line_"+this.id+'_'+line).appendChild(tabs[i]);
		}
		$('tabs_space_'+this.id).style.height=(line*26)+'px';
		tabs_lines=$('tabs_space_'+this.id).childNodes;
		if (tabs_lines.length>1)
		{
//			alert(1);
//			alert(tabs_lines.length);
			for(i=0; i<tabs_lines.length; i++)
			{
				tabs=tabs_lines[i].childNodes;
				delta=parseInt(($('tabs_space_'+this.id).offsetWidth-tabs_lines[i].offsetWidth)/tabs.length);
				for (k=0; k<tabs.length; k++)
				{
					tabs[k].style.left=(parseInt(tabs[k].style.left)+delta*k)+'px';
					tabs[k].style.width=(tabs[k].offsetWidth+delta)+'px';
					tabs[k].firstChild.style.width='100%';
					tabs[k].firstChild.firstChild.style.width='100%';
				}
				if ($("tabs_line_"+this.id+'_'+(i+1)))
					$("tabs_line_"+this.id+'_'+(i+1)).style.width = $('tabs_space_'+this.id).offsetWidth;
				var tempWidth = $('tabs_space_'+this.id).offsetWidth - tabs[tabs.length-1].offsetWidth - parseInt(tabs[tabs.length-1].style.left);
				tabs[tabs.length-1].style.width = tabs[tabs.length-1].offsetWidth + tempWidth + 'px';
			}
		}
	},
	addClass: function (id, classname)
	{
		acttab=$('tabs_'+this.id+'_'+id)
		if (acttab)
		{
			Element.addClassName(acttab, classname);
		}
	},
	removeClass: function (id, classname)
	{
		acttab=$('tabs_'+this.id+'_'+id)
		if (acttab)
		{
			Element.removeClassName (acttab, classname);
		}		
	},
	register: function ()
	{
		Tabs.elements[this.id]=this;
	}
}

var Tabs = new Object();

Tabs={
		click: function (ob, id)
		{
			acttab=$$('div.activetab');
			if (acttab[0])
			{
				Element.removeClassName(acttab[0], 'activetab');
				Element.addClassName (acttab[0], 'passivetab');
			}
//			acttab=$('tabs_space_'+id).getElementsByClassName('closetabactive');
//			if (acttab[0])
//			{
//				Element.removeClassName(acttab[0], 'closetabactive');
//				Element.addClassName(acttab[0], 'closetabpassive');
//			}
//			acttab=$('tabs_space_'+id).getElementsByClassName('activetabright');
//			if (acttab[0])
//			{
//				Element.removeClassName(acttab[0], 'activetabright');
//				acttab[0].src='/img/tabs/pravo_off.gif';
//			}
//			pastab=$(ob.id).getElementsByClassName('passivetab');

			if (ob.hasClassName('passivetab'))
			{
//				alert(1);
				Element.removeClassName(ob, 'passivetab');
				Element.addClassName(ob, 'activetab');
			}
//			pastab=ob.getElementsByClassName('closetabpassive');
//			if (pastab[0])
//			{
//				Element.addClassName(pastab[0], 'closetabactive');
//				Element.removeClassName(pastab[0], 'closetabpassive');
//			}
//			pastab=ob.getElementsByClassName('tabright');
//			if (pastab[0])
//			{
//				Element.addClassName(pastab[0], 'activetabright');
//				pastab[0].src='/img/tabs/pravo_on.gif';
//			}

			tab_line=ob.parentNode;
			last_tab_line=$('tabs_space_'+id).lastChild;
			tab_line.style.top=(parseInt(last_tab_line.style.top)+26)+'px';
			gogogo=0;
			for(i=0; i<$('tabs_space_'+id).childNodes.length; i++)
			{
				
				if ($('tabs_space_'+id).childNodes[i]==tab_line)
				{
					gogogo=1;
				}
				if (gogogo==1)
				{
					$('tabs_space_'+id).childNodes[i].style.top=(parseInt($('tabs_space_'+id).childNodes[i].style.top)-26)+'px';
				}
			}
			$('tabs_space_'+id).appendChild(tab_line);
			acttab=$$('div.activetab');
			//alert(acttab[0]);
			if (acttab[0])
			{
				reg=/.*_(\d+)$/;
				click_id = reg.exec(acttab[0].id);
				new Ajax.Updater (this.elements[id].action_target, (this.elements[id].actions[click_id[1]]?this.elements[id].actions[click_id[1]]+'?tab='+ob.id.substr(ob.id.lastIndexOf('_')+1):this.elements[id].tablink+'?tab='+ob.id.substr(ob.id.lastIndexOf('_')+1)), {evalScripts: true});
			}
		},
		closeTab: function (id, ob_id)
		{
			delete (this.elements[ob_id].tabs[id]);
			ob = $('tabs_' + ob_id + '_' + id);
			temp_ob_name='tabs_' + ob_id + '_' + id;
			
			all_tabs=$$('div.class_tab_'+ob_id);
			
			for (i=0; i<all_tabs.length;i++)
			{
				if (all_tabs[i].id==temp_ob_name)
					id_in_array=i;
			}
			
			ob.remove();
			
			els = $$('div.class_tab_'+ob_id);
			
			temp_html = new Array();
			
			for (i=0;i<els.length;i++)
			{
				temp_html[i]=els[i].innerHTML;
			}
			
			$('tabs_space_' + ob_id).innerHTML='';

			divelement=document.createElement('DIV');
			divelement.id="tabs_line_"+ob_id+'_1';
			divelement.style.position='absolute';
			divelement.style.left='0px';
			divelement.style.top='0px';
			divelement.style.width='0px';
			$('tabs_space_'+ob_id).appendChild(divelement);
			line=1;

			for (i=0; i<els.length; i++)
			{
				els[i].innerHTML=temp_html[i];
				els[i].setStyle({width:''})
				reg=/.*_(\d+)$/;
				click_id = reg.exec(els[i].id);
//				for (h in this.elements[ob_id].my_width)
//					alert (this.elements[ob_id].my_width[h]);
				els[i].style.width=this.elements[ob_id].my_width[click_id[1]];
				$("tabs_space_"+ob_id).appendChild(els[i]);

				if (($("tabs_line_"+ob_id+'_'+line).offsetWidth+els[i].offsetWidth)>$('tabs_space_'+ob_id).offsetWidth)
				{
					line++;
					divelement=document.createElement('DIV');
					divelement.id="tabs_line_"+ob_id+'_'+line;
					divelement.style.position='absolute';
					divelement.style.left='0px';
					divelement.style.top=((line-1)*26)+'px';
					$('tabs_space_'+ob_id).appendChild(divelement);
				}

				line_width=0;
				for (k=0; k<$("tabs_line_"+ob_id+'_'+line).childNodes.length; k++)
				{
					line_width+=$("tabs_line_"+ob_id+'_'+line).childNodes[k].offsetWidth;
				}
				els[i].style.left=line_width+'px';
				$("tabs_line_"+ob_id+'_'+line).style.width=(line_width+els[i].offsetWidth)+'px';
				$("tabs_line_"+ob_id+'_'+line).appendChild(els[i]);
			}

			$('tabs_space_'+ob_id).style.height=(line*26)+'px';
			tabs_lines=$('tabs_space_'+ob_id).childNodes;

			if (tabs_lines.length > 1)
			{
				for(i=0; i<tabs_lines.length; i++)
				{
					els=tabs_lines[i].childNodes;
					delta=parseInt(($('tabs_space_'+ob_id).offsetWidth - tabs_lines[i].offsetWidth)/els.length);
					for (k=0; k<els.length; k++)
					{
					els[k].style.left=(parseInt(els[k].style.left)+delta*k)+'px';
						els[k].style.width=(els[k].offsetWidth+delta)+'px';
					}
				}
			}

//Здесь расстановка элементов закончена и начинается активация табы

			if ((els=$$('div.class_tab_'+ob_id))[0])
			{
				if (!$$('div.activetab')[0])
				{
//закрыли активную табу
					if (!id_in_array)
					{
//закрыли активную. не крайнюю
						this.click(els[0],ob_id);
					}
					else
					{
//закрыли активную. крайнюю
						this.click(els[id_in_array-1],ob_id);
					}
				}
/*				else
				{
//закрыли пассивную
					//this.click($($('tabs_space_'+ob_id).getElementsByClassName('activetab')[0].parentNode.parentNode.parentNode.parentNode.parentNode.id),ob_id);
				}*/
			}
			else
			{
				$(this.elements[ob_id].action_target).innerHTML='';
			}
//			this.elements[ob_id].update();
			this.exec_on_close (id);
		},
		exec_on_close: function (id)
		{
/*
	Несмотря на то, что этот метод пустой - удалять его нельзя.
	Существует он для того, чтобы выполнять какой-то код по закрытии таба.
	Для того, чтобы его использовать - необходимо при создании экземпляра класса перекрыть метод Object.Extend - ом.
	Параметр всегда только один - id табы.
*/
		},
		elements: new Object()
	 }