- Fixed a bunch of bugs for existing paginations
[FlickrHacks.git] / _greasemonkey_ / flickrphotomagnifier.user.js
blob44fe348c2598059257f6618a8db5403774b546cc
1 // Flickr Photo Magnifier
2 // Copyright (c) 2007, Pierre Andrews.
3 // Released under the GPL license
4 // http://www.gnu.org/copyleft/gpl.html
5 //
6 // ==UserScript==
7 // @name        Flickr Photo Magnifier
8 // @namespace   http://6v8.gamboni.org/Flickr-Photo-Magnifier.html
9 // @description Add a magnifier to the photo pages. Click+mouse drag will zoom in and out. You can configure the quality of the image through the greasemonkey user script menu. (magnifier code by Janos Pal Toth).
10 // @version        1.2
11 // @date           2007-06-26
12 // @creator        Pierre Andrews (mortimer.pa@free.fr)
13 // @include http://*flickr.com/photos/*/*
14 // @exclude http://*flickr.com/photos/*/organize*
15 // @exclude http://*flickr.com/photos/*/tags*
16 // ==/UserScript==
20 (function () {
23         function M8_log() {
24           if(unsafeWindow.console)
25           unsafeWindow.console.log(arguments);
26           else
27           GM_log(arguments);
28         }
30                 function $x1(xpath) {
31                 return document.evaluate(
32                                                                  xpath,
33                                                                  document,
34                                                                  null,
35                                                                  XPathResult.FIRST_ORDERED_NODE_TYPE, null
36                                                                  ).singleNodeValue;
37         }
40         /***********************************************************************
41          * Flickr Localisation
42          **********************************************************************/
44         var FlickrLocaliser = function(locals) {
45                 this.init(locals);
46         }
47         FlickrLocaliser.prototype = {
48                 selectedLang: undefined,
49                 localisations: undefined,
50                 getLanguage: function() {
51                         if(!this.selectedLang) {
52                                 var langA = $x1("//p[@class='LanguageSelector']//a[contains(@class,'selected')]");
53                                 if(langA) {
54                                         var matches = /\/change_language.gne\?lang=([^&]+)&.*/.exec(langA.href);
55                                         if(matches && matches[1]) {
56                                                 this.selectedLang = matches[1];
57                                                 return this.selectedLang;
58                                         }
59                                 }
60                                 return false;
61                         } else return this.selectedLang;
62                 },
64                 init: function(locals) {
65                         this.localisations = locals;
66                 },
68                 localise: function(string, params) {
69                         if(this.localisations && this.getLanguage()) {
70                                 var currentLang = this.localisations[this.selectedLang];
71                                 if(!currentLang) currentLang = this.localisations[this.localisations.defaultLang];
72                                 var local = currentLang[string];
73                                 if(!local) {
74                                         local = this.localisations[this.localisations.defaultLang][string];
75                                 } 
76                                 if(!local) return string;
77                                 for(arg in params) {
78                                         var rep = new RegExp('@'+arg+'@','g');
79                                         local = local.replace(rep,params[arg]);
80                                 }
81                                 local =local.replace(/@[^@]+@/g,'');
82                                 return local;
83                         } else return undefined;
84                 }
86         }
88         /*****************************Flickr Localisation**********************/
90         
91         var localiser =  new FlickrLocaliser({
92                         'en-us' : {
93                                 'loading' : 'loading ...',
94                                 'switch' : 'switch on/off magnifier',
95                                 'about' : 'The Flickr Magnifier is a little tool to add in place magnifier on flickr images. The original magnifier code has been provided by @jpl@, you can make him a donation at:@paypal@ The adaptation to Flickr photos has been made by @pa@.',
96                                 'lower_quality' : 'Use lower quality zoom',
97                                 'magnifier_width' : 'Magnifier width',
98                                 'magnifier_height' : 'Magnifier height',
99                                 'quality_note' : 'If you choose to use a lower quality zoom, the loading time for the magnifier will be faster, but the definition of the magnified area will be less',
100                                 'menu_item' : 'Configure Flickr Photo Magnifier',
101                                 'save' : 'Save',
102                                 'cancel' : 'Cancel',
103                         },
104                         'fr-fr': {
105                                 // A
106                                 'about' : 'La Loupe Flickr (Flickr Magnifier) est un petit outil qui offre une loupe pour les images Flickr. Le code original de la loupe à été écrit par @jp@, vous pouvez lui faire un don à: @paypal@.L\'adaptation aux photos Flickr à été codée par @pa@.',
107                                 // C
108                                 'cancel' : 'Annuler',
109                                 // L
110                                 'loading' : 'Chargement ...',
111                                 'lower_quality' : 'Utiliser une image de petite qualité',
112                                 // M
113                                 'magnifier_height' : 'Hauteur de la loupe',
114                                 'magnifier_width' : 'Largeur de la loupe',
115                                 'menu_item' : 'Configurer la Loupe Flickr',
116                                 // Q
117                                 'quality_note' : 'Si vous utilisez une qualité d\'image plus petite, le temps de chargement sera plus rapide, mais la qualité de la loupe sera moindre',
118                                 // S
119                                 'save' : 'Sauver',
120                                 'switch' : 'Activer/Désactiver la loupe'
121                         },
122                         defaultLang: 'en-us'
123                 });
125         //**********************************************************************
127 // TJPzoom 3 * János Pál Tóth
128 // 2007.05.18
129 // Docs @ http://valid.tjp.hu/tjpzoom/ 
130 // News @ http://tjpzoom.blogspot.com/
132 function TJPzoomswitch(obj) {
133  TJPon[obj]=((TJPon[obj])?(0):(1));
134  return TJPon[obj];
137 function TJPzoomif(obj,highres) {
138  if(TJPon[obj]) {TJPzoom(obj,highres);}
140 function TJPzoom(obj,highres) {
141  TJPzoomratio=TJPzoomheight/TJPzoomwidth;
142  if(TJPzoomoffsetx > 1) {
143   TJPzoomoffset='dumb';
144   TJPzoomoffsetx=TJPzoomoffsetx/TJPzoomwidth;
145   TJPzoomoffsety=TJPzoomoffsety/TJPzoomheight;
147  if(!obj.style.width) {
148   if(obj.width > 0) {
149    //educated guess
150    obj.style.width=obj.width+'px';
151    obj.style.height=obj.height+'px';
152   }
154  if(typeof(highres) != typeof('')) {highres=obj.src}
155  var TJPstage=document.createElement("div");
156  TJPstage.style.width=obj.style.width;
157  TJPstage.style.height=obj.style.height;
158  TJPstage.style.overflow='hidden';
159  TJPstage.style.position='absolute';
160  if(typeof(TJPstage.style.filter) != typeof(nosuchthing)) {
161   //hi IE
162   if(navigator.appVersion.indexOf('Mac') == -1) { //hi Mac IE
163    TJPstage.style.filter='alpha(opacity=0)';
164    TJPstage.style.backgroundColor='#ffffff';
165   }
166  } else {
167   //hi decent gentlemen
168   TJPstage.style.backgroundImage='transparent';
170  TJPstage.addEventListener('mousemove',function(event) {TJPhandlemouse(event,this);},true);
171  TJPstage.addEventListener('mousedown',function(event) {TJPhandlemouse(event,this);},true);
172  TJPstage.addEventListener('mouseup',function(event) {TJPhandlemouse(event,this);},true);
173  TJPstage.addEventListener('mouseout',function(event) {TJPhandlemouse(event,this);},true);
175  if(navigator.userAgent.indexOf('MSIE')>-1) {
176   TJPstage.onmousemove = function() {TJPhandlemouse(event,this);}
177   TJPstage.onmousedown = function() {TJPhandlemouse(event,this);}
178   TJPstage.onmouseup = function() {TJPhandlemouse(event,this);}
179   TJPstage.onmouseout = function() {TJPhandlemouse(event,this);}
181  obj.parentNode.insertBefore(TJPstage,obj);
183  TJPwin=document.createElement("div");
184  TJPwin.style.width='0px';
185  TJPwin.style.height='0px';
186  TJPwin.style.overflow='hidden';
187  TJPwin.style.position='absolute';
188  TJPwin.style.display='none';
189  tw1='<div style="position:absolute;overflow:hidden;margin:';
190  TJPwin.innerHTML= 
191  tw1+TJPshadowthick+'px 0 0 '+TJPshadowthick+'px; background-color:'+TJPbordercolor+'; width:'+(TJPzoomwidth-TJPshadowthick*2)+'px;height:'+(TJPzoomheight-TJPshadowthick*2)+'px"></div>' +
192  tw1+(TJPshadowthick+TJPborderthick)+'px 0 0 '+(TJPshadowthick+TJPborderthick)+'px; width:'+(TJPzoomwidth-TJPshadowthick*2-TJPborderthick*2)+'px;height:'+(TJPzoomheight-TJPshadowthick*2-TJPborderthick*2)+'px;"><img src="'+highres+'" style="margin:0;padding:0;border:0; width:'+(TJPzoomamount*parseInt(obj.style.width))+'px;height:'+(TJPzoomamount*parseInt(obj.style.height))+'px;" '+((highres != obj.src)?('onload="if(this.parentNode) {this.parentNode.parentNode.getElementsByTagName(\'div\')[2].style.display=\'none\';}"'):(''))+'/></div>';
193  if(highres != obj.src) {
194   TJPwin.innerHTML+='<div style="position:absolute; margin:'+(TJPshadowthick+TJPborderthick)+'px 0 0 '+(TJPshadowthick+TJPborderthick)+'px;">'+TJPloading+'</div>';
196  if(TJPshadowthick>0) {
197   st1='<span style="position:absolute; display:inline-block; margin: ';
198   st2='filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=\'scale\',src='
199   st3='filter:alpha(opacity=0);margin:0;padding:0;border:0;"/></span>';
200   TJPwin.innerHTML+=
201   st1+'0 0 0 0    ; width:'+TJPshadowthick*2+'px; height:'+TJPshadowthick*2+'px;'+st2+'\''+shadowNW+'.png\')"><img src="'+shadowNW+'.png" style="width:'+TJPshadowthick*2+'px; height:'+TJPshadowthick*2+'px;'+st3 +
202   st1+'0 0 0 '+(TJPzoomwidth-TJPshadowthick*2)+'px; width:'+TJPshadowthick*2+'px; height:'+TJPshadowthick*2+'px;'+st2+'\''+shadowNE+'.png\')"><img src="'+shadowNE+'.png" style="width:'+TJPshadowthick*2+'px; height:'+TJPshadowthick*2+'px;'+st3 +
203   st1+''+(TJPzoomheight-TJPshadowthick*2)+'px 0 0 0px; width:'+TJPshadowthick*2+'px; height:'+TJPshadowthick*2+'px;'+st2+'\''+shadowSW+'.png\',sizingMethod=\'scale\')"><img src="'+shadowSW+'.png" style="width:'+TJPshadowthick*2+'px; height:'+TJPshadowthick*2+'px;'+st3 +
204   st1+''+(TJPzoomheight-TJPshadowthick*2)+'px 0 0 '+(TJPzoomwidth-TJPshadowthick*2)+'px; width:'+TJPshadowthick*2+'px; height:'+TJPshadowthick*2+'px;'+st2+'\''+shadowSE+'.png\',sizingMethod=\'scale\')"><img src="'+shadowSE+'.png" style="width:'+TJPshadowthick*2+'px; height:'+TJPshadowthick*2+'px;'+st3 +
205   st1+'0 0 0 '+(TJPshadowthick*2)+'px; width:'+(TJPzoomwidth-TJPshadowthick*4)+'px; height:'+TJPshadowthick*2+'px;'+st2+'\''+shadowN+'.png\',sizingMethod=\'scale\')"><img src="'+shadowN+'.png" style="width:'+(TJPzoomwidth-TJPshadowthick*4)+'px; height:'+TJPshadowthick*2+'px;'+st3 +
206   st1+''+(TJPshadowthick*2)+'px 0 0 0; width:'+(TJPshadowthick*2)+'px; height:'+(TJPzoomheight-TJPshadowthick*4)+'px;'+st2+'\''+shadowW+'.png\',sizingMethod=\'scale\')"><img src="'+shadowW+'.png" style="width:'+(TJPshadowthick*2)+'px; height:'+(TJPzoomheight-TJPshadowthick*4)+'px;'+st3 +
207   st1+''+(TJPshadowthick*2)+'px 0 0 '+(TJPzoomwidth-TJPshadowthick*2)+'px; width:'+(TJPshadowthick*2)+'px; height:'+(TJPzoomheight-TJPshadowthick*4)+'px;'+st2+'\''+shadowE+'.png\',sizingMethod=\'scale\')"><img src="'+shadowE+'.png" style="width:'+(TJPshadowthick*2)+'px; height:'+(TJPzoomheight-TJPshadowthick*4)+'px;'+st3 +
208   st1+''+(TJPzoomheight-TJPshadowthick*2)+'px 0 0 '+(TJPshadowthick*2)+'px; width:'+(TJPzoomwidth-TJPshadowthick*4)+'px; height:'+TJPshadowthick*2+'px;'+st2+'\''+shadowS+'.png\',sizingMethod=\'scale\')"><img src="'+shadowS+'" style="width:'+(TJPzoomwidth-TJPshadowthick*4)+'px; height:'+TJPshadowthick*2+'px;'+st3;
211  //marker - zoomer
212  obj.parentNode.insertBefore(TJPwin,TJPstage);
214  //TJPmark=document.createElement("div");
215  //TJPmark.style.width=(TJPzoomwidth-TJPborderthick*2-TJPshadowthick*2)/TJPzoomamount+'px';
216  //TJPmark.style.height=(TJPzoomheight-TJPborderthick*2-TJPshadowthick*2)/TJPzoomamount+'px';
217  //TJPmark.style.margin='30px 0 0 50px';
218  //TJPmark.style.position='absolute';
219  //TJPmark.style.backgroundColor='#ffee00';
220  //TJPmark.style.opacity='.3';
222  //obj.parentNode.insertBefore(TJPmark,TJPstage);
225  TJPresize(obj);
228 function TJPresize(obj) {
229  sbr=0; sbl=0;
230  if(TJPzoomwidth-2*TJPborderthick-3*TJPshadowthick < 22) {sbr=1}
231  if(TJPzoomheight-2*TJPborderthick-3*TJPshadowthick < 22) {sbr=1}
232  if(TJPzoomwidth > parseFloat(obj.style.width)) {sbl=1;}
233  if(TJPzoomheight > parseFloat(obj.style.height)) {sbl=1}
235  if(sbr==1 && sbl == 1) {
236   TJPzoomwidth=parseFloat(obj.style.width)/2;
237   TJPzoomheight=parseFloat(obj.style.height)/2;
238   TJPzoomratio=TJPzoomheight/TJPzoomwidth;
241  if(sbr==1) {
242   if(TJPzoomwidth<TJPzoomheight) {
243    TJPzoomheight=TJPzoomheight/TJPzoomwidth*(22+2*TJPborderthick+3*TJPshadowthick); TJPzoomwidth=22+2*TJPborderthick+3*TJPshadowthick;
244   } else {
245    TJPzoomwidth=TJPzoomwidth/TJPzoomheight*(22+2*TJPborderthick+3*TJPshadowthick); TJPzoomheight=22+2*TJPborderthick+3*TJPshadowthick;
246   }
250  if(sbl==1) {
251   if(parseFloat(obj.style.width)/parseFloat(obj.style.height) > TJPzoomwidth/TJPzoomheight) {
252    TJPzoomheight=parseFloat(obj.style.height);
253    TJPzoomwidth=TJPzoomheight/TJPzoomratio;
254   } else {
255    TJPzoomwidth=parseFloat(obj.style.width);
256    TJPzoomheight=TJPzoomratio*TJPzoomwidth;
257   }
260  TJPzoomwidth=Math.floor(TJPzoomwidth/2)*2;
261  TJPzoomheight=Math.floor(TJPzoomheight/2)*2;
263  ww=obj.parentNode.getElementsByTagName('div')[0];
264  ww.style.width=TJPzoomwidth+'px';
265  ww.style.height=TJPzoomheight+'px';
266  w=ww.getElementsByTagName('div')[0];
267  w.style.width=TJPzoomwidth-TJPshadowthick*2+'px';
268  w.style.height=TJPzoomheight-TJPshadowthick*2+'px';
269  w=ww.getElementsByTagName('div')[1];
270  w.style.width=TJPzoomwidth-TJPshadowthick*2-TJPborderthick*2+'px';
271  w.style.height=TJPzoomheight-TJPshadowthick*2-TJPborderthick*2+'px';
272  if(TJPshadowthick > 0) {
273   w=ww.getElementsByTagName('span')[1]; w.style.margin='0 0 0 '+(TJPzoomwidth-TJPshadowthick*2)+'px';
274   w=ww.getElementsByTagName('span')[2]; w.style.margin=(TJPzoomheight-TJPshadowthick*2)+'px 0 0 0px';
275   w=ww.getElementsByTagName('span')[3]; w.style.margin=(TJPzoomheight-TJPshadowthick*2)+'px 0 0 '+(TJPzoomwidth-TJPshadowthick*2)+'px';
277   w=ww.getElementsByTagName('span')[6]; w.style.margin=(TJPshadowthick*2)+'px 0 0 '+(TJPzoomwidth-TJPshadowthick*2)+'px';
278   w=ww.getElementsByTagName('span')[7]; w.style.margin=(TJPzoomheight-TJPshadowthick*2)+'px 0 0 '+(TJPshadowthick*2)+'px';
280   www=(TJPzoomwidth-TJPshadowthick*4)+'px';
281   w=ww.getElementsByTagName('span')[4]; w.style.width=www;
282   w=w.getElementsByTagName('img')[0]; w.style.width=www;
283   w=ww.getElementsByTagName('span')[7]; w.style.width=www;
284   w=w.getElementsByTagName('img')[0]; w.style.width=www;
285   
286   www=(TJPzoomheight-TJPshadowthick*4)+'px';
287   w=ww.getElementsByTagName('span')[5]; w.style.height=www;
288   w=w.getElementsByTagName('img')[0]; w.style.height=www;
289   w=ww.getElementsByTagName('span')[6]; w.style.height=www;
290   w=w.getElementsByTagName('img')[0]; w.style.height=www;
294 function TJPfindposy(obj) {
295  var curtop = 0;
296  if(!obj) {return 0;}
297  if (obj.offsetParent) {
298   while (obj.offsetParent) {
299    curtop += obj.offsetTop
300    obj = obj.offsetParent;
301   }
302  } else if (obj.y) {
303   curtop += obj.y;
305  return curtop;
308 function TJPfindposx(obj) {
309  var curleft = 0;
310  if(!obj) {return 0;}
311  if (obj && obj.offsetParent) {
312   while (obj.offsetParent) {
313    curleft += obj.offsetLeft
314    obj = obj.offsetParent;
315   }
316  } else if (obj.x) {
317   curleft += obj.x;
319  return curleft;
323 function TJPhandlemouse(evt,obj) {
324  var evt = evt?evt:window.event?window.event:null; if(!evt) { return false; }
325  if(evt.pageX) {
326   nowx=evt.pageX-TJPfindposx(obj)-TJPadjustx;
327   nowy=evt.pageY-TJPfindposy(obj)-TJPadjusty;
328  } else {
329   if(document.documentElement && document.documentElement.scrollTop) {
330    nowx=evt.clientX+document.documentElement.scrollLeft-TJPfindposx(obj)-TJPadjustx;
331    nowy=evt.clientY+document.documentElement.scrollTop-TJPfindposy(obj)-TJPadjusty;
332   } else {
333    nowx=evt.x+document.body.scrollLeft-TJPfindposx(obj)-TJPadjustx;
334    nowy=evt.y+document.body.scrollTop-TJPfindposy(obj)-TJPadjusty;
335   }
337  if(evt.type == 'mousemove') {
338   TJPsetwin(obj,nowx,nowy);
339  } else if(evt.type == 'mousedown') {
340   TJPmouse=1; //left: 1, middle: 2, right: 3
341   TJPmousey=nowy;
342   TJPmousex=nowx;
343  } else if(evt.type =='mouseup') {
344   TJPmouse=0;
345  } else if(evt.type =='mouseout') {
346   TJPmouse=0;
347   if(navigator.appVersion.indexOf('Mac') == -1 || navigator.appVersion.indexOf('MSIE') == -1) { //hi Mac IE
348    x=obj.parentNode;
349    x.removeChild(x.getElementsByTagName('div')[0]);
350    x.removeChild(x.getElementsByTagName('div')[0]);
351    //x.removeChild(x.getElementsByTagName('div')[0]); //AAAAAAAAAAAAAAAAAAAAAAAAAA
352   }
357 // TJPzoom 3 * János Pál Tóth
358 // Docs @ http://valid.tjp.hu/tjpzoom/ 
359 // News @ http://tjpzoom.blogspot.com/
362 function TJPsetwin(obj,nowx,nowy) {
363  obj.parentNode.getElementsByTagName('div')[0].style.display='block';
364  if(TJPzoomoffset=='smart') {
365   TJPzoomoffsetx=nowx/parseFloat(obj.style.width);
366   TJPzoomoffsety=nowy/parseFloat(obj.style.height);
369  stage=obj.parentNode.getElementsByTagName('div')[0];
370  if(TJPmouse == 1) {
371   if(Math.abs(nowy-TJPmousey) >= 1) {
372    TJPzoomamount*=((nowy>TJPmousey)?(0.909):(1.1));
373    TJPmousey=nowy;
374    if(TJPzoomamount < TJPzoomamountmin) {TJPzoomamount=TJPzoomamountmin;}
375    if(TJPzoomamount > TJPzoomamountmax) {TJPzoomamount=TJPzoomamountmax;}
376    stage.getElementsByTagName('div')[1].getElementsByTagName('img')[0].style.width=  parseInt(obj.style.width)*TJPzoomamount+'px';
377    stage.getElementsByTagName('div')[1].getElementsByTagName('img')[0].style.height=  parseInt(obj.style.height)*TJPzoomamount+'px';
378   }
379   if(Math.abs(nowx-TJPmousex) >= 12 && TJPzoomwindowlock==0) {
380    TJPzoomwidth*=((nowx>TJPmousex)?(1.1):(0.909));
381    TJPzoomheight=TJPzoomwidth*TJPzoomratio;
382    TJPresize(obj);
383    TJPmousex=nowx;
384   }
386  stage.style.marginLeft=nowx-(TJPzoomwidth -2*TJPborderthick-2*TJPshadowthick)*TJPzoomoffsetx-TJPborderthick-TJPshadowthick+'px';
387  stage.style.marginTop= nowy-(TJPzoomheight-2*TJPborderthick-2*TJPshadowthick)*TJPzoomoffsety-TJPborderthick-TJPshadowthick+'px';
388  clip1=0; clip2=TJPzoomwidth; clip3=TJPzoomheight; clip4=0;
389  nwidth=TJPzoomwidth; nheight=TJPzoomheight;
390  /*tmp=(1-2*TJPzoomoffsetx)*(TJPborderthick+TJPshadowthick);
392  if(nowx-TJPzoomwidth*TJPzoomoffsetx < tmp) {
393   clip4=TJPzoomwidth*TJPzoomoffsetx-nowx + tmp;
394  } else if(parseFloat(nowx-TJPzoomwidth*TJPzoomoffsetx+TJPzoomwidth) > parseFloat(obj.style.width)+tmp) {
395   clip2= TJPzoomwidth*TJPzoomoffsetx - nowx + parseFloat(obj.style.width)+tmp;
396   nwidth=TJPzoomwidth*TJPzoomoffsetx-nowx+parseInt(obj.style.width)+TJPborderthick+TJPshadowthick;
399  tmp=(1-2*TJPzoomoffsety)*(TJPborderthick+TJPshadowthick);
401  if(nowy-TJPzoomheight*TJPzoomoffsety < tmp) {
402   clip1=TJPzoomheight*TJPzoomoffsety-nowy+tmp;
403  } else if(parseFloat(nowy-TJPzoomheight*TJPzoomoffsety+TJPzoomheight) > parseFloat(obj.style.height)+tmp) {
404   clip3= TJPzoomheight*TJPzoomoffsety - nowy + parseFloat(obj.style.height)+tmp;
405   nheight=TJPzoomheight*TJPzoomoffsety - nowy + parseFloat(obj.style.height)+TJPborderthick+TJPshadowthick;
406   }*/
407  stage.style.width=nwidth+'px';
408  stage.style.height=nheight+'px';
410  // stage.style.clip='rect('+clip1+'px,'+clip2+'px,'+clip3+'px,'+clip4+'px)';
412  if(nowy-TJPzoomoffsety*(TJPzoomheight-2*TJPborderthick-2*TJPshadowthick) < 0) { t=-(nowy-TJPzoomoffsety*(TJPzoomheight-2*TJPborderthick-2*TJPshadowthick))} 
413  else if(nowy-TJPzoomoffsety*(TJPzoomheight-2*TJPborderthick-2*TJPshadowthick) > parseFloat(obj.style.height)-TJPzoomheight+TJPborderthick*2+TJPshadowthick*2) { t=-TJPzoomamount*parseFloat(obj.style.height)+TJPzoomheight-TJPborderthick*2-TJPshadowthick*2-((nowy-TJPzoomoffsety*(TJPzoomheight-2*TJPborderthick-2*TJPshadowthick))-(parseFloat(obj.style.height)-TJPzoomheight+TJPborderthick*2+TJPshadowthick*2)); }
414  else { t=(-TJPzoomamount*parseFloat(obj.style.height)+TJPzoomheight-TJPborderthick*2-TJPshadowthick*2)/(parseFloat(obj.style.height)-TJPzoomheight+TJPborderthick*2+TJPshadowthick*2)*(nowy-TJPzoomoffsety*(TJPzoomheight-2*TJPborderthick-2*TJPshadowthick)) }
415  stage.getElementsByTagName('div')[1].getElementsByTagName('img')[0].style.marginTop=t+'px';
417  if(nowx-TJPzoomoffsetx*(TJPzoomwidth-2*TJPborderthick-2*TJPshadowthick) < 0) { t=-(nowx-TJPzoomoffsetx*(TJPzoomwidth-2*TJPborderthick-2*TJPshadowthick))} 
418  else if(nowx-TJPzoomoffsetx*(TJPzoomwidth-2*TJPborderthick-2*TJPshadowthick) > parseFloat(obj.style.width)-TJPzoomwidth+TJPborderthick*2+TJPshadowthick*2) { t=-TJPzoomamount*parseFloat(obj.style.width)+TJPzoomwidth-TJPborderthick*2-TJPshadowthick*2-((nowx-TJPzoomoffsetx*(TJPzoomwidth-2*TJPborderthick-2*TJPshadowthick))-(parseFloat(obj.style.width)-TJPzoomwidth+TJPborderthick*2+TJPshadowthick*2)); }
419  else { t=(-TJPzoomamount*parseFloat(obj.style.width)+TJPzoomwidth-TJPborderthick*2-TJPshadowthick*2)/(parseFloat(obj.style.width)-TJPzoomwidth+TJPborderthick*2+TJPshadowthick*2)*(nowx-TJPzoomoffsetx*(TJPzoomwidth-2*TJPborderthick-2*TJPshadowthick)) }
420  stage.getElementsByTagName('div')[1].getElementsByTagName('img')[0].style.marginLeft=t+'px';
423  //document.getElementsByTagName('h1')[0].innerHTML=;
426 function TJPinit() {
427  TJPadjustx=0; TJPadjusty=0;
428  if(navigator.userAgent.indexOf('MSIE')>-1) {TJPadjustx=2;TJPadjusty=2;}
429  if(navigator.userAgent.indexOf('Opera')>-1) {TJPadjustx=0; TJPadjusty=0;}
430  if(navigator.userAgent.indexOf('Safari')>-1) {TJPadjustx=1; TJPadjusty=2;}
433 // configuration - do not modify the following, instead read the behaviors.html file in the tutorial!
434 var TJPon=new Array();
435 var TJPadjustx,TJPadjusty;
436 var TJPmouse=0; var TJPmousey;
437 var TJPloading='<div style="background-color: #ffeb77; color: #333333; padding:2px; font-family: verdana,arial,helvetica; font-size: 10px;">'+localiser.localise('loading')+'</div>';
439 var TJPzoomwidth= 160;
440 var TJPzoomheight= 120;
441 var TJPzoomratio;
442 var TJPzoomwindowlock=0;
444 var TJPzoomoffsetx=TJPzoomwidth/2;
445 var TJPzoomoffsety=TJPzoomheight/2;
446 var TJPzoomoffset;
448 var TJPzoomamount=4;
449 var TJPzoomamountmax=12;
450 var TJPzoomamountmin=1;
452 var TJPborderthick=1;
453 var TJPbordercolor='#000000';
455 var TJPshadowthick=8;
457 var shadowN = "data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%10%00%00%00%10%08%06%00%00%00%1F%F3%FFa%00%00%00%07tIME%07%D7%04%1A%16%1E9%9A%24%FF%19%00%00%00%09pHYs%00%00.%23%00%00.%23%01x%A5%3Fv%00%00%00%04gAMA%00%00%B1%8F%0B%FCa%05%00%00%00%15IDATx%DAc%60%18%05%C3%000B%F1(%18%05%14%01%00%08%9E%00%03%83%17%0BH%00%00%00%00IEND%AEB%60%82";
458 var shadowNE = "data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%10%00%00%00%10%08%06%00%00%00%1F%F3%FFa%00%00%00%07tIME%07%D7%04%1A%16%1C1%A6%C9%15%A9%00%00%00%09pHYs%00%00.%23%00%00.%23%01x%A5%3Fv%00%00%00%04gAMA%00%00%B1%8F%0B%FCa%05%00%00%00%88IDATx%DA%ED%90%CB%0A%830%10E%13M%AA(t%D7%AD%82%FF%FFk%BA%F0I%F1%11o%E0%06B7%8E%DB%E2%C0a%20d%CE%3C%94z%E2%0FB%93%3B%E1~%05W%F1b%3E%A2%EC%82(%15%08%DE%C0%02%03%92%A8%A9XP%81%1Cd%D1%FF%B0%863%02A%0DV%B0%80%01%F4%D1*%87D%D0%80%2F%18A%CB7%2F%DC%C0.%9D%C0w%EF8%FAL%99%CFZ%22%F8%80%89%C5%13%EFa%C3A%25%82%92%C5%05%0FiyL%2FP'%B6%E5%1E%5D%DCX%24%10%00%00%00%00IEND%AEB%60%82";
459 var shadowE = "data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%10%00%00%00%10%08%06%00%00%00%1F%F3%FFa%00%00%00%07tIME%07%D7%04%1A%16%1D%0F~%B39C%00%00%00%09pHYs%00%00.%23%00%00.%23%01x%A5%3Fv%00%00%00%04gAMA%00%00%B1%8F%0B%FCa%05%00%00%00%2BIDATx%DAcd%20%0C%D6%02%F1%17%20~%05%C4%0F%80%F8%0E%94~%0D%12g%22%C2%00%BC%60%D4%80Q%03F%0D%18%2C%06%00%00l%95%07%26%D9%C2%1F%9D%00%00%00%00IEND%AEB%60%82";
460 var shadowSE = "data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%10%00%00%00%10%08%06%00%00%00%1F%F3%FFa%00%00%00%07tIME%07%D7%04%1A%16%1D(%DB%B9%8C(%00%00%00%09pHYs%00%00.%23%00%00.%23%01x%A5%3Fv%00%00%00%04gAMA%00%00%B1%8F%0B%FCa%05%00%00%00%9EIDATx%DA%ED%92A%0E%83%20%10E%B11%3D%40%EF%7F%85%DE%C8%85k%9B%D8%C4%9AR%A32~%F0O3%2B%60%D5U'y%40L%E6%F1A%1AW%AE%3B%98%C1%00z%D0q~%C4%EF%97%0AA%B6%FE%82%1F%09%02%11%83%D3u%EB%CE%FF%9Ck%5E%C9%06v%23K%15%05sA%10%1B%DFd%A1LEI0d%04B%81%07O%F0%02%1FJ%82%1E%A1%2F%DC%C1%C6%9Dc%D2%91%92%C5%0A%BAB%02%E1%8E%9E%CD%93IQ%95%40xfM%E2m%82%06%C3%ADB%20lP%D1N%92%E0%EA%EA*%98%F9%FB%1E%0E%F1sO6%10%CB%E6%9B%00%00%00%00IEND%AEB%60%82";
461 var shadowS = "data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%10%00%00%00%10%08%06%00%00%00%1F%F3%FFa%00%00%00%07tIME%07%D7%04%1A%16%1D8%C6%0E%9CL%00%00%00%09pHYs%00%00.%23%00%00.%23%01x%A5%3Fv%00%00%00%04gAMA%00%00%B1%8F%0B%FCa%05%00%00%000IDATx%DAc%60%18%05%A3%80%81%81%11%88%D7Rb%00%0B%10%7F%A1%D4%80W%94%1A%F0%80R%03%EE%0C%A8%0B%40%B1%20D%A9%01l%94%18%00%002V%05W%11%99%89%DE%00%00%00%00IEND%AEB%60%82";
462 var shadowSW = "data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%10%00%00%00%10%08%06%00%00%00%1F%F3%FFa%00%00%00%07tIME%07%D7%04%1A%16%1E%13A%9F6%CF%00%00%00%09pHYs%00%00.%23%00%00.%23%01x%A5%3Fv%00%00%00%04gAMA%00%00%B1%8F%0B%FCa%05%00%00%00%89IDATx%DA%ED%92K%0A%800%0CD%5B%AB%A2%E0R%B7%BA%F0%FE%97%13%2B%FEu%22%11%A5%0B%1B%10%5C9%F0%08%FDM%9A%B4J%3DK%7B%D6U%E0%DB%F0%1B%7C%60%F0Z%DEw%86%22%90%81%02%94%A0%06%15%C8i%3E%14%26Z%C1%02%260%80%8E%D1F%D8'J%14%83%14%24%3C%26%8D%12%03*%D38%D0%8Dz%D0J%0D%EEq%E6%C3%164%92%1El%9Cq%B8%19X.%C3H%5E%C1-%23%E4H%BD%D1R%83%D3D%AB%EB%F3%1Dq%07%2C%D4%13%98%99%83%B5%22%00%00%00%00IEND%AEB%60%82";
463 var shadowW = "data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%10%00%00%00%10%08%06%00%00%00%1F%F3%FFa%00%00%00%07tIME%07%D7%04%1A%16%1E%20%FEOW%D9%00%00%00%09pHYs%00%00.%23%00%00.%23%01x%A5%3Fv%00%00%00%04gAMA%00%00%B1%8F%0B%FCa%05%00%00%00%1CIDATx%DAc%60%C0%0F%18%09%C830%11R0j%C0%A8%01%A3%06%0C%15%03%00D%F0%00%20zzK%0C%00%00%00%00IEND%AEB%60%82";
464 var shadowNW = "data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%10%00%00%00%10%08%06%00%00%00%1F%F3%FFa%00%00%00%07tIME%07%D7%04%1A%16%1E%2Fn%F0JH%00%00%00%09pHYs%00%00.%23%00%00.%23%01x%A5%3Fv%00%00%00%04gAMA%00%00%B1%8F%0B%FCa%05%00%00%00%15IDATx%DAc%60%18%05%C3%000%D2I%CF(%18%E6%00%00%08n%00%03%9BHo7%00%00%00%00IEND%AEB%60%82";
466 if(GM_getValue('zoomwidth')) {
467         TJPzoomwidth = GM_getValue('zoomwidth');
468         TJPzoomoffsetx=TJPzoomwidth/2
470 if(GM_getValue('zoomheight')) {
471         TJPzoomheight = GM_getValue('zoomheight');
472         TJPzoomoffsety=TJPzoomheight/2;
476 TJPinit();
480 // TJPzoom 3 * J�nos P�l T�th
481 // Docs @ http://valid.tjp.hu/tjpzoom/ 
482 // News @ http://tjpzoom.blogspot.com/
485 //**********************************************************************
487         //======================================================================
488         //to do the closure and get the right this.
489         //adapted from http://persistent.info/greasemonkey/gmail.user.js
491         function getObjectMethodClosure2(object, method,args,args1,args2) {
492                 return function() {
493                         return object[method](args,args1,args2); 
494                 }
495         }
496         function getObjectMethodClosure1(object, method,args,args1) {
497                 return function() {
498                         return object[method](args,args1); 
499                 }
500         }
502         function getObjectMethodClosure0(object, method,args) {
503                 return function() {
504                         return object[method](args); 
505                 }
506         }
508         function getObjectMethodClosure(object, method) {
509                 return function(args) {
510                         return object[method](args); 
511                 }
512         }
514                 /*
515           Xpath trickery, from:
516           http://ecmanaut.blogspot.com/2006/07/expressive-user-scripts-with-xpath-and.html
517          */
518         function $x( xpath, root )
519                 {
520                         var doc = root ? root.evaluate?root:root.ownerDocument : document;
521                         var got = doc.evaluate( xpath, root||doc, null, 0, null ), next;
522                         var result = [];
523                         while( next = got.iterateNext() )
524                                 result.push( next );
525                         return result;
526                 }
529         function $x1(xpath) {
530                 return document.evaluate(
531                                                                  xpath,
532                                                                  document,
533                                                                  null,
534                                                                  XPathResult.FIRST_ORDERED_NODE_TYPE, null
535                                                                  ).singleNodeValue;
536         }
538         function foreach( xpath, cb, root )
539         {
540                 var nodes = $x( xpath, root ), e = 0;
541                 for( var i=0; i<nodes.length; i++ )
542                         e += cb( nodes[i], i ) || 0;
543                 return e;
544         }
546         var useLarge = !!GM_getValue('useLarge');
548         var init = function() {
549                 var img_div = $x1("//div[@class='photoImgDiv']/img");
550                 if(img_div && (img_div.parentNode.childNodes.length == 1)) {
551                         var med_width;
552                         var med_height;
553                         var med_src;
554                         var big_width;
555                         var big_height;
556                         var big_src;
557                         var found_large = false;
558                         var listener = {
559                                 flickr_photos_getSizes_onLoad: function(success, responseXML, responseText, params){
560                                         try{
561                                                 var rsp = responseText.replace(/jsonFlickrApi\(/,'');
562                                                 rsp = eval('('+rsp);
563                                                 if(rsp.stat == 'ok') {
564                                                         var lrg_src;
565                                                         var lrg_width;
566                                                         for(var i=0;i<rsp.sizes.size.length;i++) {
567                                                                 var size = rsp.sizes.size[i];
568                                                                 if(size.label == 'Medium') {
569                                                                         med_src = size.source;
570                                                                         med_width = size.width;
571                                                                 } else if(size.label == 'Large') {
572                                                                         lrg_src = size.source;
573                                                                         lrg_width = size.width;
574                                                                 } else if(size.label == 'Original') {
575                                                                         big_src = size.source;  
576                                                                         big_width = size.width;                                                         
577                                                                 }
578                                                                         
579                                                         }
580                                                         if(lrg_src && ((!useLarge && !big_src) || useLarge)){
581                                                                 big_src = lrg_src;
582                                                                 big_width = lrg_width;
583                                                         }
585                                                         if(med_src && big_src) {
586                                                                 TJPzoomamount = big_width/med_width;
587                                                                 img_div.addEventListener('mouseover',function(event) {
588                                                                         TJPzoomif(img_div,big_src)
589                                                                                 }
590                                                                                                                  ,true);
591                                                                 var buttonBar = document.getElementById('button_bar');
592                                                                 var divbut = buttonBar.appendChild(document.createElement('span'));
593                                                                 divbut.setAttribute('style','height:24px;font-size:90%;');
594                                                                 var magButton = divbut.appendChild(document.createElement('img'));
595                                                                 magButton.setAttribute('style','height:24px;');
596                                                                 //Icon by Janos Pal Toth
597                                                                 var offButton = magButton.src = "data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%001%00%00%00%18%08%02%00%00%00%DC%5D%82%B5%00%00%00%07tIME%07%D7%05%09%10%05%0E%F0%EE%3C%FF%00%00%00%09pHYs%00%00%0B%12%00%00%0B%12%01%D2%DD~%FC%00%00%00%04gAMA%00%00%B1%8F%0B%FCa%05%00%00%011IDATx%DA%ED%96%C1%0E%820%0C%86%87%E1%19%7C%01O%5E%7C6%0F%5E%09%04%8Ez%F0%D9%E0%40H%F4%05%7C%89%D9%A4%A1%19m77c%00%13%FE%90%A5ec%7CiKGf%AD5%2B%D3ni%80%8D%E9k%E5%BE%89%5B%D3%A0q)%8A%E5%99%90%86P%98%3B%87%ECT%D7%BAF%A3%1D%C5%EE%A3%CA%B2%A4%91%19(f%93%2B%D7%CB%95z%3Du%5D%07%E3%BD%DD%A3%8D%AE%AA%AA%AA%5C%9BDS4%BAS%F2A%F7%CE%24w%90%26%C8%91Jp8%1EqV2%B9%AFa%BB%FB%E8%D9%83Lz%8Dc%84%C88%9F%5E%91%95%E0F%C57%F5q%13%9D%09!%00(%86F%86'%E6%C5%81Pe%EClq%D3GL%8Fax%F6%BD%99%EB%EB%D3k%1C%20(Zh%CF%06%A4%C4%C9%8C%0D%09%8A%1A%5D%8CP%18%8BeMM%A5%2C5o%99%5B%8F%A0!%D1%E5%BA%D6%2F%B5i%A9%AD%88%B5%2B%26%EFy%07!%A1%CB%88%B6%AE%86*%A9%B4%03%8B%13%CE%E0%00V%3C%10%CB%B5%AA%3Cv%9B%11%0B%81%24%04%EB%D7F%14P%02%B4M%97%AF%0E~%25%E5%BB%5B%5Ck%FC%A7%DB%98%FE%97%E9%0DW%1B94%E9%07%06%FD%00%00%00%00IEND%AEB%60%82";
598                                                                 var overButton = "data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%001%00%00%00%18%08%02%00%00%00%DC%5D%82%B5%00%00%00%07tIME%07%D7%05%09%10%05!%5B%3F%01%A6%00%00%00%09pHYs%00%00%0E%C3%00%00%0E%C3%01%C7o%A8d%00%00%00%04gAMA%00%00%B1%8F%0B%FCa%05%00%00%01qIDATx%DA%ED%97%3DN%C40%10%85m%B4%02q%81%3DB%1A%24z~%9A%E5%0EHt%14%1C%83%9AKD%A2%A0C%E2%0ElC%B5%25%12H%7B%05.%80%A0%09%D6%3E%E9iv~%82%B3Bd%8B%7DE4%8E'%F1%E7%F1x%E2%E4%AE%EB%D26%A9m%DB%BD%B1%19%1C%ED%98%EA4%89%3A%0E%0F%F6a%7C~%7D%8F%CF%04%1A%A2%A8%E6%08L%85%00%C3%BF%BC%BE%C98%F1%3E%94s.%1B%16W6a%C0%01%BD%B4%D9e%FD%AD%A7%9FO%00%BA%BC%FF%80M%3E%2B%BE%8E%03%40%1C%40%8E-%87%97%0FJO%CD%84%60%B8%04w%0F%8F%CC0)5%CB%BCRD%AF8%22O%3F%C7%11!%1AO7%D3T'%B54n%D7%AF%2F%F1%99%00Q%80jh8c%95%16%F5%0F*%AD%AD%5DY%B8%B2%40%E7%C7G%CAi%F1%BE%BC%BD%BE%B2%93%E6%D8l2%99%14%9C%F5%8C%1CR%94%E3%05%82%D1%82%9D%FE%B1%1C%E8%B5C%A8%D2*%A9q%87%11R%E5%40%AAg%DB%A7%A0%0A%A4%20%ED%92%9BO%2CH%164%C2%92(%B6%F6%F4%D7%A4*%26IV%8F%15M%DA%9D%40%3F%D6%80o%B0%FA%DAl%06%24%E3%1Ai%D8%B9%80X%17%B3%99%C5b%DE%C0%E6%16%93%CD%1A%0D%3E%AB%14%AC%93%D3%B3%E7%F9%5C%CD%5BV%01%5B%11%DC%3D%1FQnr~R%40%7F%AEm%3C%D3%ED%98%EA4)%FF.c3%AC%A9i%9A%1F%A5%C3%3A%C6%DCQW%10%00%00%00%00IEND%AEB%60%82";
599                                                                 var onButton = "data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%001%00%00%00%18%08%06%00%00%00S%3F%15%E2%00%00%00%06bKGD%00%FF%00%FF%00%FF%A0%BD%A7%93%00%00%00%09pHYs%00%00%0B%12%00%00%0B%12%01%D2%DD~%FC%00%00%00%07tIME%07%D7%05%09%15%3B%15%3D%85%2C%85%00%00%01%ACIDATX%C3%ED%97%3Bn%C2%40%10%86%FFA%A9%B8%82%5Br%02%94%9E%0B%D0%A3%B4%96CI%C1%05r%01%0A%CA%80%DC%A2%F4%BE%00%A9%23N%90%B4%CE%11h7%05%5E%7Bv3%FB%B0-%25%8E%E4%91%2C%EF%5B%F3%CDxf%D6%C0(%C3%10%F2%CE%A6%9F%0F%00%A6l%E4%8A%7C%F6%FE%3F%20%1A%E53%00%09%9B)%01%1C%87%06C%0E%80%8DV%FE%25%DF.%F4%D4%3A%DD%9D%19%CC~(%20%E4%02%D0%CA%3F-%1F%EB%E9Cq%E20%83%01%B9%B3%FAS%0DP%2B_%7C%D4%93%F5X%BE%5DT%20%3C%5ETe%14%C5%8Cc%B7%B9%F1%94%60L%25%F4I8%DF%D87%B1%BC%90%19H%15%00%A5%AB%A6%CF%A0%00d%D5%3E%5B%94%D0'%F6%40x%F35%CAs%96%BD%8FA%D8%5E0%955d%8ED%C7Jby%C3gi%25(%24%C1%AB%C0Y%C1%CF%C9%DC%AD%3D%C0%DA*%7F%ED%1B%7F%CA%93%DA%C9a%7Dt%86%D0%0AS%BA%EA%A2%3C%B7%A0%8A%AEM%E1%B3~%C8%C4(d%40%B9Nw%E7Cq%02%96%F7%E2%86%0B%BEpA%E9%B3%229%C6H%00%A0%40%9B%22%D62%88%5B%AA%3C%DA%0As%8F%E8%BE%95f%AF%83%AF%13sV%B0m%0FD%D4%8B%984%1AJ%AD%A18jW%B1%B5%E2B%15%0F%15%3E_%0D%F1%D5%02r%40%F7%BA%3B%E9%2BG%D2%02DE%14%2F%D7%98%B4%A6%F7-V'%80M%24%88%EF%B3%88%F5%0E%FAA%F8%E1%5C%20%CF%C8go%BF%19%13%93N%107K%EFuJ%F6d%2B)%B5%BAR-y%8CK%DD%7F%8AZx%E4%2Fo%B5%D4%FB%84%26n%06%F9%D77%CA(-%E5%1B%DA%09%D6%07%83%D7%5C%25%00%00%00%00IEND%AEB%60%82";
600                                                                 magButton.alt = localiser.localise('switch');
601                                                                 magButton.addEventListener('mouseover', function() {
602                                                                                                                            if(magButton.src != onButton) {
603                                                                                                                                    magButton.src = overButton;
604                                                                                                                            }
605                                                                                                                    },true);
606                                                                 magButton.addEventListener('mouseout', function() {
607                                                                                                                            if(magButton.src != onButton) {
608                                                                                                                                    magButton.src = offButton;
609                                                                                                                            }
610                                                                                                                    },true);
611                                                                 divbut.addEventListener('click',function() {
612                                                                         if(TJPzoomswitch(img_div)) {
613                                                                                 magButton.src=onButton;
614                                                                                 img_div.parentNode.style.zIndex = 2000;
615                                                                                 img_div.parentNode.style.position = 'relative'; 
616                                                                         } else {
617                                                                                 magButton.src=offButton;
618                                                                                 img_div.parentNode.style.zIndex = '';
619                                                                                 img_div.parentNode.style.position = ''; 
620                                                                                                 
621                                                                         }
622                                                                 }, true);
623                                                                 //                                                              divbut.appendChild(document.createTextNode('Flickr Magnifier'));                                        
624                                                         }
625                                                 }
626                                                 else
627                                                 M8_log("Error2 "+responseText);                                                 
628                                         } catch (e) {
629                                                 M8_log("Error1 "+responseText);
630                                                 M8_log(e);
631                                         }
632                                 }
633                         };
634                                 
635                         unsafeWindow.F.API.callMethod('flickr.photos.getSizes', {
636                                 photo_id: unsafeWindow.page_photo_id,
637                                                           format: 'json'
638                                                           }, listener);
639                 }
640         };
642         var prompt_conf = function() {
643                 var back = document.body.appendChild(document.createElement('div'));
644                 back.id="poolCleaningBack";
645                 back.setAttribute('style',"position:absolute;background-color: black;opacity: 0.35; display: block; left: 0pt;");
646                 back.style.width = document.body.clientWidth+'px';
647                 back.style.height = document.body.clientHeight+'px';
648                 back.style.top = document.body.scrollTop+'px';
649                 var modal = document.body.appendChild(document.createElement('div'));
650                 modal.id="poolCleaning";
651                 modal.setAttribute('style',"z-index:3000;position:absolute;background:white;border: 3px solid black;display: block;");
652                 modal.style.width = (document.body.clientWidth*2/3) +'px';
653                 modal.style.left = (document.body.clientWidth*1/6) +'px';
654                 modal.innerHTML = '<div style="padding:12px;background-color: #EEEEEE;clear:both;font-size: 14px;">'+localiser.localise('menu_item')+'</div>';
655                 modal.style.top = document.body.scrollTop+(document.body.clientHeight/2)+'px';
656                 
657                 var dialog = modal.appendChild(document.createElement('div'));
658                 dialog.setAttribute('style',"padding: 18px 16px;clear:both; width:70%;overflow:auto;margin-left:15%;");
659                 var content = dialog.appendChild(document.createElement('div'));
661                 var pAbout = content.appendChild(document.createElement("p"));
662                 pAbout.setAttribute('style',"padding: 18px 16px;clear:both; width:100%;overflow:auto;");
663                 pAbout.innerHTML = localiser.localise('about',{
664                                 'jpl' : '<a href="http://valid.tjp.hu">J&aacute;nos P&aacute;l T&oacute;th</a>',
665                                 'paypal' : '<form action="https://www.paypal.com/cgi-bin/webscr" method="post"><input name="cmd" value="_s-xclick" type="hidden"><input src="https://www.paypal.com/en_US/i/btn/x-click-but21.gif" name="submit" alt="Make payments with PayPal - it\'s fast, free and secure!" border="0" type="image"><img alt="" src="https://www.paypal.com/en_US/i/scr/pixel.gif" border="0" height="1" width="1"><input name="encrypted" value="-----BEGIN PKCS7-----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-----END PKCS7-----" type="hidden"></form><br/>',
666                                 'pa' : '<a href="http://6v8.gamboni.org">Pierre Andrews</a>'
667                         });
669                 var spanForm = content.appendChild(document.createElement("div"));
670                 spanForm.setAttribute('style',"padding: 18px 16px;clear:both; width:100%;overflow:auto;");
671                 spanForm.innerHTML = '<form><input type="checkbox" name="gm_mag_shoulduselarge" id="gm_mag_shoulduselarge" '+(useLarge?'checked="on"':'')+'/><label for="gm_mag_shoulduselarge">'+localiser.localise('lower_quality')+'*.</label><br/><input name="gm_mag_zoomwidth" id="gm_mag_zoomwidth" value="'+TJPzoomwidth+'"/><label for="gm_mag_zoomwidth">'+localiser.localise('magnifier_width')+'.</label><br/><input name="gm_mag_zoomheight" id="gm_mag_zoomheight" value="'+TJPzoomheight+'"/><label for="gm_mag_zoomheight">'+localiser.localise('magnifier_height')+'.</label></form><p>(*)'+localiser.localise('quality_note')+'.</p>'
672                 
673                 var buttons = dialog.appendChild(document.createElement('div'));
674                 var ok = buttons.appendChild(document.createElement('button'));
675                 ok.type ='button';
676                 ok.className='Butt';
677                 ok.innerHTML = localiser.localise('save');
678                 var cancel = buttons.appendChild(document.createElement('button'));
679                 cancel.type ='button';
680                 cancel.className = 'Butt';
681                 cancel.innerHTML = localiser.localise('cancel');
682                 
683                 cancel.addEventListener('click',function() {
684                                                                         document.body.removeChild(back);
685                                                                         document.body.removeChild(modal);
686                                                                 },true);
687                 
688                 
689                 ok.addEventListener('click',function() {
690                         var inp = document.getElementById("gm_mag_shoulduselarge");
691                         if(inp) {
692                                 GM_setValue('useLarge',inp.checked);
693                                 useLarge = inp.checked;
694                         }
695                         inp = document.getElementById("gm_mag_zoomheight");
696                         if(inp) {
697                                 GM_setValue('zoomheight',inp.value);
698                                 TJPzoomheight = inp.value;
699                                 TJPzoomoffsety=TJPzoomheight/2;
700                         }
701                         inp = document.getElementById("gm_mag_zoomwidth");
702                         if(inp) {
703                                 GM_setValue('zoomwidth',inp.value);
704                                 TJPzoomwidth = inp.value;
705                                 TJPzoomoffsetx=TJPzoomwidth/2;
706                         }
707                         
708                                                         
709                         document.body.removeChild(back);
710                         document.body.removeChild(modal);
711                 },true);
712                 
713                 modal.style.top = document.body.scrollTop+((document.body.clientHeight-modal.scrollHeight)/2)+'px';
714         };
715         GM_registerMenuCommand( localiser.localise("menu_item"), prompt_conf);
718         //======================================================================
719                                                                                         
721         try {
722                 window.addEventListener("load", function () {
724                         init();
725                 }, false);
726         } catch (ex) {}
729 })();