Policy 1707 commit to LF
[policy/engine.git] / ECOMP-SDK-APP / src / main / webapp / static / fusion / sample / js / utils.js
1 /**
2  *
3  * Utilities
4  * Author: Stefan Petre www.eyecon.ro
5  * 
6  */
7 (function($) {
8 EYE.extend({
9         getPosition : function(e, forceIt)
10         {
11                 var x = 0;
12                 var y = 0;
13                 var es = e.style;
14                 var restoreStyles = false;
15                 if (forceIt && jQuery.curCSS(e,'display') == 'none') {
16                         var oldVisibility = es.visibility;
17                         var oldPosition = es.position;
18                         restoreStyles = true;
19                         es.visibility = 'hidden';
20                         es.display = 'block';
21                         es.position = 'absolute';
22                 }
23                 var el = e;
24                 if (el.getBoundingClientRect) { // IE
25                         var box = el.getBoundingClientRect();
26                         x = box.left + Math.max(document.documentElement.scrollLeft, document.body.scrollLeft) - 2;
27                         y = box.top + Math.max(document.documentElement.scrollTop, document.body.scrollTop) - 2;
28                 } else {
29                         x = el.offsetLeft;
30                         y = el.offsetTop;
31                         el = el.offsetParent;
32                         if (e != el) {
33                                 while (el) {
34                                         x += el.offsetLeft;
35                                         y += el.offsetTop;
36                                         el = el.offsetParent;
37                                 }
38                         }
39                         if (jQuery.browser.safari && jQuery.curCSS(e, 'position') == 'absolute' ) {
40                                 x -= document.body.offsetLeft;
41                                 y -= document.body.offsetTop;
42                         }
43                         el = e.parentNode;
44                         while (el && el.tagName.toUpperCase() != 'BODY' && el.tagName.toUpperCase() != 'HTML') 
45                         {
46                                 if (jQuery.curCSS(el, 'display') != 'inline') {
47                                         x -= el.scrollLeft;
48                                         y -= el.scrollTop;
49                                 }
50                                 el = el.parentNode;
51                         }
52                 }
53                 if (restoreStyles == true) {
54                         es.display = 'none';
55                         es.position = oldPosition;
56                         es.visibility = oldVisibility;
57                 }
58                 return {x:x, y:y};
59         },
60         getSize : function(e)
61         {
62                 var w = parseInt(jQuery.curCSS(e,'width'), 10);
63                 var h = parseInt(jQuery.curCSS(e,'height'), 10);
64                 var wb = 0;
65                 var hb = 0;
66                 if (jQuery.curCSS(e, 'display') != 'none') {
67                         wb = e.offsetWidth;
68                         hb = e.offsetHeight;
69                 } else {
70                         var es = e.style;
71                         var oldVisibility = es.visibility;
72                         var oldPosition = es.position;
73                         es.visibility = 'hidden';
74                         es.display = 'block';
75                         es.position = 'absolute';
76                         wb = e.offsetWidth;
77                         hb = e.offsetHeight;
78                         es.display = 'none';
79                         es.position = oldPosition;
80                         es.visibility = oldVisibility;
81                 }
82                 return {w:w, h:h, wb:wb, hb:hb};
83         },
84         getClient : function(e)
85         {
86                 var h, w;
87                 if (e) {
88                         w = e.clientWidth;
89                         h = e.clientHeight;
90                 } else {
91                         var de = document.documentElement;
92                         w = window.innerWidth || self.innerWidth || (de&&de.clientWidth) || document.body.clientWidth;
93                         h = window.innerHeight || self.innerHeight || (de&&de.clientHeight) || document.body.clientHeight;
94                 }
95                 return {w:w,h:h};
96         },
97         getScroll : function (e)
98         {
99                 var t=0, l=0, w=0, h=0, iw=0, ih=0;
100                 if (e && e.nodeName.toLowerCase() != 'body') {
101                         t = e.scrollTop;
102                         l = e.scrollLeft;
103                         w = e.scrollWidth;
104                         h = e.scrollHeight;
105                 } else  {
106                         if (document.documentElement) {
107                                 t = document.documentElement.scrollTop;
108                                 l = document.documentElement.scrollLeft;
109                                 w = document.documentElement.scrollWidth;
110                                 h = document.documentElement.scrollHeight;
111                         } else if (document.body) {
112                                 t = document.body.scrollTop;
113                                 l = document.body.scrollLeft;
114                                 w = document.body.scrollWidth;
115                                 h = document.body.scrollHeight;
116                         }
117                         if (typeof pageYOffset != 'undefined') {
118                                 t = pageYOffset;
119                                 l = pageXOffset;
120                         }
121                         iw = self.innerWidth||document.documentElement.clientWidth||document.body.clientWidth||0;
122                         ih = self.innerHeight||document.documentElement.clientHeight||document.body.clientHeight||0;
123                 }
124                 return { t: t, l: l, w: w, h: h, iw: iw, ih: ih };
125         },
126         getMargins : function(e, toInteger)
127         {
128                 var t = jQuery.curCSS(e,'marginTop') || '';
129                 var r = jQuery.curCSS(e,'marginRight') || '';
130                 var b = jQuery.curCSS(e,'marginBottom') || '';
131                 var l = jQuery.curCSS(e,'marginLeft') || '';
132                 if (toInteger)
133                         return {
134                                 t: parseInt(t, 10)||0,
135                                 r: parseInt(r, 10)||0,
136                                 b: parseInt(b, 10)||0,
137                                 l: parseInt(l, 10)
138                         };
139                 else
140                         return {t: t, r: r,     b: b, l: l};
141         },
142         getPadding : function(e, toInteger)
143         {
144                 var t = jQuery.curCSS(e,'paddingTop') || '';
145                 var r = jQuery.curCSS(e,'paddingRight') || '';
146                 var b = jQuery.curCSS(e,'paddingBottom') || '';
147                 var l = jQuery.curCSS(e,'paddingLeft') || '';
148                 if (toInteger)
149                         return {
150                                 t: parseInt(t, 10)||0,
151                                 r: parseInt(r, 10)||0,
152                                 b: parseInt(b, 10)||0,
153                                 l: parseInt(l, 10)
154                         };
155                 else
156                         return {t: t, r: r,     b: b, l: l};
157         },
158         getBorder : function(e, toInteger)
159         {
160                 var t = jQuery.curCSS(e,'borderTopWidth') || '';
161                 var r = jQuery.curCSS(e,'borderRightWidth') || '';
162                 var b = jQuery.curCSS(e,'borderBottomWidth') || '';
163                 var l = jQuery.curCSS(e,'borderLeftWidth') || '';
164                 if (toInteger)
165                         return {
166                                 t: parseInt(t, 10)||0,
167                                 r: parseInt(r, 10)||0,
168                                 b: parseInt(b, 10)||0,
169                                 l: parseInt(l, 10)||0
170                         };
171                 else
172                         return {t: t, r: r,     b: b, l: l};
173         },
174         traverseDOM : function(nodeEl, func)
175         {
176                 func(nodeEl);
177                 nodeEl = nodeEl.firstChild;
178                 while(nodeEl){
179                         EYE.traverseDOM(nodeEl, func);
180                         nodeEl = nodeEl.nextSibling;
181                 }
182         },
183         getInnerWidth :  function(el, scroll) {
184                 var offsetW = el.offsetWidth;
185                 return scroll ? Math.max(el.scrollWidth,offsetW) - offsetW + el.clientWidth:el.clientWidth;
186         },
187         getInnerHeight : function(el, scroll) {
188                 var offsetH = el.offsetHeight;
189                 return scroll ? Math.max(el.scrollHeight,offsetH) - offsetH + el.clientHeight:el.clientHeight;
190         },
191         getExtraWidth : function(el) {
192                 if($.boxModel)
193                         return (parseInt($.curCSS(el, 'paddingLeft'))||0)
194                                 + (parseInt($.curCSS(el, 'paddingRight'))||0)
195                                 + (parseInt($.curCSS(el, 'borderLeftWidth'))||0)
196                                 + (parseInt($.curCSS(el, 'borderRightWidth'))||0);
197                 return 0;
198         },
199         getExtraHeight : function(el) {
200                 if($.boxModel)
201                         return (parseInt($.curCSS(el, 'paddingTop'))||0)
202                                 + (parseInt($.curCSS(el, 'paddingBottom'))||0)
203                                 + (parseInt($.curCSS(el, 'borderTopWidth'))||0)
204                                 + (parseInt($.curCSS(el, 'borderBottomWidth'))||0);
205                 return 0;
206         },
207         isChildOf: function(parentEl, el, container) {
208                 if (parentEl == el) {
209                         return true;
210                 }
211                 if (!el || !el.nodeType || el.nodeType != 1) {
212                         return false;
213                 }
214                 if (parentEl.contains && !$.browser.safari) {
215                         return parentEl.contains(el);
216                 }
217                 if ( parentEl.compareDocumentPosition ) {
218                         return !!(parentEl.compareDocumentPosition(el) & 16);
219                 }
220                 var prEl = el.parentNode;
221                 while(prEl && prEl != container) {
222                         if (prEl == parentEl)
223                                 return true;
224                         prEl = prEl.parentNode;
225                 }
226                 return false;
227         },
228         centerEl : function(el, axis)
229         {
230                 var clientScroll = EYE.getScroll();
231                 var size = EYE.getSize(el);
232                 if (!axis || axis == 'vertically')
233                         $(el).css(
234                                 {
235                                         top: clientScroll.t + ((Math.min(clientScroll.h,clientScroll.ih) - size.hb)/2) + 'px'
236                                 }
237                         );
238                 if (!axis || axis == 'horizontally')
239                         $(el).css(
240                                 {
241                                         left: clientScroll.l + ((Math.min(clientScroll.w,clientScroll.iw) - size.wb)/2) + 'px'
242                                 }
243                         );
244         }
245 });
246 if (!$.easing.easeout) {
247         $.easing.easeout = function(p, n, firstNum, delta, duration) {
248                 return -delta * ((n=n/duration-1)*n*n*n - 1) + firstNum;
249         };
250 }
251         
252 })(jQuery);