//Main javascript used on most pages of the software.
// $Rev: 20911 $
//NOTE: you don't have to customize this JS file to change vars, instead add some
//JS to your own custom JS file (or in script tags on a template) that works like this:
/*
//change default duration for how long effects take
Event.observe(window,'load',function() {
//change duration to last 1.5 seconds instead default of .3 seconds
geoEffect.defaultDuration = 1.5;
});
*/
var geoUtil = {
defaultParams : {duration: .8},
inAdmin : false,
runHeartbeat : false,
init : function () {
//A function that starts up all the common stuff.
//This will be loaded after the page is done loading,
//no need for Event.observer(window,'load',...)
//Load lightUpBox
lightUpBox.init();
if ($('extraQuestionName') && $('extraQuestionValue')) {
//make sure extra question labels height match up with values height
var values = $('extraQuestionValue').select('li');
$('extraQuestionName').select('li').each(function(element, index) {
if (element.getHeight() > this[index].getHeight()) {
this[index].setStyle({ height : element.getHeight()+'px' });
} else if (this[index].getHeight() > element.getHeight()) {
element.setStyle({ height : this[index].getHeight()+'px' });
}
}, values);
}
if (geoUtil.runHeartbeat && !geoUtil.inAdmin) {
//ping cron.php
new Ajax.Request ('cron.php?action=cron');
}
//init the tag autocomplete, do it here so it is only done once
geoUtil.initTagSearch();
//init the instruction buttons
geoUtil.instrBtns.init();
},
//namespace for instruction button actions for show/hide instructions on
//media collection step during listing process
instrBtns : {
_animating : false,
//used to initialize any "instructions" buttons on the page, specifically
//used during listing placement on media collection page
init : function () {
$$('.show_instructions_button').each (function (elem) {
var descriptionBox = $(elem.identify()+'_box');
if (!descriptionBox) {
//no description box found for this one
return;
}
descriptionBox.hide();
elem.observe('click', geoUtil.instrBtns.buttonClicked);
});
},
buttonClicked : function (action) {
action.stop();
if (geoUtil.instrBtns._animating) {
//do not do more than one animation at once
return;
}
if (geoEffect.useEffect()) {
geoUtil.instrBtns.startUpAction();
var params = {
duration : geoEffect.defaultDuration,
afterFinish : geoUtil.instrBtns.finishAction
};
Effect.toggle(this.identify()+'_box', 'blind', params);
} else {
geoUtil.instrBtns.startUpAction ();
$(this.identify()+'_box').toggle();
geoUtil.instrBtns.finishAction ();
}
},
_callbacks_start : new Array(),
_callbacks_end : new Array(),
registerCallbacks : function (callbackStart, callbackEnd) {
if (typeof callbackStart == 'function') {
var index = geoUtil.instrBtns._callbacks_start.size();
geoUtil.instrBtns._callbacks_start[index] = callbackStart;
}
if (typeof callbackEnd == 'function') {
var index = geoUtil.instrBtns._callbacks_end.size();
geoUtil.instrBtns._callbacks_end[index] = callbackEnd;
}
},
startUpAction : function () {
//mark as in middle of animating show/hide instructions
geoUtil.instrBtns._animating = true;
//process any pre-animation callbacks
geoUtil.instrBtns._callbacks_start.each(function(f) {f();});
return true;
},
finishAction : function () {
//process any post-animation callbacks
geoUtil.instrBtns._callbacks_end.each(function(f) {f();});
//no longer in middle of animating show/hide instructions
geoUtil.instrBtns._animating = false;
}
},
pageDimensions : function () {
//gets the page dimensions
//first figure out main width and height:
var scrollDim = {width: 0, height: 0};
var elem = $$('body')[0];
if (window.innerHeight && window.scrollMaxY) {
scrollDim.width = window.innerWidth + window.scrollMaxX;
scrollDim.height = window.innerHeight + window.scrollMaxY;
} else if (document.body.scrollHeight > document.body.offsetHeight) {
//works in all but explorer mac
scrollDim.width = document.body.scrollWidth;
scrollDim.height = document.body.scrollHeight;
} else {
scrollDim.width = document.body.offsetWidth;
scrollDim.height = document.body.offsetHeight;
}
var windowDim = document.viewport.getDimensions();
//return which ever calculation came up with larger dimension
scrollDim.width = Math.max(scrollDim.width, windowDim.width);
scrollDim.height = Math.max(scrollDim.height, windowDim.height);
return scrollDim;
},
text : {
//text used, usually over-written by admin text set in in-line JS
messageClose : '[close]',
messageMove : '[move]'
},
addError: function (errorMsg) {
geoUtil._highlightColor = '#ff9999';
geoUtil._autoHideMessage = false;
if (geoUtil.inAdmin) {
errorMsg = 'Error: '+errorMsg;
}
geoUtil.addMessage(errorMsg);
},
_messageTimeout : null,
_messageMadeDragable : false,
_highlightColor : '#ffff99',
_autoHideMessage : true,
_messageBoxInit : false,
_initMessageBox : function () {
if (geoUtil._messageBoxInit) {
return;
}
geoUtil._messageBoxInit = true;
var messageBox = new Element('div', {
'id' : 'messageBox',
'style' : 'display: none;'
});
var closeButton = new Element ('div');
closeButton.addClassName('messageBoxButtons')
.addClassName('closeMessage')
.update(geoUtil.text.messageClose)
.observe('click', geoUtil.closeMessage);
var moveButton = new Element ('div', {'id' : 'moveMessageButton'});
moveButton.addClassName('messageBoxButtons')
.addClassName('moveMessage')
.update(geoUtil.text.messageMove);
if (!geoUtil.inAdmin) {
moveButton.setOpacity(0);//make it hard to see
}
var messageText = new Element ('div', {'id' : 'messageTxt'});
//add it all into messageBox
messageBox.insert(closeButton)
.insert(moveButton)
.insert(messageText);
//insert it into the body
geoUtil.insertInBody(messageBox);
},
addMessage : function (msgText) {
geoUtil._initMessageBox();
var messageBox = $('messageBox');
var messageText = $('messageTxt');
if (!messageBox || !messageText) {
//can't insert the message if no message box
alert(msgText);
return;
}
messageText.update(msgText);
if (!geoUtil._messageMadeDragable) {
geoUtil._messageMadeDragable = true;
new Draggable(messageBox, {
zindex: 1002,
handle: 'moveMessageButton',
onStart: function () {
if (geoUtil._messageTimeout) {
clearTimeout(geoUtil._messageTimeout);
geoUtil._messageTimeout = null;
}
}
});
messageBox.makePositioned();
}
if (!messageBox.visible()) {
messageBox.show();
}
//move it to middle
geoEffect.moveToMiddle(messageBox);
//highlight it
new Effect.Highlight(messageBox, {
startcolor: geoUtil._highlightColor,
restorecolor: '#ffffff'
});
geoUtil._highlightColor = '#ffff99';//restore to default in case it was changed
if (geoUtil._messageTimeout) {
//stop it from happening, as we're re-doing it
clearTimeout(geoUtil._messageTimeout);
}
//make it fade out after 10 seconds
if (geoUtil._autoHideMessage) {
geoUtil._messageTimeout = setTimeout("new Effect.Fade('messageBox', geoUtil.defaultParams);geoUtil._messageTimeout = null;", 10000);
}
//reset auto hide setting for next message
geoUtil._autoHideMessage = true;
},
closeMessage : function () {
if (geoUtil._messageTimeout) {
//stop it from happening, as we're re-doing it
clearTimeout(geoUtil._messageTimeout);
geoUtil._messageTimeout = null;
}
new Effect.Fade('messageBox', geoUtil.defaultParams);
},
insertInBody : function (element) {
$$('body')[0].insert(element);
},
clickImageBlockLargeLink : function (action) {
//smoothly scrolls to the large image block
geoEffect.scrollTo('largeImageBlock');
action.stop();
return false;
},
getCookie : function (sName) {
var aCookie = document.cookie.split('; ');
for (var i=0; i < aCookie.length; i++) {
var aCrumb = aCookie[i].split('=');
if (sName == aCrumb[0]) {
return unescape(aCrumb[1]);
}
}
return null;
},
/*
* Simple function to re-load the page, it should work regardless of whether
* there is a hash or not, and will not prompt the user if the current page
* is the result of a POST.
*/
refreshPage : function () {
//add refresh=# to the query params, to "force" a refresh of the page even
//when there is a hash on the page
var params = location.href.toQueryParams();
params.refresh = (params.refresh)? params.refresh*1+1 : 1;
//now re-construct the URL with the refresh=# added in the URL
var href = location.protocol+'//'+location.hostname+location.pathname+'?'+Object.toQueryString(params);
var hash = location.hash.replace(/^#/,'');
if (hash) {
//add the hash back
href += '#'+hash;
}
//alert('href: '+href);
//use replace so it doesn't result in history entry, it acts like a refresh
location.replace(href);
},
/**
* Handles taking user to next page automatically when logging in or
* registering
*
* Note: Uses prototype!
*
* @param string form ID of form to submit
* @param string replaceTxt
*/
autoSubmitForm : function (form, replaceTxt) {
var delay = 2000; //time to wait after the page is done loading
Event.observe(window, 'load', function () {
setTimeout(function () {
//2 seconds after page is done loading, auto submit the form.
myForm = $(form);
if (myForm){
if (replaceTxt) {
window.location.replace(replaceTxt);
}
myForm.submit();
}
}, delay);
});
},
initTagSearch : function () {
$$('input.tagSearchField').each (function (element) {
//use CSS class so that multiple input fields can be used on same page
var inputField = element.identify();
//The choices div MUST be next field after the input field
var choicesDiv = element.next().identify();
new Ajax.Autocompleter(inputField, choicesDiv, 'AJAX.php?controller=ListingTagAutocomplete&action=getSuggestions', {
paramName : 'tags',
parameters : 'showCounts=1'//{showCounts : '1'}
});
});
}
};
var geoEffect = {
defaultDuration : .5,
useEffect : function () {
if (typeof Scriptaculous == 'undefined') {
return false;
}
return true;
},
/**
* Use just like you would Effect.move() except that if scriptaculous is
* not present, it doesn't animate, or if element is currently hidden, it
* just moves it there by setting attribute.
*/
move : function (element, params) {
element = $(element);
if (element.visible() && geoEffect.useEffect()) {
if (!params.duration) params.duration = geoEffect.defaultDuration;
new Effect.Move(element, params);
} else {
element.setStyle({left: params.x+'px', top: params.y+'px'});
}
},
show : function (element, effect, params) {
element = $(element);
if (element.visible() && element.getStyle('opacity') != 0.1) {
//either the element needs to be hidden, or opacity set to 0.1
return;
}
if (typeof effect == 'undefined') {
effect = 'appear';
}
if (geoEffect.useEffect()) {
if (typeof params == 'undefined') {
params = {};
}
if (!params.duration) {
params.duration = geoEffect.defaultDuration;
}
switch (effect) {
case 'appear' :
//break ommited on purpose
default:
new Effect.Appear (element, params);
break;
}
} else {
if (element.visible()) {
//if element is visible, then it must just be opaque
element.setOpacity(1.0);
} else {
element.show();
}
}
},
hide : function (element, effect, params) {
element = $(element);
if (!element.visible()) {
//already hidden
return;
}
if (typeof effect == 'undefined') {
effect = 'fade';
}
if (typeof params == 'undefined') {
params = {};
}
if (geoEffect.useEffect()) {
if (!params.duration) {
params.duration = geoEffect.defaultDuration;
}
switch (effect) {
case 'fade' :
//break ommited on purpose
default:
new Effect.Fade (element, params);
break;
}
} else {
element.hide();
if (typeof params.afterFinish != 'undefined') {
//it's finished, so call whatever is meant to be called
params.afterFinish();
}
}
},
morphSize : function (element, width, height, params) {
element = $(element);
if (!element) return;
if (geoEffect.useEffect()) {
if (typeof params == 'undefined') {
params = {};
}
if (!params.duration) {
params.duration = geoEffect.defaultDuration;
}
params.style = 'width: '+width+'px; height: '+height+'px;';
new Effect.Morph(element, params);
} else {
//use prototype to go to that element
element.setStyle({
width: width+'px',
height: height+'px'
});
}
},
/**
* Ensures that given element is positioned vertically around the middle of
* the current viewport even if scrolled down some.
*
* @param element
*/
moveToMiddle : function (element) {
element = $(element);
if (!element) {
//not valid element
return;
}
//make sure it's absolutized
element.absolutize();
//figure out mid point taking into account scrolled down amount
var offset = document.viewport.getScrollOffsets();
//figure out different dimensions we're working with
var elemDim = element.getDimensions();
var viewDim = document.viewport.getDimensions();
if (viewDim.width == 0 && viewDim.height == 0) {
//viewport dimensions were not able to be retrieved, so pretend it is
//800x600 just so it's not off in the corner
viewDim.width = 800;
viewDim.height = 600;
}
//if the difference is > 0 use it, otherwise just start out at scrolled offset
if ((viewDim.width-elemDim.width) > 0)
offset.left += Math.floor((viewDim.width-elemDim.width)/2);
if ((viewDim.height-elemDim.height) > 0)
offset.top += Math.floor((viewDim.height-elemDim.height)/2);
//move into place
geoEffect.move(element, {x: offset.left, y: offset.top, mode: 'absolute'});
},
scrollTo : function (element, params) {
element = $(element);
if (!element) return;
if (geoEffect.useEffect()) {
if (typeof params == 'undefined') {
params = {};
}
if (!params.duration) {
params.duration = geoEffect.defaultDuration;
}
new Effect.ScrollTo(element, params);
} else {
//use prototype to go to that element
element.scrollTo();
}
}
};
/**
* Function to... load a popup? Don't use this, it will be removed in a future
* release, replaced by new lightbox or you could just use window.open(this.href)
*
* @param string fileName
* @deprecated Will be removed in future release.
*/
var win = function (fileName)
{
var myFloater = window.open('','myWindow','scrollbars=yes,resizable=yes,status=no,width=300,height=300');
myFloater.location.href = fileName;
if (window.focus) myFloater.focus();
};
/**
* Opens a popup, this one is actually still used a lot of places, so can't be
* removed quite yet. Do NOT use for new stuff though.
*
* @param string fileName
* @param int width
* @param int height
*/
var winimage = function (fileName,width,height)
{
var myFloater = window.open('','myWindow','scrollbars=yes,resizable=yes,status=no,width=' + width + ',height=' + height);
myFloater.location.href = fileName;
};
var lightUpBox = {
box : null,
overlay : null,
//vars used by "slideshow"
nextImageId : 0,
slideshowDelay : 5,
overlayOpacity : 0.6,
slideshowPlaying : false,
_hideCallbacks : new Array(),
_showCallbacks : new Array(),
_slideshow : null,
startSlideshow : function () {
if (lightUpBox.slideshowPlaying) {
//nothin to do, it's already started.
return;
}
lightUpBox.slideshowPlaying = true;
lightUpBox._slideshow = setTimeout("lightUpBox._nextImage();",1000*lightUpBox.slideshowDelay);
},
stopSlideshow : function () {
clearTimeout(lightUpBox._slideshow);
lightUpBox.slideshowPlaying = false;
lightUpBox._startUpSlideshow = false;
},
_startUpSlideshow : false,
_nextImage : function () {
//do stuff
if (!lightUpBox.nextImageId || !lightUpBox.slideshowPlaying) {
//nothing to do
return;
}
//generate URL
var url = 'get_image.php?id='+lightUpBox.nextImageId+'&playing=1';
lightUpBox.nextImageId = 0;//so it doesn't keep just refreshing itself
lightUpBox._startUpSlideshow = true;
if (lightUpBox.navBar) {
//hide the navigation so it can't be clicked during transition, since
//clicks will have no effect during that time.
lightUpBox.navBar.hide();
}
lightUpBox.lightUpLinkManual(url);
},
registerHideCallback : function (hideCallback) {
if (typeof hideCallback == 'function') {
var index = lightUpBox._hideCallbacks.size();
lightUpBox._hideCallbacks[index] = hideCallback;
}
},
registerShowCallback : function (showCallback) {
if (typeof showCallback == 'function') {
var index = lightUpBox._showCallbacks.size();
lightUpBox._showCallbacks[index] = showCallback;
}
},
_hiddenElems : new Array(),
handleResponse : function (transport) {
lightUpBox.openBox(transport.responseText);
if (lightUpBox._startUpSlideshow) {
lightUpBox._startUpSlideshow = false;
lightUpBox._slideshow = setTimeout("lightUpBox._nextImage();",1000*lightUpBox.slideshowDelay);
}
},
openBox : function (contents) {
//push the response into a double-deep div
var newBox = new Element('div')
.update(contents);
if (!lightUpBox.box.visible()) {
//call any callbacks to hide stuff
lightUpBox._hideCallbacks.each(function(f) {f();});
//hide objects, selects, and embeds because they are stupid and
// don't do well trying to hide them in certain browsers
$$('object', 'select', 'embed').each(function (element) {
if (element.style.visibility != 'hidden') {
//do it "smart" so we don't mess up things already hidden on the page,
//do that by remembering what we are hiding, to be un-hidden later
element.style.visibility = 'hidden';
var index = lightUpBox._hiddenElems.size();
lightUpBox._hiddenElems[index] = element;
}
});
//Show div over everything making it dark.
//get the page size to figure out how large things are:
var pDim = geoUtil.pageDimensions();
lightUpBox.overlay.setStyle({width: pDim.width+'px', height: pDim.height+'px'});
geoEffect.show(lightUpBox.overlay, 'appear', {to: lightUpBox.overlayOpacity});
//just shove it in there
lightUpBox.box.update(newBox);
//move to center of screen
geoEffect.moveToMiddle(lightUpBox.box);
//just in case other version was run, un-do any width/height settings on it
lightUpBox.box.setStyle({
width: '',
height: ''
});
//watch for "escape" character
Event.observe(document, 'keydown', lightUpBox.boxKeyPressed);
lightUpBox.finishOpenBox(true);
} else {
//OK get the current width and "stick" it
var startingD = lightUpBox.box.down().getDimensions();
//make sure starting width and height are not too small...
if (startingD.width < 150) {
startingD.width = 150;
}
if (startingD.height < 150) {
startingD.height = 150;
}
//"stick" the width before we get rid of the innards
lightUpBox.box.setStyle({
width: startingD.width+'px',
height: startingD.height+'px'
});
geoEffect.hide(lightUpBox.box.down(), 'fade', {
afterFinish : function () {
//OK hide the outer box
newBox.setOpacity(0.1);
//shove it in the page
lightUpBox.box.update(newBox);
//add the observer
var newImg = newBox.select('.lightUpBox_imageBox img')[0];
var morphingTime = function () {
//NOTE: This can double-morph sometimes, which might be
//a good thing for power rangers, but doesn't seem to do much here.
//IF it turns out double-morphing messes things up, then code to avoid it.
//get new dimensions
var newD = newBox.getDimensions();
//make sure overflow isn't shown
lightUpBox.box.setStyle({overflow: 'hidden'});
//make sure it's not a super skinny small box
if (newD.width < 150) {
newD.width = 150;
}
if (newD.height < 150) {
newD.height = 150;
}
geoEffect.morphSize(lightUpBox.box, newD.width, newD.height, {});
};
if (newImg) {
newImg.observe('load', morphingTime);
if (newImg.getWidth() > 0) {
//it's already loaded
morphingTime();
}
}
lightUpBox.finishOpenBox(false);
geoEffect.show(newBox, 'appear');
}
});
}
},
boxDragable : null,
finishOpenBox : function (isNew) {
//parse for new links
var alreadyOpen = !lightUpBox.navBarHidden;
lightUpBox.box.select('.lightUpImg').each(lightUpBox.addImageObserver);
lightUpBox.box.select('.lightUpLink').each(lightUpBox.addLinkObserver);
lightUpBox.box.select('.lightUpDisable').each(lightUpBox.addDisabledObserver);
//make click on image close box
lightUpBox.box.select('.lightUpBox_imageBox img', 'img.lightUpBigImage', '.closeLightUpBox', '.closeBoxX').each (function (element){
if (element.up().hasClassName('lightUpBox_link')) {
//this is something that links somewhere, instead of causing it
//to close, instead open the link in new window
element.up().observe('click', function (action) {
action.stop();
window.open(this.href);
});
} else {
//close it
element.observe('click',lightUpBox.closeBox);
}
});
//special stuff for nav
lightUpBox.box.select('.lightUpBox_navigation').each(function (element) {
lightUpBox.addNavObserver(element);
element.setOpacity((alreadyOpen)? 0.9: 0.08);
});
//make any disabled links grayed out
lightUpBox.box.select('.disabledLink').each(function (element) { element.setOpacity(0.4);});
//if there is child with class of lightUpMoveAnchor it will use that as an anchor to move it
if (geoEffect.useEffect()) {
var anchor = lightUpBox.box.select('.lightUpMover');
if (anchor.length) {
lightUpBox.boxDragable = new Draggable (lightUpBox.box, {handle : 'lightUpMover'});
} else {
anchor = lightUpBox.box.select('.lightUpTitle');
if (anchor.length) {
//the lightUpTitle exists, use that
lightUpBox.boxDragable = new Draggable (lightUpBox.box, {handle : 'lightUpTitle'});
}
}
}
if (isNew) {
geoEffect.show('lightUpBox', 'appear');
}
},
closeBox : function (event) {
//close the box
geoEffect.hide(lightUpBox.box, 'fade', {afterFinish : lightUpBox._afterCloseFinished});
//hide the black overcast thingy, fade it out or something
geoEffect.hide(lightUpBox.overlay);
//stop watching for keys pressed
Event.stopObserving(document, 'keydown');
//make sure to stop the slide show
clearTimeout(lightUpBox._slideshow);
if (lightUpBox.boxDragable) {
lightUpBox.boxDragable.destroy();
}
//stop slideshow if it is going
if (lightUpBox._slideshow) {
clearTimeout(lightUpBox._slideshow);
}
lightUpBox.slideshowPlaying = false;
lightUpBox._startUpSlideshow = false;
if (event) {
//stop the click event
event.stop();
}
},
/**
* handles when escape character is pressed, to close the box
*/
boxKeyPressed : function (event) {
//alert ('key pressed: '+event.keyCode);
if (event.keyCode == 27) {
//escape character presssed, close the box
lightUpBox.closeBox();
event.stop();
}
},
_afterCloseFinished : function () {
//call any callbacks to show stuff
lightUpBox._showCallbacks.each(function(f) {f();});
//show any hidden objects, selects, and whatever else
lightUpBox._hiddenElems.each(function (element) {
element.style.visibility = 'visible';
});
//reset it for next time, in case things change between now and then
lightUpBox._hiddenElems = new Array();
},
/**
* This one is used on images, all it displays is the image, pure and simple.
*
*/
lightUpImage : function (event) {
event.stop();
lightUpBox.initBox();
//create a new image tag
var biggerImage = new Element('img',{
'src':this.href,
'alt' : 'big image',
'class' : 'lightUpBigImage'
});
lightUpBox.openBox(biggerImage);
},
lightUpLink : function (event) {
event.stop();
var extra = '';
if (lightUpBox.nextImageId) {
if (lightUpBox.slideshowPlaying || this.hasClassName('autoStartSlideshow')) {
lightUpBox.slideshowPlaying = 1;
//must stop the timer
if (lightUpBox._slideshow) clearTimeout(lightUpBox._slideshow);
//and tell it to start timer again once next thing is loaded.
lightUpBox._startUpSlideshow = true;
//let get image know if it is in middle of playing a slideshow or not
extra = '&play=1';
} else {
extra = '&play=0';
}
}
lightUpBox.lightUpLinkManual(this.href+extra);
},
lightUpLinkManual : function (url) {
lightUpBox.initBox();
//alert('starting request now.');
//make ajax call to get contents of the linked page, to be shoved into
//the existing page somewhere.
new Ajax.Request (url, {
method: 'get',
onSuccess: lightUpBox.handleResponse
});
},
initBox : function () {
if (!$('lightUpBox')) {
//create the box
lightUpBox.box = new Element('div',{'id' : 'lightUpBox', 'class': 'lightUpBox'});
lightUpBox.box.hide();
//put it on the page somewhere
geoUtil.insertInBody(lightUpBox.box);
//lightUpBox.box.observe('click',lightUpBox.closeBox);
}
if (!$('lightUpBoxOverlay')) {
//create the box
lightUpBox.overlay = new Element('div',{'id' : 'lightUpBoxOverlay', 'class': 'lightUpBoxOverlay'})
.setOpacity(lightUpBox.overlayOpacity).hide();
//put it on the page somewhere
geoUtil.insertInBody(lightUpBox.overlay);
lightUpBox.overlay.observe('click', lightUpBox.closeBox);
}
},
init : function () {
$$('.lightUpImg').each(lightUpBox.addImageObserver);
$$('.lightUpLink').each(lightUpBox.addLinkObserver);
$$('.lightUpDisable').each(lightUpBox.addDisabledObserver);
},
addImageObserver : function (element) {
element = $(element);
if (!element) return;
element.stopObserving('click');
element.observe('click',lightUpBox.lightUpImage);
},
addLinkObserver : function (element) {
element = $(element);
if (!element) return;
element.stopObserving('click');
element.observe('click',lightUpBox.lightUpLink);
},
addDisabledObserver : function (element) {
element = $(element);
if (!element) return;
if (element.hasClassName('lightUpDisableProcessed')) {
//already processed
return;
}
element.stopObserving('click')
.observe('click', function (action) {
//stop anything from happening
action.stop();
})
.setOpacity(0.3)
.setStyle({cursor : 'default'})
.addClassName('lightUpDisableProcessed');
},
navBar : null,
navBarHidden : false,
addNavObserver : function (element) {
element = $(element);
if (!element) {
return;
}
//so we can reference it later easily
lightUpBox.navBar = element;
//when hover over image
if (lightUpBox.box) {
lightUpBox.box.observe('mouseover', function () {
if (lightUpBox.navBar) {
lightUpBox.navBarHidden = false;
lightUpBox.navBar.setOpacity(0.9);
}
});
lightUpBox.box.observe('mouseout', function () {
if (lightUpBox.navBar){
lightUpBox.navBarHidden = true;
lightUpBox.navBar.setOpacity(0.08);
}
});
}
//play and pause observers
var play = lightUpBox.navBar.select('a.playLink')[0];
var pause = lightUpBox.navBar.select('a.pauseLink')[0];
var disabledPlay = lightUpBox.navBar.select('span.noplayLink')[0];
if (!play || !pause || !disabledPlay) {
//couldn't find play button? can't do anything beyond this point.
//alert('no can do anything.'+lightUpBox.navBar);
return;
}
//clear any observers, just in case they are already being observed
play.stopObserving('click');
pause.stopObserving('click');
//watch them for clicks
play.observe('click', function () {
this.hide();
//relies on play being first button
this.next().show();
lightUpBox.startSlideshow();
});
pause.observe('click', function () {
this.hide();
//relies on play being first button
this.previous().show();
lightUpBox.stopSlideshow();
});
//init the play pause buttons
lightUpBox.initPlayPause();
},
initPlayPause : function () {
var play = lightUpBox.navBar.select('a.playLink')[0];
var pause = lightUpBox.navBar.select('a.pauseLink')[0];
var disabledPlay = lightUpBox.navBar.select('span.noplayLink')[0];
if (!play || !pause || !disabledPlay) {
//couldn't find play button? can't do anything beyond this point.
//alert('no can do anything.'+lightUpBox.navBar);
return;
}
if (lightUpBox.nextImageId) {
//we can play!
disabledPlay.hide();
if (lightUpBox.slideshowPlaying) {
//show pause
pause.show();
} else {
play.show();
}
}
}
};
//For older scripts that still do things old way
var getCookie = geoUtil.getCookie;
/* Mini-object for handling loading/unloading wysiwyg's */
var geoWysiwyg = {
editors : [],
toggleTinyEditors : function () {
//alert('toggle editor, length: '+editors.length);
for (var i = 0; i < geoWysiwyg.editors.length; i++) {
var id = geoWysiwyg.editors[i].identify();
if (!tinyMCE.getInstanceById(id)) {
tinyMCE.execCommand('mceAddControl',false,id);
document.cookie = 'tinyMCE=on';
} else {
tinyMCE.execCommand('mceRemoveControl',false,id);
document.cookie = 'tinyMCE=off';
}
}
}
};
/* As the name implies, this is the "old" way of doing ajax. New stuff uses
* prototype's Ajax object directly to do anything. This is scheduled to
* eventually be re-coded so do not use for new code!
*
* @deprecated Do not use this for new code, it is old and being phased out.
*/
var geoOldAjax = {
sendReq : function (action, b) {
if (b) {
b = '&b='+b;
} else {
var b = '';
}
var url = '';
if (action=='close'){
//use different url for close/cron routines
url = 'cron.php?action=cron';
} else {
//find the filename
url = 'ajaxBackend.php?action='+action+b;
}
new Ajax.Request (url, {
onSuccess : geoOldAjax.handleResponse
});
},
handleResponse : function (transport) {
var response = transport.responseText;
var update = new Array();
var sep = '|';
if (response.indexOf('~~|~~') != -1){
sep = '~~|~~';
}
if(response.indexOf(sep) != -1) {
update = response.split(sep);
for (var i=1; i