
/**
 * Objeto de ferramentas javascript
 *
 * @class Gentoold
 * @version 1.4.1
 * @author Ricardo Pereira Dias
 * @date Qua 16, Set 2009
 *
 */
Gentools = function(){
    this.init();
}

Gentools.fn = Gentools.prototype = {

    init: function(){},

    getSelector: function(selector){

        if( selector == undefined || selector.tagName == undefined ) return 'document';
        else  return selector.tagName.toLowerCase();
    },

    getBrowser: function(){

        var browser;

        if( !!(window.attachEvent &&
            navigator.userAgent.indexOf('Opera') === -1)) browser='ie';

        else if( navigator.userAgent.indexOf('Opera') > -1 ) browser='opera';
        else if( navigator.userAgent.indexOf('AppleWebKit/') > -1 ) browser='webkit';
        else if( navigator.userAgent.indexOf('Gecko') > -1 &&
            navigator.userAgent.indexOf('KHTML') === -1 ) browser='gecko';
        else if( !!navigator.userAgent.match(/Apple.*Mobile.*Safari/)) browser='mobilesafari';

        return browser;

    },

    isLoaded: function(element,callback){

        var selector, elem_type;

        if( typeof target == 'function' ) {

            selector = document;
            elem_type = 'document';
            fire = element;

        } else {
            selector = element;
            elem_type = Gentools.fn.getSelector(selector);
            fire = callback;
        }


        /*if ( Gentools.fn.getBrowser()=='webkit' ) { // WebKit-Browsers, Safari, Chrome, Konqueror

            timer = window.setInterval(function() {
                if (/loaded|complete/.test(selector.readyState)){
                    window.clearInterval(timer);
                    fire();
                }
            }, 0);


        } else*/

        if(selector.addEventListener) { // Gecko-Browsers, Opera, Firefox

            if( /iframe|img/.test(elem_type) ){

                selector.addEventListener('load', function(){
                    selector.removeEventListener( "load", arguments.callee, false );
                    fire();
                    return;
                },false);
            //selector.onload = function(){}


            }else{

                selector.addEventListener('DOMContentLoaded', function(){
                    selector.removeEventListener( "DOMContentLoaded", arguments.callee, false );
                    fire();
                }, false);

            }

        } else if(selector.attachEvent) { // IE

            if( elem_type=='img' ){

                selector.attachEvent('onload', function() {
                    selector.detachEvent( "onload", arguments.callee );
                    fire();
                });

            } else {

                selector.attachEvent('onreadystatechange', function() {
                    if(selector.readyState === "complete") {
                        selector.detachEvent( "onreadystatechange", arguments.callee );
                        fire();
                    }
                });

            }

        }


    },

    getScrolls: function(element){

        var top, left, elem_type;
        var d = document;

        scr = new Object();

        if( element == undefined ) elem_type = 'document';
        else elem_type = elem_type = Gentools.fn.getSelector(element);

        switch(elem_type){

            case 'document':

                // safari, chrome, konqueror
                if( Gentools.fn.getBrowser()=='webkit' ) {
                    top = d.body.scrollTop;
                    left = d.body.scrollLeft;
                }
                // ie7, firefox, opera
                else {
                    top = d.documentElement.scrollTop;
                    left = d.documentElement.scrollLeft;
                }

                scr.top = top;
                scr.left = left;

                break;

            default:
                break;
        }

        delete d; delete top; delete left; delete elem_type;

        return scr;

    },

    getDimensions: function(element){

        var d = document;
        var w, h;

        dim = new Object();

        if( element == undefined ){

            dim.width = d.documentElement.clientWidth;
            dim.height = d.documentElement.clientHeight;
            dim.centerx = parseInt(dim.width/2);
            dim.centery = parseInt(dim.height/2);

        } else {

            var elem_type = Gentools.fn.getSelector(element);

            if( elem_type == 'document' ){

                //ie7, safari e chrome
                if( Gentools.fn.getBrowser()=='ie' || Gentools.fn.getBrowser()=='webkit' ) {
                    w = d.body.scrollWidth;
                    h = d.body.scrollHeight;
                }
                // firefox, opera
                else {
                    w = d.documentElement.scrollWidth;
                    h = d.documentElement.scrollHeight;
                }

                dim.width = w;
                dim.height = h;
                dim.centerx = parseInt(w/2);
                dim.centery = parseInt(h/2);

                delete w; delete h;

            } else if( elem_type == 'iframe' ){
                dim.width = element.contentWindow.document.body.scrollWidth;
                dim.height = element.contentWindow.document.body.scrollHeight;
                dim.centerx = parseInt(dim.width/2);
                dim.centery = parseInt(dim.height/2);

            } else {
                dim.width = element.scrollWidth;
                dim.height = element.scrollHeight;
                dim.centerx = parseInt(dim.width/2);
                dim.centery = parseInt(dim.height/2);
            }
        }

        delete d; delete browser;

        return dim;

    },

    getPosition: function(element){

        dim = new Object();
        dim.top = 0;
        dim.left = 0;

        if( element != undefined ){
            dim.top = element.offsetTop;
            dim.left = element.offsetLeft;
        }

        return dim;

    },

    centralize: function(element,width,height){

        var dim = Gentools.fn.getDimensions();

        var top = (dim.centery-(height/2)+Gentools.fn.getScrolls().top);
        var left = dim.centerx-(width/2);

        element.style['position'] = 'absolute';
        element.style['width'] = width+'px';
        element.style['height'] = height+'px';
        element.style['top'] = top+'px';
        element.style['left'] = left+'px';

        delete dim; delete top; delete left;

    },

    setOpacity: function(element, opac){

        if( Gentools.fn.getBrowser()=='ie' ){
            opac = parseFloat(opac)*100;
            element.style.filter = 'alpha(opacity='+opac+')';

        } else element.style.opacity = opac;

    }

}


Gentools.getBrowser = Gentools.fn.getBrowser;
Gentools.isLoaded = Gentools.fn.isLoaded;
Gentools.getScrolls = Gentools.fn.getScrolls;
Gentools.getDimensions = Gentools.fn.getDimensions;
Gentools.getPosition = Gentools.fn.getPosition;
Gentools.centralize = Gentools.fn.centralize;
Gentools.setOpacity = Gentools.fn.setOpacity;
