annotate media/django/js/core.js @ 1:0dcfcdf50c62

Initial import of Madeira project from the private repository.
author Brian Neal <bgneal@gmail.com>
date Mon, 06 Apr 2009 03:10:59 +0000
parents
children
rev   line source
bgneal@1 1 // Core javascript helper functions
bgneal@1 2
bgneal@1 3 // basic browser identification & version
bgneal@1 4 var isOpera = (navigator.userAgent.indexOf("Opera")>=0) && parseFloat(navigator.appVersion);
bgneal@1 5 var isIE = ((document.all) && (!isOpera)) && parseFloat(navigator.appVersion.split("MSIE ")[1].split(";")[0]);
bgneal@1 6
bgneal@1 7 // Cross-browser event handlers.
bgneal@1 8 function addEvent(obj, evType, fn) {
bgneal@1 9 if (obj.addEventListener) {
bgneal@1 10 obj.addEventListener(evType, fn, false);
bgneal@1 11 return true;
bgneal@1 12 } else if (obj.attachEvent) {
bgneal@1 13 var r = obj.attachEvent("on" + evType, fn);
bgneal@1 14 return r;
bgneal@1 15 } else {
bgneal@1 16 return false;
bgneal@1 17 }
bgneal@1 18 }
bgneal@1 19
bgneal@1 20 function removeEvent(obj, evType, fn) {
bgneal@1 21 if (obj.removeEventListener) {
bgneal@1 22 obj.removeEventListener(evType, fn, false);
bgneal@1 23 return true;
bgneal@1 24 } else if (obj.detachEvent) {
bgneal@1 25 obj.detachEvent("on" + evType, fn);
bgneal@1 26 return true;
bgneal@1 27 } else {
bgneal@1 28 return false;
bgneal@1 29 }
bgneal@1 30 }
bgneal@1 31
bgneal@1 32 // quickElement(tagType, parentReference, textInChildNode, [, attribute, attributeValue ...]);
bgneal@1 33 function quickElement() {
bgneal@1 34 var obj = document.createElement(arguments[0]);
bgneal@1 35 if (arguments[2] != '' && arguments[2] != null) {
bgneal@1 36 var textNode = document.createTextNode(arguments[2]);
bgneal@1 37 obj.appendChild(textNode);
bgneal@1 38 }
bgneal@1 39 var len = arguments.length;
bgneal@1 40 for (var i = 3; i < len; i += 2) {
bgneal@1 41 obj.setAttribute(arguments[i], arguments[i+1]);
bgneal@1 42 }
bgneal@1 43 arguments[1].appendChild(obj);
bgneal@1 44 return obj;
bgneal@1 45 }
bgneal@1 46
bgneal@1 47 // ----------------------------------------------------------------------------
bgneal@1 48 // Cross-browser xmlhttp object
bgneal@1 49 // from http://jibbering.com/2002/4/httprequest.html
bgneal@1 50 // ----------------------------------------------------------------------------
bgneal@1 51 var xmlhttp;
bgneal@1 52 /*@cc_on @*/
bgneal@1 53 /*@if (@_jscript_version >= 5)
bgneal@1 54 try {
bgneal@1 55 xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
bgneal@1 56 } catch (e) {
bgneal@1 57 try {
bgneal@1 58 xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
bgneal@1 59 } catch (E) {
bgneal@1 60 xmlhttp = false;
bgneal@1 61 }
bgneal@1 62 }
bgneal@1 63 @else
bgneal@1 64 xmlhttp = false;
bgneal@1 65 @end @*/
bgneal@1 66 if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
bgneal@1 67 xmlhttp = new XMLHttpRequest();
bgneal@1 68 }
bgneal@1 69
bgneal@1 70 // ----------------------------------------------------------------------------
bgneal@1 71 // Find-position functions by PPK
bgneal@1 72 // See http://www.quirksmode.org/js/findpos.html
bgneal@1 73 // ----------------------------------------------------------------------------
bgneal@1 74 function findPosX(obj) {
bgneal@1 75 var curleft = 0;
bgneal@1 76 if (obj.offsetParent) {
bgneal@1 77 while (obj.offsetParent) {
bgneal@1 78 curleft += obj.offsetLeft - ((isOpera) ? 0 : obj.scrollLeft);
bgneal@1 79 obj = obj.offsetParent;
bgneal@1 80 }
bgneal@1 81 // IE offsetParent does not include the top-level
bgneal@1 82 if (isIE && obj.parentElement){
bgneal@1 83 curleft += obj.offsetLeft - obj.scrollLeft;
bgneal@1 84 }
bgneal@1 85 } else if (obj.x) {
bgneal@1 86 curleft += obj.x;
bgneal@1 87 }
bgneal@1 88 return curleft;
bgneal@1 89 }
bgneal@1 90
bgneal@1 91 function findPosY(obj) {
bgneal@1 92 var curtop = 0;
bgneal@1 93 if (obj.offsetParent) {
bgneal@1 94 while (obj.offsetParent) {
bgneal@1 95 curtop += obj.offsetTop - ((isOpera) ? 0 : obj.scrollTop);
bgneal@1 96 obj = obj.offsetParent;
bgneal@1 97 }
bgneal@1 98 // IE offsetParent does not include the top-level
bgneal@1 99 if (isIE && obj.parentElement){
bgneal@1 100 curtop += obj.offsetTop - obj.scrollTop;
bgneal@1 101 }
bgneal@1 102 } else if (obj.y) {
bgneal@1 103 curtop += obj.y;
bgneal@1 104 }
bgneal@1 105 return curtop;
bgneal@1 106 }
bgneal@1 107
bgneal@1 108 //-----------------------------------------------------------------------------
bgneal@1 109 // Date object extensions
bgneal@1 110 // ----------------------------------------------------------------------------
bgneal@1 111 Date.prototype.getCorrectYear = function() {
bgneal@1 112 // Date.getYear() is unreliable --
bgneal@1 113 // see http://www.quirksmode.org/js/introdate.html#year
bgneal@1 114 var y = this.getYear() % 100;
bgneal@1 115 return (y < 38) ? y + 2000 : y + 1900;
bgneal@1 116 }
bgneal@1 117
bgneal@1 118 Date.prototype.getTwoDigitMonth = function() {
bgneal@1 119 return (this.getMonth() < 9) ? '0' + (this.getMonth()+1) : (this.getMonth()+1);
bgneal@1 120 }
bgneal@1 121
bgneal@1 122 Date.prototype.getTwoDigitDate = function() {
bgneal@1 123 return (this.getDate() < 10) ? '0' + this.getDate() : this.getDate();
bgneal@1 124 }
bgneal@1 125
bgneal@1 126 Date.prototype.getTwoDigitHour = function() {
bgneal@1 127 return (this.getHours() < 10) ? '0' + this.getHours() : this.getHours();
bgneal@1 128 }
bgneal@1 129
bgneal@1 130 Date.prototype.getTwoDigitMinute = function() {
bgneal@1 131 return (this.getMinutes() < 10) ? '0' + this.getMinutes() : this.getMinutes();
bgneal@1 132 }
bgneal@1 133
bgneal@1 134 Date.prototype.getTwoDigitSecond = function() {
bgneal@1 135 return (this.getSeconds() < 10) ? '0' + this.getSeconds() : this.getSeconds();
bgneal@1 136 }
bgneal@1 137
bgneal@1 138 Date.prototype.getISODate = function() {
bgneal@1 139 return this.getCorrectYear() + '-' + this.getTwoDigitMonth() + '-' + this.getTwoDigitDate();
bgneal@1 140 }
bgneal@1 141
bgneal@1 142 Date.prototype.getHourMinute = function() {
bgneal@1 143 return this.getTwoDigitHour() + ':' + this.getTwoDigitMinute();
bgneal@1 144 }
bgneal@1 145
bgneal@1 146 Date.prototype.getHourMinuteSecond = function() {
bgneal@1 147 return this.getTwoDigitHour() + ':' + this.getTwoDigitMinute() + ':' + this.getTwoDigitSecond();
bgneal@1 148 }
bgneal@1 149
bgneal@1 150 // ----------------------------------------------------------------------------
bgneal@1 151 // String object extensions
bgneal@1 152 // ----------------------------------------------------------------------------
bgneal@1 153 String.prototype.pad_left = function(pad_length, pad_string) {
bgneal@1 154 var new_string = this;
bgneal@1 155 for (var i = 0; new_string.length < pad_length; i++) {
bgneal@1 156 new_string = pad_string + new_string;
bgneal@1 157 }
bgneal@1 158 return new_string;
bgneal@1 159 }
bgneal@1 160
bgneal@1 161 // ----------------------------------------------------------------------------
bgneal@1 162 // Get the computed style for and element
bgneal@1 163 // ----------------------------------------------------------------------------
bgneal@1 164 function getStyle(oElm, strCssRule){
bgneal@1 165 var strValue = "";
bgneal@1 166 if(document.defaultView && document.defaultView.getComputedStyle){
bgneal@1 167 strValue = document.defaultView.getComputedStyle(oElm, "").getPropertyValue(strCssRule);
bgneal@1 168 }
bgneal@1 169 else if(oElm.currentStyle){
bgneal@1 170 strCssRule = strCssRule.replace(/\-(\w)/g, function (strMatch, p1){
bgneal@1 171 return p1.toUpperCase();
bgneal@1 172 });
bgneal@1 173 strValue = oElm.currentStyle[strCssRule];
bgneal@1 174 }
bgneal@1 175 return strValue;
bgneal@1 176 }