/*  SmartTools.jQueryLoader, http://codeplex.com/smarttools
    By Jan Tielens, http://weblogs.asp.net/jan   */

var smarttools = {
    wsurlprefix: "",
    logstarttime: 0,
    logdiv: null,
    log: function(message, group) {},
    version: "1.0"
};

$(init);
function init() { 
   smarttoolsLoadScripts();
}

function smarttoolsInitializeLog() {
    $("body").append(
        "<div id='smarttoolsLogDiv' class='ms-vb' \
            style='position:absolute; \
                   background-color:White; padding:2px; border-width:1px; border-style:solid; \
                   border-color:Black;display:none; position:absolute; width:600px; height:150px; overflow:auto;'> \
         </div>");
    
    smarttools.logdiv = $("#smarttoolsLogDiv");
   
    smarttools.log = function(message, group) {
        var ms = new Date().getTime() - smarttools.logstarttime;
        var msg = "<div style='width:70px; float:left;text-align:right;margin-right:5px'>" + ms + " ms</div>" +  message + "<br />";
        
        if(group)
            msg = "<div style='width:70px; float:left;text-align:right;margin-right:5px'>" + ms + " ms</div>[" + group + "] " +  message + "<br />";
            
        smarttools.logdiv.prepend(msg);        
    };
    
    var topPos = document.body.clientHeight - smarttools.logdiv.height() - 20
    var leftPos = document.body.clientWidth - smarttools.logdiv.width() - 20;
           
    smarttools.logdiv.css("top", topPos).css("left", leftPos).show();

    smarttools.logstarttime = new Date().getTime();
    smarttools.log("SmartTools jQueryLoader v" + smarttools.version + " by <a href='http://weblogs.asp.net/jan' target='_blank'>Jan Tielens</a>.");
    smarttools.log("Logging enabled for jQueryLoader. (<a href='#' id='smarttoolslogclose'>close</a>)", "jQueryLoader");
    smarttools.log("jQuery version: " + $(document).jquery, "jQueryLoader");
    $("#smarttoolslogclose").click(function() {
        smarttools.logdiv.hide();
    });
}

function smarttoolsLoadScripts() {
    // logging
    if (window.location.search.match("log=1")) 
        smarttoolsInitializeLog();

    var scripts;
    smarttools.log("smarttools.jsloader.js, 'loadScripts' function entered.", "jQueryLoader");
    
    smarttools.loadscripts = function(group) { return smartToolsLoadGroupScripts(group); };
    
    var soapEnv =
        "<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'> \
            <soapenv:Body> \
                 <GetListItems xmlns='http://schemas.microsoft.com/sharepoint/soap/'> \
                    <listName>js</listName> \
                    <viewFields> \
                        <ViewFields> \
                           <FieldRef Name='LinkFilename' /> \
                           <FieldRef Name='AutoLoad' /> \
                           <FieldRef Name='ApplyTo' /> \
                       </ViewFields> \
                    </viewFields> \
                    <query> \
                        <Query> \
                               <Where><Eq><FieldRef Name='AutoLoad' /><Value Type='Boolean'>1</Value></Eq></Where> \
                               <OrderBy><FieldRef Name='Sequence' /></OrderBy> \
                        </Query> \
                    </query> \
                </GetListItems> \
            </soapenv:Body> \
        </soapenv:Envelope>";

    smarttools.wsurlprefix = smarttoolsbase + "/_vti_bin/";
    smarttools.log("smarttools.wsurlprefix variable set to: '" + smarttools.wsurlprefix + "', ready to make ajax call.", "jQueryLoader");
    
    $.ajax({
        url: smarttools.wsurlprefix + "lists.asmx",
        type: "POST",
        dataType: "xml",
        data: soapEnv,
        complete: processResult,
        async: false,
        contentType: "text/xml; charset=\"utf-8\""
    });
}

function smartToolsLoadGroupScripts(group) {
    var scripts;
    smarttools.log("smarttools.jsloader.js, 'loadGroupScripts' function entered.", "jQueryLoader");
    var soapEnv =
        "<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'> \
            <soapenv:Body> \
                 <GetListItems xmlns='http://schemas.microsoft.com/sharepoint/soap/'> \
                    <listName>js</listName> \
                    <viewFields> \
                        <ViewFields> \
                           <FieldRef Name='LinkFilename' /> \
                           <FieldRef Name='AutoLoad' /> \
                           <FieldRef Name='ApplyTo' /> \
                       </ViewFields> \
                    </viewFields> \
                    <query> \
                        <Query> \
                               <Where> \
                                    <Eq><FieldRef Name='Group' /><Value Type='Text'>" + group + "</Value></Eq> \
                               </Where> \
                               <OrderBy><FieldRef Name='Sequence' /></OrderBy> \
                        </Query> \
                    </query> \
                </GetListItems> \
            </soapenv:Body> \
        </soapenv:Envelope>";

    smarttools.log("ready to make ajax call.", "jQueryLoader");

    $.ajax({
        url: smarttools.wsurlprefix + "lists.asmx",
        type: "POST",
        dataType: "xml",
        data: soapEnv,
        complete: processResult,
        async: false,
        contentType: "text/xml; charset=\"utf-8\""
    });
}

function processResult(xData, status) {
    smarttools.log("processResult function, status: " + status, "jQueryLoader");
    var $rows = $(xData.responseXML).find("z\\:row");
    
    smarttools.log($rows.length + " in result", "jQueryLoader");
    
    $rows.each(function() {
        var re = new RegExp($(this).attr("ows_ApplyTo"), "i");
        if (window.location.toString().match(re)) {
            var url = "/js/" + $(this).attr("ows_LinkFilename");
            
            var extension = url.substr(url.lastIndexOf(".")).toLowerCase();
            if (extension == ".js") {
                smarttools.log("Loading script " + url, "jQueryLoader");
                $.ajax({
                   type: "GET",
                   url: url,
                   dataType: "script",
                   cache: true,
                   async: false
                }); 
            }
            if (extension == ".css") {
                smarttools.log("Adding CSS link " + url, "jQueryLoader");
                var head = document.getElementsByTagName("head")[0];
                var element;
                element = document.createElement("link");
                element.type = "text/css";
                element.rel = "Stylesheet";
                element.href = url;
                head.appendChild(element);
            }
        }
    });
    smarttools.log("Done loading scripts.", "jQueryLoader");
}