var AWT = { /** * Shortcut for document.getElementById() * @param id * @return document node */ e: function(id){return document.getElementById(id);}, /** * Shortcut for .getElementsByTagName(); * @param tagName * @param parent * @return collection of nodes */ t: function(tagName,parent){ parent = parent || document; return parent.getElementsByTagName(tagName); }, /** * Extracts style value of the element * @param element * @param styleAttr * @return style value */ s: function(element,styleAttr){ element = (typeof element == 'object') ? element : AWT.e(element); if(element.currentStyle && styleAttr.indexOf('-') > 0){ var parts = styleAttr.split('-'); styleAttr = parts[0]; for(var i = 1; i < parts.length; i++) styleAttr += parts[i].substring(0,1).toUpperCase() + parts[i].substring(1); } return element.currentStyle ? element.currentStyle[styleAttr] : document.defaultView.getComputedStyle(element,null).getPropertyValue(styleAttr); }, /** * Collects all elements which have CSS class clsName * @param clsName * @return array of document nodes */ c: function(clsName,parent){ parent = parent || document; var retVal = new Array(); var elements = parent.getElementsByTagName("*"); for(var i = 0; i < elements.length; i++){ if(AWT.cchk(elements[i],clsName)) retVal.push(elements[i]); } return retVal; }, /** * Adds CSS class clsName to the element * @param el * @param clsName */ cadd: function(el,clsName){ if(el.className == ''){ el.className = clsName; return; } else if(S.trim(el.className).indexOf(' ') > 0){ var classes = el.className.split(' '); for(var j = 0;j < classes.length;j++){ if(classes[j] == clsName) return; } } else if(el.className == clsName) return; el.className += ' ' + clsName; }, /** * Removes CSS class clsName from the element * @param el * @param clsName */ crmv: function(el,clsName){ if(el.className.indexOf(clsName) < 0) return; else if(el.className == clsName) el.className = ''; else if(S.trim(el.className).indexOf(' ') > 0){ var classes = el.className.split(' '); for(var j = 0;j < classes.length;j++){ if(classes[j] == clsName){ classes.splice(j,1); break; } } var c = ''; for(var i = 0; i < classes.length; i++){ if(c.length > 0) c += ' '; c += classes[i]; } el.className = c; } }, cswp: function(el,crmv,cadd){AWT.crmv(el,crmv); AWT.cadd(el,cadd);}, /** * Checks element for CSS class clsName * @param el * @param clsName * @return boolean */ cchk: function(el,clsName){ if(el.className.indexOf(" ") >= 0){ var classes = el.className.split(" "); for(var j = 0;j < classes.length;j++){ if(classes[j] == clsName){ return true; } } } else if(el.className == clsName) return true; return false; }, x: function(obj){ var curleft = 0; if(obj.offsetParent){ while (obj.offsetParent){ curleft += obj.offsetLeft; obj = obj.offsetParent; } } else if(obj.x) curleft += obj.x; return curleft; }, y: function(obj){ var curtop = 0; if(obj.offsetParent){ while(obj.offsetParent){ curtop += obj.offsetTop; obj = obj.offsetParent; } } else if(obj.y) curtop += obj.y; return curtop; }, pos: function(el){var x = AWT.x(el); var y = AWT.y(el); return {x:x,y:y};}, DOMParent: function(){ if(document.documentElement) return document.documentElement; else return document.body; }, dim: function(el){ el = (typeof el == 'object') ? el : AWT.e(el); var X = AWT.x(el); var Y = AWT.y(el); var mt = parseInt(AWT.s(el,'margin-top')); var mb = parseInt(AWT.s(el,'margin-bottom')); var ml = parseInt(AWT.s(el,'margin-left')); var mr = parseInt(AWT.s(el,'margin-right')); mt = isNaN(mt) ? 0 : mt; mr = isNaN(mr) ? 0 : mr; mb = isNaN(mb) ? 0 : mb; ml = isNaN(ml) ? 0 : ml; // var pt = parseInt(AWT.s(el,'padding-top')); var pb = parseInt(AWT.s(el,'padding-bottom')); var pl = parseInt(AWT.s(el,'padding-left')); var pr = parseInt(AWT.s(el,'padding-right')); pt = isNaN(pt) ? 0 : pt; pr = isNaN(pr) ? 0 : pr; pb = isNaN(pb) ? 0 : pb; pl = isNaN(pl) ? 0 : pl; // var bt = parseInt(AWT.s(el,'border-top-width')); var bb = parseInt(AWT.s(el,'border-bottom-width')); var bl = parseInt(AWT.s(el,'border-left-width')); var br = parseInt(AWT.s(el,'border-right-width')); bt = isNaN(bt) ? 0 : bt; br = isNaN(br) ? 0 : br; bb = isNaN(bb) ? 0 : bb; bl = isNaN(bl) ? 0 : bl; var ie7 = navigator.userAgent.indexOf('MSIE 7') > 0; var w = el.offsetWidth > el.clientWidth ? el.offsetWidth : el.clientWidth; var h = el.offsetHeight > el.clientHeight ? el.offsetHeight : el.clientHeight; if(ie7){ var cw = w - pl - pr - bl - br; var ch = h - pt - pb - bt - bb; } else{ var cw = w - pl - pr; var ch = h - pt - pb; } var fw = cw+ml+mr+bl+br+pl+pr; var fh = ch+mt+mb+bt+bb+pt+pb; return { debug: 'IE7='+(ie7 ? 'yes':'no')+'
\n'+ 'XY: '+X+'/'+Y+'
\n'+ 'content: '+cw+'x'+ch+'
\n'+ 'client: '+el.clientWidth+'x'+el.clientHeight+'
\n'+ 'offset: '+el.offsetWidth+'x'+el.offsetHeight+'
\n'+ 'scroll: '+el.scrollWidth+'x'+el.scrollHeight+'
\n'+ 'full: '+fw+'x'+fh+'
\n'+ 'margin: '+mt+' '+mr+' '+mb+' '+ml+'
\n'+ 'padding: '+pt+' '+pr+' '+pb+' '+pl+'
\n'+ 'border: '+bt+' '+br+' '+bb+' '+bl+'
\n'+ '', ie7:ie7, X:X,Y:Y, margin: {top:mt,right:mr,bottom:mb,left:ml}, padding: {top:pt,right:pr,bottom:pb,left:pl}, border: {top:bt,right:br,bottom:bb,left:bl}, content: {width:cw,height:ch}, client: {width:el.clientWidth,height:el.clientHeight}, offset: {width:el.offsetWidth,height:el.offsetHeight}, scroll: {width:el.scrollWidth,height:el.scrollHeight}, full: {width:fw,height:fh} }; }, opacity: function(el,x){ if(typeof el == 'object' && x > 0){ if(x > 100) x = 100; if(parseFloat(x) < 1.0) x = x * 100; el.style.opacity = x/100; el.style.filter='alpha(opacity='+x+')'; } }, mpos: function(event){ var evt = AWT.ev(event); var p = {x:0,y:0}; if(evt.pageX){ p.x = evt.pageX; p.y = evt.pageY; } else if(evt.clientX){ p.x = evt.clientX + (document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft); p.y = evt.clientY + (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop); } return p; }, pin: function(rect,point){ if(point.x < rect.x || point.x > rect.x + rect.width || point.y < rect.y || point.y > rect.y + rect.height) return false; return true; // if(point.x >= rect.x && point.x <= rect.x + rect.width && point.y >= rect.y && point.y <= rect.y + rect.height) // return true; // else // return false; }, ev: function(e){ if(window.event) return window.event; else return e; }, attachEvent: function(handler,func){ if(document.attachEvent) document.attachEvent('on'+handler,func); else if(document.addEventListener) document.addEventListener(handler,func); }, detachEvent: function(handler,func){ if(document.attachEvent) document.detachEvent(handler,func); else if(document.addEventListener){ document.removeEventListener(handler,func); } }, cancelEvent: function(evt){ if(evt){ if(evt.preventDefault) evt.preventDefault(); if(evt.stopPropagation) evt.stopPropagation(); } if(window.event){ window.event.cancelBubble = true; window.event.returnValue = false; } return false; }, viewport: function(){ var h = 0, w = 0; if(self.innerHeight){ h = window.innerHeight; w = window.innerWidth; } else{ if(document.documentElement && document.documentElement.clientHeight){ h = document.documentElement.clientHeight; w = document.documentElement.clientWidth; } else{ if(document.body){ h = document.body.clientHeight; w = document.body.clientWidth; } } } return{height: parseInt(h,10),width: parseInt(w,10)}; }, center: function(el){ var dim = AWT.viewport(); var left = (dim.width == 0) ? 50 : (dim.width - el.offsetWidth)/2; var top = (dim.height == 0) ? 50 : (dim.height - el.offsetHeight)/2; if(document.documentElement){ left += document.documentElement.scrollLeft + document.body.scrollLeft; top += document.documentElement.scrollTop + document.body.scrollTop; } else if(window.scrollX){ left += window.scrollX; top += window.scrollY; } el.style.left = left + 'px'; el.style.top = top + 'px'; }, key: function(e){ var code = 0; if(window.event) code = window.event.keyCode; else if(e) code = e.which; return code; }, char: function(event){ if(AWT.ctrl(event)) return false; var c = AWT.key(event); if(c == 8) return false; else if(c == 46) return false; return true; }, ctrl: function(event){ var c = AWT.key(event); if(c==9||(c>=16&&c<=20)||c==27||(c>=33&&c<=45)||(c>=91&&c<=93)||(c>=112&&c<=123)||c==144||c==145) return true; return false; } };