home *** CD-ROM | disk | FTP | other *** search
/ csi.uticak12.org / csi.uticak12.org.tar / csi.uticak12.org / js / utils.js < prev   
Text File  |  2011-10-20  |  11KB  |  390 lines

  1. function $(elem) { return document.getElementById(elem); }
  2. function $N(elem) { return document.getElementsByName(elem)[0]; }
  3. function $NL(elem) { return document.getElementsByName(elem); }
  4.  
  5. function Dump(arr, level) {
  6.     var dumped_text = "";
  7.     if (!level) level = 0;
  8.  
  9.     var level_padding = "";
  10.     for (var j=0;j<level+1;j++) level_padding += "    ";
  11.  
  12.     if (typeof(arr) == 'object') { //Array/Hashes/Objects
  13.         for(var item in arr) {
  14.       var value = arr[item];
  15.      
  16.       if(typeof(value) == 'object') { //If it is an array,
  17.           dumped_text += level_padding + "'" + item + "' ...\n";
  18.             dumped_text += Dump(value,level+1);
  19.       } else {
  20.           dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n";
  21.       }
  22.      }
  23.     } else { //Stings/Chars/Numbers etc.
  24.         dumped_text = "===>"+arr+"<===("+typeof(arr)+")";
  25.     }
  26.     return dumped_text;
  27.  
  28. var Utils = {};
  29.  
  30. Utils.Common = function() {
  31.   return {
  32.     set_home: function(obj) {
  33.         if (Utils.Navigator.IE()) {  
  34.             obj.style.behavior = 'url(#default#homepage)'; 
  35.             obj.setHomePage(document.location);
  36.         }
  37.         else {
  38.             alert('▌≥α ⌠≤φΩ÷Φ  Σε±≥≤∩φα Γ Internet Explorer.');
  39.         }
  40.         return false;
  41.     },
  42.  
  43.     add_favorite: function(title) {
  44.         if (Utils.Navigator.IE()) {
  45.             window.external.addFavorite('http://'+ location.hostname +'/', title); 
  46.         }
  47.         else {
  48.             alert('▌≥α ⌠≤φΩ÷Φ  Σε±≥≤∩φα Γ Internet Explorer, Φ±∩εδⁿτ≤Θ≥σ CTRL-D');
  49.         }
  50.         return false;
  51.     },
  52.         
  53.         toggle: function(elem, show) {
  54.         if (typeof elem == 'string') elem = $(elem);
  55.         if (show != undefined && show != null) elem.style.display = (show) ? 'block': 'none';
  56.         else elem.style.display = (elem.style.display == 'block') ? 'none': 'block';
  57.     },
  58.     
  59.     absolute_position: function(elem) {
  60.         var T = 0, L = 0, res = {top: 0, left: 0};  
  61.         var obj = (elem.tagName)? elem: $(elem);  
  62.         while(obj) {
  63.           L += obj.offsetLeft;
  64.           T += obj.offsetTop;
  65.           obj = obj.offsetParent;
  66.         }
  67.   
  68.         return {top: T, left: L};
  69.     },
  70.     
  71.     radio_value: function(name) {
  72.         var list = $NL(name);
  73.         
  74.         for (var i=0; i<list.length; i++) 
  75.             if (list[i].tagName == 'INPUT' && list[i].type == 'radio' && list[i].checked) return list[i].value;
  76.     }
  77.     
  78.   }
  79. }();
  80.  
  81. Utils.Measure = function() {
  82.     return  {
  83.         windowHeight: function() {
  84.             var de = document.documentElement;
  85.             return self.innerHeight || ( de && de.clientHeight ) || document.body.clientHeight;
  86.         },
  87.         
  88.         windowWidth: function() {
  89.             var de = document.documentElement;
  90.             return self.innerWidth || ( de && de.clientWidth ) || document.body.clientWidth;
  91.         },
  92.         
  93.         scrollTop: function() {
  94.             var de = document.documentElement;
  95.             return ( de && de.scrollTop ) || document.body.scrollTop;
  96.         },
  97.         
  98.         contentWidth: function() {
  99.             var d = document, b = d.body, e = d.documentElement;
  100.             return Math.max(Math.max(b.scrollWidth, e.scrollWidth), Math.max(b.clientWidth, e.clientWidth))
  101.         },
  102.          
  103.         contentHeight: function() {
  104.             var d = document, b = d.body, e = d.documentElement;
  105.             return Math.max(Math.max(b.scrollHeight, e.scrollHeight), Math.max(b.clientHeight, e.clientHeight));
  106.         }
  107.     }
  108. }();
  109.  
  110. Utils.Special = function() { return {
  111.  
  112.     utf8_encode: function(string) {
  113.         string = string.replace(/\r\n/g,"\n");
  114.         var utftext = "";
  115.  
  116.         for (var n = 0; n < string.length; n++) {
  117.             var c = string.charCodeAt(n);
  118.             if (c < 128) {
  119.                 utftext += String.fromCharCode(c);
  120.             }
  121.             else if((c > 127) && (c < 2048)) {
  122.                 utftext += String.fromCharCode((c >> 6) | 192); utftext += String.fromCharCode((c & 63) | 128);
  123.             }
  124.             else {
  125.                 utftext += String.fromCharCode((c >> 12) | 224); 
  126.                 utftext += String.fromCharCode(((c >> 6) & 63) | 128);
  127.                 utftext += String.fromCharCode((c & 63) | 128);
  128.             }
  129.         }
  130.         return utftext;
  131.     }
  132.  
  133. }}();
  134.  
  135. Utils.Navigator = function() {
  136.   return {
  137.     IE:     function() { return (navigator.userAgent.indexOf("MSIE") != -1); },
  138.     Opera:  function() { return (navigator.userAgent.indexOf("Opera") != -1); },
  139.     FF:     function() { return (navigator.userAgent.indexOf("Firefox") != -1 || navigator.userAgent.indexOf("Chrome") != -1); }  
  140.   }
  141. }();
  142.  
  143. Utils.Init = function() {
  144.   var _InitiateComplete = false;
  145.   var _TimerHandle = null;
  146.   var _Path = '';
  147.   
  148.   var _OnLoadStack = Array();
  149.  
  150.   return {
  151.       
  152.       JSPath: '',
  153.       InjectedScripts: new Array(),
  154.     
  155.     _get_requires: function() {
  156.       var list = document.getElementsByTagName("script");
  157.       for (var i=0; i<list.length; i++) {
  158.         var m = list[i].src.match(/utils\.js\?load=(.*)/i);
  159.         if (m) break;
  160.       }
  161.       
  162.       if (list[i]) {
  163.           this.JSPath = _Path = list[i].src.replace(/utils\.js\?load=(.*)/i, '');
  164.           return m[1].split(',');
  165.       }
  166.     },
  167.     
  168.     load_requires: function() {
  169.       var scripts = Utils.Init._get_requires();
  170.       if (!scripts) return;
  171.       
  172.       var list = document.getElementsByTagName("script");
  173.       var already_included = Array();
  174.       for (var i=0; i<list.length; i++) {
  175.         var m = list[i].src.match(/utils\.(.+)\.js/i);
  176.         if (m) already_included.push(m[1]);
  177.       }
  178.       
  179.       for (var i=0; i<scripts.length; i++) {
  180.         var src = _Path + 'utils.' + scripts[i] + '.js';
  181.         var included = false;
  182.         
  183.         for (var j=0; j<already_included.length; j++) if (already_included[j] == scripts[i]) included = true;
  184.         if (!included) Utils.Init.load_script(src);
  185.       }
  186.     },
  187.     
  188.     extract_scripts: function(content) {
  189.             var js_code = '';
  190.             
  191.             var gmatch = content.match(/<script[^>]*>([\u0001-\uFFFF]*?)<\/script>/ig);
  192.             if (gmatch) {
  193.                 var match = null;
  194.                 var value = '';
  195.                 for (var i=0; i<gmatch.length; i++) {
  196.                     value = gmatch[i];
  197.                     match = value.match(/<script[^>]*>([\u0001-\uFFFF]*?)<\/script>/i);
  198.                     if (match) js_code += match[1];
  199.                 }
  200.             }
  201.             return js_code;
  202.         },
  203.         
  204.         load_script: function(src) {
  205.             var script = document.createElement('script');
  206.             script.setAttribute('type', 'text/javascript');
  207.             script.setAttribute('src', src);
  208.             // InsertBefore for IE.
  209.             // IE crashes on using appendChild before the head tag has been closed.
  210.             var head = document.getElementsByTagName('head').item(0);
  211.             head.insertBefore(script, head.firstChild);
  212.         },
  213.         
  214.         load_style: function(src) {
  215.       var ref = document.createElement("link");
  216.       ref.setAttribute("rel", "stylesheet");
  217.       ref.setAttribute("type", "text/css");
  218.       ref.setAttribute("href", src);
  219.       
  220.       if (typeof ref != "undefined") document.getElementsByTagName("head")[0].appendChild(ref);
  221.     },
  222.         
  223.         inject_script: function(js_code) {
  224.             if (!js_code) return false;
  225.             
  226.             js_crc = '';
  227.             for (var i=0; i<this.InjectedScripts.length; i++) if (this.InjectedScripts[i] == js_crc) return false;
  228.             
  229.             this.InjectedScripts.push(js_crc);
  230.             
  231.             if (Utils.Navigator.IE()) {
  232.                 window.execScript(js_code);
  233.             } 
  234.             else {
  235.                 var script = document.createElement('script');
  236.                 script.innerHTML = js_code;
  237.                 document.getElementsByTagName('head')[0].appendChild(script);
  238.             }
  239.         },
  240.     
  241.     observe: function(func) {
  242.         if (!_InitiateComplete) _OnLoadStack.push(func);
  243.         else if (typeof func == 'function') func();
  244.     },
  245.     
  246.     initiate: function() {
  247.       // Load requires
  248.       Utils.Init.load_requires();
  249.     
  250.       // Values
  251.         Utils.Init.initiate_values();
  252.         
  253.         _InitiateComplete = true;
  254.         
  255.         for (var i=0; i<_OnLoadStack.length; i++) { if (typeof _OnLoadStack[i] == 'function') _OnLoadStack[i](); }
  256.     },
  257.     
  258.     initiate_values: function() {
  259.         Utils.Init.init_input_hints();
  260.         Utils.Init.init_select_values();
  261.         Utils.Init.init_checkbox_values();
  262.         Utils.Init.init_radio_values();
  263.     },
  264.     
  265.     init_input_hints: function() {
  266.         for (var i=0; i<document.getElementsByTagName('input').length; i++) {
  267.             var elem = document.getElementsByTagName('input')[i];
  268.             if (elem.getAttribute('default') == 'true') elem.focus();
  269.             
  270.             var hint = elem.getAttribute('hint');
  271.             if (hint) {
  272.                 elem.value = !elem.value ? hint : elem.value;
  273.                 elem.onfocus = Utils.Init.hint_focus.bind(elem);
  274.                 elem.onblur = Utils.Init.hint_blur.bind(elem);
  275.             }
  276.         }
  277.     },
  278.   
  279.     hint_focus: function(elem) {
  280.         var hint = this.getAttribute('hint');
  281.         if (!this.value || this.value == hint) {
  282.             this.value = '';
  283.         }
  284.     },
  285.     
  286.     hint_blur: function() {
  287.         var hint = this.getAttribute('hint');
  288.         if (!this.value) {
  289.             this.value = hint;
  290.         }
  291.     },
  292.   
  293.     init_select_values: function() {
  294.         var list = document.getElementsByTagName('select');
  295.         for (var i = 0; i < list.length; i++) {
  296.             var elem = list[i];
  297.             
  298.             var selValue = elem.getAttribute('metavalue');
  299.             if (selValue) {
  300.                 for (var j = 0; j< elem.options.length; j++) {
  301.                     var option = elem.options[j];
  302.                     if (option.value == selValue) {
  303.                         option.selected = true;
  304.                         break;
  305.                     }
  306.                 }
  307.             }
  308.         }
  309.     },
  310.     
  311.     init_checkbox_values: function() {
  312.         var list = document.getElementsByTagName('input');      
  313.         for (var i = 0; i < list.length; i++) {
  314.             var elem = list[i];
  315.             
  316.             var metaValue = elem.getAttribute('metavalue');
  317.             if (metaValue == elem.value && elem.type == 'checkbox') {
  318.                 elem.checked = true;
  319.             }
  320.         }
  321.     },
  322.     
  323.     init_radio_values: function() {
  324.         var list = document.getElementsByTagName('input');
  325.         for (var i = 0; i < list.length; i++) {
  326.             var elem = list[i];
  327.             
  328.             var metaValue = elem.getAttribute('metavalue');
  329.             if (metaValue == elem.value && elem.type == 'radio') {
  330.                 elem.checked = true;
  331.             }
  332.         }
  333.     }
  334.     
  335.   }
  336. }();
  337.  
  338. Utils.Event = function() {
  339.   return {
  340.     
  341.     add: function(element, name, observer, capture) {
  342.         if (typeof element == 'string') element = $(element);
  343.       
  344.       if (element.addEventListener) element.addEventListener(name, observer, capture);
  345.       else if (element.attachEvent) element.attachEvent('on' + name, observer);
  346.     },
  347.     
  348.     remove: function(element, name, observer, capture) {
  349.         if (typeof element == 'string') element = $(element);
  350.         
  351.       if (element.removeEventListener) element.removeEventListener(name, observer, capture);
  352.       else if (element.detachEvent) element.detachEvent('on' + name, observer);
  353.     }
  354.   }
  355. }();
  356.  
  357.  
  358. var $A = function(iterable) {
  359.   if (!iterable) return [];
  360.   if (iterable.toArray) {
  361.     return iterable.toArray();
  362.   } else {
  363.     var results = [];
  364.     for (var i = 0, length = iterable.length; i < length; i++)
  365.       results.push(iterable[i]);
  366.     return results;
  367.   }
  368. };
  369.  
  370. Function.prototype.bind = function() {
  371.   var __method = this, args = $A(arguments), object = args.shift();
  372.   return function() {
  373.     return __method.apply(object, args.concat($A(arguments)));
  374.   }
  375. };
  376.  
  377. /*
  378. HTMLElement.prototype.absolute_position = function() {
  379.     return Utils.Common.absolute_position(this);
  380. }
  381.  
  382. HTMLElement.prototype.remove = function() {
  383.     if (this.parentNode) this.parentNode.removeChild(this);
  384. }
  385. */
  386.  
  387.  
  388.  
  389. Utils.Event.add(window, 'load', Utils.Init.initiate, false);