/**
 * Core library functions.
 *
 * @author Nikolai Gjerløff <nikolai@resource-it.dk>
 * @author Christian Hansen <christian@resource-it.dk>
 * @version 1.0
 * @package Resource it Modules
 * @copyright Resource it ApS
 **/

var resExt = {

    /**
     * propstr
     * Output an object as a string for debugging
     **/
    propstr:function(obj) {
        var str = '';
        for(i in obj) str += i+'; ';
        return(str);
    },

    /**
     * isIE
     * Checks wether the browser is Internet Explorer or not. If arguments[0] is given the check is 
     * performed with respect to the version number given
     **/
    isIE:function() {
        if(navigator.userAgent.indexOf('MSIE') != -1) {
            if(arguments.length > 0 && parseInt(navigator.appVersion) > arguments[0]) return(0);        
            return(1);
        }
        return(0);
    },
    
    /**
     * addEventHandler
     * Add an event listener to any HTMLElement object o
     * @param object o              - the object
     * @param string eventname      - eventname without on-prefix - e.g. click, mouseover, mouseover
     * @param string functionname   - function name
     **/
    addEventHandler:function(o, eventname, functionname) {
        try {
            o.addEventListener(eventname,functionname, false);
        } catch(e) {
            o.attachEvent('on' + eventname,functionname);
        }
    },

    /**
     * getElementPosition
     * Gets an elements absolute position according to the upper top left corner.
     * @param object o              - the object in question
     **/
    getElementPosition:function(o) {

        var pos = new Object()
        pos.x = pos.y = 0;
        if (o.offsetParent) {
            pos.x = o.offsetLeft
            pos.y = o.offsetTop
            while (o = o.offsetParent) {
                pos.x += o.offsetLeft
                pos.y += o.offsetTop
            }//while
        }//if

        return pos;
    },


    getMouseCoord:function(e) {
        var pos = new Object();
            pos.x = 0;
            pos.y = 0;

        if (!e) var e = window.event;

        if (e.pageX || e.pageY) {
            pos.x = e.pageX;
            pos.y = e.pageY;
        }

        else if (e.clientX || e.clientY)    {
            pos.x = e.clientX + document.body.scrollLeft
                + document.documentElement.scrollLeft;
            pos.y = e.clientY + document.body.scrollTop
                + document.documentElement.scrollTop;
        }//else if
        return pos;
    },


    getMousePos:function(o,e) {
        var pos = new Object();
        var ep = resExt.getElementPosition(o);
        var X = resExt.getMouseCoord(e).x;
        var Y = resExt.getMouseCoord(e).y;
        pos.x = (X - ep.x);
        pos.y = (Y - ep.y);
        return pos;
    },


    gt:function(str) {
        try { 
            if ( __LANG[str] !== undefined ) return __LANG[str];
            else return str; 
        } catch(e) { return str; }
    }

}//resExt
