var GeneralSlide = new Class({
	 options: {
		offsets: { x:0, y:0, minX:0, minY:0, maxX:-1, maxY:-1 },
		positionVertical: 'top',
		positionHorizontal: 'right',
		speed: 400
	 },
	addEvent: function(evento,funcion)
	{
		this.boton.addEvent(evento,funcion);
	},
	fireEvent: function (evento,parametro)
	{
		this.boton.fireEvent(evento,parametro);
	},
	initialize: function(menu,newoptions) {

		/*ENLACES agregarACategorias*/
		// IE 6 - XML prolog problem
		/*if(window.ie6 && document.compatMode=="BackCompat"){
			this.options.animateCaption = false;
		}*/		
		//alert('1');
		/*SLIDE*/
		this.options = $merge(this.options, newoptions);
		//alert('2');
		this.menu = $(menu);
		//alert('3');
		this.tween = new Fx.Styles(this.menu,{ duration: this.options.speed, wait: false });
		//alert('4');
		/* ensure a few things */
		var css = { position: 'absolute', display:'block'};
		//alert('5');
		css[this.options.positionHorizontal] = 0;
		//alert('6');
		css[this.options.positionVertical] = 0;
		//alert('7');
		this.menu.setStyles(css);
		//alert('8');
		if($(menu+"_Scrollable"))
		{	
			//alert('9');
			var slideScroll = new Scroller(menu+"_Scrollable", {area: 70, velocity: .3});
			//alert('10');
			this.menu.addEvent('mouseover', slideScroll.start.bind(slideScroll));
			//alert('11');
			this.menu.addEvent('mouseout', slideScroll.stop.bind(slideScroll));
		}
		//alert('12');
		/* start listening */		
		this.startListeners();
	},
	startListeners: function() {
		var action = function() {
			moveX = this.options.positionHorizontal == 'right' ? this.options.offsets['x'] - window.getSize().scroll['x'] : window.getSize().scroll['x'] + this.options.offsets['x'];
			moveY = window.getSize().scroll['y'] + this.options.offsets['y'];
			this.setPosition(moveX, moveY);

		}.bind(this);
		window.addEvent('scroll',action);
		window.addEvent('load',action);
		action();
	},
	setPosition: function(moveX,moveY) {		
		var css = {};
		css[this.options.positionHorizontal] = moveX < this.options.offsets['minX'] ? this.options.offsets['minX'] : (moveX > this.options.offsets['maxX']? this.options.offsets['maxX'] : moveX);
		css[this.options.positionVertical] = moveY < this.options.offsets['minY'] ? this.options.offsets['minY'] : (moveY > this.options.offsets['maxY']? this.options.offsets['maxY'] : moveY);
		this.tween.start(css);
		return this;
	}
});