var $j = jQuery;

/* inputPrompt */
$j.fn.inputPrompt = function(options) {
	var defaults = {
		activeColor:'#000000',
		inactiveColor:'#999999'
	};

	var opts = $j.extend(defaults, options);
	if ( ! 'prompt' in opts)
		return false;

	var input = $(this);

	input.val(opts.prompt);
	input.addClass('inputprompt-off');
	//input.css({color:opts.inactiveColor});

	input.focus(function() {
		if (input.val() == opts.prompt)
		 input.val('');

		//input.css({color:opts.activeColor});
		input.removeClass('inputprompt-off').addClass('inputprompt-on');
	});

	input.blur(function() {
		if (input.val() == '')
		 input.val(opts.prompt);

		//input.css({color:opts.inactiveColor});
		input.removeClass('inputprompt-on').addClass('inputprompt-off');
	});
}

/* Generic function to open a popup window, with defaults */
function popup(url, height, width) {
	height = (height == null) ? 600 : height;
	width = (width == null) ? 525 : width;
	window.open(url, 'window','width=' + width + ',height=' + height + ',scrollbars=yes,resizable=1');
	return false;
}

/* detail zoom */
function enableZoom(element) {
	if (element == undefined) element = 'a#jblink';
	$j(element).jqzoom({
		zoomWidth: 200,
		zoomHeight: 200, 
		xOffset: 10,
		yOffset: 0,
		title: false,
		position: "right",
		preloadImages: false
	});
}

/* scroll widget */
$j.fn.scrollWidget = function() {
	$(this).find('ul li').hover(function() {
		$(this).find('a.scr-txtlink').animate({
		 marginBottom:'-20px'
		},
		200);
		$j('p#' + this.id + '-desc').insertAfter("#scroll-widget ul");
	},
	function() {
		$(this).find('a.scr-txtlink').animate({
		 marginBottom:'0'
		},
		200);
	});
}

function alternate(div_1, div_2) {
	$j('#' + div_1).toggle();
	$j('#' + div_2).toggle();
}

function fmtShippingCost(cost) {
	if (cost == 0) return 'FREE';
	else return '$' + (cost/100);
}

// read a cookie by name
function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		for (var j=0; c.charAt(j)==' '; ) j++;
		if (c.indexOf(nameEQ,j) == j) return c.substring(nameEQ.length+j);
	}
	return null;
}

function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function eraseCookie(name) {
	createCookie(name,"",-1);
}

// decode a URL encoded string
function url_decode(str) {
	 return unescape(str.replace(/\+/g, " "));
}

// decode a base64 encoded string
function base64_decode(input) {
	var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
	var output = "";
	var chr1, chr2, chr3;
	var enc1, enc2, enc3, enc4;
	var i = 0;
 
	input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
 
	while (i < input.length) {
 
		enc1 = keyStr.indexOf(input.charAt(i++));
		enc2 = keyStr.indexOf(input.charAt(i++));
		enc3 = keyStr.indexOf(input.charAt(i++));
		enc4 = keyStr.indexOf(input.charAt(i++));
 
		chr1 = (enc1 << 2) | (enc2 >> 4);
		chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
		chr3 = ((enc3 & 3) << 6) | enc4;
 
		output = output + String.fromCharCode(chr1);
 
		if (enc3 != 64) {
		output = output + String.fromCharCode(chr2);
		}
		if (enc4 != 64) {
		output = output + String.fromCharCode(chr3);
		}
 
	}
 
	return output;
}

function loginMsg(settings) {
	if ( ! settings.baseurl_ssl)
		return false;

	if ( ! settings.loginphrase)
		settings.loginphrase = 'Log In';

	if ( ! settings.logoutphrase)
		settings.logoutphrase = 'Log Out';

	if ( ! settings.registerphrase)
		settings.registerphrase = 'Register';

	if ( ! settings.accountphrase)
		settings.accountphrase = 'Your Account';

	if ( ! settings.compact)
		settings.compact = false;

	if ( ! settings.login_url)
		settings.login_url = settings.baseurl_ssl + '/cust';

	if ( ! settings.logout_url)
		settings.logout_url = '/cust/logout';

	if ( ! settings.register_url)
		settings.register_url = settings.baseurl_ssl + '/cust/register';

	if ( ! settings.use_separate_elements)
		settings.use_separate_elements = false;

	var lin = readCookie('lin');
	if ( ! lin) {
		var login_link = '<a href="' + settings.login_url + '">' + settings.loginphrase + '</a>';
		if (settings.use_separate_elements) {
			document.getElementById(settings.login_element).innerHTML= login_link;
			document.getElementById(settings.register_element).innerHTML= '<a href="' + settings.register_url + '">' + settings.registerphrase + '</a>';
		} else if (settings.compact) {
			var currentLinks = document.getElementById('toplinks2');
			currentLinks.innerHTML = login_link + ' <span id="signin-or">or</span> <a href="' + settings.register_url + '">' + settings.registerphrase + '</a> | ' + currentLinks.innerHTML;
		} else {
			document.getElementById('usermsg').innerHTML = login_link + ' | <a href="' + settings.baseurl_ssl + '/cust">' + settings.accountphrase + '</a>';
		}
		return false;
	}

	lin = base64_decode(url_decode(lin)).split('\t');
	if ( ! lin[0])
		return false;

	if (settings.use_separate_elements) {
		document.getElementById(settings.welcome_element).innerHTML = '<span>Welcome, ' + lin[0] + '</span>';
		document.getElementById(settings.logout_element).innerHTML = '<a href="' + settings.logout_url + '">' + settings.logoutphrase + '</a>';
		if (settings.not_me_link_element) {
			document.getElementById(settings.not_me_link_element).innerHTML = '<span>(<a id="signin-not-me" href="' + settings.logout_url + '">Not ' + lin[0] + '</a>?)</span>';
		}
		if (settings.account_element) {
			document.getElementById(settings.account_element).innerHTML = '<a href="' + settings.baseurl_ssl + '/cust">' + settings.accountphrase + '</a>';
		}
	} else {
		var helloMsg = '<span>Hello, ' + lin[0] + '. <a href="' + settings.logout_url + '">' + settings.logoutphrase + '</a>. (<a id="signin-not-me" href="' + settings.logout_url + '">Not ' + lin[0] + '</a>?)</span>';
		if ( ! settings.compact)
			helloMsg = helloMsg + ' | <a href="' + settings.baseurl_ssl + '/cust">' + settings.accountphrase + '</a>';

		document.getElementById('usermsg').innerHTML = helloMsg;
	}
	return true;
}

function setCartItemCount(element, singular, plural, isRecursive) {
	var crtqty = readCookie('sbcrt');
	if (!crtqty) {
		if (isRecursive) return;

		$j.get("/cart/count_items",
			function(data) {
				var jsonData = eval('(' + data + ')');
				var expdat = new Date();
				expdat.setDate(expdat.getDate()+7);
				var cookieVal = "sbcrt=" + jsonData.cart_qty +
					"; expires=" + expdat.toGMTString() +
					((jsonData.domain == undefined) ? "" : "; domain=" + jsonData.domain);
				document.cookie = cookieVal;
				setCartItemCount(element, singular, plural, true);
			},
			"json");
		return;
	}

	var cartItemsText = crtqty + " " + ((crtqty != 1) ? plural : singular);
	document.getElementById(element).innerHTML = cartItemsText;
}

//Function to pick up current url parameters returns hash 
function getUrlVars() {
	var map = {};
	var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) {
		map[key] = value;
	});
	return map;
}

//function to add functions to existing body onload event so that you don't overwrite existing functions
function AddOnload(myfunc) {
	if(window.addEventListener)
		window.addEventListener('load', myfunc, false);
	else if(window.attachEvent)
		window.attachEvent('onload', myfunc);
}

/*
	Developed by Robert Nyman, http://www.robertnyman.com
	Code/licensing: http://code.google.com/p/getelementsbyclassname/
*/
var getElementsByClassName = function (className, tag, elm){
	if (document.getElementsByClassName) {
		getElementsByClassName = function (className, tag, elm) {
			elm = elm || document;
			var elements = elm.getElementsByClassName(className),
				nodeName = (tag)? new RegExp("\\b" + tag + "\\b", "i") : null,
				returnElements = [],
				current;
			for(var i=0, il=elements.length; i<il; i+=1){
				current = elements[i];
				if(!nodeName || nodeName.test(current.nodeName)) {
					returnElements.push(current);
				}
			}
			return returnElements;
		};
	}
	else if (document.evaluate) {
		getElementsByClassName = function (className, tag, elm) {
			tag = tag || "*";
			elm = elm || document;
			var classes = className.split(" "),
				classesToCheck = "",
				xhtmlNamespace = "http://www.w3.org/1999/xhtml",
				namespaceResolver = (document.documentElement.namespaceURI === xhtmlNamespace)? xhtmlNamespace : null,
				returnElements = [],
				elements,
				node;
			for(var j=0, jl=classes.length; j<jl; j+=1){
				classesToCheck += "[contains(concat(' ', @class, ' '), ' " + classes[j] + " ')]";
			}
			try {
				elements = document.evaluate(".//" + tag + classesToCheck, elm, namespaceResolver, 0, null);
			}
			catch (e) {
				elements = document.evaluate(".//" + tag + classesToCheck, elm, null, 0, null);
			}
			while ((node = elements.iterateNext())) {
				returnElements.push(node);
			}
			return returnElements;
		};
	}
	else {
		getElementsByClassName = function (className, tag, elm) {
			tag = tag || "*";
			elm = elm || document;
			var classes = className.split(" "),
				classesToCheck = [],
				elements = (tag === "*" && elm.all)? elm.all : elm.getElementsByTagName(tag),
				current,
				returnElements = [],
				match;
			for(var k=0, kl=classes.length; k<kl; k+=1){
				classesToCheck.push(new RegExp("(^|\\s)" + classes[k] + "(\\s|$)"));
			}
			for(var l=0, ll=elements.length; l<ll; l+=1){
				current = elements[l];
				match = false;
				for(var m=0, ml=classesToCheck.length; m<ml; m+=1){
					match = classesToCheck[m].test(current.className);
					if (!match) {
						break;
					}
				}
				if (match) {
					returnElements.push(current);
				}
			}
			return returnElements;
		};
	}
	return getElementsByClassName(className, tag, elm);
};

(function($) {
	$.fn.tabwidget = function(options) {
		var widget = $(this);

		var headings = $('.tabwidget-pane > a.tabwidget-title');
		var panes = $('.tabwidget-pane');

		if (headings.length != panes.length)
		 return false;

		widget.prepend('<ul class="tabwidget-tabs clearfix"></ul>');
		var tabs = $(this).find('ul.tabwidget-tabs');

		var selected_tab = false;
		var hash = document.location.hash.substring(1);
		if (hash) {
		 hash = hash.split(':');
		 selected_tab = hash[0];
		 selected_res = hash[1];
		}

		for (i = 0; i < panes.length; i++) {
		 var badge = '';

		 /* --- Temporary --- */
		 if ($(headings[i]).attr('title') == 'Customer Photos')
			badge = '<img style="position: absolute; right: -14px; top: -16px;" src="/images/new_badge.png">';
		 /* --- /Temporary --- */

		 tabs.append('<li><a href="#' + $(headings[i]).attr('name') + '">' + $(headings[i]).attr('title') + '</a>' + badge + '</li>');
		 panes[i].id = 'tabwidget-pane-' + $(headings[i]).attr('name');
		}

		tabs.find('a').click(function() {
		 widget.find('.tabwidget-pane').css({display:'none'});
		 var anchor = $(this).attr('href').replace(/(.*)#/, '');
		 widget.find('div[id*=tabwidget-pane-' + anchor + ']').css({display:'block'});
		 tabs.find('li.selected').removeClass('selected');
		 $(this).parent('li').addClass('selected');
		 return false;
		});


		if (selected_tab)
		 tabs.find('a[href*=#' + selected_tab + ']').click();
		else
		 tabs.find('a:first').click();
	};
})(jQuery);

/* ftab1 : Featured widget */
(function ($) {
	$.fn.ftab1 = function(container) {
		var widget = $(this);
		widget.find('div.ftab1-pane').hide();

		widget.append('<ul></ul>');
		var numbers = widget.find('ul');
		var panes = widget.find('.ftab1-pane');
		for (i = 1; i <= panes.length; i++) {
		 numbers.append('<li><a href="#ftab1-pane' + i + '">' + i + '</a></li>');
		}

		numbers.find('li:first').addClass('active');
		widget.find('div.ftab1-pane:first').show();

		numbers.find('a').click(function() {
		 widget.find('div.ftab1-pane').hide();
		 widget.find('li.active').removeClass('active');
		 var anchor = $(this).attr('href').replace(/(.*)#/, '');
		 widget.find('div#' + anchor).fadeIn();
		 $(this).parent('li').addClass('active'); /* meh...*/
		 return false;
		});

		autoPlay = function() {
		 var number_li = widget.find('ul li');
		 if ((number_li.length - 1) == number_li.index(number_li.filter('.active'))) {
			number_li.filter(':first').find('a').click();
		 } else {
			number_li.filter('.active').next().find('a').click();
		 }
		 return true;
		};

/*
		var ftab1Auto = setInterval(autoPlay, 4000);

		widget.hover(function() {
		 clearInterval(ftab1Auto);
		}, function() {
		 ftab1Auto = setInterval(autoPlay, 4000);
		});
*/
	};
})(jQuery);
