if (!window.Praized) {
    var Praized = {};
}
if(!window.PraizedLightBox){
  window.PraizedLightBox = { show: function(){ return true}}
}
if (!Praized.keyGen) {
    Praized.keyGen = (function() {
       var keyGen = {
            incrementor: function() {
                if (!arguments.callee.count) arguments.callee.count = 0;
                return++arguments.callee.count;
            },
            uid: function(prefix) {
                if (!prefix) prefix = '';
                
                var trueName = '';
                 for (var i = 0; i < 16; i++) {
                  trueName += String.fromCharCode(Math.floor(Math.random() * 26) + 97);
                 }
                return prefix+trueName;    
            }
        }
        return keyGen
    })();

}
if (!Praized.JSONP) {
    Praized.JSONP = (function() {
        var storedRequests = {};
        var JSONP = {
            addEvent: function( obj, type, fn ) {
             if ( obj.attachEvent ) {
               obj['e'+type+fn] = fn;
               obj[type+fn] = function(){obj['e'+type+fn]( window.event );}
               obj.attachEvent( 'on'+type, obj[type+fn] );
             } else
               obj.addEventListener( type, fn, false );
           },
            sendRequest: function(url, callback) {
                var scriptTag = JSONP.makeTag(url);
                var globalCallbackName = JSONP.registerGlobalCallback(callback, scriptTag);
                scriptTag.src = scriptTag.src + '&callback=' + globalCallbackName;
                document.body.appendChild(scriptTag);
            },
            fetchScript: function(url, ensure, callback) {
                var scriptTag = JSONP.makeTag(url);
                function c() {
                    if (Praized.JSONP.varExists(ensure)) {
                        if (callback) {
                            callback()
                        };
                        scriptTag.parentNode.removeChild(scriptTag);
                    } else {
                        setTimeout(function() {
                            c()
                        },
                        10)
                    }
                }
                document.body.appendChild(scriptTag);
                c();
            },
            varExists: function(fullname) {
                var vars = fullname.split('.');
                var ns = window;
                for (var i = 0; i < vars.length; i++) {
                    if ('undefined' != typeof ns[vars[i]]) {
                        ns = ns[vars[i]];
                    } else {
                        return false;
                    }
                };
                return true;

            },
            makeTag: function(url) {

                var scriptTag = document.createElement('script');
                scriptTag.setAttribute('src', url);
                scriptTag.setAttribute('type', 'text/javascript');
                return scriptTag;
            },
            registerGlobalCallback: function(realCallback, scriptTag) {
                var callbackName = Praized.keyGen.uid('CBPROXY_');
                var realCallback = realCallback;
                window[callbackName] = function(j) {
                    scriptTag.parentNode.removeChild(scriptTag);
                    if (realCallback) realCallback(j);
                }
                return callbackName;
            }
        }
        return JSONP;
    })();
}
if (!Praized.SearchLet) {
    Praized.Searchlet = (function() {
        var URLS = {
            apiLib: {
                file: 'http://static.praized.com/praized-com/javascripts/widgets/grimlock/apitool.js?_='+(new Date()).getTime(),
                ns: 'praizedAPITools'
            },
            domTools: {
                file: 'http://static.praized.com/praized-com/javascripts/widgets/grimlock/dom.js?_='+(new Date()).getTime(),
                ns: 'Praized.DOMTools'
            },
            searchInterface: {
                file: 'http://static.praized.com/praized-com/javascripts/widgets/grimlock/searchlet.js?_='+(new Date()).getTime(),
                ns: 'Praized.SearchInterfaceManager'
            }
        }
        var Searchlet = {
            init: function(options) {
               Praized.JSONP.addEvent(window,'load',function(){
                   // load neccessary stuff in order.
                  Praized.JSONP.fetchScript(URLS.apiLib.file, URLS.apiLib.ns,
                  function() {
                     Praized.JSONP.fetchScript(URLS.domTools.file, URLS.domTools.ns,                        
                     function() {
                         Praized.JSONP.fetchScript(URLS.searchInterface.file, URLS.searchInterface.ns,
                         function() {
                            Praized.SearchInterfaceManager.init(options);
                         });
                     });
                  });
                  
               })
            }
        }
        return Searchlet;
    })()
}

