var SmoothlyDiv = {

    obj:null,

//-------------------------------------------------------------------------------------------------------------------------
//-------------------------------Инициализирцем объекты --------------------------------
//      o - Объект при наведении на который появляется див
//      oDiv - сам див
//		flag - изменять имя ссылкы показать/скрыть 0-не менять 1-менять
//-------------------------------------------------------------------------------------------------------------------------
    init : function(o,obj_name,flag){

        this.obj=o;
        o.divelement=$(obj_name);

        o.move_handler=0;
        o.step_delta=-1;
        o.maxHeight=$(obj_name+'_hide').offsetHeight;
				
		o.onclick = SmoothlyDiv.start_move;
		
		o.flag = flag;
		
		o.poss = new Array();
		o.curPos = 0;
		o.cur_H = 0;

    },
//-------------------------------------------------------------------------------------------------------------------------
//-------------------------------Показываем подсказку----------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------------------

    start_move :  function (){
 		
        var o = SmoothlyDiv.obj = this;
		
		o.poss = algoritm(o.maxHeight);

		if(o.move_handler!=0)
		{
			o.move_handler=0;
			clearInterval(o.move_handler);
		}

		if(o.step_delta<0){
        	o.step_delta=1;
			o.curPos = 0;
        	o.move_handler=setInterval(function() { SmoothlyDiv.sdvig(o); },30);
		}else{
	    	o.step_delta=-1;
			o.curPos = 0;
    		o.move_handler=setInterval(function() { SmoothlyDiv.sdvig(o); },30);
		}
	},

    sdvig : function (object){
    	
		var o=object;
		
		if(o.step_delta>0)
		{
			if (o.cur_H < o.maxHeight) 
			{
				o.cur_H = o.poss[o.curPos++];
				o.divelement.style.height = o.cur_H.toString() + "px";
				
			} 
			else 
			{
				o.divelement.style.height = o.maxHeight.toString() + "px";
				o.cur_H = o.maxHeight;
				clearInterval(o.move_handler);
				o.move_handler = 0;
				if(o.flag==1) { o.text = "скрыть"; }
			}
		}
		else
		{
			if (o.cur_H > 0) 
			{
				o.cur_H = o.maxHeight - o.poss[o.curPos++];
				o.divelement.style.height = o.cur_H.toString() + "px";
			} 
			else 
			{
				o.divelement.style.height = "0px";
				o.cur_H = 0;
				clearInterval(o.move_handler);
				o.move_handler = 0;
				if(o.flag==1) { o.text = "показать"; }
			}
		}	
	}
}

/* АЛГОРИТМ ВЫПАДАНИЯ ОБЪЕКТА */
function algoritm(max_H)
{
	var mas = new Array();
	
	var half_H = Math.round(max_H/2);
	var k = 1, sch = 0;
	var last_k;
	var temp_poss = new Array();
	var flag;
	
	while(k<=half_H)
	{
		last_k = k;
		temp_poss[sch] = k;
		sch++;
		k *= 2;
	}
	
	for (var i = 0; i < temp_poss.length; i++) {
		mas[i] = temp_poss[i];
		flag = i;
	}
	
	if(mas[mas.length] != half_H)
	{
		mas[mas.length] = half_H;
		mas[mas.length] = half_H+(half_H-mas[mas.length-2])+1;	
	}
	else
		mas[mas.length] = half_H+(half_H-mas[mas.length-1])+1;
	
	sch = mas.length; // позиция следующего значения в массиве poss
	
	for (var i = flag-1; i >= 0; i--) {
		mas[sch] = mas[sch-1]+temp_poss[i];
		sch++;		
	}
	/*for (var i = 0; i < poss.length; i++) {
		alert(poss[i]);
	}*/
	
	return mas;
}