function showFeatures(suit_id, piece)
{
	$('.pop-up-container').load(
		'suit.' + suit_id + '/features.ajax', 
		'piece=' + piece, 
		function() { 
			$(this).show();
			initAccordeons();
		}
	);
}

function hideFeatures()
{
	$('.pop-up-container').hide();
}

function openFeatureSlide(feature_id)
{
	$('#feature-slide-' + feature_id).addClass('active').persist();
	$('#feature-slide-' + feature_id + ' a').toggleClass('selected').persist();
	$.scrollTo('#feature-slide-' + feature_id, 500);
}

function showStyleFeatures(style_id, piece)
{
	$('.pop-up-container').load(
		'style.' + suit_id + '/features.ajax', 
		'piece=' + piece, 
		function() { 
			$(this).show();
			initAccordeons();
		});
}

function showPopup(path)
{
	showOverlay();
	$('#popup-holder').load(path);
}

function hidePopup()
{
	$('.popup').hide();
	hideOverlay();
}

function openPopup(path, width, height, name)
{
	var opts = 'width=' + width + ',height=' + height+',resizable=yes';
	var popup = window.open(path, name, opts);
	popup.focus();
}

function showOverlay()
{
	$('.overlay').show();
	$.blur();
}

function hideOverlay()
{
	$('.overlay').hide();
	$.sharpen();
}

function validateMeasurement(input, max, min)
{
	var v = $(input).val();
	if ((max && v > max) || (min && v < min)) {
		$(input).addClass('invalid');
	} else {
		$(input).removeClass('invalid');
	}
}

function selectOptionsTab(radio, tab)
{
	var holder = $(radio).parents('.slide');
	holder.find('.tab').hide();
	holder.find('.' + tab).show();
	holder.find('label').removeClass('l-checked');
	$(radio).next().addClass('l-checked');
}

function selectOption(config_piece_id, option_id, feature)
{
	var action = { 
		module : 'jeremygleave', 
		object : 'config_piece',
		id : config_piece_id,
		name : 'setOption',
		parameters : { 'option' : option_id }
	}
	sendAction(action);
	
	$('.' + feature + ' .clothes-box').removeClass('selected');
	$('.opt' + option_id).addClass('selected');
}

function showOptions(config_piece_id, plus)
{
	if (plus) {
		$('.man-col .plus').removeClass('plus-close');
		$(plus).addClass('plus-close');
		moveMan(plus);
	}
	$('.config-options-holder').load(
		'config_piece.' + config_piece_id + '/options.ajax',
		null,
		function() {
			$(this).show();
			init();
		}
	);
}

function hideOptions()
{
	$('.config-options-holder').hide();
	$('.man-col .plus').removeClass('plus-close');
	resetMan();
}

function toggleOptions(config_piece_id, plus)
{
	if ($(plus).hasClass('plus-close')) {
		hideOptions();
	} else {
		showOptions(config_piece_id, plus);
	}
}

function moveMan(plus)
{
	window.scrollTo(0, 0);
	var top = $(plus).css('top');
	if (top == null) {
		return;
	}
	top = top.replace('px', '');
	var duration = top * 3;
	if (duration < 0) {
		duration = duration * -1;
	}
	$('.man-col').animate({
		marginTop: (282 - top) + 'px'
	}, duration);
}

function resetMan()
{
	$('.man-col').animate({
		marginTop: '0'
	}, 500);
}

function setConfigFabric(config_fabric_id, fabric)
{
	if (fabric == '') {
		return false;
	}
	var action = { 
		module : 'jeremygleave', 
		object : 'config_fabric',
		id : config_fabric_id,
		name : 'setFabric',
		parameters : { 'identifier' : fabric }
	}
	sendAction(action, function() {
		$('.price-holder').load('config_fabric.' + config_fabric_id + '/price.ajax');
	});
}

function setPieceIncluded(config_piece_id, included)
{
	var action = { 
		module : 'jeremygleave', 
		object : 'config_piece',
		id : config_piece_id,
		name : 'setIncluded',
		parameters : { 'included' : (included ? '1' : '0') }
	}
	sendAction(action, function() {
		showOptions(config_piece_id);
		$('.price-holder').load('config_piece.' + config_piece_id + '/price.ajax');
	});
}

function setMeasurementTemplate(measurement_id, piece_id, template)
{
	var action = { 
		module : 'jeremygleave', 
		object : 'measurement',
		id : measurement_id,
		name : 'setTemplate',
		parameters : { 'piece' : piece_id, 'template' : template }
	}
	sendAction(action, function() {
		if (template) {
			$('#meas-' + piece_id).slideDown();
		} else {
			$('#meas-' + piece_id).slideUp();
		}
	});
}

function saveMeasurementRemark(measurement_id, piece_id, remark)
{
	var action = { 
		module : 'jeremygleave', 
		object : 'measurement',
		id : measurement_id,
		name : 'setPieceRemark',
		parameters : { 'piece' : piece_id, 'remark' : remark }
	}
	sendAction(action);
}

function saveConfigPieceRemark(config_piece_id, remarks)
{
	var action = { 
		module : 'jeremygleave', 
		object : 'config_piece',
		id : config_piece_id,
		name : 'setRemarks',
		parameters : { 'remarks' : remarks }
	}
	sendAction(action);
}

function setDefaultSuitOption(suit_id, option_id, anchor, feature)
{
	var action = { 
		module : 'jeremygleave', 
		object : 'suitmanager',
		name : 'addSuitOption',
		parameters : { 'suit' : suit_id, 'option' : option_id, 'default' : '1' }
	};
	sendAction(action);
	
	$('li a.' + feature).removeClass('default');
	$(anchor).addClass('default');
}

function setFeatureFabric(suit_id, feature_id, identifier)
{
	var action = { 
		module : 'jeremygleave', 
		object : 'suitmanager',
		name : 'setFeatureFabric',
		parameters : { 'suit' : suit_id, 'feature' : feature_id, 'identifier' : identifier }
	};
	sendAction(action);
}

function toggleCart(style_id, icon)
{
	if ($(icon).parent().hasClass('added')) {
		removeFromCart(style_id, icon);
	} else {
		addToCart(style_id, icon);
	}
}

function addToCart(style_id, icon)
{
	var action = {
			module : 'jeremygleave', 
			object : 'shop',
			name : 'addToCart',
			parameters : { style : style_id } 
	};
	$(icon).parent().addClass('added');
	$(icon).parents('.opener').addClass('added');
	sendAction(action, function() {
		refreshCart();
	});
}

function removeFromCart(style_id, icon)
{
	var action = {
			module : 'jeremygleave', 
			object : 'shop',
			name : 'removeFromCart',
			parameters : { style : style_id } 
	};
	$(icon).parents().removeClass('added');
	sendAction(action, function() {
		refreshCart();
	});
}

function addPieceToCart(config_piece_id)
{
	var action = {
			module : 'jeremygleave', 
			object : 'shop',
			name : 'addPieceToCart',
			parameters : { config_piece : config_piece_id } 
	};
	sendAction(action, function() {
		refreshCart(function() { $.scrollTo('#cart', 500) });
	});
}

function deleteOrderItem(order_item_id)
{
	var action = {
			module : 'jeremygleave', 
			object : 'order_item',
			id : order_item_id,
			name : 'delete'
	};
	sendAction(action, function() {
		refreshCart();
	});
}

function decreaseOrderItem(order_item_id)
{
	var action = {
			module : 'jeremygleave', 
			object : 'order_item',
			id : order_item_id,
			name : 'decrease'
	};
	sendAction(action, function() {
		refreshCart();
	});
}

function increaseOrderItem(order_item_id)
{
	var action = {
			module : 'jeremygleave', 
			object : 'order_item',
			id : order_item_id,
			name : 'increase'
	};
	sendAction(action, function() {
		refreshCart();
	});
}

function refreshCart(callback)
{
	$('#cart').load('cart.ajax', null, function() {
		$('#cart .accordion-2 .opener-col a').click(function() {
			$(this).parents('.opener').toggleClass('selected');
			$(this).parents('li').toggleClass('active');
		});
		callback();
	});
}

function sendAction(action, success, url, dataType)
{
	var data = $.toJSON(action); 

	if (url == undefined) {
		url = "/public/null.ajax";
	}
	if (dataType == undefined) {
		dataType = null;
	}
	
	$.ajax({
		type : "POST",
		url : url,
		data : data,
		dataType : dataType,
		contentType : "application/json",
		success : success
	});
}

function submitForm(form)
{
	form.submit(function() {
		var data = form.serialize();
		var path = form.attr('action').replace(/\.html($|\?)/, '.ajax$1');
		$.ajax({ type : "POST", url : path, data : data, 
			success : function(data) { form.parent().html(data); }
		});
		return false;
	});
	form.submit();
}

function submitPopupForm(form)
{
	form.submit(function() {
		var data = form.serialize();
		var path = form.attr('action').replace(/\.html($|\?)/, '.ajax$1');
		$.ajax({ type : "POST", url : path, data : data, 
			success : function(data) { form.parents('.popup').parent().html(data); }
		});
		return false;
	});
	form.submit();
}

jQuery.fn.fabricsearch = function() {
	this.autocomplete('fabrics/autocomplete.txt', {
		formatResult: function(row) {
			var r = /^\[(.+?)\]/;
			r.exec(row[0]);
			if (RegExp.$1 != '') {
				return RegExp.$1;
			}
			return row;
		},
		minChars: 2,
		mustMatch: true,
		autoFill: false,
		width: 400
	});
}

jQuery.blur = function() {
	$('img.blurrable').blur();
}

jQuery.sharpen = function() {
	$('img.blurred').sharpen();
}

jQuery.fn.blur = function() {
	this.each(function() {
		var src = $(this).attr('src');
		$(this).attr('src', src.replace(/\.jpg$/, '-blurred.jpg'));
		$(this).removeClass('blurrable').addClass('blurred');
	});
}

jQuery.fn.sharpen = function() {
	this.each(function() {
		var src = $(this).attr('src');
		$(this).attr('src', src.replace(/-blurred\.jpg$/, '.jpg'));
		$(this).removeClass('blurred').addClass('blurrable');
	});
}

jQuery.blurPreload = function() {
	$('img.blurrable').each(function() {
		var src = $(this).attr('src');
		var img = new Image();
		img.src = src.replace(/\.jpg$/, '-blurred.jpg');
	});
}

function showQualityItem(plus, item)
{
	$('.man-col a.plus').removeClass('black');
	$(plus).addClass('black');
	$('.man-col img').attr('src', 'images/img-quality-' + item + '.gif');
	$('.column .red-box').hide();
	$('.column .' + item).show();
}

function init()
{
	initInputLabels();
	initAccordeons();
	initLogo();
	$.initPersistentClasses();
	$.blurPreload();
	$('.gallery a').lightBox();
}

function initInputLabels()
{
	$('input.label').focus(function() {
		if (this.value == this.defaultValue) {
			this.value = '';
		}
	});
	$('input.label').blur(function() {
		if (this.value == '') {
			this.value = this.defaultValue;
		}
	});
}

function initAccordeons()
{	
	$('.accordion .opener').click(function() {
		$(this).toggleClass('selected').persist();
		$(this).parents('li').toggleClass('active').persist();
	});
	
	$('.accordion-1 .opener a').click(function() {
		$(this).parents('li').toggleClass('active').persist();
	});
	
	$('.accordion-2 .opener-col a').click(function() {
		$(this).parents('.opener').toggleClass('selected');
		$(this).parents('li').toggleClass('active');
	});
}

function initLogo()
{
	$('#main .logo a').rightClick(function() {
		if (confirm('Do you like to download a hi-res version of the Jeremy Gleave logo?\nGo ahead and click "OK".')) {
			location.href = 'images/Jeremy_Gleave_Logo.png';
		}
//		var logo = window.open('images/Jeremy_Gleave_Logo.png', 'logo', 'width=840,height=860');
//		logo.focus();
	});
}

jQuery.fn.log = function (msg) {
    console.log("%s: %o", msg, this);
    return this;
};