Team:MSOE Milwaukee/Undergrads

From 2013.igem.org

(Difference between revisions)
Line 1: Line 1:
<HTML>
<HTML>
-
  <HEAD>
+
  <script type="text/javascript>
-
  <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
+
/**
 +
* Sliderman.js
 +
* Version: 1.3.7
 +
* Author: Taras Ozarko (tozarko@gmail.com)
 +
*
 +
* (c) 2010-2011 Devtrix. All rights reserved. http://www.devtrix.net/sliderman/
 +
**/
-
<script type="text/javascript" src="fadeslideshow.js">
+
var Sliderman = new function(){
 +
var Sliderman = this;
-
/***********************************************
+
function foreach(o, f){for(var k in o) if(o.hasOwnProperty(k) && f(k,o[k],o)) return;}
-
* Ultimate Fade In Slideshow v2.0- (c) Dynamic Drive DHTML code library (www.dynamicdrive.com)
+
function is_array(a){return a && a.constructor == Array;}
-
* This notice MUST stay intact for legal use
+
function is_string(a){return typeof(a) == 'string';}
-
* Visit Dynamic Drive at http://www.dynamicdrive.com/ for this script and 100s more
+
function is_function(a){return typeof(a) == 'function';}
-
***********************************************/
+
function now(){return (new Date()).getTime();}
 +
function this_blur(){this.blur();}
 +
 +
function random(l){
 +
if(l == 0) return;
 +
else if(l == 1) return 0;
 +
r = Math.round(Math.random()*(l+1));
 +
if(r > 0 && r < l+1) r--;
 +
else r = random(l);
 +
return r;
 +
}//random
-
</script>
+
function addElementEvent(o,e,f){
 +
var of = o[e];
 +
var f2 = function(){of();f();}
 +
o[e] = !is_function(of) ? f : f2;
 +
}//addElementEvent
-
<script type="text/javascript">
+
var _loadImage = [];
 +
function loadImage(s,f,always_show_loading){
 +
var i_onload = function(){_loadImage[s]=true;if(f)f(s);}
 +
var l = function(){if(_loadImage[s]){if(f)f(s);}else{var i=newElement('IMG');i.onload=i_onload;new function(){i.src=s;};}}
 +
if(always_show_loading) setTimeout(l, typeof(always_show_loading) == 'number' ? always_show_loading : 1000);
 +
else l();
 +
}//loadImage
-
var mygallery=new fadeSlideShow({
+
function array_copy(a){
-
wrapperid: "fadeshow1", //ID of blank DIV on page to house Slideshow
+
if(is_array(a)) var r = [];
-
dimensions: [250, 180], //width/height of gallery in pixels. Should reflect dimensions of largest image
+
else var r = {};
-
imagearray: [
+
foreach(a, function(i){r[i] = typeof(a[i]) != 'object' ? a[i] : array_copy(a[i]);});
-
["https://static.igem.org/mediawiki/2013/e/ee/Matt_reichartz.png", "", "", "Nothing beats relaxing next to the pool when the weather is hot."],
+
return r;
-
["https://static.igem.org/mediawiki/2013/e/ee/Matt_reichartz.png", "http://en.wikipedia.org/wiki/Cave", "_new", "Some day I'd like to explore these caves!"],
+
}//array_copy
-
["https://static.igem.org/mediawiki/2013/e/ee/Matt_reichartz.png"],
+
-
["https://static.igem.org/mediawiki/2013/e/ee/Matt_reichartz.png", "", "", "What a beautiful scene with everything changing colors."] //<--no trailing comma after very last image element!
+
-
],
+
-
displaymode: {type:'auto', pause:2500, cycles:0, wraparound:false},
+
-
persist: false, //remember last viewed slide and recall within same session?
+
-
fadeduration: 500, //transition duration (milliseconds)
+
-
descreveal: "ondemand",
+
-
togglerid: ""
+
-
})
+
 +
function eq(a, b){
 +
return String(a).replace(/^\s+/, '').replace(/\s+$/, '').toLowerCase() == String(b).replace(/^\s+/, '').replace(/\s+$/, '').toLowerCase();
 +
}//eq
-
var mygallery2=new fadeSlideShow({
+
function array_search(arr, a, b){
-
wrapperid: "fadeshow2", //ID of blank DIV on page to house Slideshow
+
var result = false;
-
dimensions: [250, 180], //width/height of gallery in pixels. Should reflect dimensions of largest image
+
if(!b){
-
imagearray: [
+
foreach(arr, function(i){
-
["https://static.igem.org/mediawiki/2013/e/ee/Matt_reichartz.png", "", "", "Nothing beats relaxing next to the pool when the weather is hot."],
+
if(eq(arr[i], b)){
-
["https://static.igem.org/mediawiki/2013/e/ee/Matt_reichartz.png", "http://en.wikipedia.org/wiki/Cave", "_new", "Some day I'd like to explore these caves!"],
+
result = i;
-
["https://static.igem.org/mediawiki/2013/e/ee/Matt_reichartz.png"],
+
return true;
-
["https://static.igem.org/mediawiki/2013/e/ee/Matt_reichartz.png", "", "", "What a beautiful scene with everything changing colors."] //<--no trailing comma after very last image element!
+
}
-
],
+
});
-
displaymode: {type:'manual', pause:2500, cycles:0, wraparound:false},
+
}
-
persist: false, //remember last viewed slide and recall within same session?
+
else{
-
fadeduration: 500, //transition duration (milliseconds)
+
foreach(arr, function(i){
-
descreveal: "always",
+
if(eq(arr[i][a], b)){
-
togglerid: "fadeshow2toggler"
+
result = i;
-
})
+
return true;
 +
}
 +
});
 +
}
 +
return result;
 +
}//array_search
-
</script>
+
function validateOption(a, b){
-
</HEAD>
+
b = b.split(',');
-
<BODY>
+
var result;
-
<div id="fadeshow1"></div>
+
foreach(b, function(i){
 +
result = b[i];
 +
if(eq(a, b[i])) return true;
 +
});
 +
return result;
 +
}//validateOption
-
<br />
+
var setOpacity;
 +
function setOpacityInit(){
 +
if(setOpacity) return;
 +
var p, b = document.body, s = b.style;
 +
if(is_string(s.opacity)) p = 'opacity';
 +
  else if(is_string(s.MozOpacity)) p = 'MozOpacity';
 +
  else if(is_string(s.KhtmlOpacity)) p = 'KhtmlOpacity';
 +
  else if(b.filters && navigator.appVersion.match(/MSIE ([\d.]+);/)[1]>=5.5) p = 'filter';
 +
  if(p == 'filter'){
 +
setOpacity = function(style, v){
 +
if(v > 1) v = 1;
 +
else if(v < 0) v = 0;
 +
  style[p] = "alpha(opacity=" + Math.round(v*100) + ")";
 +
}
 +
}else if(p){
 +
setOpacity = function(style, v){
 +
if(v > 1) v = 1;
 +
else if(v < 0) v = 0;
 +
  style[p] = v.toFixed(2);
 +
}
 +
}else setOpacity = ef
 +
}//setOpacityInit
-
<div id="fadeshow2"></div>
+
function setStyle(style, property, value){
 +
if(is_string(value)) style[property] = value;
 +
else if(property == 'clip') style[property] = 'rect('+Math.round(value[0])+'px, '+Math.round(value[1])+'px, '+Math.round(value[2])+'px, '+Math.round(value[3])+'px)';
 +
else if(property == 'opacity') setOpacity(style, value);
 +
else style[property] = Math.round(value)+'px';
 +
}//setStyle
 +
function setStyles(style, properties){
 +
foreach(properties, function(property){
 +
setStyle(style, property, properties[property]);
 +
});
 +
}
 +
function hide(style){style.display = 'none';}
 +
function show(style){style.display = '';}
-
<div id="fadeshow2toggler" style="width:250px; text-align:center; margin-top:10px">
+
function newElement(tagName, styles){
-
<a href="#" class="prev"><img src="http://i31.tinypic.com/302rn5v.png" style="border-width:0" /></a> <span class="status" style="margin:0 50px; font-weight:bold"></span> <a href="#" class="next"><img src="http://i30.tinypic.com/lzkux.png" style="border-width:0" /></a>
+
var e = document.createElement(tagName);
-
</div>
+
if(styles) setStyles(e.style, styles);
-
</BODY>
+
return e;
 +
}//newElement
 +
 +
var definedObjects = [];
 +
function defineObject(t, o){
 +
if(!is_array(definedObjects[t])) definedObjects[t] = [];
 +
if(o){
 +
var n = -1, i;
 +
if(o.name){
 +
if(i = array_search(definedObjects[t], 'name', o.name)) n = i;
 +
}else o.name = 'Sliderman-nameless-object-'+definedObjects[t].length;
 +
if(n >= 0) definedObjects[t][n] = o;
 +
else definedObjects[t].push(o);
 +
}
 +
}//defineObjects
 +
Sliderman.easing = function(e){defineObject('easing', e);}
 +
Sliderman.order = function(e){defineObject('order', e);}
 +
Sliderman.effect = function(e){defineObject('effect', EffectObject(e));}
 +
 +
function getDefinedObjects(t){
 +
return definedObjects[t];
 +
}//getDefinedObjects
 +
 +
function getDefinedObject(t, n){
 +
var a = getDefinedObjects(t), i;
 +
return is_array(a) && (i = array_search(a, 'name', n)) ? a[i] : false;
 +
}//getDefinedObject
 +
 +
var _EffectObject = 0;
 +
function EffectObject(a){
 +
if(typeof(a) != 'object') a = {};
 +
if(!a.name) a.name = 'Sliderman-nameless-effect-'+_EffectObject++;
 +
a.interval = parseInt(a.interval) || 40; a.duration = parseInt(a.duration) || 200; a.delay = parseInt(a.delay) || 0;
 +
a.cols = parseInt(a.cols) || 1; a.rows = parseInt(a.rows) || 1; a.count = a.cols*a.rows;
 +
a.top = a.top ? true : false; a.right = a.right ? true : false; a.bottom = a.bottom ? true : false; a.left = a.left ? true : false;
 +
a.fade = a.fade ? true : false; a.zoom = a.zoom ? true : false; a.move = a.move ? true : false, a.chess = a.chess ? true : false;
 +
a.easing = getDefinedObject('easing', a.easing) ? a.easing : 'swing';
 +
a.order = getDefinedObject('order', a.order) ? a.order : 'random'; a.order_cache_id = [a.order, a.cols, a.rows, a.road, a.reverse].join(',');
 +
a.cache_id = [a.interval, a.duration, a.delay, a.top, a.right, a.bottom, a.left, a.fade, a.zoom, a.move, a.chess, a.order_cache_id].join(',');
 +
a.cacheId = function(){return a.cache_id + (a.order == 'random' ? now() : '');}
 +
a.frames_count = Math.round(a.duration/a.interval); a.easingArr = getEasing(a);
 +
a.P = []; a.pieces = function(w,h){w /= a.cols; h /= a.rows; var wh = w+'x'+h; if(!a.P[wh]){a.P[wh] = {width: w, height: h};
 +
for(var c = 0; c < a.cols; c++) for(var r = 0; r < a.rows; r++) a.P[wh][r+','+c] = [r*h, c*w+w, r*h+h, c*w];
 +
}return a.P[wh];}
 +
return a;
 +
}//EffectObject
 +
 +
function slideContainer(slidesContainer, display){
 +
var container = newElement('div', {width: display.width, height: display.height, position: 'absolute', top: 0, left: 0, overflow: 'hidden'});
 +
slidesContainer.appendChild(container);
 +
return container;
 +
}//slideContainer
 +
 
 +
var EffectsArr = [];
 +
function Effects(parameters){
 +
var effect = parameters.effect, display = parameters.display;
 +
if(parameters.contentmode) effect.zoom = false;
 +
var cr, piece, r, image, startStylesArr = [], AnimateArr = [], needAnimate = [], AnimateItemsArr = [], styleStart, styleEnd, styleDif;
 +
 
 +
var container = slideContainer(parameters.container, display);
 +
 
 +
var pieces = effect.pieces(display.width, display.height);
 +
var e_top, e_bottom, e_left, e_right;
 +
var effectsOptStr = effect.cacheId();
 +
var frameN;
 +
var orderArr = getOrder(effect);
 +
 
 +
if(EffectsArr[effectsOptStr]){
 +
startStylesArr = EffectsArr[effectsOptStr].startStylesArr;
 +
AnimateArr = EffectsArr[effectsOptStr].AnimateArr;
 +
needAnimate = EffectsArr[effectsOptStr].needAnimate;
 +
}else{
 +
for(r = 0; r < effect.rows; r++) for(c = 0; c < effect.cols; c++){cr = r+','+c;
 +
if(effect.chess && orderArr[cr] % 2 == 1){
 +
e_top = effect.bottom; e_bottom = effect.top;
 +
e_left = effect.right; e_right = effect.left;
 +
}else{
 +
e_top = effect.top; e_bottom = effect.bottom;
 +
e_left = effect.left; e_right = effect.right;
 +
}
 +
 
 +
styleStart = {top: 0, left: 0, opacity: 1, width: display.width, height: display.height, overflow: 'hidden'};
 +
styleEnd = array_copy(styleStart); piece = array_copy(pieces[cr]);
 +
 
 +
if(effect.fade) styleStart.opacity = 0;
 +
 
 +
if(e_top && e_bottom) piece[0] = piece[2] = (piece[0] + piece[2]) / 2;
 +
else if(e_top) piece[2] -= pieces.height;
 +
else if(e_bottom) piece[0] += pieces.height;
 +
if(e_left && e_right) piece[1] = piece[3] = (piece[1] + piece[3]) / 2;
 +
else if(e_left) piece[1] -= pieces.width;
 +
else if(e_right) piece[3] += pieces.width;
 +
 
 +
if(effect.zoom){
 +
styleStart.left = pieces[cr][3];
 +
styleStart.top = pieces[cr][0];
 +
if(e_left && e_right) styleStart.left += pieces.width / 2;
 +
else if(e_right) styleStart.left += pieces.width;
 +
else if(!e_left) styleStart.left = 0;
 +
if(e_top && e_bottom) styleStart.top += pieces.height / 2;
 +
else if(e_bottom) styleStart.top += pieces.height;
 +
else if(!e_top) styleStart.top = 0;
 +
if(e_left || e_right) piece[1] = piece[3] = 0;
 +
if(e_top || e_bottom) piece[0] = piece[2] = 0;
 +
styleStart.width = e_left || e_right ? 0 : display.width;
 +
styleStart.height = e_top || e_bottom ? 0 : display.height;
 +
}
 +
 
 +
if(effect.move){
 +
if(e_top){
 +
styleStart.top = parseInt(styleStart.top)-pieces.height;
 +
piece[0] += pieces.height; piece[2] += pieces.height;
 +
}
 +
if(e_bottom){
 +
styleStart.top = parseInt(styleStart.top)+pieces.height;
 +
piece[0] -= pieces.height; piece[2] -= pieces.height;
 +
}
 +
if(e_left){
 +
styleStart.left = parseInt(styleStart.left)-pieces.width;
 +
piece[1] += pieces.width; piece[3] += pieces.width;
 +
}
 +
if(e_right){
 +
styleStart.left = parseInt(styleStart.left)+pieces.width;
 +
piece[1] -= pieces.width; piece[3] -= pieces.width;
 +
}
 +
}
 +
 
 +
styleStart.clip = piece;
 +
styleEnd.clip = pieces[cr];
 +
 
 +
styleDif = [];
 +
foreach(styleEnd, function(property){
 +
if(styleStart[property].toString() != styleEnd[property].toString()){
 +
styleDif[property] = [];
 +
if(property == 'clip'){
 +
foreach(styleStart[property], function(n){
 +
styleDif[property][n] = styleEnd[property][n] - styleStart[property][n];
 +
});
 +
}else styleDif[property] = styleEnd[property] - styleStart[property];
 +
needAnimate[cr] = true;
 +
}
 +
});
 +
 
 +
startStylesArr[cr] = styleStart; AnimateArr[cr] = [];
 +
if(effect.delay) for(var n = 0; n < Math.round(orderArr[cr]*effect.delay/effect.interval); n++) AnimateArr[cr].push(null);
 +
 
 +
if(!needAnimate[cr]) AnimateArr[cr].push({display: ''});
 +
else for(frameN = 1; frameN <= effect.frames_count; frameN++){
 +
var style_c = [];
 +
if(frameN == effect.frames_count) style_c = styleEnd;
 +
else{
 +
foreach(styleDif, function(property){
 +
value = [];
 +
if(property == 'clip'){
 +
foreach(styleDif[property], function(n){
 +
value[n] = styleStart[property][n]+styleDif[property][n]*effect.easingArr[frameN]
 +
});
 +
}else value = styleStart[property]+styleDif[property]*effect.easingArr[frameN]
 +
style_c[property] = value;
 +
});
 +
}
 +
AnimateArr[cr].push(style_c);
 +
}
 +
 
 +
}//for
 +
EffectsArr[effectsOptStr] = {startStylesArr: startStylesArr, AnimateArr: AnimateArr, needAnimate: needAnimate};
 +
}
 +
 
 +
for(r = 0; r < effect.rows; r++) for(c = 0; c < effect.cols; c++){cr = r+','+c;
 +
if(parameters.contentmode){
 +
image = newElement('DIV', startStylesArr[cr]);
 +
image.appendChild(parameters.src.cloneNode(true));
 +
}else{
 +
image = newElement('IMG', startStylesArr[cr]);
 +
image.src = parameters.src;
 +
}
 +
var style = image.style;
 +
style.position = 'absolute';
 +
container.appendChild(image);
 +
AnimateItemsArr[cr] = style;
 +
if(!needAnimate[cr]) hide(AnimateItemsArr[cr]);
 +
}
 +
 
 +
//ANIMATE
 +
var time_s = now();
 +
var framesCountAll = 1;
 +
foreach(AnimateArr, function(index){framesCountAll = Math.max(AnimateArr[index].length, framesCountAll);});
 +
var AnimateItem, AnimateItemsComplete = [], timerFuncStatus = true, timerFunc = function(){
 +
if(timerFuncStatus){
 +
var frameC = Math.ceil((now() - time_s) / effect.interval);
 +
frameC = frameC >= framesCountAll ? framesCountAll-1 : frameC-1;
 +
foreach(AnimateArr, function(index){
 +
AnimateItem = frameC > AnimateArr[index].length-1 ? AnimateArr[index].length-1 : frameC;
 +
if(AnimateArr[index][AnimateItem] && !AnimateItemsComplete[index+','+AnimateItem]){
 +
setStyles(AnimateItemsArr[index], AnimateArr[index][AnimateItem]);
 +
AnimateItemsComplete[index+','+AnimateItem] = true;
 +
}
 +
});
 +
if(frameC == framesCountAll-1){
 +
if(effect.count > 1){
 +
container.innerHTML = '';
 +
if(parameters.contentmode) container.appendChild(parameters.src);
 +
else container.innerHTML = '<img src="'+parameters.src+'" width="'+display.width+'" height="'+display.height+'" />';
 +
}
 +
parameters.callback(container);
 +
timerFuncStatus = false;
 +
}
 +
}
 +
return timerFuncStatus;
 +
};
 +
var animateInterval = setInterval(function(){
 +
if(!timerFunc()) clearInterval(animateInterval);
 +
}, effect.interval);
 +
 
 +
}//Effects
 +
function getOrder(effect){
 +
var a = [], o, m = 0;
 +
if(effect.count > 1){
 +
o = getDefinedObject('order', effect.order);
 +
if(!is_array(o.cache)) o.cache = [];
 +
if(o.nocache || !o.cache[effect.order_cache_id]){
 +
a = o.method(effect);
 +
if(effect.reverse){
 +
foreach(a, function(i, v){m = Math.max(m, v);});
 +
foreach(a, function(i){a[i] = m - a[i];});
 +
}
 +
o.cache[effect.order_cache_id] = a;
 +
}
 +
a = o.cache[effect.order_cache_id];
 +
}else a['0,0'] = 0;
 +
return a;
 +
}//getOrder
 +
 +
function getEasing(effect){
 +
var o = getDefinedObject('easing', effect.easing), i, c = effect.frames_count;
 +
if(!is_array(o.cache)) o.cache = [];
 +
if(!o.cache[c]){
 +
o.cache[c] = [];
 +
for(i = 1; i <= c; i++) o.cache[c][i] = o.method(i/c);
 +
}
 +
return o.cache[c];
 +
}//getEasing
 +
 +
Sliderman.slider = function(parameters){
 +
setOpacityInit();
 +
 
 +
var Slider = {}, current = null, previous = null, EffectN = 0, nextIndex = null, prevImg, status = 'free', isHover = false, images = [], descriptions = [], links = [], ef = function(){};
 +
 
 +
//EVENTS
 +
var events = parameters.events, eventCall = events ? function(e){if(events[e] && is_function(events[e])) events[e](Slider);} : ef;
 +
var contentmode = parameters.contentmode;
 +
 
 +
//SLIDER EFECTS
 +
var effects = [];
 +
var effectsNames = [];
 +
var addEffect = function(e){
 +
if(is_string(e)){
 +
e = e.split(',');
 +
if(e.length == 1){
 +
var globalEffect = getDefinedObject('effect', e[0]);
 +
if(globalEffect) addEffect(globalEffect);
 +
}else for(var i = 0; i < e.length; i++) addEffect(e[i]);
 +
}else if(e){
 +
e = EffectObject(e);
 +
var effectsId = array_search(effects, 'name', e.name);
 +
if(!effectsId) effectsId = effects.length;
 +
effectsNames.push(e.name);
 +
effects[effectsId] = array_copy(e);
 +
}
 +
}//addEffect
 +
var getEffect = function(){
 +
var n = 0;
 +
if(effects.length > 1){
 +
switch(display.effects_order){
 +
case 'slides': n = current % effectsNames.length; break;
 +
case 'effects': n = EffectN % effectsNames.length; break;
 +
default:/*random*/
 +
n = random(effectsNames.length);
 +
}
 +
}
 +
EffectN++;
 +
return effects[array_search(effects, 'name', effectsNames[n])];
 +
}//getEffect
 +
if(parameters.effects){
 +
if(!is_array(parameters.effects)) parameters.effects = [parameters.effects];
 +
for(var i = 0; i < parameters.effects.length; i++) addEffect(parameters.effects[i]);
 +
}else parameters.effects = [];
 +
if(!effects.length){
 +
effects = array_copy(getDefinedObjects('effect'));
 +
for(var i = 0; i < effects.length; i++) effectsNames.push(effects[i].name);
 +
}
 +
 
 +
//OPTIONS
 +
var display = parameters.display || {};
 +
display.width = parameters.width;
 +
display.height = parameters.height;
 +
var loading = display.loading || {};
 +
var description = display.description || null;
 +
var navigation = display.navigation || null;
 +
var buttons = display.buttons || null;
 +
 +
Slider.random = function(){
 +
var r = random(images.length);
 +
return images.length > 1 && r == current ? Slider.random() : Slider.go(r);
 +
}
 +
Slider.next = function(){
 +
var r = Slider.go(current === null ? 0 : current + 1);
 +
if(display.loop && r){
 +
autoplayCount++;
 +
if(autoplayCount+1 >= images.length*display.loop) autoplay = ef;
 +
}
 +
return r;
 +
}
 +
Slider.prev = function(){
 +
var r = Slider.go(current === null ? -1 : current - 1);
 +
if(display.loop && r) autoplayCount--;
 +
return r;
 +
}
 +
Slider.go = function(index){
 +
index = (images.length + index) % images.length;
 +
autoplay(false);
 +
if(status != 'free') nextIndex = index;
 +
if(status != 'free' || current == index) return autoplay(true) && false;
 +
previous = current;
 +
current = index;
 +
eventCall('loading');
 +
showLoading(true);
 +
if(contentmode) doEffect(images[current]);
 +
else loadImage(images[current], doEffect, display.always_show_loading);
 +
return true;
 +
}//go
 +
Slider.get = function(a){
 +
switch(a){
 +
case 'length': return images.length; break;
 +
case 'current': return current; break;
 +
case 'previous': return previous; break;
 +
case 'images': return images; break;
 +
case 'links': return links; break;
 +
case 'descriptions': return descriptions; break;
 +
}
 +
}//get
 +
var autoplayStatus = 'stop';//play,pause,stop
 +
Slider.play = function(){if(!display.autoplay) return;
 +
if(autoplayStatus != 'play'){
 +
var s = autoplayStatus == 'stop';
 +
autoplayStatus = 'play';
 +
if(s) (display.random ? Slider.random : Slider.go)(0);
 +
else autoplay(true);
 +
}
 +
}//play
 +
Slider.pause = function(){if(!display.autoplay) return;
 +
if(autoplayStatus == 'pause') Slider.play();
 +
else if(autoplayStatus == 'play'){
 +
autoplayStatus = 'pause';
 +
autoplay(false);
 +
}
 +
}//pause
 +
Slider.stop = function(){if(!display.autoplay) return;
 +
autoplayStatus = 'stop';
 +
current = null;
 +
previous = null;
 +
nextIndex = null;
 +
EffectN = 0;
 +
autoplay(false);
 +
removePrevImg();
 +
if(display.first_slide) displayFirstSlide();
 +
update();
 +
}//stop
 +
Slider.start = function(){if(!display.autoplay) return;
 +
Slider.stop();
 +
Slider.play();
 +
}//start
 +
 +
var removePrevImg = function(){
 +
if(prevImg && status == 'free'){
 +
prevImg.parentNode.removeChild(prevImg);
 +
prevImg = null;
 +
}
 +
}//removePrevImg
 +
 +
function displayFirstSlide(){
 +
var c = slideContainer(imagesCont, display);
 +
if(parameters.contentmode) c.appendChild(images[0]);
 +
else c.innerHTML = '<img src="'+images[0]+'" width="'+display.width+'" height="'+display.height+'" />';
 +
EffectN = 1;
 +
previous = null;
 +
current = 0;
 +
}//displayFirstSlide
 +
 +
function update(){
 +
descriptionShow(); linkUpd(); navigationUpd();
 +
}//update
 +
 
 +
var styleDef = {width: display.width, height: display.height, position: 'absolute', top: 0, left: 0, display: 'block'};
 +
 
 +
var mainCont = document.getElementById(parameters.container);
 +
function addElementEventOnmouseover(){isHover = true;
 +
if(buttons && buttons.hide) show(buttonsCont.style);
 +
if(description && description.hide && !contentmode) show(descriptionCont.style);
 +
if(display.pause) autoplay(false);
 +
}
 +
addElementEvent(mainCont, 'onmouseover', addElementEventOnmouseover);
 +
function addElementEventOnmouseout(){isHover = false;
 +
if(buttons && buttons.hide) hide(buttonsCont.style);
 +
if(description && description.hide && !contentmode) hide(descriptionCont.style);
 +
if(display.pause) autoplay(true);
 +
}
 +
addElementEvent(mainCont, 'onmouseout', addElementEventOnmouseout);
 +
 
 +
//GET CONTENT
 +
var maps = document.getElementsByTagName('MAP');
 +
for(var i = 0; i < mainCont.childNodes.length; i++) if(mainCont.childNodes[i].nodeType == 1){
 +
if(contentmode) images.push(mainCont.childNodes[i].cloneNode(true));
 +
else{
 +
switch(mainCont.childNodes[i].tagName){
 +
case 'A':
 +
var img = mainCont.childNodes[i].getElementsByTagName('IMG');
 +
if(img.length){
 +
images.push(img[0].src);
 +
links[images.length-1] = mainCont.childNodes[i];
 +
}else descriptions[images.length-1] = mainCont.childNodes[i];
 +
break;
 +
case 'IMG':
 +
images.push(mainCont.childNodes[i].src);
 +
if(mainCont.childNodes[i].useMap && maps.length) for(var m = 0; m < maps.length; m++){
 +
if(maps[m].name && mainCont.childNodes[i].useMap.replace(/^[^#]*#/, '') == maps[m].name) links[images.length-1] = maps[m];
 +
}
 +
break;
 +
case 'MAP': continue; break;
 +
default: descriptions[images.length-1] = mainCont.childNodes[i];
 +
}
 +
}
 +
hide(mainCont.childNodes[i].style);
 +
}
 +
if(!contentmode) for(var i = 0; i < images.length; i++) loadImage(images[i]);
 +
 
 +
//CONTAINERS
 +
var sliderCont = newElement('DIV', {width: display.width, height: display.height, position: 'relative'}); mainCont.appendChild(sliderCont);
 +
var imagesCont = newElement('DIV', styleDef); sliderCont.appendChild(imagesCont);
 +
partsCont = sliderCont;
 +
 
 +
//LINKS
 +
if(contentmode) var linkUpd = ef;
 +
else{
 +
var lnk = newElement('DIV', styleDef); partsCont.appendChild(lnk);
 +
var linkUpd = function(){
 +
lnk.innerHTML = ''; value = links[current];
 +
if(value){
 +
if(value.tagName == 'MAP'){
 +
var a = newElement('IMG', styleDef);
 +
a.src = images[current]; a.useMap = '#'+value.name;
 +
}else{
 +
var a = newElement('A', styleDef);
 +
a.href = value.href; a.target = value.target;
 +
}
 +
setStyles(a.style, {opacity: 0, background: '#000000'});
 +
a.onfocus = this_blur;
 +
lnk.appendChild(a);
 +
}
 +
}
 +
}
 +
 
 +
//LOADING
 +
if(contentmode) var showLoading = ef;
 +
else{
 +
var loadingCont = newElement('DIV'); partsCont.appendChild(loadingCont);
 +
hide(loadingCont.style);
 +
if(loading.background){
 +
var loadingBgStyle = array_copy(styleDef);
 +
loadingBgStyle.background = loading.background;
 +
if(loading.opacity) loadingBgStyle.opacity = loading.opacity;
 +
loadingCont.appendChild(newElement('DIV', loadingBgStyle));
 +
}
 +
if(loading.image){
 +
var loadingImgStyle = array_copy(styleDef);
 +
loadingImgStyle.background = 'url('+(loading.image)+') no-repeat center center';
 +
loadingCont.appendChild(newElement('DIV', loadingImgStyle));
 +
}
 +
var showLoading = function(a){
 +
if(a) show(loadingCont.style);
 +
else hide(loadingCont.style);
 +
status = a ? 'loading' : 'free';
 +
}
 +
}
 +
 
 +
//DESCRIPTION
 +
var descriptionShow;
 +
if(description && !contentmode){
 +
var descriptionCont = newElement('DIV'); partsCont.appendChild(descriptionCont);
 +
if(description.hide) hide(descriptionCont.style);
 +
 
 +
var descriptionStl = {position: 'absolute', overflow: 'hidden', textAlign: 'left'};
 +
if(!description) description = [];
 +
description.position = validateOption(description.position, 'top,left,right,bottom')
 +
descriptionStl.background = description.background || 'white';
 +
descriptionStl.opacity = description.opacity || 0.5;
 +
descriptionStl.width = description.position == 'top' || description.position == 'bottom' ? display.width : description.width || display.width*0.2;
 +
descriptionStl.height = description.position == 'left' || description.position == 'right' ? display.height : description.height || display.height*0.2;
 +
descriptionStl[description.position == 'bottom'?'bottom':'top'] = 0;
 +
descriptionStl[description.position == 'right'?'right':'left'] = 0;
 +
 
 +
var descBg = newElement('DIV', descriptionStl); descriptionCont.appendChild(descBg);
 +
descriptionStl.opacity = 1; descriptionStl.background = '';
 +
var desc = newElement('DIV', descriptionStl); descriptionCont.appendChild(desc);
 +
 
 +
function descriptionShow(){
 +
desc.innerHTML = '';
 +
setStyle(descriptionCont.style, 'visibility', 'hidden');
 +
var value = descriptions[current];
 +
if(value){
 +
setStyle(descriptionCont.style, 'visibility', 'visible');
 +
value = value.cloneNode(true);
 +
show(value.style);
 +
desc.appendChild(value);
 +
if(isHover) show(descriptionCont.style);
 +
}
 +
}
 +
}else descriptionShow = ef
 +
 
 +
//BUTTONS
 +
if(buttons){
 +
var buttonsCont = newElement('DIV'); partsCont.appendChild(buttonsCont);
 +
if(buttons.hide) hide(buttonsCont.style);
 +
var btnPrev = newElement('A'); buttonsCont.appendChild(btnPrev);
 +
btnPrev.href = 'javascript:void(0);';
 +
var btnNext = btnPrev.cloneNode(true); buttonsCont.appendChild(btnNext);
 +
btnPrev.onfocus = this_blur;
 +
btnNext.onfocus = this_blur;
 +
btnPrev.onclick = Slider.prev;
 +
btnNext.onclick = Slider.next;
 +
if(buttons.prev.label) btnPrev.innerHTML = is_string(buttons.prev.label) ? buttons.prev.label : 'prev';
 +
if(buttons.prev.label) btnNext.innerHTML = is_string(buttons.next.label) ? buttons.next.label : 'next';
 +
if(buttons.prev.className) btnPrev.className = buttons.prev.className;
 +
if(buttons.next.className) btnNext.className = buttons.next.className;
 +
if(buttons.opacity || buttons.prev.opacity) setOpacity(btnPrev.style, buttons.opacity || buttons.prev.opacity);
 +
if(buttons.opacity || buttons.next.opacity) setOpacity(btnNext.style, buttons.opacity || buttons.next.opacity);
 +
}
 +
 
 +
//NAVIGATION
 +
var navigationUpd;
 +
if(navigation){
 +
var navigationCont = document.getElementById(navigation.container);
 +
var a;
 +
 
 +
if(navigation.prev){
 +
a = newElement('A');
 +
if(navigation.prev.label) a.innerHTML = is_string(navigation.prev.label) ? navigation.prev.label : 'Prev';
 +
if(navigation.prev.className) a.className = navigation.prev.className;
 +
a.href = 'javascript:void(0);';
 +
a.onfocus = this_blur;
 +
a.onclick = Slider.prev;
 +
navigationCont.appendChild(a);
 +
}
 +
 
 +
var navigationLinks = [];
 +
function a_onclick(){Slider.go(this.id.replace(parameters.container+'_SliderNavigation', ''));};
 +
for(var i = 0; i < images.length; i++){
 +
a = newElement('A');
 +
if(navigation.label) a.innerHTML = is_string(navigation.label) ? navigation.label : i+1;
 +
if(navigation.className) a.className = navigation.className;
 +
a.href = 'javascript:void(0);';
 +
a.id = parameters.container+'_SliderNavigation'+i;
 +
a.onfocus = this_blur;
 +
a.onclick = a_onclick;
 +
navigationLinks.push(a);
 +
navigationCont.appendChild(a);
 +
}
 +
 
 +
if(navigation.next){
 +
a = newElement('A');
 +
if(navigation.next.label) a.innerHTML = is_string(navigation.next.label) ? navigation.next.label : 'Next';
 +
if(navigation.next.className) a.className = navigation.next.className;
 +
a.href = 'javascript:void(0);';
 +
a.onfocus = this_blur;
 +
a.onclick = Slider.next;
 +
navigationCont.appendChild(a);
 +
}
 +
 
 +
function navigationUpd(){
 +
for(var i = 0; i < navigationLinks.length; i++) navigationLinks[i].className = navigationLinks[i].className.replace(/\bactive\b/g, '');
 +
if(navigationLinks[current]) navigationLinks[current].className += ' active';
 +
}
 +
}else navigationUpd = ef
 +
 
 +
//AUTOPLAY
 +
var autoplayCount = 0;
 +
if(display.autoplay){
 +
var autoplayTimeout;
 +
var autoplay = function(a){
 +
if(autoplayTimeout){
 +
clearTimeout(autoplayTimeout);
 +
autoplayTimeout = null;
 +
}
 +
if(a && !(isHover && display.pause) && autoplayStatus == 'play') autoplayTimeout = setTimeout(display.random ? Slider.random : Slider.next, display.autoplay);
 +
}//autoplay
 +
}else var autoplay = ef
 +
 
 +
var doEffect = function(src){
 +
if(autoplayStatus == 'stop') autoplayStatus = 'pause';
 +
eventCall('before');
 +
showLoading(false); status = 'busy'; update();
 +
Effects({effect: getEffect(), display: display, container: imagesCont, src: src, callback: function(img){
 +
status = 'free'; autoplay(true);
 +
removePrevImg();
 +
prevImg = img;
 +
eventCall('after');
 +
if(autoplayStatus == 'stop') removePrevImg();
 +
else if(nextIndex !== null){
 +
Slider.go(nextIndex);
 +
nextIndex = null;
 +
}
 +
}, contentmode: contentmode});
 +
};
 +
 
 +
if(display.mousewheel){
 +
onmousewheel = function(d){
 +
if(d > 0) Slider.prev();
 +
else if(d < 0) Slider.next();
 +
return true;
 +
};
 +
function wheel(event){
 +
var d = 0;
 +
if(!event) event = window.event;
 +
if(event.wheelDelta){
 +
d = event.wheelDelta/120;
 +
if(window.opera) d = -d;
 +
}else if(event.detail) d = -event.detail/3;
 +
if(d && onmousewheel(d)){
 +
if(event.preventDefault) event.preventDefault();
 +
event.returnValue = false;
 +
}
 +
}//wheel
 +
if(mainCont.addEventListener){
 +
mainCont.addEventListener("DOMMouseScroll",wheel,false);
 +
mainCont.addEventListener("mousewheel",wheel,false);
 +
}else addElementEvent(mainCont, 'onmousewheel', wheel);
 +
}
 +
 +
if(display.first_slide) displayFirstSlide();
 +
update();
 +
if(typeof(display.autostart) == 'undefined' || display.autostart) Slider.play();
 +
return Slider;
 +
}//Sliderman.slider
 +
 +
 
 +
}//Sliderman
 +
 
 +
/* predefined easing functions */
 +
Sliderman.easing({name: 'none', method: function(x){return x;}});
 +
Sliderman.easing({name: 'swing', method: function(x){return -Math.cos(x*Math.PI)/2 + 0.5;}});
 +
Sliderman.easing({name: 'wave', method: function(t){return ((Math.cos((1-t)*3*Math.PI+2*Math.PI))*0.5+0.5+t)/2;}});
 +
Sliderman.easing({name: 'bounce', method: function(t){return 1 - Math.abs(Math.cos((1-t)*(2.5+t*t*3)*Math.PI+0.5*Math.PI)*(1-t));}});
 +
/* predefined order functions */
 +
Sliderman.order({name: 'straight', method: function(e){
 +
var cols = e.cols, rows = e.rows, road = e.road, count = e.count;
 +
var a = [], i = 0, c = 0, r = 0, cl = cols - 1, rl = rows - 1, il = count - 1, cr;
 +
for(r = 0; r < rows; r++) for(c = 0; c < cols; c++){cr = r+','+c;
 +
switch(road){
 +
case 'BL': a[cr] = il-(c*rows+(rl-r)); break;
 +
case 'RT': a[cr] = il-(r*cols+(cl-c)); break;
 +
case 'TL': a[cr] = il-(c*rows+r);
 +
case 'LT': a[cr] = il-(r*cols+c); break;
 +
case 'BR': a[cr] = c*rows+r; break;
 +
case 'LB': a[cr] = r*cols+(cl-c); break;
 +
case 'TR': a[cr] = c*rows+(rl-r); break;
 +
default: a[cr] = r*cols+c; break;//'RB'
 +
}
 +
}
 +
return a;
 +
}});
 +
Sliderman.order({name: 'swirl', method: function(e){
 +
var cols = e.cols, rows = e.rows, road = e.road, count = e.count;
 +
var a = [], i = 0, c = 0, r = 0, cl = cols - 1, rl = rows - 1, il = count - 1, cr;
 +
var courses, course = 0;
 +
switch(road){
 +
case 'BL': c = cl; r = 0; courses = ['r+', 'c-', 'r-', 'c+']; break;
 +
case 'RT': c = 0; r = rl; courses = ['c+', 'r-', 'c-', 'r+']; break;
 +
case 'TL': c = cl; r = rl; courses = ['r-', 'c-', 'r+', 'c+']; break;
 +
case 'LT': c = cl; r = rl; courses = ['c-', 'r-', 'c+', 'r+']; break;
 +
case 'BR': c = 0; r = 0; courses = ['r+', 'c+', 'r-', 'c-']; break;
 +
case 'LB': c = cl; r = 0; courses = ['c-', 'r+', 'c+', 'r-']; break;
 +
case 'TR': c = 0; r = rl; courses = ['r-', 'c+', 'r+', 'c-']; break;
 +
default: c = 0; r = 0; courses = ['c+', 'r+', 'c-', 'r-']; break;//'RB'
 +
}
 +
i = 0;
 +
while(i < count){
 +
cr = r+','+c;
 +
if(c >= 0 && c < cols && r >= 0 && r < rows && typeof(a[cr]) == 'undefined') a[cr] = i++;
 +
else switch(courses[course++%courses.length]){case 'c+': c--; break; case 'r+': r--; break; case 'c-': c++; break; case 'r-': r++; break;}
 +
switch(courses[course%courses.length]){case 'c+': c++; break; case 'r+': r++; break; case 'c-': c--; break; case 'r-': r--; break;}
 +
}
 +
return a;
 +
}});
 +
Sliderman.order({name: 'snake', method: function(e){
 +
var cols = e.cols, rows = e.rows, road = e.road, count = e.count;
 +
var a = [], i = 0, c = 0, r = 0, cl = cols - 1, rl = rows - 1, il = count - 1, cr;
 +
var courses, course = 0;
 +
switch(road){
 +
case 'BL': c = cl; r = 0; courses = ['r+', 'c-', 'r-', 'c-']; break;
 +
case 'RT': c = 0; r = rl; courses = ['c+', 'r-', 'c-', 'r-']; break;
 +
case 'TL': c = cl; r = rl; courses = ['r-', 'c-', 'r+', 'c-']; break;
 +
case 'LT': c = cl; r = rl; courses = ['c-', 'r-', 'c+', 'r-']; break;
 +
case 'BR': c = 0; r = 0; courses = ['r+', 'c+', 'r-', 'c+']; break;
 +
case 'LB': c = cl; r = 0; courses = ['c-', 'r+', 'c+', 'r+']; break;
 +
case 'TR': c = 0; r = rl; courses = ['r-', 'c+', 'r+', 'c+']; break;
 +
default: c = 0; r = 0; courses = ['c+', 'r+', 'c-', 'r+']; break;//'RB'
 +
}
 +
i = 0;
 +
while(i < count){cr = r+','+c;
 +
if(c >= 0 && c < cols && r >= 0 && r < rows && typeof(a[cr]) == 'undefined'){a[cr] = i++;
 +
switch(courses[course%courses.length]){case 'c+': c++; break; case 'r+': r++; break; case 'c-': c--; break; case 'r-': r--; break;}
 +
}
 +
else{
 +
switch(courses[course++%courses.length]){case 'c+': c--; break; case 'r+': r--; break; case 'c-': c++; break; case 'r-': r++; break;}
 +
switch(courses[course++%courses.length]){case 'c+': c++; break; case 'r+': r++; break; case 'c-': c--; break; case 'r-': r--; break;}
 +
}
 +
}
 +
return a;
 +
}});
 +
Sliderman.order({name: 'straight_stairs', method: function(e){
 +
var cols = e.cols, rows = e.rows, road = e.road, count = e.count;
 +
var a = [], i = 0, c = 0, r = 0, cl = cols - 1, rl = rows - 1, il = count - 1, cr;
 +
switch(road){
 +
case 'BL': case 'TR': case 'TL': case 'BR': var C = 0, R = 0; break;
 +
case 'LB': case 'RT': case 'LT': case 'RB': default: road = 'RB'; var C = cl, R = 0; break;
 +
}
 +
c = C; r = R;
 +
while(i < count){cr = r+','+c;
 +
if(road.indexOf('T') == 1 || road.indexOf('R') == 1) a[cr] = il - i++;
 +
else a[cr] = i++;
 +
switch(road){
 +
case 'BL': case 'TR': c--; r++; break;
 +
case 'TL': case 'BR': c++; r--; break;
 +
case 'LB': case 'RT': c--; r--; break;
 +
case 'RB': case 'LT': default: c++; r++; break;
 +
}
 +
if(c < 0 || r < 0 || c > cl || r > rl){
 +
switch(road){
 +
case 'BL': case 'TR': C++; break;
 +
case 'LB': case 'RT': case 'TL': case 'BR': R++; break;
 +
case 'RB': case 'LT': default: C--; break;
 +
}
 +
if(C < 0 || R < 0 || C > cl || R > rl){
 +
switch(road){
 +
case 'BL': case 'TR': C = cl; R++; break;
 +
case 'TL': case 'BR': R = rl; C++; break;
 +
case 'LB': case 'RT': R = rl; C--; break;
 +
case 'RB': case 'LT': default: C = 0; R++; break;
 +
}
 +
if(R > rl) R = rl; else if(R < 0) R = 0; else if(C > cl) C = cl; else if(C < 0) C = 0;
 +
}
 +
r = R; c = C;
 +
}
 +
}
 +
return a;
 +
}});
 +
Sliderman.order({name: 'square', method: function(effect){
 +
var cols = effect.cols || 1, rows = effect.rows || 1, arr = [], i = 0, c, r, dc, dr, cr;
 +
dc = cols < rows ? (rows-cols)/2 : 0; dr = cols > rows ? (cols-rows)/2 : 0; cr = Math.round(Math.max(cols/2, rows/2)) + 1;
 +
for(c = 0; c < cols; c++) for(r = 0; r < rows; r++) arr[r+','+c] = cr - Math.min(c+1+dc, r+1+dr, cols-c+dc, rows-r+dr);
 +
return arr;
 +
}});
 +
Sliderman.order({name: 'rectangle', method: function(effect){
 +
var cols = effect.cols || 1, rows = effect.rows || 1, arr = [], i = 0, c, r, cr;
 +
cr = Math.round(Math.min(cols/2, rows/2)) + 1;
 +
for(c = 0; c < cols; c++) for(r = 0; r < rows; r++) arr[r+','+c] = cr - Math.min(c+1, r+1, cols-c, rows-r);
 +
return arr;
 +
}});
 +
Sliderman.order({name: 'random', method: function(effect){
 +
var a = [], tmp = [], r, c, i;
 +
for(r = 0; r < effect.rows; r++) for(c = 0; c < effect.cols; c++) tmp.push(r+','+c);
 +
tmp.sort(function(a,b){return Math.random() > 0.5;});
 +
for(i = 0; i < effect.count; i++) a[tmp[i]] = i;
 +
return a;
 +
}});
 +
Sliderman.order({
 +
name: 'circle', method: function(effect){
 +
  var cols = effect.cols || 1, rows = effect.rows || 1, arr = [], i = 0, c, r;
 +
  var hc = cols/2-0.5, hr = rows/2-0.5;
 +
for(c = 0; c < cols; c++) for(r = 0; r < rows; r++) arr[r+','+c] = Math.round(Math.sqrt(Math.pow(c-hc, 2)+Math.pow(r-hr, 2)));
 +
return arr;
 +
}
 +
});
 +
Sliderman.order({
 +
name: 'cross', method: function(effect){
 +
  var cols = effect.cols || 1, rows = effect.rows || 1, arr = [], i = 0, c, r;
 +
  var hc = cols/2-0.5, hr = rows/2-0.5;
 +
for(c = 0; c < cols; c++) for(r = 0; r < rows; r++) arr[r+','+c] = Math.round(Math.min(Math.abs(c-hc), Math.abs(r-hr)));
 +
return arr;
 +
}
 +
});
 +
Sliderman.order({
 +
name: 'rectangle_cross', method: function(effect){
 +
  var cols = effect.cols || 1, rows = effect.rows || 1, arr = [], i = 0, c, r;
 +
  var hc = cols/2-0.5, hr = rows/2-0.5, cr = Math.max(hc, hr)+1;
 +
for(c = 0; c < cols; c++) for(r = 0; r < rows; r++) arr[r+','+c] = Math.round(cr-Math.max(hc-Math.abs(c-hc), hr-Math.abs(r-hr)))-1;
 +
return arr;
 +
}
 +
});
 +
/* predefined effects */
 +
Sliderman.effect({name: 'fade', fade: true, duration: 400});
 +
Sliderman.effect({name: 'move', left: true, move: true, duration: 400});
 +
Sliderman.effect({name: 'stairs', cols: 7, rows: 5, delay: 30, order: 'straight_stairs', road: 'BL', fade: true});
 +
Sliderman.effect({name: 'blinds', cols: 10, delay: 100, duration: 400, order: 'straight', right: true, zoom: true, fade: true});
 +
Sliderman.effect({name: 'rain', cols: 10, delay: 100, duration: 400, order: 'straight', top: true, fade: true});
 +
 
 +
</script>
</HTML>
</HTML>

Revision as of 23:07, 17 June 2013