2008-05-22 21:43:42 +00:00
|
|
|
Position.includeScrollOffsets = true;
|
|
|
|
|
|
|
|
|
|
var Engine = {
|
|
|
|
|
detect: function() {
|
|
|
|
|
var UA = navigator.userAgent;
|
|
|
|
|
this.isKHTML = /Konqueror|Safari|KHTML/.test(UA);
|
|
|
|
|
this.isGecko = (/Gecko/.test(UA) && !this.isKHTML);
|
|
|
|
|
this.isOpera = /Opera/.test(UA);
|
|
|
|
|
this.isMSIE = (/MSIE/.test(UA) && !this.isOpera);
|
|
|
|
|
this.isMSIE7 = this.isMSIE && !(/MSIE 6\./.test(UA) && !this.isOpera);
|
|
|
|
|
this.isMSIE6 = this.isMSIE && !this.isMSIE7;
|
|
|
|
|
if (document.childNodes && !document.all && !navigator.taintEnabled)
|
|
|
|
|
Engine[!!document.evaluate ? 'isSafari3' : 'isSafari2'] = true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
Engine.detect();
|
|
|
|
|
|
|
|
|
|
if (Engine.isMSIE){
|
|
|
|
|
try {
|
|
|
|
|
document.execCommand("BackgroundImageCache", false, true);
|
|
|
|
|
} catch(e) {
|
|
|
|
|
// ignore
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Position.getPageSize = function() {
|
|
|
|
|
|
|
|
|
|
var xScroll, yScroll;
|
|
|
|
|
|
|
|
|
|
if (window.scrollMaxX) {
|
|
|
|
|
xScroll = window.innerWidth + window.scrollMaxX;
|
|
|
|
|
yScroll = window.innerHeight + window.scrollMaxY;
|
|
|
|
|
} else {
|
|
|
|
|
xScroll = document.body.scrollWidth;
|
|
|
|
|
yScroll = document.body.scrollHeight;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var windowWidth, windowHeight;
|
|
|
|
|
if (self.innerHeight) { // all except Explorer
|
|
|
|
|
windowWidth = self.innerWidth;
|
|
|
|
|
windowHeight = self.innerHeight;
|
|
|
|
|
} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
|
|
|
|
|
windowWidth = document.documentElement.clientWidth;
|
|
|
|
|
windowHeight = document.documentElement.clientHeight;
|
|
|
|
|
} else if (document.body) { // other Explorers
|
|
|
|
|
windowWidth = document.body.clientWidth;
|
|
|
|
|
windowHeight = document.body.clientHeight;
|
|
|
|
|
}
|
|
|
|
|
// for small pages with total height less then height of the viewport
|
|
|
|
|
pageHeight = Math.max(windowHeight, yScroll);
|
|
|
|
|
|
|
|
|
|
// for small pages with total width less then width of the viewport
|
|
|
|
|
pageWidth = Math.max(windowWidth, xScroll);
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
page: { width: pageWidth, height: pageHeight },
|
|
|
|
|
window: { width: windowWidth, height: windowHeight }
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Position.scrollX = function(){
|
|
|
|
|
return (window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var Loader = {
|
|
|
|
|
|
|
|
|
|
_assets: $H({}),
|
|
|
|
|
_checkInterval: null,
|
|
|
|
|
_options: {},
|
2008-11-24 19:54:24 +00:00
|
|
|
|
2008-05-22 21:43:42 +00:00
|
|
|
_update: function() {
|
2008-11-24 19:54:24 +00:00
|
|
|
|
2008-05-22 21:43:42 +00:00
|
|
|
var allLoaded = true;
|
|
|
|
|
Loader._assets.each(function(a) {
|
2008-11-24 19:54:24 +00:00
|
|
|
if (!a[1].complete && a[1].image.complete) {
|
2008-05-22 21:43:42 +00:00
|
|
|
a[1].complete = true;
|
|
|
|
|
a[1].completed_at = new Date().getTime();
|
|
|
|
|
if(a[1].options.onComplete) {
|
|
|
|
|
a[1].options.onComplete(a[0]);
|
|
|
|
|
}
|
|
|
|
|
}
|
2008-11-24 19:54:24 +00:00
|
|
|
if (!a[1].complete && !a[1].image.complete) {
|
2008-05-22 21:43:42 +00:00
|
|
|
allLoaded = false;
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
if (allLoaded) {
|
|
|
|
|
clearInterval(Loader._checkInterval);
|
|
|
|
|
Loader._checkInterval = null;
|
|
|
|
|
if (Loader._options && Loader._options.onComplete) {
|
|
|
|
|
Loader._options.onComplete();
|
|
|
|
|
}
|
|
|
|
|
Loader._options = null;
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
initialize: function() {
|
|
|
|
|
var options = arguments[0] || {};
|
|
|
|
|
Loader._options = options;
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
cacheOrLoad: function(url) {
|
|
|
|
|
var options = arguments[1] || {};
|
|
|
|
|
if (this.isLoaded(url)) {
|
|
|
|
|
if (options.onComplete) {
|
|
|
|
|
options.onComplete();
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
this.load(url, options);
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
load: function(url) {
|
|
|
|
|
if (Loader._assets.get(url)) return;
|
|
|
|
|
var options = arguments[1] || {};
|
|
|
|
|
var a = { };
|
|
|
|
|
a.image = new Image();
|
|
|
|
|
a.image.src = url;
|
|
|
|
|
a.complete = false;
|
|
|
|
|
a.options = options;
|
|
|
|
|
a.loaded_at = new Date().getTime();
|
|
|
|
|
if (!Engine.isSafari2) {
|
|
|
|
|
Event.observe(a.image, 'error', function() { Loader.error(url) });
|
|
|
|
|
}
|
|
|
|
|
Loader._assets.set(url, a);
|
|
|
|
|
if (!Loader._checkInterval) {
|
|
|
|
|
Loader._checkInterval = setInterval(Loader._update, 10);
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
error: function(url) {
|
|
|
|
|
var asset = Loader._assets.get(url);
|
|
|
|
|
asset.complete = true;
|
|
|
|
|
if (asset.options.onComplete) {
|
|
|
|
|
asset.options.onComplete('assets/empty.gif');
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
stats: function(url) {
|
|
|
|
|
return (Loader._assets.get(url)._complete ?
|
|
|
|
|
(Loader._assets.get(url)._completed_at - Loader._assets.get(url)._loaded_at) : null);
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
isQueued: function(url) {
|
2008-11-24 19:54:24 +00:00
|
|
|
return Loader._assets.get(url);
|
2008-05-22 21:43:42 +00:00
|
|
|
},
|
|
|
|
|
|
|
|
|
|
isLoaded: function(url) {
|
|
|
|
|
return (Loader._assets.get(url) && Loader._assets.get(url).complete);
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
remove: function(url) {
|
|
|
|
|
Loader._assets.unset(url);
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
reset: function() {
|
|
|
|
|
Loader._assets = $H({});
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Event.localPointer = function(event) {
|
|
|
|
|
var p = [Event.pointerX(event), Event.pointerY(event)];
|
|
|
|
|
var element = arguments[1] || Event.element(event);
|
|
|
|
|
var e = Position.page($(element));
|
|
|
|
|
return [
|
|
|
|
|
p[0]-(e[0]+(window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0)),
|
|
|
|
|
p[1]-(e[1]+(window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0))];
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Effect.HScroll = Class.create();
|
|
|
|
|
|
|
|
|
|
Object.extend(Object.extend(Effect.HScroll.prototype, Effect.Base.prototype), {
|
|
|
|
|
|
|
|
|
|
initialize: function(delta) {
|
|
|
|
|
|
|
|
|
|
this.scrollStart = window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0;
|
|
|
|
|
|
|
|
|
|
var w = Position.getPageSize();
|
|
|
|
|
if (this.scrollStart + delta < 0) {
|
|
|
|
|
delta = -this.scrollStart;
|
|
|
|
|
}
|
|
|
|
|
if (this.scrollStart + delta > (w.page.width-w.window.width)) {
|
|
|
|
|
delta = (w.page.width-w.window.width) - this.scrollStart;
|
|
|
|
|
}
|
|
|
|
|
this.delta = delta;
|
|
|
|
|
|
|
|
|
|
this.start(arguments[1] || {});
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
update: function(position) {
|
|
|
|
|
Position.prepare();
|
|
|
|
|
window.scrollTo(this.scrollStart + (position*this.delta), 0);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
Effect.HScrollTo = Class.create();
|
|
|
|
|
|
|
|
|
|
Object.extend(Object.extend(Effect.HScrollTo.prototype, Effect.Base.prototype), {
|
|
|
|
|
initialize: function(scrollEnd) {
|
|
|
|
|
this.scrollStart = window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0;
|
|
|
|
|
|
|
|
|
|
var delta = scrollEnd - this.scrollStart;
|
|
|
|
|
var w = Position.getPageSize();
|
|
|
|
|
if (this.scrollStart + delta < 0) {
|
|
|
|
|
delta = -this.scrollStart;
|
|
|
|
|
}
|
|
|
|
|
if (this.scrollStart + delta > (w.page.width-w.window.width)) {
|
|
|
|
|
delta = (w.page.width-w.window.width) - this.scrollStart;
|
|
|
|
|
}
|
|
|
|
|
this.delta = delta;
|
|
|
|
|
|
|
|
|
|
this.start(arguments[1] || {});
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
update: function(position) {
|
|
|
|
|
Position.prepare();
|
|
|
|
|
window.scrollTo(this.scrollStart + (position*this.delta), 0);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
Effect.HScrollToElement = function(element, direction) {
|
|
|
|
|
|
|
|
|
|
element = $(element);
|
|
|
|
|
|
|
|
|
|
var viewportMiddle = Position.getPageSize().window.width/2;
|
|
|
|
|
var scrollStart = window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0;
|
|
|
|
|
var elementMiddle = element.offsetWidth/2 + Position.cumulativeOffset(element).first();
|
|
|
|
|
var offset = scrollStart + viewportMiddle;
|
|
|
|
|
var clickOffset = Prototype.Browser.IE ? 20 : 17; //offset to keep arrows visible at 800x600
|
|
|
|
|
if (direction == 1)
|
|
|
|
|
var delta = elementMiddle - offset + clickOffset;
|
|
|
|
|
else
|
|
|
|
|
var delta = -(offset - elementMiddle) - clickOffset;
|
|
|
|
|
new Effect.HScroll(delta);
|
|
|
|
|
}
|
2008-11-24 19:54:24 +00:00
|
|
|
/*
|
2008-05-22 21:43:42 +00:00
|
|
|
Effect.MoveRight = Class.create();
|
|
|
|
|
|
|
|
|
|
Object.extend(Object.extend(Effect.MoveRight.prototype, Effect.Base.prototype), {
|
|
|
|
|
|
|
|
|
|
initialize: function(element, delta) {
|
|
|
|
|
this.element = $(element);
|
|
|
|
|
if(!this.element) throw(Effect._elementDoesNotExistError);
|
|
|
|
|
var options = Object.extend({
|
|
|
|
|
x: delta
|
|
|
|
|
}, arguments[2] || {});
|
|
|
|
|
this.start(options);
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
setup: function() {
|
|
|
|
|
this.originalRight = this.options.initialRight || parseFloat(this.element.getStyle('right') || '0');
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
update: function(position) {
|
|
|
|
|
this.element.setStyle({
|
|
|
|
|
right: Math.round(this.options.x * position + this.originalRight) + 'px'
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
});
|
2008-11-24 19:54:24 +00:00
|
|
|
*/
|