/*
 * Sputnik DHTML Tools
 * Core script
 */

/*
 * $
 * Like Prototype, replaces getElementById.
 */
function $(element_id)
{

        if(document.getElementById)
                return(document.getElementById(element_id));
        else
        {

                if(document.all)
                        return(document.all[element_id]);
                else
                        if((navigator.appName.indexOf('Netscape') != -1) && (browserVersion == 4))
                                return(document.layers[element_id]);

        }

        return false;

}
 

/*
 * add_event
 * Add an event handler to an object, just a piece
 * of code to fire on a specific event.
 */
var page_loaded = false;
var start_objects = Array();
var start_objects_functions = Array();

function do_initial_on_load_events()
{
        for(obj_name in start_objects)
                real_add_event($(obj_name), start_objects[obj_name], start_objects_functions[obj_name])

        page_loaded = true;

}

function add_event(object, event, _function)
{

        if(page_loaded == false)
        {
                start_objects[object] = event;
                start_objects_functions[object] = _function;
        }
        else
                real_add_event($(object), event, _function);
                
}

          /*
function real_add_event(object, event, _function)
{
alert("hey");

        if(window.addEventListener)
                object.addEventListener(event, _function, false);
        else if(window.attachEvent)
        (
                object.attachEvent(event, _function);
        )
        else
                object.onclick = _function;
                   /*
        if(object.attachEvent)
        {
        
                object['e' + event + _function] = _function;
                
                object[type + fn] = function()
                        {
                                object['e' + event + _function](window.event);
                        }
                        
                object.attachEvent('on' + event, object[event + _function]);
                
        }
        else
                object.addEventListener(event, _function, false);
                     */
//}

/*
 * remove_event
 * Gets rid of an event handler to an object.
 */
 /*
function remove_event(object, event, _function)
{

        if(object.detachEvent)
        {
        
                object.detachEvent('on' + event, object[event + _function]);
                object[event + _function] = null;
                
        }
        else
                object.removeEventListener(event, _function, false);

}  */

function real_add_event(elem, eventType, handler)
{

        if (!elem.eventHandlers) elem.eventHandlers = [];
        if (!elem.eventHandlers[eventType])
        {
                elem.eventHandlers[eventType] = [];
                if (elem['on' + eventType]) elem.eventHandlers[eventType].push(elem['on' + eventType]);
                elem['on' + eventType] = handle_event;
        }
        elem.eventHandlers[eventType].push(handler);
}

function remove_event(elem, eventType, handler)
{
        var handlers = elem.eventHandlers[eventType];
        for (var i in handlers) if (handlers[i] == handler) delete handlers[i];
}

function handle_event(e)
{
        var returnValue = true;
        if (!e) e = fixEvent(event);
        var handlers = this.eventHandlers[e.type]
        for (var i in handlers)
        {
                this.$$handle_event = handlers[i];
                returnValue = !((returnValue && this.$$handle_event(e)) === false);
        }
        return returnValue;
}

function fixEvent(e)
{
        // add W3C standard event methods
        e.preventDefault = fixEvent.preventDefault;
        e.stopPropagation = fixEvent.stopPropagation;
        return event;
};

fixEvent.preventDefault = function() {
        this.returnValue = false;
};

fixEvent.stopPropagation = function() {
        this.cancelBubble = true;
};

/*
 * load_event
 * Fires a function when the page has loaded
 */
function load_event(_function)
{

        if(window.addEventListener)
                real_add_event(window, "load", _function);
        else
                real_add_event(window, "load", _function);
//        else if(document.addEventListener || document.attachEvent)
  //              real_add_event(document, "load", _function);
}


load_event(do_initial_on_load_events);

/*
 * fx
 * The effects class that is extended from
 */
function fx()
{
        this.animating = Array();
        this.current_dir = Array();
        this.timers = Array();
        this.is_animating = false;
        this.start_times = Array();
        this.elapsed_time = 0;
        
        this.timer_length = 1;
        this.animate_time = 250;
}


/*
 * sputools
 * just some random stuff
 */
function sputools(){ }

/*
 * extend
 * Extend one class from another
 */
sputools.extend = function(sub_class, base_class)
{

   function inheritance() {}

   inheritance.prototype = base_class.prototype;
   sub_class.prototype = new inheritance();
   sub_class.prototype.constructor = sub_class;
   sub_class.base_constructor = base_class;
   sub_class.super_class = base_class.prototype;

};


