var $ = getObj = function (e){ /*Shortcut per getElementById*/
	if (arguments.length > 1) {
		for (var i = 0, elements = [], length = arguments.length; i < length; i++)
	    elements.push($(arguments[i]));
	    return elements;
	}
	if(typeof e =="string") return document.getElementById(e);
	else if(typeof e =="object") return e;
	else return null;
}
function isArray(obj){return obj instanceof Array}
var $E = {
	  getElementsByClassName:function (element,classname){
	  	  var e = $(element);
		  var founds = [];
		  for(var i=0;i<e.childNodes.length;i++){
		  	var child = e.childNodes[i];
			if(child.nodeType==1 && child.className && child.className.toLower()==classname.toLower()) {
				founds.add(child);
			}
		  }
		  return founds;
	  },
      visible: function(element) {
	  	return this.getStyle(element,'display') != 'none';
      }, //visible

	  getStyle:function (e,propName){
	  	if(isArray(e)){var i = e.length,a=[]; while(--i>=0){a.add(this.style(e[i],propName))};return a;}
		e = $(e);
		if(e.currentStyle) return(e.currentStyle[propName]);
		if(document.defaultView.getComputedStyle) return(document.defaultView.getComputedStyle(e,'')[propName]);
		return null;
	  },//getStyle
	  swap:function(){
	  	for(var i=0;i<arguments.length;i++){
			var a = arguments[i];			
			if(this.visible(a)) this.hide(a);
			else this.show(a);
		}
	  },//swap	
	  swapVis:function(){
	  	for(var i=0;i<arguments.length;i++){
			var a = arguments[i];
			if(this.getStyle(a,"visibility")=="hidden") {this.vShow(a)}
			else {this.vHide(a)}
		}
	  },//swap	
	  vShow :function(e){
	  	this.style(e,"visibility:visible");
	  },
	  vHide :function(e){
	  	this.style(e,"visibility:hidden");
	  },
      show:function(){
	  	var styleValue = "block";
        if(arguments.length>1){
            this.show(Array.from(arguments));
        }
        else if (arguments.length==1){
            var e = arguments[0];
            if(isArray(e)){
                for(var i=0;i<e.length;i++) { 
					var _e = e[i];
					if(_e=="block"||_e=="inline") styleValue = _e;
					else this.show(_e);
				}
            }
            else{
				try {
                	getObj(e).style.display=styleValue;
				}
				catch(ex) {
					//alert(e);
				}
            }
        }
      },//show
	  showOne : function (arrayIds,visibleId){
	  	for(var i=0;i<arrayIds.length;i++){
			var item = arrayIds[i];
			if(item==visibleId) $E.show(item); 
			else $E.hide(item);  
		}
	  },
	  showif : function (/*arguments[1...n],condition*/){
	  	var args = Array.from(arguments);
		if(args.length<2) return;
		var elements = args.slice(0,args.length - 1);
		if(args[args.length - 1]) this.show(elements);
		else this.hide(elements);
	  },
      hide:function(){
        if(arguments.length>1){
            this.hide(Array.from(arguments));
        }
        else if (arguments.length==1){
            var e = arguments[0];
            if(isArray(e)){
                for(var i=0;i<e.length;i++) { this.hide(e[i])}
            }
            else{
				try{
                	getObj(e).style.display='none';
					}
				catch(ex){
					//alert(e);
				}
            }
        }
      }, //hide  
	  showIf:function(e,test) {
	  	if(test) this.show(e);
		else this.hide(e);
	  },//showIf

      create:function (name){
        return  document.createElement(name);
      },

	  unselectable:function (el){
	  	var e =$(el);
  		if(e.style.setProperty) e.style.setProperty ('-moz-user-select', 'none', '');	
		else {
				e.unselectable="on";
				e.setAttribute("UNSELECTABLE","On");
			}
	  },
	 setOpacity : function (e,value){
	 	var e = $(e);
		try{e.style.filter = "Alpha(Opacity=" + value * 100 + ")"}catch(ex){}
		try{e.style.MozOpacity = value}catch(ex){}
		try{e.style.KhtmlOpacity = value}catch(ex){}
		try{e.style.opacity = value}catch(ex){}
	 },
	 fadeOut : function  (e,delay,opacity){
		var e = $(e); var delay= delay || 200; if(delay<50)delay==50;
		var opacity = opacity || 1; if(opacity>1) opacity = 1;
		this.setOpacity(e,opacity);
		if(opacity==0) {
			this.hide(e)
		}
		else {
			var fx = function (){$E.fadeOut(e,delay,opacity - 0.1)}
			window.setTimeout(fx,delay);
		}
	 },
	 fadeIn : function  (e,delay,opacity){
		var e = $(e); var delay= delay || 200; if(delay<50)delay==50;
		var opacity = opacity || 0; if(opacity>1) opacity = 1;
		this.setOpacity(e,opacity);
		if(opacity<1) {			
			var fx = function (){$E.fadeIn(e,delay,opacity + 0.1)}
			window.setTimeout(fx,delay);
		}
		else window.clearTimeout();
	 }
}
if(!window.attachEvent) { //attachEvent enabled for non IE
Window.prototype.attachEvent =Document.prototype.attachEvent = HTMLElement.prototype.attachEvent = function($name, $handler) {this.addEventListener($name.slice(2), $handler, false)}
Window.prototype.detachEvent =	Document.prototype.detachEvent = HTMLElement.prototype.detachEvent = function($name, $handler) {this.removeEventListener($name.slice(2), $handler, false)}
}
function Slide (auto,interval,fade){
	var elements = this.elements = [];
	var register = this.register = function (e){$E.hide(this.elements.push($(e)))}
	var index = this.index = 0;
	var auto = this.auto = auto||false;
	var fade = this.fade = fade||false;
	var interval= this.interval = interval||3000;
	var next = this.next = function (){
		if(!elements.length) index= -1;
		if(index < (elements.length-1)) index += 1;
		else index = 0;
	}
	var previous = this.previous = function  (){
		if(!elements.length) index= -1;
		if(!index) index = (elements.length-1);
		else index -= 1;
	}
	var showElement = this.init = function (){
		$E.hide(elements);
		$E.show(elements[index]);
		if(fade) $E.fadeIn(elements[index],200,0);
		lrefresh();
	}
	var goNext = this.goNext = function  (){
		next();
		if(index<0) return ;
		showElement();		
	}
	var goPrevious = this.goPrevious = function  (){
		previous();if(index<0)return ;
		showElement();
	}
	var idrun=null;
	var start = function (){
		idrun=window.setInterval(goNext,interval);
	}
	var stop = function (){
		window.clearInterval(idrun);
		idrun=null;
	}
	var autostart = this.autostart = function  (){
		auto=true;		
		for(var i=0;i<elements.length;i++){
			elements[i].attachEvent('onmouseover',stop);
			elements[i].attachEvent('onmouseout',start);
		}
		start();
	}
	var autostop = this.autostop = function  (){
		auto=false;		
		for(var i=0;i<elements.length;i++){
			elements[i].detachEvent('onmouseover',stop);
			elements[i].detachEvent('onmouseout',start);
		}
		stop();
	}
	var lblCounter=null;
	
	var lrefresh= function  (){
			if(lblCounter!=null) {
				lblCounter.innerHTML= (index + 1) + '/' + elements.length
			}
		}
	var registerCommands = this.registerCommands = function (cmdBack,cmdForward,lbl){
		var b = cmdBack||null;
		var f = cmdForward||null;
		var l = lbl||null;
		if(l!=null)lblCounter=$(l);
		if(b!=null){
			$(b).attachEvent('onclick',function (){
				autostop();
				goPrevious();
			});
		}
		
		if(f!=null){
			$(f).attachEvent('onclick',function (){
				autostop();
				goNext();
			});
		}
	}
	
	return this;
}  