[jQuery] Trouble Making a jQuery plugin...Need Help Please...

[jQuery] Trouble Making a jQuery plugin...Need Help Please...


Hi, I'm trying to make a jQuery plugin out of a useful function I
made, but for some reason its not working.
When I try calling the function with $.eventH(parimiters-here); I get
an error saying that the function is not defined.
Anybody see whats wrong with it? I would really like to get this
working.
Here is the plugin code:
<code>
(function($) {
var eventHandlers = [];
var state = {
registered: false
};
var typeOf = function(obj){
switch(typeof obj){
case "object":
if(obj.length)return "array";
else return "object";
break;
default:
return typeof obj;
break;
}
}
$.extend({
eventH: function(action, options){
//var fArgs = arguments;
var mode = "default";
if(typeOf(action) == "string" && typeOf(options) == "object" &&
typeOf(options.handlers) == "array"){
mode = "one";
}elseif(typeOf(action) == "string" && typeOf(options) ==
"object"){
mode = "two";
}elseif(typeOf(action) == "string" && typeOf(options) ==
"string"){
mode = "three";
}elseif(typeOf(action) == "string" && typeOf(options) == "array")
{
mode = "four";
}
switch(action){
case "register":
if(mode == "one" && state.registered === false){
eventHandlers = options.handlers;
$.eventH("bind", options);
state.registered = true;
}
break;
case "bind":
switch(mode){
case "one" || "two":
if(state.registered === false){
$.eventH("register", options);
return;
}
for(i=0;i<eventHandlers.length;i++){
if(!eventHandlers[i])continue;
if(eventHandlers[i].name in options.skipList)continue;
if(options.useList && !(eventHandlers[i].name in
options.useList))continue;
if(eventHandlers[i].type instanceof Array){
if(eventHandlers[i].func instanceof Array &&
eventHandlers[i].func.length == eventHandlers[i].type.length){
for(l=0;l<eventHandlers[i].type.length;l++){
$(eventHandlers[i].selector)
[eventHandlers[i].type[l]](eventHandlers[i].func[l]);
}
}else{
for(l=0;l<eventHandlers[i].type.length;l++){
$(eventHandlers[i].selector)
[eventHandlers[i].type[l]](eventHandlers[i].func[l]);
}
}
}else{
$(eventHandlers[i].selector)[eventHandlers[i].type]
(eventHandlers[i].func);
}
}
break;
case "unbind":
switch(mode){
case "one" || "two":
for(i=0;i<eventHandlers.length;i++){
if(!eventHandlers[i])continue;
if(eventHandlers[i].name in
options.skipList)continue;
if(options.useList && !(eventHandlers[i].name in
options.useList))continue;
$(eventHandlers[i].selector).unbind();
}
break;
}
break;
case "rebind":
switch(mode){
case "one" || "two":
$.eventH("unbind", options);
$.eventH("bind", options);
break;
}
break;
case "add":
switch(mode){
case "one" || "two":
if(options.newHandler instanceof Object &&
options.newHandler.name && options.newHandler.type &&
options.newHandler.selector && options.newHandler.func){
eventHandlers.push(options.newHandler);
var args = {};
args.options.useList = {};
$.eventH("bind",
options.useList[options.newHandler.name]);
}
break;
}
break;
case "remove":
switch(mode){
case "one" || "two":
for(i=0;i<eventHandlers.length;i++){
if(!eventHandlers[i])continue;
if(eventHandlers[i].name in
options.skipList)continue;
if(options.useList && !(eventHandlers[i].name in
options.useList))continue;
delete eventHandlers[i];
}
break;
}
break;
}
break;
}
}
});
$.fn.extend({
});
})(jQuery);
</code>
And Here is the original function:
<code>
function eventHandlers(action, args){
try{
if(!action)var action = "bind";
if(args){
var useList = args.useList;
var skipList = args.skipList;
var newHandler = args.newHandler;
}
if(!skipList)skipList = {};
if(!eventHandler){
if(!eventHandlers.i)eventHandlers.i = 1;
if(eventHandlers.i >= 5){
clearTimeout(eventHandlers.timeout);
return;
}
eventHandlers.i++;
setTimeout(function(){
eventHandlers.timeout = eventHandlers(action, args);
},1);
return;
}else if(eventHandlers.timeout){
clearTimeout(eventHandlers.timeout);
}
switch(action){
case "bind":
for(i=0;i<eventHandler.length;i++){
if(!eventHandler[i])continue;
if(eventHandler[i].name in skipList)continue;
if(useList && !(eventHandler[i].name in useList))continue;
if(eventHandler[i].type instanceof Array){
if(eventHandler[i].func instanceof Array &&
eventHandler[i].func.length == eventHandler[i].type.length){
for(l=0;l<eventHandler[i].type.length;l++){
$(eventHandler[i].selector)[eventHandler[i].type[l]]
(eventHandler[i].func[l]);
}
}else{
for(l=0;l<eventHandler[i].type.length;l++){
$(eventHandler[i].selector)[eventHandler[i].type[l]]
(eventHandler[i].func[l]);
}
}
}else{
$(eventHandler[i].selector)[eventHandler[i].type]
(eventHandler[i].func);
}
}
break;
case "unbind":
for(i=0;i<eventHandler.length;i++){
if(!eventHandler[i])continue;
if(eventHandler[i].name in skipList)continue;
if(useList && !(eventHandler[i].name in useList))continue;
$(eventHandler[i].selector).unbind();
}
break;
case "rebind":
eventHandlers("unbind", {useList:useList, skipList:skipList});
eventHandlers("bind", {useList:useList, skipList:skipList});
break;
case "add":
if(newHandler instanceof Object && newHandler.name &&
newHandler.type && newHandler.selector && newHandler.func){
eventHandler.push(newHandler);
var args = {};
args.useList = {};
eventHandlers("bind", args.useList[newHandler.name]);
}else{
return false;
}
break;
case "remove":
for(i=0;i<eventHandler.length;i++){
if(!eventHandler[i])continue;
if(eventHandler[i].name in skipList)continue;
if(useList && !(eventHandler[i].name in useList))continue;
delete eventHandler[i];
}
break;
}
}catch(e){
}
}
</code>
Note: the original function required an object called "eventHandlers"
to be allready defined. Its code would look something like this:
<code>
var eventHandler = [
{type: ["mouseover", "mouseout", "click"], name: "key1", selector:
"#id1", func: [function(){
//mouseOver
$(this).addClass("over");
},function(){
//mouseOut
$(this).removeClass("over");
},function(){
//Click
alert("id1 clicked");
}]},
{type: ["click"], name: "key2", selector: "#id2", func: [function(){
//Click
alert("id2 clicked");
}]}
];
</code>