/**************************** * Hybrid theme for Gallery2 * @author Alan Harder * $Revision: 15780 $ */ //Class app var app_ww, app_wh, // Window width/height app_agent = navigator.userAgent.toLowerCase(), // Browser type app_version = parseInt(navigator.appVersion), app_is_ie = app_agent.indexOf('msie') >= 0 && app_agent.indexOf('opera') < 0, app_is_ie7 = app_agent.indexOf('msie 7') >= 0 && app_agent.indexOf('opera') < 0, app_is_safari = app_agent.indexOf('safari') >= 0, app_body; // Scrollable document container ( element, or html for IE) if (window.attachEvent) { window.attachEvent("onload", app_onload); window.attachEvent("onunload", app_setcookie); } else if (window.addEventListener) { window.addEventListener("load", app_onload, false); window.addEventListener("unload", app_setcookie, false); } function app_init() { if (!app_is_ie && !app_is_safari || app_is_ie7) album_setfixedtitle(); app_body = document.getElementById('hybridMain'); while (app_body && app_body.tagName != 'BODY') app_body = app_body.parentNode; if (app_is_ie) app_body = app_body.parentNode; imagearea = document.getElementById('imagearea'); imagediv = document.getElementById('imagediv'); textdiv = document.getElementById('textdiv'); // Replace (XHTML compliant) with '; ui_vis('fit_size', 0); ui_vis('full_size', 0); } else { var s = image_fit(1); imagediv.innerHTML = ''; } image_setbuttons(); text_fill(); if (slide_inprog && !slide_on) slide_inprog = 0; } function image_fit(getstr) { if (!getstr && !document.view) return; var w = data_iw[image_index], h = data_ih[image_index], aw = app_ww, ah = imagearea.offsetHeight, a=0; if (w > aw || h > ah) { if ((a = h/w) < ah/aw) { w = aw; h = Math.round(aw*a); } else { w = Math.round(ah/a); h = ah; } } if (image_zoomon) { if (getstr || !a) image_zoom(0,1); else { image_zoom(1); return; } } imagediv.style.paddingTop = Math.floor((ah-h)/2) + 'px'; ui_vis('fit_size', 0); ui_vis('full_size', a, 1); if (getstr) { return 'width="' + w + '" height="' + h + '"'; } else { document.view.width = w; document.view.height = h; } } function image_zoom(on,noresize) { imagearea.style.overflow = on ? 'auto' : 'hidden'; if (!on) imagearea.scrollLeft = imagearea.scrollTop = 0; if (image_zoomon=on) { ui_vis('full_size', 0); ui_vis('fit_size', 1, 1); var h = imagearea.offsetHeight - data_ih[image_index]; imagediv.style.paddingTop = max(Math.floor(h/2), 0) + 'px'; document.view.width = data_iw[image_index]; document.view.height = data_ih[image_index]; } else if (!noresize) { image_fit(); } } function image_precache(i) { if (!image_iscached[i]) { image_iscached[i] = 1; image_cache.src = document.getElementById('img_'+i).href; } } function image_loaded() { var i = slide_nextindex(); if (i < 0 || image_iscached[i]) i = slide_previndex(); if (i >= 0) image_precache(i); slide_go(i); } function image_next() { var i = slide_nextindex(); if (i >= 0) image_show(i); } function image_prev() { var i = slide_previndex(); if (i >= 0) image_show(i); } function image_setbuttons() { var i = slide_nextindex(), j = slide_previndex(); ui_vis('next_img', i >= 0, 1); ui_vis('next_off', i < 0, 1); ui_vis('prev_img', j >= 0, 1); ui_vis('prev_off', j < 0, 1); text_empty = document.getElementById('text_'+image_index).innerHTML ?0:1; if (!text_on) { ui_vis('text_on', !text_empty, 1); ui_vis('text_none', text_empty, 1); } } function text_onoff() { if ((text_on = text_on?0:1) && data_count > 0) text_fill(); ui_vis(text_empty ? 'text_none' : 'text_on', !text_on, 1); ui_vis('text_off', text_on, 1); ui_vis('text', text_on); if (image_on) { image_setsize(); image_fit(); } } function text_fill() { if (text_on) ui_sethtml('text', document.getElementById('text_'+image_index).innerHTML); } //Class slide var slide_on=0, // Slideshow is running slide_inprog=0, // Slideshow in progress (may be paused) slide_timer, // Timer to load next slide slide_delay = 5000, // Milliseconds between slides slide_order = 1, // Direction: 1=forward, -1=reverse, 0=random slide_randomorder = new Array(data_count); // Random index order function slide_reset() { clearTimeout(slide_timer); } function slide_nextindex(x) { if (slide_on && !slide_order) { for (var i=0, j=0; i < data_count; i++) if (slide_randomorder[i] == image_index) { j = i + (x?-1:1); break; } return (j >= 0 && j < data_count) ? slide_randomorder[j] : -1; } var j = image_index + (x?-1:1) * (slide_on?slide_order:1); return (j >= 0 && j < data_count) ? j : -1; } function slide_previndex() { return slide_nextindex(1); } function slide_next() { var i = slide_nextindex(); if (i >= 0) image_show(i); else { slide_inprog = 0; slide_onoff(); } } function slide_setorder(o) { slide_order = parseInt(o); slide_setbuttons(); if (!slide_on) slide_inprog = 0; } function slide_setdelay(d) { slide_delay = parseInt(d) * 1000; if (slide_on) { slide_reset(); slide_go(slide_nextindex()); } } function slide_fillrandom(lockfirst) { var i, j, k; for (i = 0; i < data_count; i++) slide_randomorder[i] = i; if (lockfirst=lockfirst?1:0) { slide_randomorder[0] = image_index; slide_randomorder[image_index] = 0; } for (i = data_count-1; i > lockfirst; i--) { j = lockfirst ? random_int(i)+1 : random_int(i+1); k = slide_randomorder[i]; slide_randomorder[i] = slide_randomorder[j]; slide_randomorder[j] = k; } } function slide_setbuttons() { if (!data_count) return; ui_vis('slide_poz', slide_on, 1); ui_vis('slide_fwd', (!slide_on && slide_order > 0), 1); ui_vis('slide__fwd', (slide_order > 0), 1); ui_vis('slide_rev', (!slide_on && slide_order < 0), 1); ui_vis('slide__rev', (slide_order < 0), 1); ui_vis('slide_rand', (!slide_on && !slide_order), 1); ui_vis('slide__rand', !slide_order, 1); } function slide_go(i) { if (slide_on) { if (i >= 0) slide_timer = setTimeout('slide_next()', slide_delay); else { slide_inprog = 0; slide_onoff(); } } } function slide_onoff() { if (!data_count) return; slide_on = slide_on?0:1; slide_setbuttons(); if (slide_on) { var t = 'slide_next()', d = 1500; if (slide_inprog) { if (!image_on) image_show(image_index); } else { if (!slide_order) slide_fillrandom(image_on); if (!image_on || slide_nextindex() < 0) { d = 5; if (slide_order > 0) t = 'image_show(0)'; else if (slide_order < 0) t = 'image_show(' + (data_count-1) + ')'; else t = 'image_show(' + slide_randomorder[0] + ')'; } } slide_inprog = 1; slide_timer = setTimeout(t, d); } else slide_reset(); image_setbuttons(); } //Class popup :: div popup_menu :: div popup_details(iframe), div popup_titlebar var popup_timer, // Timer for hiding popup_menu popup_on=0; // Popup iframe is visible function popup_menu(event,i,ii) { clearTimeout(popup_timer); var pop = document.getElementById('popup_menu'), obj = document.getElementById('links_' + i); pop.style.visibility = 'hidden'; pop.style.display = 'block'; var links = ii >= 0 ? '' + item_details + '
' : ''; if (obj) links += obj.innerHTML; pop.style.left = '0'; pop.style.width = 'auto'; ui_sethtml('popup_links', links); pop.style.width = pop.offsetWidth + 'px'; if (!event) event = window.event; var pw = pop.offsetWidth, ph = pop.offsetHeight, iw = event.target ? event.target.width : event.srcElement.width, //Gecko+Opera : IE ix = (event.target && event.target.x) ? event.target.x //Gecko : event.pageX ? (event.pageX - event.offsetX) //Opera : (event.x - event.offsetX + app_body.scrollLeft - 2), //IE iy = (event.target && event.target.y) ? event.target.y //Gecko : event.pageY ? (event.pageY - event.offsetY) //Opera : (event.y - event.offsetY + app_body.scrollTop - 2), //IE sy = (typeof(window.scrollY)=='number' ? window.scrollY : app_body.scrollTop); //Gecko:other pop.style.left = (ix + iw - pw) + 'px'; pop.style.top = min(iy, app_wh + sy - ph) + 'px'; // Maybe too low on gecko with horiz scrollbar pop.style.visibility = 'visible'; } function popup_info(i) { var o = document.getElementById('popup_details').firstChild, href = document.getElementById('info_' + (i >= 0 ? i : image_index)).href; o.src = href; // See app_init; use o.data = href if browsers ever support object. popup_vis(1); } function popup_vis(on) { if (app_is_ie) { var d = document.getElementById('popup_details'), t = document.getElementById('popup_titlebar'); t.style.top = (app_body.scrollTop + Math.round(app_wh * 0.11)) + 'px'; d.style.top = (app_body.scrollTop + Math.round(app_wh * 0.14)) + 'px'; t.style.left = d.style.left = (app_body.scrollLeft + Math.round(app_ww * 0.15)) + 'px'; } ui_vis('popup_details', popup_on=on); ui_vis('popup_titlebar', on); } //UI Util function ui_vis(id,vis,inline) { var obj = document.getElementById(id); obj.style.display = vis ? (inline ? 'inline' : 'block') : 'none'; } function ui_sethtml(id,html) { document.getElementById(id).innerHTML = html; } function ui_select(id,val) { var obj = document.getElementById(id), i; for (i=0; i < obj.options.length; i++) { if (obj.options[i].value == val) { obj.options[i].selected = 1; break; } } } //Util function max(a,b) { return (a>b)?a:b; } function min(a,b) { return (a