function xec_slide( paramID )
{
	this.mouse_over = false;
	this.present_left = 0;
	this.present_equal_times = 1;
	this.next_page_num_blocks = 4;
	this.slide_id = paramID;
	this.slide_obj = $("#"+this.slide_id);
	this.slide_visible_width = 0;
	this.slide_width = 0;
	this.slide_visible_height = 0;
	this.slide_block_width = 0;
	this.num_thumbs = 0;
	this.timeout_instance = null;
	this.thumbs_on_page = 0;
	this.pager_links = 0;
	this.page_range = new Array();
	this.pager_default_class = "default";
	this.auto_slide = true;
	this.auto_slide_time_left = 0;
	this.auto_slide_interval = 3000;
	this.auto_slide_speed = 2000;
	this.auto_slide_callbackspeed = 10;
	this.auto_slide_stop_on_out = true;
	this.slide_page_num_blocks = 4;
	this.move_slide_finished = true;
	this.init_carousel = function()
	{
		var obj = this;
		obj.stop_slide( $("#"+obj.slide_id) );
		obj.allow_slide( $("#"+obj.slide_id) );
		//obj.stop_slide( $("#"+obj.slide_id+" *") );
		//obj.allow_slide( $("#"+obj.slide_id+" *") );
		var num_thumbs = this.num_thumbs;
		var slide_block_width = this.slide_block_width;
		$("#"+obj.slide_id+" .xec_slide_conteiner ul li").each(function(i)
		{
			slide_block_width = $(this).width();
			obj.slide_width+= slide_block_width;
			var tmp = $(this).html();
			$(this).html('<div class="li_conteiner">'+tmp+'</div>');
			obj.num_thumbs++;
		});
		$("#"+obj.slide_id+" .xec_slide_conteiner").css("width", obj.slide_width);
		obj.thumbs_on_page = Math.ceil( $(obj.slide_obj).width() / slide_block_width);
		obj.slide_block_width = slide_block_width;
		obj.attach_next();
		obj.attach_prev();
		obj.set_page_links();
		return obj;
	};
	this.move_slide = function( paramBlocks, paramMinusPlus)
	{
		//paramGoToStart = paramGoToStart || false;
		var obj = this;
		var from_left = $("#"+obj.slide_id+" .xec_slide_conteiner").css("left");
		from_left = Math.abs( parseInt( from_left ) );
		var blocks_from_left = 0;
		var new_left = 0;
		if( from_left > 0 )
		{
			blocks_from_left = Math.ceil( from_left / obj.slide_block_width );
		}
		if( paramMinusPlus == 1 )
		{// plus
			var total_visible = from_left + ( obj.thumbs_on_page * obj.slide_block_width);
			var total_plus = from_left + ( paramBlocks * obj.slide_block_width );
			if(  total_plus < ( obj.slide_width - ( obj.thumbs_on_page * obj.slide_block_width) ) )
			{
				new_left = -total_plus;
			}
			else
			{
				
				new_left = - ( obj.slide_width - ( obj.thumbs_on_page * obj.slide_block_width) );
			}
		}
		else if( paramMinusPlus == -1)
		{//minus
			
			var minus_block = 0;
			if( blocks_from_left >= paramBlocks)
			{
				new_left = -( from_left - ( paramBlocks * this.slide_block_width ) );
			}
			else
			{
				new_left = 0;
			}
		}
		obj.move_slide_animation(new_left);
		return obj;
	};
	
	this.move_slide_animation = function(paramLeft)
	{
		var obj = this;
		if( obj.move_slide_finished == true )
		{
			obj.move_slide_finished = false;
			if( obj.present_left == paramLeft )
			{
				if( obj.present_equal_times == 2)
				{
					paramLeft = 0;
				}
				obj.present_equal_times+= 1;
			}
			else
			{
				obj.present_equal_times = 1;
			}
			
			var html_obj = $("#"+obj.slide_id+" .xec_slide_conteiner");
			var html_left = parseInt( $(html_obj).css('left') );
			var dif = paramLeft - html_left;
			var callbacks = obj.auto_slide_speed / obj.auto_slide_callbackspeed;
			var part = dif / callbacks;
			if( paramLeft > html_left)
			{
				var posneg = 1;
			}
			else
			{
				var posneg = 2;
			}
			obj.animate_slide_left(html_obj, part, html_left, paramLeft, posneg);
			if( obj.present_left == paramLeft )
			{
				obj.slide_interval();
			}
			obj.present_left = paramLeft;
		}
		var pages = obj.page_range;
		var num_pages = pages.length;
		var to_left = Math.abs( paramLeft );
		for( var i = 0; i < num_pages; i++)
		{
			if( (i+1) <= num_pages )
			{
				//Dump("tmpEnd: "+pages[i].end+" | tmpStart: "+pages[i].start+" | end "+to_left+" | next : "+pages[(i+1)]);
				if(to_left > pages[i].start && to_left <= pages[i].end)
				{
					$("#"+obj.slide_id+"_"+pages[i].pos).attr('class', "active");
				}
				else
				{
					$("#"+obj.slide_id+"_"+pages[i].pos).attr('class', obj.pager_default_class);
				}
			}
			else
			{
				if(to_left > pages[i].start)
				{
					$("#"+obj.slide_id+"_"+pages[i].pos).attr('class', "active");
				}
				else
				{
					$("#"+obj.slide_id+"_"+pages[i].pos).attr('class', obj.pager_default_class);
				}	
			}
		}
		return obj;
	};
	this.animate_slide_left = function(paramObj, part, current_left, to_left, paramEqTest)
	{
		var obj = this;
		var continue_script = true;
		if( paramEqTest == 1 )
		{
			if( current_left >= to_left )
			{
				continue_script = false;	
			}
		}
		else if( paramEqTest == 2)
		{
			if( current_left <= to_left )
			{
				continue_script = false;	
			}
		}
		
		if(continue_script == true)
		{
			var new_left = (current_left+part);
			$(paramObj).css("left", new_left);
			setTimeout(function(){obj.animate_slide_left(paramObj, part, new_left, to_left, paramEqTest) }, obj.auto_slide_callbackspeed );
		}
		else
		{
			$(paramObj).css("left", to_left);
			obj.move_slide_finished = true;
			
			if( obj.auto_slide == true )
			{
				obj.slide_interval();
			}
		}
	};
	this.stop_slide  = function( paramObj )
	{
		var obj = this;
		$(paramObj).mouseout(function()
		{
			obj.mouse_over = false;
			if( obj.auto_slide == true)
			{
				if( obj.auto_slide_stop_on_out == true )
				{
					obj.auto_slide = false;
				}
				obj.slide_interval_clear();
				obj.slide_interval();
			}
		});
		return obj;
	};
	this.allow_slide = function( paramObj )
	{
		var obj = this;
		$(paramObj).mouseover(function()
		{
			//clearTimeout( obj.timeout_instance );
			obj.mouse_over = true;
			obj.slide_interval_clear();
		});
		return obj;
	}
	this.slide_interval_clear = function()
	{
		var obj = this;
		clearInterval( obj.timeout_instance );
		obj.timeout_instance = null;
		return obj;
	};
	this.slide_interval = function ()
	{
		var obj = this;
		if( obj.timeout_instance == null )
		{
			//Dump( "CALLBACK : "+Math.random() );
			obj.timeout_instance = setTimeout(function()
			{
				obj.slide();
			}, obj.auto_slide_interval);
		}
		return obj;
	}
	this.set_page_links = function()
	{
		var obj = this;
		var page_width = ( obj.thumbs_on_page *  obj.slide_block_width);
		var pages = Math.ceil( ( obj.slide_width / obj.thumbs_on_page ) / obj.slide_block_width );
		var first_active = false;
		for( var i = 0; i <= obj.pager_links; i++)
		{
			if(null != $("#"+obj.slide_id+"_"+i).html() && i <= pages)
			{
				if( first_active == false ) 
				{
					$("#"+obj.slide_id+"_"+i).attr("class", "active");
					first_active = true;
				}
				else
				{
					$("#"+obj.slide_id+"_"+i).attr("class", obj.pager_default_class);
				}
				var tmp = {};
				tmp.start = ( (i - 1) * page_width ) - page_width;
				tmp.end = ( (i - 1) * page_width );
				tmp.pos = i;
				$("#"+obj.slide_id+"_"+i).click(function()
				{
					var cnt = $(this).attr("id").substr( obj.slide_id.length+1 );
					var new_left = - ( (cnt - 1) * page_width );
					obj.move_slide_animation(new_left);
				});
				obj.page_range.push( tmp );
			}
		}
		
		if(null != $("#"+obj.slide_id+"_nav").html() )
		{
			obj.stop_slide( $("#"+obj.slide_id+"_nav") );
			obj.allow_slide( $("#"+obj.slide_id+"_nav") );
		}
		return obj;
	};
	this.attach_next = function()
	{
		var obj = this;
		if(null != $("#"+obj.slide_id+"_next").html() )
		{
			$("#"+obj.slide_id+"_next").click(function()
			{
				obj.move_slide(obj.next_page_num_blocks, 1, true);
			});
		}
		return obj;
	};
	this.attach_prev = function()
	{
		var obj = this;
		if(null != $("#"+obj.slide_id+"_prev").html() )
		{
			$("#"+obj.slide_id+"_prev").click(function()
			{
				obj.move_slide(obj.next_page_num_blocks, -1);
			});
		}
		return obj;
	};
	this.init = function()
	{
		var obj = this.init_carousel();
		if( obj.auto_slide == true)
		{
			obj.slide_interval();
		}
		return obj;
	};
	this.slide = function()
	{
		var obj = this;
		if( obj.mouse_over == false)
		{
			obj.move_slide(obj.slide_page_num_blocks, 1);
			//clearTimeout( obj.timeout_instance );
			obj.slide_interval_clear();
		}
		else
		{
			//obj.slide_interval();
		}
		//clearTimeout( obj.timeout_instance );
		obj.slide_interval_clear();
		return obj;
	}
	return this;
}
