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;
35 if(!this.vendver&&this.safari){
36 this.vendver=(/(safari|applewebkit)\/([0-9]+)/i.test(this.agent))?parseInt(RegExp.$2):0;
38 if((!this.vendver&&this.mz)||this.agent.indexOf("Camino")>0){
39 this.vendver=(/rv:([0-9\.]+)/.test(this.agent))?parseFloat(RegExp.$1):0;
41 if(this.ie&&window.RegExp){
42 this.vendver=(/msie\s+([0-9\.]+)/i.test(this.agent))?parseFloat(RegExp.$1):0;
44 if(this.konq&&window.RegExp){
45 this.vendver=(/khtml\/([0-9\.]+)/i.test(this.agent))?parseFloat(RegExp.$1):0;
51 if(this.safari&&(/;\s+([a-z]{2})-[a-z]{2}\)/i.test(this.agent))){
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;
65 var rcube_event={get_target:function(e){
67 return e&&e.target?e.target:e.srcElement;
68 },get_keycode:function(e){
70 return e&&e.keyCode?e.keyCode:(e&&e.which?e.which:0);
71 },get_button:function(e){
73 return e&&(typeof e.button!="undefined")?e.button:(e&&e.which?e.which:0);
74 },get_modifier:function(e){
78 _6+=(e.metaKey&&CONTROL_KEY)+(e.shiftKey&&SHIFT_KEY);
82 _6+=(e.ctrlKey&&CONTROL_KEY)+(e.shiftKey&&SHIFT_KEY);
85 },get_mouse_pos:function(e){
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;
100 },add_listener:function(p){
101 if(!p.object||!p.method){
107 if(!p.object._rc_events){
108 p.object._rc_events=[];
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);
116 if(p.element.addEventListener){
117 p.element.addEventListener(p.event,p.object._rc_events[_b],false);
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]);
123 p.element["on"+p.event]=p.object._rc_events[_b];
126 },remove_listener:function(p){
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);
135 if(p.element.detachEvent){
136 p.element.detachEvent("on"+p.event,p.object._rc_events[_e]);
138 p.element["on"+p.event]=null;
142 },cancel:function(_f){
143 var e=_f?_f:window.event;
144 if(e.preventDefault){
147 if(e.stopPropagation){
154 var rcube_layer_objects=new Array();
155 function rcube_layer(id,_12){
157 this.create=function(arg){
158 var l=(arg.x)?arg.x:0;
159 var t=(arg.y)?arg.y:0;
166 obj=document.createElement("DIV");
171 visibility=(vis)?(vis==2)?"inherit":"visible":"hidden";
175 width=w.toString().match(/\%$/)?w:w+"px";
178 height=h.toString().match(/\%$/)?h:h+"px";
186 _1a.appendChild(obj);
188 document.body.appendChild(obj);
194 this.name=this.elm.id;
196 this.elm=document.getElementById(id);
201 this.css=this.elm.style;
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){
214 this.css.left=Math.round(this.x)+"px";
215 this.css.top=Math.round(this.y)+"px";
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);
222 this.resize=function(w,h){
223 this.css.width=w+"px";
224 this.css.height=h+"px";
228 this.clip=function(t,w,h,l){
229 this.css.clip="rect("+t+" "+w+" "+h+" "+l+")";
233 this.show=function(a){
235 this.css.visibility="visible";
239 this.css.visibility="inherit";
242 this.css.visibility="hidden";
247 this.write=function(_27){
248 this.elm.innerHTML=_27;
250 this.set_bgcolor=function(c){
254 this.css.backgroundColor=c;
256 this.set_opacity=function(v){
260 var op=v<=1?Math.round(v*100):parseInt(v);
262 this.css.filter="alpha(opacity:"+op+")";
265 this.css.opacity=op/100;
266 this.css.KhtmlOpacity=op/100;
269 this.css.MozOpacity=op/100;
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;
289 var _39=_2c?new RegExp("(^|<|"+_38+")"+_37+"($|>|"+_38+")","i"):new RegExp("^"+_37+"$","i");
290 return _39.test(_2b)?true:false;
294 function find_in_array(){
295 var _3a=find_in_array.arguments;
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;
305 for(var i=0;i<_3b.length;i++){
306 if(_3d&&_3b[i].toLowerCase()==_3c.toLowerCase()){
316 function urlencode(str){
317 return window.encodeURIComponent?encodeURIComponent(str):escape(str);
319 function rcube_find_object(id,d){
324 if(d.getElementsByName&&(e=d.getElementsByName(id))){
327 if(!obj&&d.getElementById){
328 obj=d.getElementById(id);
333 if(!obj&&d.images.length){
336 if(!obj&&d.forms.length){
337 for(f=0;f<d.forms.length;f++){
338 if(d.forms[f].name==id){
341 if(d.forms[f].elements[id]){
342 obj=d.forms[f].elements[id];
351 for(n=0;!obj&&n<d.layers.length;n++){
352 obj=rcube_find_object(id,d.layers[n].document);
357 function rcube_get_object_pos(obj,_47){
358 if(typeof (obj)=="string"){
359 obj=rcube_find_object(obj);
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;
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)));
381 function get_elements_computed_style(_4f,_50,_51){
382 if(arguments.length==2){
386 if(typeof (_4f)=="string"){
387 el=rcube_find_object(_4f);
389 if(el&&el.currentStyle){
390 return el.currentStyle[_50];
392 if(el&&document.defaultView&&document.defaultView.getComputedStyle){
393 return document.defaultView.getComputedStyle(el,null).getPropertyValue(_51);
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":"");
403 roundcube_browser.prototype.set_cookie=setCookie;
404 function getCookie(_5a){
405 var dc=document.cookie;
407 var _5d=dc.indexOf("; "+_5c);
416 var end=document.cookie.indexOf(";",_5d);
420 return unescape(dc.substring(_5d+_5c.length,end));
422 roundcube_browser.prototype.get_cookie=getCookie;
423 function rcube_console(){
424 this.log=function(msg){
425 box=rcube_find_object("console");
427 if(msg.charAt(msg.length-1)=="\n"){
428 box.value+=msg+"--------------------------------------\n";
430 box.value+=msg+"\n--------------------------------------\n";
434 this.reset=function(){
435 box=rcube_find_object("console");
441 var bw=new roundcube_browser();
443 console=new rcube_console();
445 RegExp.escape=function(str){
446 return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g,"\\$1");
449 document._getElementById=document.getElementById;
450 document.getElementById=function(id){
452 var o=document._getElementById(id);
454 while((o=document.all[i])&&o.id!=id){
461 function exec_event(_64,_65){
462 if(document.createEventObject){
463 var evt=document.createEventObject();
464 return _64.fireEvent("on"+_65,evt);
466 var evt=document.createEvent("HTMLEvents");
467 evt.initEvent(_65,true,true);
468 return !_64.dispatchEvent(evt);