]> git.donarmstrong.com Git - roundcube.git/blob - program/js/common.js
Imported Upstream version 0.2~stable
[roundcube.git] / program / js / common.js
1 var CONTROL_KEY=1;
2 var SHIFT_KEY=2;
3 var CONTROL_SHIFT_KEY=3;
4 function roundcube_browser(){
5 this.ver=parseFloat(navigator.appVersion);
6 this.appver=navigator.appVersion;
7 this.agent=navigator.userAgent;
8 this.name=navigator.appName;
9 this.vendor=navigator.vendor?navigator.vendor:"";
10 this.vendver=navigator.vendorSub?parseFloat(navigator.vendorSub):0;
11 this.product=navigator.product?navigator.product:"";
12 this.platform=String(navigator.platform).toLowerCase();
13 this.lang=(navigator.language)?navigator.language.substring(0,2):(navigator.browserLanguage)?navigator.browserLanguage.substring(0,2):(navigator.systemLanguage)?navigator.systemLanguage.substring(0,2):"en";
14 this.win=(this.platform.indexOf("win")>=0)?true:false;
15 this.mac=(this.platform.indexOf("mac")>=0)?true:false;
16 this.linux=(this.platform.indexOf("linux")>=0)?true:false;
17 this.unix=(this.platform.indexOf("unix")>=0)?true:false;
18 this.dom=document.getElementById?true:false;
19 this.dom2=(document.addEventListener&&document.removeEventListener);
20 this.ie=(document.all)?true:false;
21 this.ie4=(this.ie&&!this.dom);
22 this.ie5=(this.dom&&this.appver.indexOf("MSIE 5")>0);
23 this.ie6=(this.dom&&this.appver.indexOf("MSIE 6")>0);
24 this.ie7=(this.dom&&this.appver.indexOf("MSIE 7")>0);
25 this.mz=(this.dom&&this.ver>=5);
26 this.ns=((this.ver<5&&this.name=="Netscape")||(this.ver>=5&&this.vendor.indexOf("Netscape")>=0));
27 this.ns6=(this.ns&&parseInt(this.vendver)==6);
28 this.ns7=(this.ns&&parseInt(this.vendver)==7);
29 this.safari=(this.agent.toLowerCase().indexOf("safari")>0||this.agent.toLowerCase().indexOf("applewebkit")>0);
30 this.konq=(this.agent.toLowerCase().indexOf("konqueror")>0);
31 this.opera=(window.opera)?true:false;
32 if(this.opera&&window.RegExp){
33 this.vendver=(/opera(\s|\/)([0-9\.]+)/i.test(navigator.userAgent))?parseFloat(RegExp.$2):-1;
34 }else{
35 if(!this.vendver&&this.safari){
36 this.vendver=(/(safari|applewebkit)\/([0-9]+)/i.test(this.agent))?parseInt(RegExp.$2):0;
37 }else{
38 if((!this.vendver&&this.mz)||this.agent.indexOf("Camino")>0){
39 this.vendver=(/rv:([0-9\.]+)/.test(this.agent))?parseFloat(RegExp.$1):0;
40 }else{
41 if(this.ie&&window.RegExp){
42 this.vendver=(/msie\s+([0-9\.]+)/i.test(this.agent))?parseFloat(RegExp.$1):0;
43 }else{
44 if(this.konq&&window.RegExp){
45 this.vendver=(/khtml\/([0-9\.]+)/i.test(this.agent))?parseFloat(RegExp.$1):0;
46 }
47 }
48 }
49 }
50 }
51 if(this.safari&&(/;\s+([a-z]{2})-[a-z]{2}\)/i.test(this.agent))){
52 this.lang=RegExp.$1;
53 }
54 this.dhtml=((this.ie4&&this.win)||this.ie5||this.ie6||this.ns4||this.mz);
55 this.vml=(this.win&&this.ie&&this.dom&&!this.opera);
56 this.pngalpha=(this.mz||(this.opera&&this.vendver>=6)||(this.ie&&this.mac&&this.vendver>=5)||(this.ie&&this.win&&this.vendver>=5.5)||this.safari);
57 this.opacity=(this.mz||(this.ie&&this.vendver>=5.5&&!this.opera)||(this.safari&&this.vendver>=100));
58 this.cookies=navigator.cookieEnabled;
59 this.xmlhttp_test=function(){
60 var _1=new Function("try{var o=new ActiveXObject('Microsoft.XMLHTTP');return true;}catch(err){return false;}");
61 this.xmlhttp=(window.XMLHttpRequest||(window.ActiveXObject&&_1()))?true:false;
62 return this.xmlhttp;
63 };
64 };
65 var rcube_event={get_target:function(e){
66 e=e||window.event;
67 return e&&e.target?e.target:e.srcElement;
68 },get_keycode:function(e){
69 e=e||window.event;
70 return e&&e.keyCode?e.keyCode:(e&&e.which?e.which:0);
71 },get_button:function(e){
72 e=e||window.event;
73 return e&&(typeof e.button!="undefined")?e.button:(e&&e.which?e.which:0);
74 },get_modifier:function(e){
75 var _6=0;
76 e=e||window.event;
77 if(bw.mac&&e){
78 _6+=(e.metaKey&&CONTROL_KEY)+(e.shiftKey&&SHIFT_KEY);
79 return _6;
80 }
81 if(e){
82 _6+=(e.ctrlKey&&CONTROL_KEY)+(e.shiftKey&&SHIFT_KEY);
83 return _6;
84 }
85 },get_mouse_pos:function(e){
86 if(!e){
87 e=window.event;
88 }
89 var mX=(e.pageX)?e.pageX:e.clientX;
90 var mY=(e.pageY)?e.pageY:e.clientY;
91 if(document.body&&document.all){
92 mX+=document.body.scrollLeft;
93 mY+=document.body.scrollTop;
94 }
95 if(e._offset){
96 mX+=e._offset.x;
97 mY+=e._offset.y;
98 }
99 return {x:mX,y:mY};
100 },add_listener:function(p){
101 if(!p.object||!p.method){
102 return;
103 }
104 if(!p.element){
105 p.element=document;
106 }
107 if(!p.object._rc_events){
108 p.object._rc_events=[];
109 }
110 var _b=p.event+"*"+p.method;
111 if(!p.object._rc_events[_b]){
112 p.object._rc_events[_b]=function(e){
113 return p.object[p.method](e);
114 };
115 }
116 if(p.element.addEventListener){
117 p.element.addEventListener(p.event,p.object._rc_events[_b],false);
118 }else{
119 if(p.element.attachEvent){
120 p.element.detachEvent("on"+p.event,p.object._rc_events[_b]);
121 p.element.attachEvent("on"+p.event,p.object._rc_events[_b]);
122 }else{
123 p.element["on"+p.event]=p.object._rc_events[_b];
124 }
125 }
126 },remove_listener:function(p){
127 if(!p.element){
128 p.element=document;
129 }
130 var _e=p.event+"*"+p.method;
131 if(p.object&&p.object._rc_events&&p.object._rc_events[_e]){
132 if(p.element.removeEventListener){
133 p.element.removeEventListener(p.event,p.object._rc_events[_e],false);
134 }else{
135 if(p.element.detachEvent){
136 p.element.detachEvent("on"+p.event,p.object._rc_events[_e]);
137 }else{
138 p.element["on"+p.event]=null;
139 }
140 }
141 }
142 },cancel:function(_f){
143 var e=_f?_f:window.event;
144 if(e.preventDefault){
145 e.preventDefault();
146 }
147 if(e.stopPropagation){
148 e.stopPropagation();
149 }
150 e.cancelBubble=true;
151 e.returnValue=false;
152 return false;
153 }};
154 var rcube_layer_objects=new Array();
155 function rcube_layer(id,_12){
156 this.name=id;
157 this.create=function(arg){
158 var l=(arg.x)?arg.x:0;
159 var t=(arg.y)?arg.y:0;
160 var w=arg.width;
161 var h=arg.height;
162 var z=arg.zindex;
163 var vis=arg.vis;
164 var _1a=arg.parent;
165 var obj;
166 obj=document.createElement("DIV");
167 with(obj){
168 id=this.name;
169 with(style){
170 position="absolute";
171 visibility=(vis)?(vis==2)?"inherit":"visible":"hidden";
172 left=l+"px";
173 top=t+"px";
174 if(w){
175 width=w.toString().match(/\%$/)?w:w+"px";
176 }
177 if(h){
178 height=h.toString().match(/\%$/)?h:h+"px";
179 }
180 if(z){
181 zIndex=z;
182 }
183 }
184 }
185 if(_1a){
186 _1a.appendChild(obj);
187 }else{
188 document.body.appendChild(obj);
189 }
190 this.elm=obj;
191 };
192 if(_12!=null){
193 this.create(_12);
194 this.name=this.elm.id;
195 }else{
196 this.elm=document.getElementById(id);
197 }
198 if(!this.elm){
199 return false;
200 }
201 this.css=this.elm.style;
202 this.event=this.elm;
203 this.width=this.elm.offsetWidth;
204 this.height=this.elm.offsetHeight;
205 this.x=parseInt(this.elm.offsetLeft);
206 this.y=parseInt(this.elm.offsetTop);
207 this.visible=(this.css.visibility=="visible"||this.css.visibility=="show"||this.css.visibility=="inherit")?true:false;
208 this.id=rcube_layer_objects.length;
209 this.obj="rcube_layer_objects["+this.id+"]";
210 rcube_layer_objects[this.id]=this;
211 this.move=function(x,y){
212 this.x=x;
213 this.y=y;
214 this.css.left=Math.round(this.x)+"px";
215 this.css.top=Math.round(this.y)+"px";
216 };
217 this.shift=function(x,y){
218 x=Math.round(x*100)/100;
219 y=Math.round(y*100)/100;
220 this.move(this.x+x,this.y+y);
221 };
222 this.resize=function(w,h){
223 this.css.width=w+"px";
224 this.css.height=h+"px";
225 this.width=w;
226 this.height=h;
227 };
228 this.clip=function(t,w,h,l){
229 this.css.clip="rect("+t+" "+w+" "+h+" "+l+")";
230 this.clip_height=h;
231 this.clip_width=w;
232 };
233 this.show=function(a){
234 if(a==1){
235 this.css.visibility="visible";
236 this.visible=true;
237 }else{
238 if(a==2){
239 this.css.visibility="inherit";
240 this.visible=true;
241 }else{
242 this.css.visibility="hidden";
243 this.visible=false;
244 }
245 }
246 };
247 this.write=function(_27){
248 this.elm.innerHTML=_27;
249 };
250 this.set_bgcolor=function(c){
251 if(!c||c=="#"){
252 c="transparent";
253 }
254 this.css.backgroundColor=c;
255 };
256 this.set_opacity=function(v){
257 if(!bw.opacity){
258 return;
259 }
260 var op=v<=1?Math.round(v*100):parseInt(v);
261 if(bw.ie){
262 this.css.filter="alpha(opacity:"+op+")";
263 }else{
264 if(bw.safari){
265 this.css.opacity=op/100;
266 this.css.KhtmlOpacity=op/100;
267 }else{
268 if(bw.mz){
269 this.css.MozOpacity=op/100;
270 }
271 }
272 }
273 };
274 };
275 function rcube_check_email(_2b,_2c){
276 if(_2b&&window.RegExp){
277 var _2d="[^\\x0d\\x22\\x5c\\x80-\\xff]";
278 var _2e="[^\\x0d\\x5b-\\x5d\\x80-\\xff]";
279 var _2f="[^\\x00-\\x20\\x22\\x28\\x29\\x2c\\x2e\\x3a-\\x3c\\x3e\\x40\\x5b-\\x5d\\x7f-\\xff]+";
280 var _30="\\x5c[\\x00-\\x7f]";
281 var _31="\\x5b("+_2e+"|"+_30+")*\\x5d";
282 var _32="\\x22("+_2d+"|"+_30+")*\\x22";
283 var _33="("+_2f+"|"+_31+")";
284 var _34="("+_2f+"|"+_32+")";
285 var _35=_33+"(\\x2e"+_33+")*";
286 var _36=_34+"(\\x2e"+_34+")*";
287 var _37=_36+"\\x40"+_35;
288 var _38="[,;s\n]";
289 var _39=_2c?new RegExp("(^|<|"+_38+")"+_37+"($|>|"+_38+")","i"):new RegExp("^"+_37+"$","i");
290 return _39.test(_2b)?true:false;
291 }
292 return false;
293 };
294 function find_in_array(){
295 var _3a=find_in_array.arguments;
296 if(!_3a.length){
297 return -1;
298 }
299 var _3b=typeof (_3a[0])=="object"?_3a[0]:_3a.length>1&&typeof (_3a[1])=="object"?_3a[1]:new Array();
300 var _3c=typeof (_3a[0])!="object"?_3a[0]:_3a.length>1&&typeof (_3a[1])!="object"?_3a[1]:"";
301 var _3d=_3a.length==3?_3a[2]:false;
302 if(!_3b.length){
303 return -1;
304 }
305 for(var i=0;i<_3b.length;i++){
306 if(_3d&&_3b[i].toLowerCase()==_3c.toLowerCase()){
307 return i;
308 }else{
309 if(_3b[i]==_3c){
310 return i;
311 }
312 }
313 }
314 return -1;
315 };
316 function urlencode(str){
317 return window.encodeURIComponent?encodeURIComponent(str):escape(str);
318 };
319 function rcube_find_object(id,d){
320 var n,f,obj,e;
321 if(!d){
322 d=document;
323 }
324 if(d.getElementsByName&&(e=d.getElementsByName(id))){
325 obj=e[0];
326 }
327 if(!obj&&d.getElementById){
328 obj=d.getElementById(id);
329 }
330 if(!obj&&d.all){
331 obj=d.all[id];
332 }
333 if(!obj&&d.images.length){
334 obj=d.images[id];
335 }
336 if(!obj&&d.forms.length){
337 for(f=0;f<d.forms.length;f++){
338 if(d.forms[f].name==id){
339 obj=d.forms[f];
340 }else{
341 if(d.forms[f].elements[id]){
342 obj=d.forms[f].elements[id];
343 }
344 }
345 }
346 }
347 if(!obj&&d.layers){
348 if(d.layers[id]){
349 obj=d.layers[id];
350 }
351 for(n=0;!obj&&n<d.layers.length;n++){
352 obj=rcube_find_object(id,d.layers[n].document);
353 }
354 }
355 return obj;
356 };
357 function rcube_get_object_pos(obj,_47){
358 if(typeof (obj)=="string"){
359 obj=rcube_find_object(obj);
360 }
361 if(!obj){
362 return {x:0,y:0};
363 }
364 var iX=(bw.layers)?obj.x:obj.offsetLeft;
365 var iY=(bw.layers)?obj.y:obj.offsetTop;
366 if(!_47&&(bw.ie||bw.mz)){
367 var elm=obj.offsetParent;
368 while(elm&&elm!=null){
369 iX+=elm.offsetLeft-(elm.parentNode&&elm.parentNode.scrollLeft?elm.parentNode.scrollLeft:0);
370 iY+=elm.offsetTop-(elm.parentNode&&elm.parentNode.scrollTop?elm.parentNode.scrollTop:0);
371 elm=elm.offsetParent;
372 }
373 }
374 return {x:iX,y:iY};
375 };
376 function rcube_mouse_is_over(ev,obj){
377 var _4d=rcube_event.get_mouse_pos(ev);
378 var pos=rcube_get_object_pos(obj);
379 return ((_4d.x>=pos.x)&&(_4d.x<(pos.x+obj.offsetWidth))&&(_4d.y>=pos.y)&&(_4d.y<(pos.y+obj.offsetHeight)));
380 };
381 function get_elements_computed_style(_4f,_50,_51){
382 if(arguments.length==2){
383 _51=_50;
384 }
385 var el=_4f;
386 if(typeof (_4f)=="string"){
387 el=rcube_find_object(_4f);
388 }
389 if(el&&el.currentStyle){
390 return el.currentStyle[_50];
391 }else{
392 if(el&&document.defaultView&&document.defaultView.getComputedStyle){
393 return document.defaultView.getComputedStyle(el,null).getPropertyValue(_51);
394 }else{
395 return false;
396 }
397 }
398 };
399 function setCookie(_53,_54,_55,_56,_57,_58){
400 var _59=_53+"="+escape(_54)+(_55?"; expires="+_55.toGMTString():"")+(_56?"; path="+_56:"")+(_57?"; domain="+_57:"")+(_58?"; secure":"");
401 document.cookie=_59;
402 };
403 roundcube_browser.prototype.set_cookie=setCookie;
404 function getCookie(_5a){
405 var dc=document.cookie;
406 var _5c=_5a+"=";
407 var _5d=dc.indexOf("; "+_5c);
408 if(_5d==-1){
409 _5d=dc.indexOf(_5c);
410 if(_5d!=0){
411 return null;
412 }
413 }else{
414 _5d+=2;
415 }
416 var end=document.cookie.indexOf(";",_5d);
417 if(end==-1){
418 end=dc.length;
419 }
420 return unescape(dc.substring(_5d+_5c.length,end));
421 };
422 roundcube_browser.prototype.get_cookie=getCookie;
423 function rcube_console(){
424 this.log=function(msg){
425 box=rcube_find_object("console");
426 if(box){
427 if(msg.charAt(msg.length-1)=="\n"){
428 box.value+=msg+"--------------------------------------\n";
429 }else{
430 box.value+=msg+"\n--------------------------------------\n";
431 }
432 }
433 };
434 this.reset=function(){
435 box=rcube_find_object("console");
436 if(box){
437 box.value="";
438 }
439 };
440 };
441 var bw=new roundcube_browser();
442 if(!window.console){
443 console=new rcube_console();
444 }
445 RegExp.escape=function(str){
446 return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g,"\\$1");
447 };
448 if(bw.ie){
449 document._getElementById=document.getElementById;
450 document.getElementById=function(id){
451 var i=0;
452 var o=document._getElementById(id);
453 if(!o||o.id!=id){
454 while((o=document.all[i])&&o.id!=id){
455 i++;
456 }
457 }
458 return o;
459 };
460 }
461 function exec_event(_64,_65){
462 if(document.createEventObject){
463 var evt=document.createEventObject();
464 return _64.fireEvent("on"+_65,evt);
465 }else{
466 var evt=document.createEvent("HTMLEvents");
467 evt.initEvent(_65,true,true);
468 return !_64.dispatchEvent(evt);
469 }
470 };
471