
/**
 * Main Indusnet JavaScript library.
 *
 * @package Indusnet
 * @subpackage INT
 */
var INT = {
    isReady: false,
    isDebug: true,
    ready: function(f) {
        // If the DOM is already ready
        if (INT.isReady) {
            // Execute the function immediately
            if (typeof f == 'string') {
                eval(f);
            } else if (typeof f == 'function') {
                f.apply(document);
            }
        // Otherwise add the function to the wait list
        } else {
            INT.onReadyDomEvents.push(f);
        }
    },
    onReadyDomEvents: [],
    onReadyDom: function() {
        // make sure that the DOM is not already loaded
        if (!INT.isReady) {
            // Flag the DOM as ready
            INT.isReady = true;

            if (INT.onReadyDomEvents) {
                for (var i = 0, j = INT.onReadyDomEvents.length; i < j; i++) {
                    if (typeof INT.onReadyDomEvents[i] == 'string') {
                        eval(INT.onReadyDomEvents[i]);
                    } else if (typeof INT.onReadyDomEvents[i] == 'function') {
                        INT.onReadyDomEvents[i].apply(document);
                    }
                }
                // Reset the list of functions
                INT.onReadyDomEvents = null;
            }
        }
    },

    debugObject: function(obj) {
        var strMsg = '';
        switch (typeof obj) {
            case 'string': 
                alert(obj);
            break;
                
            case 'object':
                for (var property in obj) {
                    strMsg += '\n ' + property + ' => ' + obj[property];
                }
                alert(strMsg);
            break;
                
            default: 
                alert(obj.toString());
            break;
        }
    },
    
    logMessage: function(arg) {
        if (INT.isDebug) {
            INT.debugObject(arg);
        }
    }
};

/**
 *  Cross-browser onDomReady solution
 *  Dean Edwards/Matthias Miller/John Resig
 */
new function() {
    /* for Mozilla/Opera9 */
    if (document.addEventListener) {
        document.addEventListener("DOMContentLoaded", INT.onReadyDom, false);
    }

    /* for Internet Explorer */
    /*@cc_on @*/
    /*@if (@_win32)
        document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>");
        var script = document.getElementById("__ie_onload");
        script.onreadystatechange = function() {
            if (this.readyState == "complete") {
                INT.onReadyDom(); // call the onload handler
            }
        };
    /*@end @*/

    /* for Safari */
    if (/WebKit/i.test(navigator.userAgent)) { // sniff
        INT.webkitTimer = setInterval(function() {
            if (/loaded|complete/.test(document.readyState)) {
                // Remove the timer
                clearInterval(INT.webkitTimer);
                INT.webkitTimer = null;
                // call the onload handler
                INT.onReadyDom();
            }
        }, 10);
    }

    /* for other browsers */
    oldWindowOnload = window.onload || null;
    window.onload = function() {
        if (oldWindowOnload) {
            oldWindowOnload();
        }
        INT.onReadyDom();
    }
}

// ----------
// --- BC ---
// ----------

/**
 * Used for async load of sourcefourge bloody button,
 */
function async_load()
{
    var node;
    try {
        // variable _asyncDom is set from JavaScript in the iframe
        // node = top._asyncDom.cloneNode(true); // kills Safari 1.2.4
        node = top._asyncDom;
        // try to remove the first script element, the one that
        // executed all document.writes().
        node.removeChild(node.getElementsByTagName('script')[0]);
    } catch (e) {}
    try {
        // insert DOM fragment at a DIV with id "async_demo" on current page
        document.getElementById('async_demo').appendChild(node);
    } catch (e) {
        try {
            // fallback for some non DOM compliant browsers
            document.getElementById('async_demo').innerHTML = node.innerHTML;
        } catch (e2) {};
    }
}

INT.ready(function() {
    var msg = document.getElementById('broadcastMessage');
    if (msg) {
        msg.getElementsByTagName('a')[0].onclick = function() {
            msg.style.display = 'none';
        }
    }
});

/*********************************
*** INT_Loader *******************
**********************************/
INT.Loader =
{
    include: function(url) {
        //alert('Including Url: ' + url);
        document.write('<script type="text/javascript" '
            + 'src="' + url + '"></script>');
    }
}

/*********************************
*** INT_Uri *******************
**********************************/

/*
 * parseUri 1.2.1
 * (c) 2007 Steven Levithan <stevenlevithan.com>
 * MIT License
*/
INT.Uri =
{
    tkDataApiUrl: 'http://www.templatekingdom.com/feeds/js.php',
    templateListUrl: 'index.html',
    
    parse: function(str) {
        var o   = INT.Uri.options,
            m   = o.parser[o.strictMode ? "strict" : "loose"].exec(str),
            uri = {},
            i   = 14;
    
        while (i--) { 
            uri[o.key[i]] = m[i] || "";
        }
    
        uri[o.q.name] = {};
        uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {
            if ($1) uri[o.q.name][$1] = $2;
        });
    
        return uri;
    },

    options: {
        strictMode: false,
        key: ["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],
        q:   {
            name:   "queryKey",
            parser: /(?:^|&)([^&=]*)=?([^&]*)/g
        },
        parser: {
            strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,
            loose:  /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/
        }
    },
    
    makeUrlTkDataApi: function(params) {
        var ret = INT.Uri.tkDataApiUrl;
        var moduleName = params.module ? params.module : 'template';
        var managerName = params.manager ? params.manager : moduleName;
        
        if (ret.charAt(ret.length - 1) != '?') {
            ret = ret + '?';
        }
    
        ret = ret + 'moduleName=' + escape(moduleName) + '&managerName=' + escape(managerName);
        for (x in params) {
            if (x == 'module' || x == 'manager') {
                continue;
            }
            // add param
            ret += '&' + escape(x) + '=' + escape(params[x]);
        }
        ret += '&';
        return ret;
    },
    
    makeUrlQueryString: function(params) {
        var ret = '?';
        for (x in params) {
            if (ret != '?') {
                ret += '&';
            }
            ret += escape(x) + '=' + escape(params[x]);
        }
        return INT.Uri.templateListUrl + ret;
    },
    
    setTkDataApiUrl: function(url) {
        INT.Uri.tkDataApiUrl = url;
    },
    
    setTemplateListUrl: function(url) {
        INT.Uri.templateListUrl = url;
    }
}
