GagleKas no fue mi intención criticar sino alertarte sobre tu error de concepto y, al mismo tiempo, darte pistas de dónde buscar. Pero bueno, te dejo un ejemplo donde están bien diferenciados los métodos públicos y privados, usando una función que retorna un objeto que contiene los métodos públicos:
Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<script>
var panino=(function(){
/* ---- métodos privados ---- */
var metodosPrivados={
addEvent: function(type, fn ) {
if ( this.addEventListener ) {
this.addEventListener( type, fn, false );
} else if(this.attachEvent){
var _this=this;
var f= function(){fn.call(_this,window.event);}
this.attachEvent( 'on'+type, f);
this[fn.toString()+type]=f;
}else{
this['on'+type]=fn;
}
var ev={_obj:this,_evType:type,_fn:fn};
window.EvRegister=window.EvRegister || [];
window.EvRegister.push(ev);
return this;
},
removeEvent: function(type, fn ) {
if( this.removeEventListener){
this.removeEventListener( type, fn, false );
}
else if(this.detachEvent){
this.detachEvent('on'+type,this[fn.toString()+type]);
this[fn.toString()+type]=null;
}
else{
this['on'+type]=function(){};
}
for (var ii= 0, l=window.EvRegister.length; ii < l ; ii++) {
if (window.EvRegister[ii]._evType== type && window.EvRegister[ii]._obj==this && window.EvRegister[ii]._fn==fn) {
window.EvRegister.splice(ii, 1);
break;
}
}
return this;
},
css:function(propiedad,valor){
if(!valor)
return this.style[propiedad];
this.style[propiedad]=valor;
return this;
},
hover:function(a,b){
this.addEvent('mouseover', a );
this.addEvent('mouseout', b );
return this;
},
alfa:function(value){
this.style.opacity = value;
this.style.MozOpacity = value;
this.style.KhtmlOpacity = value;
this.style.filter = 'alpha(opacity=' + value*100 + ')';
this.style.zoom=1;
return this;
},
toggle:function(a,b){
this.style.display=this.style.display=='none'?'block':'none';
if(!!a && !!b)
a.parentNode.replaceChild(b,a);
return this;
},
extendido:true
}
/* ---- métodos públicos ---- */
return{
extend:function(el,obj){
if(el.extendido && el!=metodosPrivados)return el;
for(var i in obj)
el[i]=obj[i];
return el;
},
get:function(id){
if(!document.getElementById(id))return false;
return panino.extend(document.getElementById(id),metodosPrivados);
},
getO:function(obj){
return panino.extend(obj,metodosPrivados);
},
add:function(obj){
panino.extend(metodosPrivados,obj);
},
unregisterAllEvents:function(){
if(window.EvRegister)
while (window.EvRegister.length > 0) {
panino.getO(window.EvRegister[0]._obj).removeEvent(window.EvRegister[0]._evType,window.EvRegister[0]._fn);
}
window.EvRegister=null;
for(var i=0;el=document.getElementsByTagName('*')[i];i++)
if(el.extendido)
for(var ii in metodosPrivados)
el[ii]=null;
panino=null;
}
}
})();
var $=panino.get;
panino.getO(window).addEvent('unload',panino.unregisterAllEvents);
/*----ejemplo de uso--------*/
function a(){
var _this=this;
var p=0,alfa=alfa || .5;
var int=setInterval(
function(){
p+=(500-p)/10;
alfa+=.015;
if(p>=490){
clearInterval(int);
}
_this.css('width',p+'px').css('height',p+'px').alfa(alfa>=1?1:alfa);
},13);
}
onload=function(){
$('pp').css('backgroundColor','red')
.css('width','50px')
.css('height','50px')
.css('cursor','pointer')
.addEvent('click',a)
.alfa(.5);
}
</script>
</head>
<body>
<div id="pp"></div>
</body>
</html>