$j = jQuery.noConflict();

(function($) {	
	$.fn.round_corners = function(params) {
		params = $.extend({options: "all", outcolor: "", incolor: "", bordercolor: "", type: ""}, params);
		params.options = params.options.split(" ");

		var options = {tl: 0, tr: 0, bl: 0, br: 0};
		// check all options - set clearer options for any multiple options provided
		for (var x = 0; x<params.options.length; x++) {
			switch (params.options[x]) {
			case 'all': options.tl = 1; options.tr = 1; options.bl = 1; options.br = 1; break;
			case 'top': options.tl = 1; options.tr = 1; break;
			case 'bottom': options.bl = 1; options.br = 1; break;
			case 'left': options.tl = 1; options.bl = 1; break;
			case 'right': options.tr = 1; options.br = 1; break;
			case 'tl': options.tl = 1; break;
			case 'tr': options.tr = 1; break;
			case 'bl': options.bl = 1; break;
			case 'br': options.br = 1; break;
			}
		}
		params.options = options;
		var prefix = (params.bordercolor == '' ? 'r' : 'b'), style = '', first_style = '';
		var top_prefix = prefix, bottom_prefix = prefix
		if (params.options.tl && !params.options.tr) top_prefix+= 'l';
		else if (params.options.tr && !params.options.tl) top_prefix+= 'r';
		if (params.options.bl && !params.options.br) bottom_prefix+= 'l';
		else if (params.options.br && !params.options.bl) bottom_prefix+= 'r';

		if (params.incolor != '') style += 'background-color: '+ params.incolor +';';
		if (params.bordercolor != '') {
			style += 'border-color: '+ params.bordercolor +';';
			first_style = ' style="background-color: '+ params.bordercolor +';"';
			large_style = ' style="background-color: '+ params.bordercolor +'; border-color: '+ params.bordercolor +'"';
		}
		if (style != '') style = ' style="'+style+'"';

		this.each(function () {
			var padding = 0;
			var $t = $(this);
			if ($t.children('.corners_top').length) $t.children('.corners_top').remove();
			if ($t.children('.corners_bottom').length) $t.children('.corners_bottom').remove();
			var append = '';
			var child = $t.children(':first');
			if ($(this).parent().attr('id') == 'category_search') {
				style = style;
			}
			var width = $t.css('width');
			if ($j.browser.msie == true && $j.browser.version <= 7) {
				if (width == 'auto') width = ' width: '+ $t.outerWidth() + 'px;';
			}
			else width = '';

			if (params.options.tl || params.options.tr) {
				child.css({'border-top-width': 0, 'border-top-style': 'none'});
				padding = parseFloat(child.css('padding-top'));
				if (params.outcolor != '') append = '<span class="corners_top" style="background-color: '+params.outcolor+';'+width+'">';
				else append = '<span class="corners_top" style="'+width+'">';
				if (params.type == 'small') {
					if (params.bordercolor != '') {
						append += '<span class="'+top_prefix+'s_1"'+first_style+'></span>';
						padding--;
					}
					append += '<span class="'+top_prefix+'s_2"'+style+'>&nbsp;</span>';
					append += '<span class="'+top_prefix+'s_3"'+style+'>&nbsp;</span>';
					padding-=2;
				}
				else if (params.type == 'large') {
					append += '<span class="'+top_prefix+'_lg_1"'+first_style+'>&nbsp;</span>';
					append += '<span class="'+top_prefix+'_lg_2"'+large_style+'>&nbsp;</span>';
					append += '<span class="'+top_prefix+'_lg_3"'+large_style+'>&nbsp;</span>';
					append += '<span class="'+top_prefix+'_lg_4"'+style+'>&nbsp;</span>';
					append += '<span class="'+top_prefix+'_lg_5"'+style+'>&nbsp;</span>';
					append += '<span class="'+top_prefix+'_lg_6"'+style+'>&nbsp;</span>';
					padding-=6;
				}
				else {
					append += '<span class="'+top_prefix+'_1"'+first_style+'>&nbsp;</span>';
					append += '<span class="'+top_prefix+'_2"'+style+'>&nbsp;</span>';
					append += '<span class="'+top_prefix+'_3"'+style+'>&nbsp;</span>';
					append += '<span class="'+top_prefix+'_4"'+style+'>&nbsp;</span>';
					padding-=5;
				}
				padding = padding < 0 ? 0 : padding;
				if (padding >= 0) child.css('padding-top', padding);
				append += '</span>';
				$t.prepend(append);
			}
			child = $t.children(':last');
			if (params.options.bl || params.options.br) {
				child.css({'border-bottom-width': 0, 'border-bottom-style': 'none'});
				padding = parseFloat(child.css('padding-bottom'));
				if (params.outcolor != '') append = '<span class="corners_top" style="background-color: '+params.outcolor+';'+width+'">';
				else append = '<span class="corners_bottom" style="'+width+'">';
				
				if (params.type == 'small') {
					append += '<span class="'+bottom_prefix+'s_3"'+style+'>&nbsp;</span>';
					append += '<span class="'+bottom_prefix+'s_2"'+style+'>&nbsp;</span>';
					if (params.bordercolor != '') {
						append += '<span class="'+top_prefix+'s_1"'+first_style+'>&nbsp;</span>';
						padding--;
					}
					padding-=2;
				}
				else if (params.type == 'large') {
					append += '<span class="'+bottom_prefix+'_lg_6"'+style+'>&nbsp;</span>';
					append += '<span class="'+bottom_prefix+'_lg_5"'+style+'>&nbsp;</span>';
					append += '<span class="'+bottom_prefix+'_lg_4"'+style+'>&nbsp;</span>';
					append += '<span class="'+bottom_prefix+'_lg_3"'+large_style+'>&nbsp;</span>';
					append += '<span class="'+bottom_prefix+'_lg_2"'+large_style+'>&nbsp;</span>';
					append += '<span class="'+bottom_prefix+'_lg_1"'+first_style+'>&nbsp;</span>';
					padding-=6;
				}
				else {
					append += '<span class="'+bottom_prefix+'_4"'+style+'>&nbsp;</span>';
					append += '<span class="'+bottom_prefix+'_3"'+style+'>&nbsp;</span>';
					append += '<span class="'+bottom_prefix+'_2"'+style+'>&nbsp;</span>';
					append += '<span class="'+bottom_prefix+'_1"'+first_style+'>&nbsp;</span>';
					padding-=5;
				}
				padding = padding < 0 ? 0 : padding;
				if (padding >= 0) child.css('padding-bottom', padding);
				append += '</span>';
				$t.append(append);
			}
		});
	};
})(jQuery);

//
// getPageSize()
// Returns array with page width, height and window width, height
// Core code from - quirksmode.org
// Edit for Firefox by pHaez
//
function getPageSize(){

	var xScroll, yScroll;

	if (window.innerHeight && window.scrollMaxY) {
		xScroll = document.body.scrollWidth;
		yScroll = window.innerHeight + window.scrollMaxY;
	} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
		xScroll = document.body.scrollWidth;
		yScroll = document.body.scrollHeight;
	} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
		xScroll = document.body.offsetWidth;
		yScroll = document.body.offsetHeight;
	}

	var windowWidth, windowHeight;
	if (self.innerHeight) {	// all except Explorer
		windowWidth = self.innerWidth;
		windowHeight = self.innerHeight;
	} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
		windowWidth = document.documentElement.clientWidth;
		windowHeight = document.documentElement.clientHeight;
	} else if (document.body) { // other Explorers
		windowWidth = document.body.clientWidth;
		windowHeight = document.body.clientHeight;
	}

	// for small pages with total height less then height of the viewport
	if (yScroll < windowHeight) {
		pageHeight = windowHeight;
	} else {
		pageHeight = yScroll;
	}

	// for small pages with total width less then width of the viewport
	if (xScroll < windowWidth) {
		pageWidth = windowWidth;
	} else {
		pageWidth = xScroll;
	}

	arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight)
	return arrayPageSize;
}

/** return the cookie value for name passed in, if it's set.
 * @param name
 */
function get_cookie(name) {
	var nameEQ = name + "=";
	var cookies = document.cookie.split(';');
	for(var i=0; i < cookies.length; i++) {
		var cookie = cookies[i];
		// remove any leading spaces
		while (cookie.charAt(0) == ' ') {
			cookie = cookie.substring(1, cookie.length);
		}
		if (cookie.indexOf(nameEQ) == 0) {
			return cookie.substring(nameEQ.length, cookie.length);
		}
	}
	return null;
}
//set a cookie
function set_cookie(name, value, expires, domain) {
	// convert expires to milliseconds
	if (expires != null) {
		expires = expires * 1000 * 86400;
		var expiry = new Date();
		expiry.setTime(expiry.getTime() + expires);
	}
	else {
		expires = 0;
	}
	if (domain != null) {
		domain = ';domain='+domain;
	}
	else domain = '';
	document.cookie=name +"="+ escape(value) + ((expires) ? ";expires="+expiry.toGMTString() : "") + ";path=/"+ domain;
}

/** show the add to cart popup with qty.
 * @param anchor
 */
function show_add_to_cart(anchor) {
	$j('#pop_cart_message, #pop_cart_continue, #pop_cart_error').hide();
	var size = getPageSize();

	var pos = $j('#body_content').position();
	var left = (pos.left + $j('#body_content').outerWidth());
	pos = $j(anchor).position();
	if (pos.left + $j(anchor).outerWidth() + $j('#add_to_cart_pop').outerWidth() > left) {
		left = pos.left - ($j('#add_to_cart_pop').outerWidth() + 10);
	}
	else {
		left = pos.left + $j(anchor).outerWidth() + 5;
	}
	var margin = isNaN(parseInt($j(anchor).css('margin-top'))) ? 0 : parseInt($j(anchor).css('margin-top'));
	$j('#add_to_cart_pop').css({
		top: pos.top + margin - 8,
		left: left,
		width: $j('#add_to_cart_pop').outerWidth()
	}).addClass('modal').show();
	$j('#add_to_cart_pop .text_box').round_corners({options: 'all', bordercolor: '#dadada'});

	$j('#add_to_cart_pop_form input[name=q]').val('1');
	$j('#add_to_cart_pop_form').attr('action', $j(anchor).attr('href'));
	$j('#click_off').css('height',size[1]).show();
}

/** submit the add to cart form with ajax.
 */
function add_to_cart() {
	var today = new Date();
	$j.ajax({
		type: "get",
		url: $j('#add_to_cart_pop_form').attr('action'),
		dataType: "json",
		data: "q="+ $j('#add_to_cart_pop_form input[name=q]').val() +'&'+today.getTime() +'=1',
		success: function(data) {
			$j('#pop_cart_message').html(data.message).show();
			$j('#pop_cart_continue').show();
			$j('#add_to_cart_pop').oneTime(5000, function () {
				$j('#click_off').hide();
				$j(this).fadeOut('slow');
				$j(this).stopTime();
			});
			update_cart();
		},
		error: function() {
			$j('#pop_cart_error').show();
		}
	});
}

/** update the cart item count and total value.
 */
function update_cart() {
	var lsRegExp = /\+/g;
	var items = get_cookie('items_in_cart');
	var cart_total = get_cookie('cart_subtotal');
	$j('#items_in_cart').text(items);
	$j('#cart_total span').html(cart_total.replace(lsRegExp, " "));
}

function toggle_more_models(product_id) {
	var models = $j('#product_models_'+product_id).children(':gt(1)');
	models.toggle();
}

function submit_form_ajax(form_selector) {
	var parent = $j(form_selector).parent();
	parent.find('.error').removeClass('error');
	parent.find('div.error_message').remove();

	$j('#page_overlay').css('height', $j('html').outerHeight()).show();
	$j('#loading').css('top', $j('html').scrollTop() + 220);
	$j.ajax({
		type: "post",
		url: $j(form_selector).attr('action'),
		dataType: "json",
		data: $j(form_selector).serialize(),
		success: function(data) {
			$j('#page_overlay').fadeOut();
			if (data.callback && window[data.callback]) window[data.callback](data);
		},
		error: function (request, textStatus, errorThrown) {
		}
	});
}

function format_currency(price) {
	var result;
	//although doing *100 will add the .00, it will also lose precision, use 10000 to keep precision
	var dollars = parseInt(parseFloat(price) * 10000);
	dollars = parseFloat(dollars/10000);

	// use .50000000001 to help with poor float precision
	var cents = parseInt(((dollars - parseInt(dollars))*100)+0.50000000001);
	if(cents<10){
		cents = "0" + cents;
	}
	result = parseInt(dollars)+"."+cents;

	return result;
}

/** hide all other tab containers and show the given container for the given tab.
 * @param tab_id
 */
function show_tab(tab_id) {
	$j('#'+ tab_id +'_cont').show();
	$j('#'+ tab_id +'_tab').addClass('active');
	var span = $j('#'+ tab_id +'_tab > a span').text();
	$j('#'+ tab_id +'_tab > a').html($j('#'+ tab_id +'_tab > a').attr('title') + '<span>'+span+'</span>');

	$j('#option_tabs').children(':not(#'+ tab_id +'_tab)').removeClass('active');
	$j('#option_tabs').children(':not(#'+ tab_id +'_tab)').find('a').each(function () {
		var text = $j(this).html();
		var pos = text.indexOf('<s');
		var span = text.substr(pos);
		text = text.substr(0, pos);
		text = text.length > tab_max_char ? text.substr(0, tab_max_char) +'...' : text;
		$j(this).html(text + span);
	});
	$j('#option_border').children(':not(#'+ tab_id +'_cont)').hide();
}

function create_message_timeout(div_id, message, message_type) {
	$j('#'+ div_id).parent().append('<div class="'+message_type+'_message" id="'+div_id+'_message">'+ message +'</div>');
	$j('#'+ div_id +'_message').oneTime(4500, function () {
		$j(this).fadeOut('slow');
		$j(this).stopTime();
	});
}

/** show the back order notify form.
 * @param anchor
 */
function show_back_order(anchor, model_id) {
	$j('#back_order_notify .message').hide();

	$j('#back_order_notify input[name=model_id]').val(model_id);

	var pos = $j(anchor).position();
	$j('#back_order_notify').css({
		top: pos.top - 20,
		left: pos.left + $j(anchor).outerWidth() + 5,
		width: $j('#back_order_notify').outerWidth()
	}).addClass('modal').show();
	$j('#back_order_notify .text_box').round_corners({options: 'all', bordercolor: '#dadada'});

	var size = getPageSize();
	$j('#click_off').css('height',size[1]).show();
}

function update_back_order() {
	var valid = true;
	$j('#back_order_notify .message').hide();

	if (valid) {
		$j.ajax({
			type: "post",
			url: $j('#back_order_form').attr('action'),
			dataType: "json",
			data: $j('#back_order_form').serialize(),
			success: function(data) {
				$j('#back_order_notify .message').html(data.message).css('color', data.color).show();
				if (data.success) {
					$j('#back_order_notify input').val('');
					$j('#back_order_notify').oneTime(3500, function () {
						$j(this).fadeOut('slow');
						$j(this).stopTime();
					});
				}
			}
		});
	}
}

function clear_message(id) {
	$j('div[id$="'+id+'_message"]').remove();
}

function set_select_option_width(parent) {
	var options = $j(parent).children('.select_options');//.find('ul');
	//$j('#right_content > div').html('');

	if (options.css('display') == 'none') options.css('width', 'auto');
	else if (options.outerWidth() > 0) {
		options.css('width', options.outerWidth() +'px');
	}
}

function flashPutHref(href) {

}

function set_search_action(type) {
	if (type == 'exercises') $j('#search_form').attr('action', '/exercise_list.php');
	else $j('#search_form').attr('action', '/product_search.php');
}

// onload functions
$j(function () {

	$j('#click_off').click(function (){
		$j(this).hide();
		$j('.modal').removeClass('modal').hide();
	});

	// secondary nav mouseovers

	// primary nav hovers for menu expansion
	$j('#primary_nav ul li').hover(function () {
		var child = $j(this).children('ul');
		if ($j(this).hasClass('child1')) {
			if ($j(this).hasClass('left_menu')) {
				var padding = parseInt($j(this).parent().css('padding-left'));
				child.css('right', $j(this).parent().outerWidth() - padding);
			}
			else {
				var padding = parseInt($j(this).parent().css('padding-right'));
				child.css('left', $j(this).outerWidth() + padding);
			}
		}
		if ($j(this).parent().hasClass('primary')) {
			var full_width = $j('#primary_content').outerWidth();
			var left = $j(this).position().left;
			// re-adjust the right if menu extends off to the right of the normal page width
			if (left + $j(this).children('ul').outerWidth() > full_width) {
				$j(this).children('ul').css('right', full_width - (left + $j(this).outerWidth()));				
				// re-adjust the way sub-sub-items expand too
				if ($j(this).find('ul.child2').length) {
					$j(this).children('ul').children('li').each(function () {
						$j(this).addClass('left_menu');
						$j(this).children('a').removeClass('children').addClass('children_left');
						$j(this).children('div').addClass('left');
					});
				}
			}
		}
		child.show();
		$j(this).children('div').show();
	}, function () {
		$j(this).children('ul').hide();
		$j(this).children('div').hide();
	});

	$j('#keywords input[name=keywords]').click(function () {
		if (this.value == $j('#search_exercise_text').val()) this.value = '';
	});
	
	if ($j('#type_search').children('input').length) set_search_action($j('#type_search').children('input').val().toLowerCase());

	// fake select list functions
	var blur = '';
	$j('#lang_value, div.select_button').parent().click(function () {
		if ($j(this).children('.select_options').css('display') == 'none' && blur != 'parent') {
			// make the currently selected item highlighted
			var options = $j(this).children('.select_options');
			var text = options.siblings('div:first').text();
			options.find('li').each(function () {
				if ($j(this).children('div').text() == text) $j(this).addClass('selected');
				else $j(this).removeClass('selected');
			});
			options.show().attr('tabindex', 150).focus();
			if (options.parent().attr('id') == 'category_search') {
				var current = $j('#type_search').children('input').val().toLowerCase();
				options.find('ul').hide().end().find('ul.'+current).show();
			}
			set_select_option_width(this);
			if ($j(this).parent().attr('id') == 'search_form') options.round_corners({options: 'all', bordercolor: '#d8d7c9'});
		}
		else set_select_option_width(this);
		blur = '';
	}).mousedown(function (event) {
		if ($j(this).children('.select_options').css('display') != 'none') blur = 'parent';
	});
	$j('div.select_options').blur(function () {
		$j(this).hide();
	})
	$j('.select_options ul li').mouseover(function () {
		$j(this).addClass('selected');
		$j(this).siblings().removeClass('selected');
	}).click(function () {
		var current_value = $j(this).find('input').val();
		if (current_value.indexOf('http') == 0) {
			document.location.href = current_value;
			return;
		}
		var button_text = $j(this).parents('div.select_options').siblings('div:first');
		var previous_value = button_text.nextAll('input').val();
		button_text.text($j(this).children('div').text());
		button_text.nextAll('input').val(current_value);

		$j(this).parents('div.select_options').blur();
		blur = 'parent';
		// reset the list back to all if the type changes
		if (button_text.parent().attr('id') == 'type_search' && current_value != previous_value) {
			set_search_action(current_value.toLowerCase());
			var lists = $j('#category_search').find('ul');
			lists.removeClass('selected').find('li:first').addClass('selected');
			var first_item = $j('#category_search').find('ul.'+previous_value.toLowerCase()).find('li:first div');
			$j('#category_search .select_button').text(first_item.text()).nextAll('input').val(first_item.text());
		}
	});

	$j('form.ajax_form').submit(function (e) {
		e.preventDefault();
		submit_form_ajax('#'+$j(this).attr('id'));
	});

	$j('#add_to_cart_pop_form').submit(function (e) {
		e.preventDefault();
		add_to_cart();
	});

	$j('#back_order_form').submit(function (e) {
		e.preventDefault();
		update_back_order();
	});
	
	$j('#login_form input').keypress(function (e) {
		if (e.keyCode == '13') {
			$j('#login_form').submit();
			return false;
		}
	});
	
	$j('#full_padding form :input').each(function (index) {
		$j(this).attr('tabindex', index);
	});

	// add rounded corners
	$j('#main_content').round_corners({options: 'all'});
	$j('#footer_content').round_corners({options: 'all'});
	$j('#secondary_nav ul li a').round_corners({options: 'bottom'});
	$j('#breadcrumbs div').round_corners({options: 'all', bordercolor: '#CFE7FF'});
	$j('#breadcrumbs span.item_cont').round_corners({options: 'all', bordercolor: '#dfddcf'});

	$j('#product_img_cont').round_corners({options: 'all', bordercolor: '#dfddcf'});
	$j('#model_img_cont').round_corners({options: 'all', bordercolor: '#dfddcf'});
	$j('#model_other_cont').round_corners({options: 'all', bordercolor: '#dadada'});
	$j('#option_cont').round_corners({options: 'bottom tr', bordercolor: '#dadada'});
	$j('#option_tabs div:not(.spacer)').round_corners({options: 'top', bordercolor: '#dadada'});
	$j('#add_to_cart_pop').round_corners({options: 'all', type: 'large', bordercolor: '#dfddcf'});
	$j('#search_header').round_corners({options: 'all', bordercolor: '#dadada'});
	$j('#right_column_cta').round_corners({options: 'all', bordercolor: '#dadada'});
	$j('#back_order_notify').round_corners({options: 'all', type: 'large', bordercolor: '#dfddcf'});

	$j('#steps .step').round_corners({options: 'all', bordercolor: '#dadada'});

	$j('#cart-tables th:first').round_corners({options: 'bl'});
	$j('#cart-tables th:last').round_corners({options: 'br'});
	$j('#cart-tables td.quantity div, #cart-tables td.coupon_code div').round_corners({options: 'all', bordercolor: '#dadada'});
	$j('#cart-tables').round_corners({options: 'all', bordercolor: '#dfddcf'});
	$j('#full_content .address_list:lt(2)').round_corners({options: 'all', bordercolor: '#dfddcf'});
	$j('#full_content .address_list li.header').round_corners({options: 'bottom', bordercolor: '#dfddcf'});

	$j('#register_cont .section_header').round_corners({options: 'all'});
	$j('#full_padding > #register_cont div.input').round_corners({options: 'all', bordercolor: '#dadada'});
	$j('#register_cont #login_section div.input').round_corners({options: 'all', bordercolor: '#dadada'});	

	$j('#register_cont #sign_up_section').round_corners({options: 'all', bordercolor: '#dadada'});
	$j('#register_cta .section_header').round_corners({options: 'all', bordercolor: '#dadada'});
	$j('#register_cta #register_tagline').round_corners({options: 'all', bordercolor: '#dadada'});

	$j('#contact_form div.input').round_corners({options: 'all', bordercolor: '#dadada'});

	$j('#full_content_right #model_history h3').round_corners({options: 'all', type: 'large', bordercolor: '#dfddcf'});
})
