/*
	Terrapin Station Winery scripts
	Developed by Saforian
*/


// Check for IE 5.5 or 6.0
var isIE = 
	(document.getElementById && navigator.platform == "Win32" && 
	navigator.appName == "Microsoft Internet Explorer" &&
	(navigator.userAgent.indexOf("MSIE 5.5") >= 0 || navigator.userAgent.indexOf("MSIE 6.") >= 0));



/* --- Popup window functions --- */

// Fixed popup window
function popup(URL, width, height) {
	popWin = window.open(URL, "popWin", "width=" + width + ",height=" + height + ",resizable=0,scrollbars=0,location=0,toolbar=0");
	popWin.focus();
	return false;
}

// Resizable and scrollable popup window
function popupResize(URL, width, height) {
	popWin = window.open(URL, "popWin", "width=" + width + ",height=" + height + ",resizable=1,scrollbars=1,location=0,toolbar=0");
	popWin.focus();
	return false;
}


/* --- Display enhancements --- */

// Scrolling content
var scrollTimer; // Scrolling timer
var isscrolling = null; // Direction currently scrolling
var ismousewheel = false;

// Scroll the content with increasing pixel amount
function scroll(direction, scrollamount) {

	// Changing direction?
	if (isscrolling != null && isscrolling != direction)
		stopscroll();


	var loop = true;

	// Set default scroll speed
	if (!scrollamount) scrollamount = 10;


	/* Move content's scroll area */

	// Get current top and set to 0 if not defined
	var currentTop = parseInt(document.getElementById("scroll").style.top);
	if (isNaN(currentTop)) currentTop = 0;

	// Get height of provided text and content box
	var contentHeight = parseInt(document.getElementById("scroll").offsetHeight);
	var boxHeight = parseInt(document.getElementById("scrollwrapper").offsetHeight);


	// Check for post-render resizing where scrolling not needed
	if (contentHeight <= boxHeight) {

		// Remove DHTML scrollbar
		document.getElementById("scroller").style.display = "none";

		// Make content auto-scroll again
		document.getElementById("scrollwrapper").style.overflow = "auto";

		stopscroll();
		return false;
	}


	// Change scroll images
	if (direction == "down" && $("#scrolldown IMG").src().indexOf("on.gif") == -1)
			$("#scrolldown IMG").src("/images/scroll_down_on.gif");

	else if (direction == "up" && $("#scrollup IMG").src().indexOf("on.gif") == -1)
		$("#scrollup IMG").src("/images/scroll_up_on.gif");



	// Increase/decrease top
	var newTop = (direction == "down") ? currentTop-scrollamount : currentTop+scrollamount;

	// Set min and max
	if (newTop >= 0) {
		// End at the exact top
		newTop = 0;
		loop = false;

	} else if (newTop <= -contentHeight + boxHeight) {
		// End at the exact bottom
		newTop = -contentHeight + boxHeight;
		loop = false;
	}

	// Set new conent top
	document.getElementById("scroll").style.top = newTop + "px";


	/* Move scroller marker */
	var marker = document.getElementById("marker");

	// Get percent of how much the page has scrolled
	var topPercent = -newTop / (contentHeight-boxHeight);

	// Height of center vertical line with padding
	var lineHeight = 79;

	// Move marker (24px is absolute positioned top)
	var newMarkerTop = Math.round(topPercent * (lineHeight-marker.offsetHeight) + 24);
	marker.style.top = newMarkerTop + "px";

	// Slide marker left to align with line
	if (newMarkerTop < 36)
		newMarkerLeft = 0;
	else if (newMarkerTop < 47)
		newMarkerLeft = 1;
	else if (newMarkerTop < 78)
		newMarkerLeft = 2;
	else if (newMarkerTop < 85)
		newMarkerLeft = 1;
	else
		newMarkerLeft = 0;

	marker.style.left = (newMarkerLeft + 4) + "px";


	/* Show Gradients */

	// Show top fader if not at top
	document.getElementById("topfader").style.display = (newTop > -2) ? "none" : "block";

	// Show bottom fader if not at bottom
	document.getElementById("bottomfader").style.display = (newTop < -contentHeight + boxHeight + 2) ? "none" : "block";


	// Persistant/global direction flag
	isscrolling = direction;


	/* Loop and accelerate movement amount */
	if (ismousewheel)
		// Don't continue if scroll wheel
		stopscroll();

	else if (loop)
		scrollTimer = setTimeout('scroll("' + direction + '", ' + (scrollamount+1) + ')', 15);


	return false;
}


// Stop scrolling
function stopscroll() {
	clearInterval(scrollTimer);

	ismousewheel = false;
	isscrolling = null;

	$("#scrollup IMG").src("/images/scroll_up.gif");
	$("#scrolldown IMG").src("/images/scroll_down.gif");
}



// Initialize DHTML scrolling area for content
function createScroll() {

	// Check that content elements have been rendered
	// Doesn't work on IE/Mac
	if (!document.getElementById("content") || !document.getElementById("scrollwrapper") || !document.getElementById("scroll") || 
		(navigator.appName == "Microsoft Internet Explorer" && navigator.platform.indexOf("Mac") >= 0)) return;

	// Get height of provided text and content box
	var contentheight = parseInt(document.getElementById("scroll").offsetHeight);
	var boxheight = parseInt(document.getElementById("scrollwrapper").offsetHeight);

	// Don't show graphic scrollbars if content is shorter than area (plus first offset)
	if (contentheight <= boxheight) {
		document.getElementById("scrollwrapper").style.overflow = "auto"; // Undo Safari hiding fix
		return;
	}

	var scrollbar, dirlink, dirimage;

	// Set overflow to hidden (remove browser scrollbar)
	document.getElementById("scrollwrapper").style.overflow = "hidden";

	// Add placeholder margin for scrollbar to prevent content reflow
	document.getElementById("scroll").style.marginRight = "17px";


	// Create graphical scrollbar in DOM
	var scrollbar = document.createElement("div");
	scrollbar.id = "scroller";

	// Up
	dirlink = document.createElement("a");
	dirlink.href = "#";
	dirlink.id = "scrollup";
	dirlink.onclick = function() { return false; };
	dirlink.onmousedown = function() { scroll('up'); };
	dirlink.onkeydown = function(e) { 
		var keycode;

		if (window.event) // IE
			keycode = event.keyCode;
		else if (e.which) // Others
			keycode = e.which;

		// Only allow space and enter
		if (keycode == 13 || keycode == 32)
			scroll('up');
	};
	dirlink.onmouseup = stopscroll;
	dirlink.onkeyup = stopscroll;

	dirimage = document.createElement("img");
	dirimage.src = "/images/scroll_up.gif";
	dirimage.alt = "Scroll Up";

	dirlink.appendChild(dirimage);
	scrollbar.appendChild(dirlink);


	// Scroll line
	dirimage = document.createElement("img");
	dirimage.src = "/images/scroll_line.gif";
	dirimage.alt = "";
	scrollbar.appendChild(dirimage);

	// Scroll marker (use filter for IE)
	if (isIE) {
		dirimage = document.createElement("div");
		dirimage.id = "marker";
		dirimage.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='/images/scroll_marker.png', sizing='scale')"
		dirimage.style.width = "11px";
		dirimage.style.height = "7px";
	} else {
		dirimage = document.createElement("img");
		dirimage.id = "marker";
		dirimage.src = "/images/scroll_marker.png";
		dirimage.alt = "";
	}
	scrollbar.appendChild(dirimage);


	// Down
	dirlink = document.createElement("a");
	dirlink.href = "#";
	dirlink.id = "scrolldown";
	dirlink.onclick = function() { return false; };
	dirlink.onmousedown = function() { scroll('down'); };
	dirlink.onkeydown = function(e) {
		var keycode;

		if (window.event) // IE
			keycode = event.keyCode;
		else if (e.which) // Others
			keycode = e.which;

		// Only allow space and enter
		if (keycode == 13 || keycode == 32)
			scroll('down');
	};
	dirlink.onmouseup = stopscroll;
	dirlink.onkeyup = stopscroll;

	dirimage = document.createElement("img");
	dirimage.src = "/images/scroll_down.gif";
	dirimage.alt = "Scroll Down";

	dirlink.appendChild(dirimage);
	scrollbar.appendChild(dirlink);


	// Insert scrollbars into DOM
	document.getElementById("content").insertBefore(scrollbar, document.getElementById("scrollwrapper"));


	// Create gradients to fade top and bottom edges of content
	var topfader = document.createElement("div");
	topfader.id = "topfader";
	document.getElementById("content").appendChild(topfader);

	var bottomfader = document.createElement("div");
	bottomfader.id = "bottomfader";
	bottomfader.style.display = "block";  // Show bottom gradient since at top of content
	document.getElementById("content").appendChild(bottomfader);



	// Scrollwheel support
	$("#scroll").mousewheel(function(event, delta){
		if (delta > 0) {
			ismousewheel = true;
			scroll('up', 30);
		} else if (delta < 0) {
			ismousewheel = true;
			scroll('down', 30);
		}
	});


	// Up and Down arrows (Safari will double-fire events)
	if (!$.browser.safari)
		$(document)
			.keyup(function(e){
				var keycode;

				if (window.event) // IE
					keycode = event.keyCode;
				else if (e.which) // Others
					keycode = e.which;

				if (keycode == 38 || keycode == 40) {
					stopscroll();
				}
			})
			.keydown(function(e){ 
				var keycode;

				if (window.event) // IE
					keycode = event.keyCode;
				else if (e.which) // Others
					keycode = e.which;
	
				// Only allow up and down
				if (keycode == 38) {
					scroll('up');
				} else if (keycode == 40) {
					scroll('down');
				}
			});

}

// Fix Safari double-arrow key catch
function catchkey(e) {
	debug(e.type+":"+e.keyCode);
	e.stopPropagation();
}


// Open external links in new windows
function targetLinks() {

	$("a").each(function(){

		// If external link
		if (this.getAttribute('href') != null && 
			this.getAttribute('href').indexOf("://") >= 0 && 
			this.getAttribute('href').toUpperCase().indexOf(document.domain.toUpperCase()) == -1) {
				this.target = "_blank";
		}

	});
}


// IE PNG support
function pngImages() {
	// Inline image PNG transparency for IE (derived from youngpup.net)
	for (var i = document.images.length - 1, img = null; (img = document.images[i]); i--)
		if (img.src.match(/\.png$/i) != null) {
			var src = img.src;
			var div = document.createElement("DIV");

			div.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "', sizing='scale')"
			div.style.width = img.width + "px";
			div.style.height = img.height + "px";
			div.id = img.id;
			div.className = img.className;
			img.replaceNode(div);
		}
}


/* --- Initialize page --- */

$(document).ready(function(){

	// Fix Safari double-arrow key catch, and to clear internal scrollbar properly
	if ($.browser.safari) {
		$("#scrollwrapper").css("overflow", "hidden");
	}

	// Alternate data table row colors
	$("table.data tr:nth-child(odd)").not(".data-even",".data-odd").addClass("data-odd");

	createScroll();
	targetLinks();

	// IE 5.5 or 6 PNG image support
	if (isIE) pngImages();

});
