function med_carousel(objConf)
{

	var _this = this;
	this.button_next;
	this.button_back;
	this.content;
	this.cduplicate;
	this.cduplicatestatic;
	this.cmain;
	this.content_width = 0;
	this.currentIndex = 0;
	this.scrollOffset = 0;
	this.wasInit = false;
	this.arrPositions = Array();
	this.freqInterval;
	this.movable = false;
	this.defaultVal = function(desiredVal, defaultVal){return(desiredVal)?desiredVal:defaultVal;};

	this.id_back = this.defaultVal(objConf.id_back,'c_back');
	this.id_main = this.defaultVal(objConf.id_main,'c_main');
	this.id_next = this.defaultVal(objConf.id_next,'c_next');
	this.id_outer = this.defaultVal(objConf.id_outer,'c_outer');
	this.class_label = this.defaultVal(objConf.class_label,'c_label');
	this.class_item = this.defaultVal(objConf.class_item,'c_item');
	this.class_item_hover = this.defaultVal(objConf.class_item_hover,'c_item_hover');
	this.items = this.defaultVal(objConf.items,{});
	this.skin = this.defaultVal(objConf.skin,'carouselskin/');
	this.speed = this.defaultVal(objConf.speed,2);
	//this.visibleAtOnce = this.defaultVal(objConf.visibleAtOnce, 2);
	this.stepsize = 1;//this.defaultVal(objConf.stepsize,3);
	this.imgstyle = this.defaultVal(objConf.imgstyle, {padding: '9px 0 0 0'});
	this.imgspace = this.defaultVal(objConf.imgspace, 9);
	this.button_width = this.defaultVal(objConf.button_width, 21);
	this.frequency = this.defaultVal(objConf.frequency, 0);
	this.transition = this.defaultVal(objConf.transition, function(x){return x;});
	this.arrItems = [];

	this.init = function()
	{
		var back = $(_this.id_back);
		new Image().src = _this.skin+'left-onclick.gif';
		_this.button_back = new Image();
		_this.button_back.src = _this.skin+'left.gif';
		_this.button_back.id = _this.id_back+'_button';
		back.observe('mousedown',function(e){
			_this.button_back.src = _this.skin+'left-onclick.gif';
		});
		back.observe('click',function(e){
			_this.button_back.src = _this.skin+'left.gif';
			if(_this.freqInterval)
			{
				clearInterval(_this.freqInterval);
			}
			_this.move(_this.stepsize*-1);
		});
		back.observe('mouseout',function(e){
			_this.button_back.src = _this.skin+'left.gif';
		});
		back.update(_this.button_back);

		var next = $(_this.id_next)
		new Image().src = _this.skin+'right-onclick.gif';
		_this.button_next = new Image();
		_this.button_next.src = _this.skin+'right.gif';
		_this.button_next.id = _this.id_next+'_button';
		next.observe('mousedown',function(e){
			_this.button_next.src = _this.skin+'right-onclick.gif';
		});
		next.observe('click',function(e){
			_this.button_next.src = _this.skin+'right.gif';
			if(_this.freqInterval)
			{
				clearInterval(_this.freqInterval);
			}
			_this.move(_this.stepsize);
		});
		next.observe('mouseout',function(e){
			_this.button_next.src = _this.skin+'right.gif';
		});
		next.update(_this.button_next);
		_this.init_carousel();
	};
	
	this.insertEl = function(i,container,suffix)
	{
		
		var label = (this.items[i]['description'])?'<div class="'+this.class_label +'" ><a href="'+this.items[i]['url']+'">'+this.items[i]['description']+'</a></div>':'';
				
		var banner = new Image();
		banner.src = this.items[i].img;
		banner.title = this.items[i]['description'];
		banner.className = i;
		banner.alt = this.items[i]['description'];
		$(banner).setStyle(this.imgstyle);
		
		container.insert('<div id="'+this.id_main+'_img_'+i+suffix+'" class="'+this.class_item+' '+(this.items[i].active?this.class_item_hover:'')+'" style="position:absolute; left:'+this.content_width+'px;  width:'+this.items[i].width+'px; height:'+this.items[i].height+'px; "></div>');
		$(this.id_main+'_img_'+i+suffix).insert(banner);
		$(this.id_main+'_img_'+i+suffix).insert(label);
		$(this.id_main+'_img_'+i+suffix).observe('mouseover',this.onItemOver);
		$(this.id_main+'_img_'+i+suffix).observe('mouseout',this.onItemOut);
		$(banner).observe('click', function(e){_this.bannerclick(e);});
		this.arrItems.push(this.id_main+'_img_'+i+suffix);
		if(this.items[i].active)this.activeEl=$(this.id_main+'_img_'+i+suffix);
	};
	
	this.init_carousel = function()
	{
		var container;
		if(!(container = $(this.id_main))||this.wasInit||!this.items.length)return;
		this.wasInit = true;
		container.update('<div id="'+this.id_main+'_content"></div>');
		this.content = $(this.id_main+'_content');
		this.content.insert('<div id="'+this.id_main+'_cmain"></div><div id="'+this.id_main+'_cduplicate"></div><div id="'+this.id_main+'_cduplicate2"></div>');
		this.cmain = $(this.id_main+'_cmain');
		this.cduplicate = $(this.id_main+'_cduplicate');
		this.cduplicatestatic = $(this.id_main+'_cduplicate2');
		var parentDimensions = $(this.id_outer).getDimensions();
		container.setStyle({
				overflow: 'hidden',
				position:'absolute',
				height: parentDimensions.height+'px',
				left: this.button_width+'px',
				width:(parentDimensions.width-(this.button_width*2))+'px'
		});
        var t=this;
		if(this.items.length > 3)
		{
			
            for(var i=0;i<this.items.length;i++)
			{
				// CAROUSELBAR1
				this.insertEl(i,this.cmain,'');

                // CAROUSELBAR2
				//this.insertEl(i, this.cduplicate, '_d');

				// CAROUSELBAR3
				//this.insertEl(i, this.cduplicatestatic, '_d2');

				this.arrPositions.push(this.content_width-this.imgspace);
				this.content_width += this.items[i]['width']+this.imgspace;
			}
			this.movable = true;
			this.scrollposition=1;
            this.content.setStyle({position: 'absolute', width: (this.content_width*3)+'px'});
			this.cmain.setStyle({position: 'absolute', left: '0px', width: this.content_width+'px'});
			this.cduplicate.setStyle({position: 'absolute', left: this.content_width+'px', width:this.content_width+'px'});
			this.cduplicatestatic.setStyle({position: 'absolute', left: (-this.content_width)+'px', width:this.content_width+'px'});
			if(this.frequency)
			{
				this.freqInterval = setInterval (this.onTimeout,this.frequency*1000);
			}
		}else{
			for(var i=0;i<this.items.length;i++)
			{
				this.insertEl(i,this.cmain,'');


				this.arrPositions.push(this.content_width-this.imgspace);
				this.content_width += this.items[i]['width']+this.imgspace;
			}
			this.cmain.setStyle({position: 'absolute', left: (-this.arrPositions[0])+'px', width: this.content_width+'px'});
			this.movable = false;
			$(t.id_next).hide();
			$(t.id_back).hide();
		}
        this.scrollposition=0;
		this.move(0, true);
	}

	this.onItemOver = function(e)
	{
	     e = e || window.event;
        var target = e.srcElement || e.target;
        if (target != this) return;

        var el = e.element();
        if($(el).hasClassName(_this.class_item))$(el).addClassName(_this.class_item_hover);

        for(var i = 0;i<_this.arrItems.length;i++)if($(_this.arrItems[i]) != $(el) && _this.activeEl != $(_this.arrItems[i]))$(_this.arrItems[i]).removeClassName(_this.class_item_hover);

	}
	this.onItemOut = function(e)
	{
        e = e || window.event;
        var target = e.srcElement || e.target;
        if (target != this) return;

        var related = e.relatedTarget || e.toElement;
        while (related && related != this && related.nodeName != 'BODY')
          related = related.parentNode;
        if (related == this) return;


        var el = e.element();
		if($(el).hasClassName(_this.class_item)&&$(el)!=_this.activeEl)$(el).removeClassName(_this.class_item_hover);
	}
	this.bannerclick = function(e)
	{
		var el = e.element();
		if($(el).alt)document.location.href=this.items[el.className]['url'];
		
		var item = $(el).getOffsetParent();
		
		if(this.activeEl && this.activeEl.hasClassName(_this.class_item_hover))this.activeEl.removeClassName(_this.class_item_hover);
		this.activeEl = item;
		if(!this.activeEl.hasClassName(_this.class_item_hover))this.activeEl.addClassName(_this.class_item_hover);
		
	}

	this.onTimeout = function()
	{
		_this.move(_this.stepsize);
	}

	this.move = function(steps, noAnimation)
	{
		if(!this.movable)return;
		
		if(this.scrollposition+steps <0 || (this.scrollposition+steps+2) >= this.items.length)return;
		this.scrollposition += steps;
		
		//window.console.debug([this.scrollposition+steps , this.items.length-1]);
		
        if((this.currentIndex + steps < 0))
		{
			this.currentIndex = this.arrPositions.length + (this.currentIndex + steps);
			this.scrollOffset--;
			this.cduplicate.style.left = this.cmain.style.left;
			var oldX = this.cmain.positionedOffset();
			this.cmain.setStyle({left:(oldX.left-this.content_width)+'px'});
			this.cduplicatestatic.setStyle({left:(oldX.left-(this.content_width*2))+'px'});
			//alert(this.cmain.getStyle('left').substr(0,this.cmain.getStyle('left').lastIndexOf('px')));
		}else if(this.currentIndex + steps > this.arrPositions.length-1)
		{
			this.currentIndex = steps +(this.currentIndex-this.arrPositions.length);
			this.scrollOffset++;
			this.cduplicate.style.left = this.cmain.style.left;
			var oldX = this.cmain.positionedOffset();
			this.cmain.setStyle({left:(oldX.left+this.content_width)+'px'});
			this.cduplicatestatic.setStyle({left:(oldX.left+(this.content_width*2))+'px'});
			//alert(oldX+' '+(oldX+this.content_width));
		}else{
			this.currentIndex += steps;
		}
		//this.content.setStyle({left: -this.arrPositions[this.currentIndex]+'px'});
		var newX = -((this.scrollOffset*this.content_width)+this.arrPositions[this.currentIndex]);
		if(noAnimation)
		{
			this.content.setStyle({left:newX+'px'});
		}else{
			new Effect.Move(this.content,{x: newX, mode: 'absolute', duration: this.speed, transition: this.transition});
		}
	};
}

