/** # plug_jvlibjs - JV Libries Javascript # @version 1.0 # ------------------------------------------------------------------------ # author Open Source Code Solutions Co # copyright Copyright (C) 2011 joomlavi.com. All Rights Reserved. # @license - http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL or later. # Websites: http://www.joomlavi.com # Technical Support: http://www.joomlavi.com/my-tickets.html -------------------------------------------------------------------------**/ if (!window.JVLib) { (function () { window.ie = (function () { for (i = 9; i > 5; i--) { window['ie' + i] = false; } if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) { var ieversion = new Number(RegExp.$1) var i; for (i = 9; i > 5; i--) { if (ieversion >= i) { window['ie' + i] = true; return i; } } } return false; })(); window.firefox = navigator.userAgent.indexOf("Firefox") != -1; window.chrome = navigator.userAgent.indexOf('Chrome') > -1; window.safari = navigator.userAgent.indexOf('Safari') != -1; var action = { loadLib: function (key, url) { if (objs.added[key] != undefined) return; objs.added[key] = false; objs.loading.push(key); if (!url) url = objs.path + key + '.js'; if (JVLib.options.loadByAjax) action.loadByAjax(key, url); else action.loadByElement(key, url); }, loadByElement: function (key, url) { var script = document.createElement('script'); script.src = url; script.onreadystatechange = function () { if ((script.readyState == 'loaded' || script.readyState == 'complete') && !ie9) { this.onload(); } } script.onload = function () { action.onloadScript(key); } document.head.appendChild(script); }, loadByAjax: function (key, url) { new JVLib.Ajax({ url: url, method: 'get', onComplete: function (rs) { action.onloadScript(key); } }).request(); }, callBackScript: function () { for (var x in objs.callBack) { var isSuccess = true; var keys = x.split(','); for (var i = 0; i < keys.length; i++) { if (!objs.added[keys[i]]) { isSuccess = false; break; } } while (isSuccess && objs.callBack[x].length > 0) { var func = objs.callBack[x][0]; objs.callBack[x].splice(0, 1); func(); } } }, checkCallback: function () { for (var x in objs.callBack) { if (objs.callBack[x].length > 0) return true; } return false; }, onloadScript: function (key) { objs.added[key] = true; objs.loading.splice(objs.loading.indexOf(key), 1); action.callBackScript(); action.ready(); }, ready: function () { objs.isready = !action.checkCallback(); if (objs.loading.length > 0 || !objs.isready) return; if (objs.ready[0]) { var func = objs.ready[0]; objs.ready.splice(0, 1); func.call(JVLib); action.ready(); } }, initPath: function () { var src = $$('[src$=JVLib.js]')[0].getAttribute('src'); objs.path = src.replace(/JVLib.js/g, ''); }, using: function (key, func, url) { var type = $type(key); var keyCallBack = []; switch (type) { case 'string': keyCallBack.push(key); action.loadLib(key, url); break; case 'array': key.each(function (k) { keyCallBack.push(k); action.using(k); }); break; case 'object': for (var x in key) { keyCallBack.push(x); action.using(x, undefined, key[x]); } break; } JVLib.wait(keyCallBack, func); }, style: function (url) { var link = document.createElement('link'); link.type = "text/css"; link.rel = "stylesheet"; link.href = url; document.head.appendChild(link); } } var objs = { path: '', added: {}, loading: [], callBack: {}, ready: [], adapter: 'JVAdapter.' + MooTools.version, isready: false } window.JVLib = { options: { loadByAjax: false, showLog: false }, using: function (key, func, url) { if (!key) return this; else { objs.isready = false; JVLib.wait(objs.adapter, function () { action.using(key, func, url); }); } return this; }, wait: function (keyCallBack, func) { if (func) { keyCallBack = $type(keyCallBack) == 'array' ? keyCallBack.join(',') : keyCallBack; if (!objs.callBack[keyCallBack]) objs.callBack[keyCallBack] = []; objs.callBack[keyCallBack].push(func); action.callBackScript(); } }, path: function (p) { if (p) { objs.path = p; return this } return objs.path; }, ready: function (func) { if (func) objs.ready.push(func); if (objs.isready) action.ready(); }, loadCss: function (key) { var path = objs.path.replace(/javascript/, 'stylesheet') + key + '.css'; action.loadStyleSheet(path); return this; }, Adapter: objs.adapter, root: function () { return objs.path; } } window.addEvent('domready', function () { action.ready(); }); action.initPath(); action.loadLib(objs.adapter); })(); }