// SeanMart.com Javascript

var SM_note = {
	obj: null,
	orig: '',
	text: '',
	
	init: function() {
		var nav = DOM.getClass('nav')[0];
		var caption = SM_note.obj = DOM.getClass(nav, 'caption')[0];
		if (!nav || !caption) {SM_note = null; return false;}
		
		SM_note.orig = DOM.innerHTML(caption);
		return true;
	},
	
	showCaption: function(text) {
		if (text && text.constructor == String) {SM_note.text = text;}
		if (SM_note.text != '') {DOM.innerHTML(SM_note.obj, SM_note.text);}
		return false;
	},
	
	hideCaption: function() {
		DOM.innerHTML(SM_note.obj, SM_note.orig);
		return false;
	}
};

var SM_shade = {
	obj: null,
	
	init: function() {
		var shade = SM_shade.obj = DOM.create('div', {'class': 'shade'});
		document.body.appendChild(shade);
		DOM.css(shade, 'height', (DOM.windowHeight() + DOM.scrollY()) + 'px');
		
		Evnt.add(window, 'scroll', SM_shade.resizeShade);
		Evnt.add(window, 'resize', SM_shade.resizeShade);
		return true;
	},
	
	resizeShade: function() {
		var h = DOM.windowHeight() + DOM.scrollY();
		if (h > parseInt(DOM.css(SM_shade.obj, 'height'))) {
			DOM.css(SM_shade.obj, 'height', h + 'px');
		}
		return true;
	},
	
	showShade: function() {
		DOM.setOpacity(SM_shade.obj, 0);
		DOM.css(SM_shade.obj, 'display', 'block');
		Effect.fade(SM_shade.obj, 0.25, 20, 0, 80);
		return false;
	},
	
	hideShade: function() {
		SM_shade.obj.onFadeFinish = function() {DOM.css(SM_shade.obj, 'display', 'none');};
		Effect.fade(SM_shade.obj, 0.25, 20, 80, 0);
		return false;
	}
};

var SM_overlay = {
	obj: null,
	buy: null,
	img: null,
	caption: null,
	thumb: null,
	
	init: function() {
		var overlay = SM_overlay.obj = DOM.create('div', {'class': 'overlay'}, '<div class="bar">' +
			'<a target="_blank" href="http://seanmetcalf.deviantart.com/store/" class="buy">prints</a>' +
			'<a href="" class="prev">prev</a><a href="" class="next">next</a>' +
			'<a href="http://www.addthis.com/bookmark.php?v=250" class="addthis_button">share</a>' +
			'<a href="index.php" class="close first">close</a></div>' +
			'<a href="" class="fullimg"><img /></a><div class="caption">SeanMart</div>');
		document.body.appendChild(overlay);
		
		SM_overlay.buy = DOM.getClass(overlay, 'buy')[0];
		Evnt.add(DOM.getClass(overlay, 'prev')[0], 'click', SM_overlay.prevImage);
		Evnt.add(DOM.getClass(overlay, 'next')[0], 'click', SM_overlay.nextImage);
		Evnt.add(DOM.getClass(overlay, 'close')[0], 'click', SM_overlay.hideOverlay);
		
		var img = SM_overlay.img = DOM.getTag(overlay, 'img')[0];
		Evnt.add(DOM.parent(img), 'click', SM_overlay.nextImage);
		SM_overlay.caption = DOM.getClass(overlay, 'caption')[0];
		
		if (SM_shade) {
			SM_shade.init();
		}
		return true;
	},
	
	hideOverlay: function() {
		DOM.css(SM_overlay.obj, 'display', 'none');
		if (SM_shade) {
			SM_shade.hideShade();
		}
		return false;
	},
	
	changeImage: function(thumb) {
		SM_overlay.thumb = thumb;
		DOM.attr(SM_overlay.img, 'src', thumb.fullimg.src);
		DOM.attr(SM_overlay.img, 'alt', thumb.caption);
		DOM.innerHTML(SM_overlay.caption, thumb.caption);
		
		var href = DOM.attr(thumb, 'href');
		DOM.attr(DOM.parent(SM_overlay.img), 'href', href);
		DOM.attr(SM_overlay.buy, 'href', href.replace('full', 'deviant'));
		if (addthis) {addthis.button('.addthis_button', {}, {url: href.replace('full', 'id'), title: thumb.caption});}
		return true;
	},
	
	prevImage: function() {
		if (SM_overlay.thumb) {
			var prev = DOM.prev(DOM.parent(SM_overlay.thumb));
			if (prev) {SM_overlay.changeImage(DOM.first(prev));}
		}
		return false;
	},
	
	nextImage: function() {
		if (SM_overlay.thumb) {
			var next = DOM.next(DOM.parent(SM_overlay.thumb));
			if (next) {SM_overlay.changeImage(DOM.first(next));}
		}
		return false;
	},
	
	loadImage: function() {
		DOM.css(SM_overlay.obj, 'height', DOM.windowHeight() + 'px');
		DOM.css(SM_overlay.obj, 'top', DOM.scrollY() + 'px');
		
		if (SM_shade) {
			SM_shade.obj.onFadeFinish = function() {DOM.css(SM_overlay.obj, 'display', 'block');};
			SM_shade.showShade();
		}
		SM_overlay.changeImage(this.thumb);
		return false;
	}
};

var SM_preview = {
	obj: null,
	
	init: function() {
		var preview = SM_preview.obj = DOM.getClass('preview')[0];
		if (!preview) {SM_preview = null; return false;}
		
		if (SM_overlay && SM_overlay.init()) {
			Evnt.add(preview, 'click', SM_overlay.loadImage);
		}
		return true;
	},
	
	changeImage: function(thumb) {
		SM_preview.obj.thumb = thumb;
		DOM.attr(DOM.first(SM_preview.obj), 'src', thumb.preview.src);
		DOM.attr(DOM.first(SM_preview.obj), 'alt', thumb.caption);
		
		DOM.attr(SM_preview.obj, 'href', DOM.attr(thumb, 'href'));
	},
	
	loadImage: function() {
		SM_preview.changeImage(this);
		
		if (SM_note) {SM_note.showCaption(this.caption);}
		return false;
	}
};

var SM_thumbs = {
	obj: null,
	
	init: function() {
		var thumbs = SM_thumbs.obj = DOM.getClass('thumbs')[0];
		if (!thumbs) {return false;}
		
		var a = DOM.getTag(thumbs, 'a');
		for (var i = 0; i < a.length; i++) {
			var img = DOM.getTag(a[i], 'img')[0];
			if (img) {
				a[i].thumb = a[i];
				a[i].preview = new Image();
				a[i].preview.src = DOM.attr(img, 'src').replace('thumbs', 'preview');
				a[i].fullimg = new Image();
				a[i].fullimg.src = a[i].preview.src.replace('preview', 'images');
				a[i].caption = DOM.attr(img, 'alt');
				
				if (SM_preview) {
					if (DOM.attr(DOM.first(SM_preview.obj), 'src') == a[i].preview.src) {
						SM_preview.obj.thumb = a[i];
					}
					Evnt.add(a[i], 'mouseover', SM_preview.loadImage);
					Evnt.add(a[i], 'focus', SM_preview.loadImage);
				}
				
				if (SM_overlay) {
					Evnt.add(a[i], 'click', SM_overlay.loadImage);
				}
			}
		}
		a = null;
		
		var thumbWidth = DOM.fullWidth(DOM.first(thumbs));
		var thumbHeight = DOM.fullHeight(DOM.first(thumbs));
		
		if (thumbHeight > thumbWidth && DOM.css(thumbs, 'display') != 'none') {
			var sb = DOM.create('div', {'class': 'scroll'}, '<a></a>');
			thumbs.appendChild(sb);
			var bar = DOM.first(sb);
			
			var boxHeight = parseInt(DOM.css(sb, 'height'));
			bar.scale = boxHeight / thumbHeight;
			var barHeight = Math.floor(boxHeight * bar.scale);
			DOM.css(bar, 'height', barHeight - 
				parseInt(DOM.css(bar, 'borderTopWidth')) - 
				parseInt(DOM.css(bar, 'borderBottomWidth')) + 'px');
			
			Drag.init(bar, null, 0, 0, 0, boxHeight - barHeight);
			bar.onDragStart = function() {DOM.css(bar, 'backgroundColor', DOM.css(bar, 'backgroundColor'));};
			bar.onDragEnd = function() {DOM.css(bar, 'backgroundColor', '');};
			bar.onDrag = function(nx, ny) {
				DOM.css(DOM.first(thumbs), 'top', Math.floor(ny / bar.scale) * -1 + 'px');
			};
			thumbs.onSlideFinish = function() {DOM.css(sb, 'display', 'block');}
			Effect.slide(thumbs, 'height', 1, 20, thumbHeight, boxHeight, 0.5);
		}
		
		if (SM_note) {
			Evnt.add(DOM.first(thumbs), 'mouseover', SM_note.showCaption);
			Evnt.add(DOM.first(thumbs), 'mouseout', SM_note.hideCaption);
		}
		return true
	}
};

Evnt.add(window, 'load', function() {
	SM_note.init();
	SM_preview.init();
	SM_thumbs.init();
});

