var libreria = {

	efectoEnMovimiento : false,

	expandir : function(elemento, incremento, velocidad) {
		libreria.efectoEnMovimiento = true;
	
		elemento.style.height = '0px';
		elemento.style.marginTop = '0px';
		elemento.style.marginBottom = '0px';
		elemento.style.visibility = 'visible';
		elemento.style.display = 'block';
		
		var h = elemento.getAttribute('alturaOriginal');
		
		if (elemento.className == 'almacen') {
			h = '300';
		}

	    for ( var i = 0; i <= 100; i += incremento ) {
	        (function(){
	            var pos = i;

	            setTimeout(
					function(){
						var newHeigth = ( ( pos / 100 ) * h );
	                	elemento.style.height = newHeigth +"px";
						if(newHeigth >= h){
							libreria.efectoEnMovimiento = false;
							elemento.style.height = 'auto';
							elemento.style.overflow = '';
							
							if (elemento.className == 'almacen') {
								elemento.style.height = h +'px';
								elemento.style.overflow = 'auto';
							}
						}
	            	},
					( pos + 1 ) * velocidad
				);
	        })();
	    }
	},

	contraer : function(elemento, incremento, velocidad) {		
		libreria.efectoEnMovimiento = true;
		var h = elemento.getAttribute('alturaOriginal');
	
		for ( var i = 100; i >= 0; i -= incremento ) {
	        (function(){
	            var pos = i;

	            setTimeout(
					function(){
						var newHeigth = ( ( pos / 100 ) * h );
	                	elemento.style.height = newHeigth +"px";
						if(newHeigth <= 0){
							elemento.style.display = 'none';
							elemento.style.height = h+'px';
							libreria.efectoEnMovimiento = false;
							elemento.style.overflow = '';
						}
	            	},
					( 100 - pos + 1 ) * velocidad
				);
	        })();
	    }
	},
	
	addEvent : function(obj, type, fn) {
		if (obj.addEventListener)
			obj.addEventListener(type, fn, false);
		else if (obj.attachEvent) {
			obj["e" + type + fn] = fn;
			obj[type+fn] = function() {
				obj["e" + type + fn](window.event);
			}
			obj.attachEvent("on" + type, obj[type + fn]);
		}
	},

	removeEvent : function(obj, type, fn) {
		if (obj.removeEventListener)
			obj.removeEventListener(type, fn, false);
		else if (obj.detachEvent) {
			obj.detachEvent("on" + type, obj[type + fn]);
			obj[type + fn] = null;
			obj["e" + type + fn] = null;
		}
	},
	
	domReady : function(metodo) {
		this.n = typeof this.n == 'undefined' ? 0 : this.n + 1;

		if (typeof document.getElementsByTagName != 'undefined' && (document.getElementsByTagName('body')[0] != null || document.body != null)) {
			metodo();
		}
		else if(this.n < 60) {
			setTimeout('domReady('+ metodo +')', 250);
		}
	},

	getElementsByClass : function(searchClass, node, tag) {
		var classElements = new Array();
		if (node == null)
			node = document;
		if (tag == null)
			tag = '*';
		var els = node.getElementsByTagName(tag);
		var elsLen = els.length;
		var pattern = new RegExp('(^|\\s)'+searchClass+'(\\s|$)');
		for (i = 0, j = 0; i < elsLen; i++) {
			if (pattern.test(els[i].className)) {
				classElements[j] = els[i];
				j++;
			}
		}
		return classElements;
	},

	insertAfter : function(parent, node, referenceNode) {
		parent.insertBefore(node, referenceNode.nextSibling);
	},
	
	toggle :function(obj) {
		var el = (obj.constructor == 'String')?document.getElementById(obj):obj;
		
		if (!el.style) {
			return false;
		}
		
		if ( el.style.display == '' || el.style.display == 'block' || el.style.display == 'inline' ) {
			el.setAttribute('displayAntiguo', el.style.display);
			el.style.display = 'none';
		}
		else {
			var estiloAntiguo = el.getAttribute('displayAntiguo');
			el.style.display = (estiloAntiguo != '' && estiloAntiguo != null)?estiloAntiguo:'block';
		}
	},
	
	setJSEnabled : function() {
		if (!document.getElementsByTagName) {
			return false;
		}
		
		var body = document.getElementsByTagName('body')[0];
		var bodyClass = body.getAttribute('class');
		
		if (bodyClass == null || bodyClass.indexOf('jsenabled') < 0) {
			body.setAttribute('class', bodyClass +' jsenabled');
		}
	},

	getHeight : function( elem ) {
	    // Gets the computed CSS value and parses out a usable number
	    return parseInt( libreria.getStyle( elem, 'height' ) );
	},
	
	fullHeight : function(elem) {
	    if ( libreria.getStyle( elem, 'display' ) != 'none' ) {
	    	return elem.offsetHeight || libreria.getHeight( elem );
	    }

	    var old = libreria.resetCSS( elem, {
	        display: 'block',
	        visibility: 'hidden',
	        position: 'absolute'
	    });
	
	    var h = elem.clientHeight || libreria.getHeight( elem );

	    libreria.restoreCSS( elem, old );

	    return h;
	},
	
	resetCSS : function(elem, prop) {
	    var old = {};

	    for ( var i in prop ) {
	        old[ i ] = elem.style[ i ];

	        elem.style[ i ] = prop[i];
	    }

	    return old;
	},

	restoreCSS : function(elem, prop) {
	    for ( var i in prop )
	        elem.style[ i ] = prop[ i ];
	},
	
	getStyle : function( elem, name ) {
	    if (elem.style[name])
	        return elem.style[name];

	    else if (elem.currentStyle)
	        return elem.currentStyle[name];

	    else if (document.defaultView && document.defaultView.getComputedStyle) {
	        name = name.replace(/([A-Z])/g,"-$1");
	        name = name.toLowerCase();

	        var s = document.defaultView.getComputedStyle(elem,"");
	        return s && s.getPropertyValue(name);

	    } else
	        return null;
	},
	
	addClass : function(element, value) {
		if (!element.className) {
			element.className = value;
		} else {
			var newClassName = element.className;
			newClassName += " ";
			newClassName += value;
			element.className = newClassName;
		}
	},
	
	removeClass : function(element, value) {
		var classes = element.className.split(" ");
		var enco = false;
		var i,auxi = "";
		
		for(i=0; i < classes.length; i++) {
			if(classes[i] != value)
				auxi += (auxi!=""?" ":"")+classes[i];
		}
		
		element.className = auxi;
	},
	
	getCookie : function(name) {
		var start = document.cookie.indexOf( name + "=" );
		var len = start + name.length + 1;
		if ( ( !start ) && ( name != document.cookie.substring( 0, name.length ) ) ) {
			return null;
		}
		if ( start == -1 ) return null;
		var end = document.cookie.indexOf( ';', len );
		if ( end == -1 ) end = document.cookie.length;
		return unescape( document.cookie.substring( len, end ) );
	},

	setCookie : function( name, value, expires, path, domain, secure ) {
		var today = new Date();
		today.setTime( today.getTime() );
		if ( expires ) {
			expires = expires * 1000 * 60 * 60 * 24;
		}
		var expires_date = new Date( today.getTime() + (expires) );
		
		document.cookie = name+'='+escape( value ) +
			( ( expires ) ? ';expires='+expires_date.toGMTString() : '' ) + //expires.toGMTString()
			( ( path ) ? ';path=' + path : '' ) +
			( ( domain ) ? ';domain=' + domain : '' ) +
			( ( secure ) ? ';secure' : '' );
	},
	
	deleteCookie : function( name, path, domain ) {
		if ( getCookie( name ) ) document.cookie = name + '=' +
				( ( path ) ? ';path=' + path : '') +
				( ( domain ) ? ';domain=' + domain : '' ) +
				';expires=Thu, 01-Jan-1970 00:00:01 GMT';
	}

};
