/* ********************************************************************

	MyElement : a Mario Esposito approach to HTMLElement Extension
	
	
************************************************************************/

ME = function(prop) {
	prop = prop;
	first = prop.charAt(0);
	id = prop.split(first)[1];
	
    if (first=='#'){
    	MyElement = document.getElementById(id);
		if (!MyElement){
      		throw('ERROR - No id='+id+' MyElement ');
   		}else{
			if (!MyElement.height){
				MyElement.height = MyElement.style.height ;
				if (!MyElement.height){
					var position = MyElement.style.position;
					var visibility = MyElement.style.visibility;
					var display = MyElement.style.display;
					var overflow = MyElement.style.overflow;					
					MyElement.style.position='absolute';
					MyElement.style.visibility='hidden';   
					MyElement.style.display='block';
					MyElement.height = MyElement.clientHeight+"px";
					MyElement.style.position=position;
					MyElement.style.overflow=overflow;
					MyElement.style.visibility=visibility;
					MyElement.style.display=display;
					
				}
				MyElement.style.height = MyElement.height;
			}
		MyElement.prop = prop;
		
		MyElement.show = show;
		MyElement.toggle = toggle;
		MyElement.hide = hide;
		MyElement.getMyElementsByClass = getMyElementsByClass;
		MyElement.slideDown = slideDown;
		MyElement.slideUp = slideUp;
		MyElement.fadeOut = fadeOut;
		MyElement.fadeIn = fadeIn;
		}
	}else 
		if (first=='.'){
            MyElements = getMyElementsByClass(id);
			if (!MyElements[0]){
      			throw('ERROR - No class='+id+' MyElement ');
   			}else{
			//definizione array di oggetti MyElement
			}
		}	
	return MyElement;
};


function show(){
	
if (MyElement.trans){
	
	MyElement.timer  = setTimeout("show()",0);
	}else{
		MyElement.style.display='block';
		MyElement.style.height = MyElement.height;
		 return this;	
	}
	 return this;	
}

function toggle(){

	if (MyElement.style.display=='none')
		this.show();
	else  this.hide();
	 return this;
}

function hide(){
	if (MyElement.trans){
		MyElement.timer  = setTimeout("hide()",0);
	}else{
		MyElement.style.display='none';
		return this;
	}
	return this; 
}

function slideDown(speed){
	if (typeof speed == "undefined")
		speed = 1;
	_slideDown(speed);	
	if (MyElement.trans=='slideDown')
		setTimeout("ME('"+MyElement.prop+"').slideDown("+speed+")",0);
}

function _slideDown(speed){

if 	(MyElement.trans && (MyElement.trans!='slideDown')){
		//MyElement.timer  = setTimeout("this.slideDown()",0);		
	}else{
 	if (MyElement.trans!='slideDown') MyElement.style.height="0px";
	MyElement.trans='slideDown';
    MyElement.style.display='block';

	actH = parseInt(MyElement.style.height);

		if (actH > parseInt(MyElement.height) - speed){

			MyElement.style.height = MyElement.height;

			MyElement.trans =false;
		}else{
			MyElement.style.height = (actH + speed) + "px";
    	//MyElement.timer  = setTimeout("this.slideDown()",0);		
		}

	}
	return this;	 
}
function slideUp(speed){
	if (typeof speed == "undefined")
		speed = 1;
	_slideUp(speed);	
if (MyElement.trans=='slideUp') setTimeout("ME('"+MyElement.prop+"').slideUp("+speed+")",0);
}
function _slideUp(speed){
if 	(MyElement.trans && (MyElement.trans!='slideUp')){
		//MyElement.timer  = setTimeout("this.slideUp()",0);		
	}else{
 
	MyElement.trans='slideUp';
    MyElement.style.display='block';
	actH = parseInt(MyElement.style.height);
	
		if (actH <= speed){
			MyElement.style.height = "0px";
			MyElement.trans =false;
		}else{
		MyElement.style.height = (actH - speed) + "px";
    	//MyElement.timer  = setTimeout("this.slideUp()",0);		
		}

	}
	return this;	 
}

function fadeOut(speed){
if (typeof speed == "undefined")
	speed = 5;
var _speed = speed / 100;
_fadeOut(_speed);	
if (MyElement.trans=='fadeOut')setTimeout("ME('"+MyElement.prop+"').fadeOut("+speed+")",0);
}
function _fadeOut(speed){
	
	if 	(MyElement.trans && (MyElement.trans!='fadeOut')){
		//MyElement.timer  = setTimeout("this.fadeOut()",0);		
	}else{
 		if (MyElement.trans!='fadeOut'){
		MyElement.style.filter = 'alpha(opacity=100)';
		MyElement.style.opacity = '1';
		
	}
		MyElement.trans='fadeOut';
		actOpacity = MyElement.style.opacity;
	
		if (actOpacity <= 0){
		MyElement.style.opacity = 0;
		MyElement.style.filter = 'alpha(opacity=0)';
		MyElement.trans =false;
		}else{
		MyElement.style.opacity = MyElement.style.opacity - speed;
		
		MyElement.style.filter = 'alpha(opacity='+( MyElement.style.opacity * 100 )+ ')';
    	//MyElement.timer  = setTimeout("this.fadeOut()",0);		
		}

	}
	return this;	 
}

function fadeIn(speed){
if (typeof speed == "undefined")
	speed = 5;
var _speed = speed/100;
_fadeIn(_speed);	
if (MyElement.trans=='fadeIn')
	setTimeout("ME('"+MyElement.prop+"').fadeIn("+speed+")",0);
}

function _fadeIn(speed){
	if 	(MyElement.trans && (MyElement.trans!='fadeIn')){
		//MyElement.timer  = setTimeout("this.fadeIn()",0);		
	}else{
		if (MyElement.trans!='fadeIn'){
		MyElement.style.visibility='visible';
		MyElement.style.display=='inherit';
		MyElement.style.filter = 'alpha(opacity=0)';
		MyElement.style.opacity = '0';
		}
 
		MyElement.trans='fadeIn';
		
		actOpacity = MyElement.style.opacity;

		if (actOpacity >= 0.9){
		MyElement.style.opacity = 1;
		MyElement.style.filter = 'alpha(opacity=100)';
		MyElement.trans =false;
		}else{
			MyElement.style.opacity = parseFloat(MyElement.style.opacity) + speed;
			MyElement.style.filter = 'alpha(opacity=' + (MyElement.style.opacity * 100) + ')';

    //MyElement.timer  = setTimeout("this.fadeIn()",0);		
		}

	}
	return this;	 
}


function getMyElementsByClass(searchClass,node,tag) {
	var classMyElements = new Array();
	if ( node == null )
		node = document;
	if ( tag == null )
		tag = '*';
	var els = node.getMyElementsByTagName(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) ) {
			classMyElements[j] = els[i];
			j++;
		}
	}
	return classMyElements;
}

