window.wad = (function(w, d){
	function $id(id) {
		return d.getElementById(id);
	};

	function $class(className, tag) {
		if (this.getElementsByClassName) {
			return this.getElementsByClassName(className);
		}
		if (!tag)
			tag = '*';
		var results = [];
		var elements = this.getElementsByTagName(tag);
		className = new RegExp('(?:^|\\s)'+className+'(?:\\s|$)');
		for (var i = 0; i < elements.length; i++) {
			if (className.test(elements[i].className)) {
				results.push(elements[i]);
			}
		}
		return results;
	};

	function preventDefault(event) {
		event = event || w.event;
		if (event && event.preventDefault)
			event.preventDefault();
		return false;
	};

	return {
		setupCases: function() {
			var
				domCases = $id('cases'),
				domPreview = $id('casePreviews'),
				domClose = $id('caseClose'),
				domCurrent = $id('caseCurrent'),
				cases = $class.call(domPreview, 'case', 'div'),
				caseIndex = 0;

			domPreview.style.width = cases.length*170 + 'px';
			domPreview = domPreview.parentNode;

			// setup the scroller
			(function() {
				var
					domPrev = $id('casePrev'),
					domNext = $id('caseNext'),
					fx = new secoya.fx({
						from: 0,
						to: 0,
						duration: 0.7,
						type: secoya.fx.power,
						callback: function(x) {
							domPreview.scrollLeft = x;
						}
					});
				function slide() {
					if (fx.running || true) {
						fx.resetToEnd();
						$id('caseShow').onclick();
					}
					fx.from = domPreview.scrollLeft;
					fx.to = caseIndex*domPreview.clientWidth;
					fx.start();
				};

				domPrev.ignore = domNext.ignore = true;
				domPrev.onclick = function(event) {
					caseIndex = Math.max(caseIndex - 1, 0);
					slide();
					return preventDefault(event);
				};
				domNext.onclick = function(event) {
					caseIndex = Math.max(Math.min(caseIndex + 1, cases.length-1), 0);
					slide();
					return preventDefault(event);
				};
			})();

			// setup "show case"
			(function(){
				var
					domShow = $id('caseShow'),
					domPosition = $id('caseTitle').getElementsByTagName('h5');
				var lastCase = -1;
				domShow.onclick = function(event) {
					if (lastCase != caseIndex) {
						if (lastCase != -1) {
							while (domCurrent.firstChild) {
								cases[lastCase].appendChild(domCurrent.firstChild);
							}
						}
						var i = 0, nodes = cases[caseIndex].childNodes;
						while (i < nodes.length) {
							if (nodes[i].nodeType == 1) {
								if (nodes[i].className != 'preview') {
									domCurrent.appendChild(nodes[i]);
								} else {
									i++;
								}
							} else {
								nodes[i].parentNode.removeChild(nodes[i]);
							}
						}
						lastCase = caseIndex;
						cases[lastCase];
						if (!w.core && domPosition.length && domPosition[0].firstChild) {
							domPosition[0].firstChild.nodeValue = domPosition[0].firstChild.nodeValue.replace(/[0-9]+(\s*\/\s*)[0-9]+/, function(a,l){
								return caseIndex+1+l+cases.length;
							});
						}
						wad.resizeBackground();
					}
					return preventDefault(event);
				};
				domShow.ignore = true;
				var previews = $class.call(domCases, 'preview', 'div');
				for (var i = 0; i < previews.length; i++) {
					var img = previews[i].getElementsByTagName('img')[0];
					if (img) {
						img.onclick = domShow.onclick;
					}
				}
				// show first item
				if (cases.length) {
					domShow.onclick();
				}
			})();

			// setup scroller
			(function(){
				if (!w.core) {
					var img = domCurrent.getElementsByTagName('img');
					function move(event) {
						event = event || w.event;
						var
							ow = domCurrent.offsetWidth,
							oh = domCurrent.offsetHeight,
							sw = domCurrent.scrollWidth,
							sh = domCurrent.scrollHeight,
							x = (event.clientX || event.x) / ow,
							y = (event.clientY || event.y) / oh,
							s = img[0].style;
						s.marginLeft = '-' + (s.paddingRight = Math.round(x*(sw-ow))+'px');
						s.marginTop  = '-' + (s.paddingBottom = Math.round(y*(sh-oh))+'px');
					};
					if (d.addEventListener) {
//						d.addEventListener('mousemove', move, true);
					} else if (d.attachEvent) {
//						d.attachEvent('onmousemove', move);
					}
				}
			})();

			if (!w.core) {
				(function(){
					var
						bottom = 50,
						top = 490,
						timeout = 0,
						open = true,
						fx = new secoya.fx({
							from: 0,
							to: 0,
							duration: 0.5,
							type: secoya.fx.power,
							callback: function(x) {
								domCases.style.height = x+'px';
							},
							finish: function() {
								if (open) {
									domCases.style.overflow = '';
								}
							}
						});
					domCases.onmouseover = function() {
						if (!open) {
							if (fx.running) {
								fx.kill();
								fx.from = parseInt(domCases.style.height, 10);
							} else {
								fx.from = bottom;
							}
							fx.to = top;
							fx.start();
							open = true;
						}
						clearTimeout(timeout);
					};
					domCases.onmouseout = function() {
						timeout = setTimeout(function(){
							open = false;
							if (fx.running) {
								fx.kill();
								fx.from = parseInt(domCases.style.height, 10);
							} else {
								fx.from = top;
							}
							domCases.style.overflow = 'hidden';
							fx.to = bottom;
							fx.start();
						}, 3000);
					};
					timeout = setTimeout(domCases.onmouseout, 4000);
				})();
			}
		},
		resizeBackground: (function(){
			function getWidth(img) {
				var result = img.naturalWidth;
				if (!result) {
					result = img.width;
				}
				return result;
			};
			function getHeight(img) {
				var result = img.naturalHeight;
				if (!result) {
					result = img.height;
				}
				return result;
			};
			function resize(img, maxWidth, maxHeight) {
				img.style.height = img.style.width = 'auto';
				var
					width = getWidth(img),
					height = getHeight(img),
					windowRatio = maxWidth / maxHeight,
					imageRatio = width / height;
				if (windowRatio > imageRatio) {
					height = maxWidth * (height / width);
					width = maxWidth;
				} else {
					height = maxHeight;
					width = maxHeight * imageRatio;
				}
				img.style.width = width + 'px';
				img.style.height = height + 'px';
				
			};
			var resizeBackground = function(){
				var a = ['background', 'caseCurrent'];
				for (var index = 0; index < a.length; index++) {
					var b = $id(a[index]);
					if (b) {
						var
							imgs = b.getElementsByTagName('img'),
							w = d.documentElement.clientWidth,
							h = d.documentElement.clientHeight;
						for (i = 0; i < imgs.length; i++) {
							if (!imgs[i].complete) {
								imgs[i].onload = resizeBackground;
								lightCore.setOpacity(imgs[i], 0);
							} else {
								lightCore.clearOpacity(imgs[i]);
							}
							resize(imgs[i], w, h);
						}
					}
				}
			};
			if (d.addEventListener) {
				w.addEventListener('resize', resizeBackground, false);
				d.addEventListener('load', resizeBackground, true);
				d.addEventListener('DOMContentLoaded', resizeBackground, true);
			} else if (d.attachEvent) {
				w.attachEvent('onresize', resizeBackground);
				d.attachEvent('onload', resizeBackground);
			}
			return resizeBackground;
		})()
	};
})(window, document);
