/// <reference path="jquery-1.3.2-vsdoc2.js" />

// CONTENTS ====================================================================
/*
	1.0 Custom Functions
		1.1 Image Loader
		
	2.0 FrontEnd Functions
		2.01 Page Tools
		2.02 Collapsing List
		2.03 Image Replace
		2.04 Search Text
		2.05 Ajax for recipes
		2.06 Listing Highlight
		2.07 External Links
		2.08 Set Form Button
		2.09 Set Recpie Submission Page
		2.10 Forms { general }
		2.11 KMS Post submissions
*/

// ======================================================================

/***** 1.0 CUSTOM FUNCTIONS ****************************************************/

/***** 1.1 Image Loader *****/
$.fn.image = function(src, f){ 
	return this.each(function(){ 
		var i = new Image(); 
		i.src = src; 
		i.onload = f; 
		this.appendChild(i);
	}); 
}

/***** 2.0 FRONTEND FUNCTIONS ****************************************************/

/***** 2.01 Page Tools *****/
var PageTools = {
	Init: function() {
		// Mailto Link Creation
		var mailtoUrl = document.location.href;
		var mailtoSubject = document.title;
		var mailtoLink = "mailto:&amp;subject=" + mailtoSubject + "&amp;body=" + mailtoSubject + ": " + mailtoUrl;

		var printLink = '<a class="page-tool page-print" onclick="window.print();return false"  href="#">Print</a>';
		var emailLink = ''; //'<a class="page-tool page-email" href="' + mailtoLink + '">Email</a>';
		$(".pri .cont-tools").prepend(printLink + emailLink);
	}
}

/***** 2.02 Collapsing List *****/

var Collapsing = {
	Init: function() {
		$(".collapse").each(function() {
			if ($(this).hasClass("winners")) {
				Frontend.Collapsing.WinnersList(this);
			} else if ($(this).parents(".mod-group-collapse").length > 0) {
				Frontend.Collapsing.ModGroupCollapse($(this));
			} else if ($(this).hasClass(".mod-listing")) {
				Frontend.Collapsing.ModCollapse($(this));
			}
		})
	},

	OpenList: function(elm) {
		$(elm).addClass("open");
	},

	CloseList: function(elm) {
		$(elm).removeClass("open");
	},

	ModCollapse: function(elm) {
		var linkText = $(elm).children("h2").text();
		var linkHtml = '<a href="#">' + linkText + '</a>';
		$(elm).addClass("mod-listing-collapse");
		$(elm).children("h2").siblings().addClass("content");
		$(elm).children("h2").empty().append(linkHtml);
		$(elm).find("h2 a").click(function() {
			if ($(this).hasClass("open")) {
				Frontend.Collapsing.CloseList($(this));
				Frontend.Collapsing.CloseList($(this).parent().next());
			} else {
				Frontend.Collapsing.OpenList($(this));
				Frontend.Collapsing.OpenList($(this).parent().next());
			}
			return false;
		});
	},


	ModGroupCollapse: function(elm) {
		$(elm).children("a").click(function() {
			if ($(this).hasClass("open")) {
				Frontend.Collapsing.CloseList($(this));
				Frontend.Collapsing.CloseList($(this).parent().next(".content"));
			} else {
				Frontend.Collapsing.OpenList($(this));
				Frontend.Collapsing.OpenList($(this).parent().next(".content"));
			}
			return false;
		});
	},

	WinnersList: function(elm) {
		var numOfWinners = $(elm).children("li").length;
		var textNumOfWinners = "<span>(" + numOfWinners + ")</span>";
		var linkTextSingle = "View winner";
		var linkTextClose = "Close list";
		var linkHtml = "";
		if (numOfWinners > 1) {
			var linkHtml = '<p><a class="cta" href="javascript();">' + linkTextSingle + 's</a> ' + textNumOfWinners + '</p>';
		} else {
			var linkHtml = '<p><a class="cta" href="javascript();">' + linkTextSingle + '</a></p>';
		}

		$(elm).after(linkHtml);
		$(elm).siblings("p").children("a.cta").click(function() {
			if ($(this).text() != linkTextClose) {
				Frontend.Collapsing.OpenList($(this).parent("p").siblings("ul.winners"));
				$(this).parent("p").addClass("open");
				$(this).data("linkText", $(this).text())
				$(this).text(linkTextClose);
			} else {
				Frontend.Collapsing.CloseList($(this).parent("p").siblings("ul.winners"));
				$(this).parent("p").removeClass("open");
				$(this).text($(this).data("linkText"));
			}
			return false;
		});
	}
}


/***** 2.03 Image Replace *****/
var ImageReplace = {
	Init: function() {
		$(".sizes li a").click(function() {
			var imageFile = $(this).attr("href");
			$(this).parent("li").siblings("li").children("a").removeClass("selected");
			$(this).addClass("selected");
			$(".hero-image").empty().addClass("hero-image-hide");
			$(".hero-image").image(imageFile, function() {
				$(".hero-image img").hide();
				$(".hero-image").removeClass("hero-image-hide")
				$(".hero-image img").fadeIn(250);
			});
			return false;
		});
	}
}

/***** 2.04 Search Text *****/
var SearchText = {
	Init: function() {
		var defaultValue = 'Start Searching...';
		if ($('#search .input-text').val() == '') {
			$('#search .input-text').val(defaultValue);
		}

		$('#search .input-text').focus(function() {
			if ($(this).val() == defaultValue) {
				$(this).val('');
			}
		});
		$('#search .input-text').blur(function() {
			if ($(this).val() == '') {
				$(this).val(defaultValue);
			}
		});

	}
}

/***** 2.05 Ajax for recipes *****/
var AjaxRecipePage = {
	Init: function() {
		Frontend.Collapsing.Init();
		Frontend.AjaxRecipePage.AjaxPicker();
	},
	LoadMods: function() {
		var target = $('.sec .ajax-content');
		var source = '/Recipe%20Info';
		$.ajax({
			url: source,
			dataType: 'html',
			success: function(html) {
				target.hide().append(html).fadeIn();
				Frontend.AjaxRecipePage.Init();
				Frontend.AjaxRecipePage.TableRowShading();
			}
		});
	},
	InitIngredients: function() {
		$('body').append('<div class="mini-detail"></div><div class="underlay"></div>');
		$('.list-ingredients a').click(function() {
			var offset = $(this).offset();
			var target = $('.mini-detail');
			var underlay = $('.underlay');
			var source = $(this).attr('href') + '/MiniProductDetail.aspx';
			target.empty();
			$.ajax({
				url: source,
				dataType: 'html',
				success: function(html) {
					target.hide().append(html);
					target.css({ 'top': (offset.top - (target.height() + 40)) + 'px' });
					underlay.css({ 'top': (offset.top - (target.height() + 45)) + 'px', 'height': (target.height() + 29) + 'px' });
					underlay.css({ 'opacity': '0' }).show().fadeTo(350, .3);
					target.fadeIn(150);
					target.find('.close').click(function() { underlay.hide(); target.hide(); return false; });
				}
			});
			return false;
		});
	},
	AjaxPicker: function() {
		$('.ajax-picker').change(function() {
			$(this).parent().children('.ajax-content').hide();
			if ($(this).val() == 'default')
				$(this).parent().children('.ajax-content').eq(0).show();
			$($(this).val()).show();
		});
		$('.ajax-picker').trigger('change');
	}, TableRowShading: function() {
		$(".sec .ajax-content table tbody tr:odd").addClass("alt");
	}

}

/***** 2.06 Listing Highlight *****/
var ListingHighlight = {
	Init: function() {
		$(".pri .cont-listing .list-view li").hover(function() {
			$(this).css("background", "#ece9e3")
		}, function() {
			$(this).removeAttr("style");
		});
	}
}

/***** 2.07 External Links *****/

var SetExternalLinks ={ 
	Init: function() {
		$('a[rel*=external]').click(function() { window.open(this.href); return false; });
	}
}

/***** 2.08 Set Form Button *****/

var FieldsetSubmit = {
	Init: function() {
		$('#content,#search').bind('keypress', function(e) {
			var key = e.charCode ? e.charCode : e.keyCode ? e.keyCode : 0;
			var target = e.target.tagName.toLowerCase();

			if (key === 13 && target === 'input') {
				var isSearchFiled = $(e.target).parents("fieldset").find("input.btn-search").length;
				if (isSearchFiled > 0) {
					$(e.target).parents("fieldset").find("input.btn-search").trigger('click');
					return false;
				} else if ($(e.target).attr("type") == 'submit') {
					$(e.target).trigger('click');
				} else {
					return false;
				}
			}
		});
	}
};

/***** 2.09 Set Recpie Submission Page *****/
var RecipeSubmission = {
	Init: function() {
		$('#promo-select input').click(function() {
			if ($(this).attr('checked') == true) {
				$('#address-details').slideDown('fast');
			} else {
				$('#address-details').slideUp('fast');
			}
		});
	}
}

var Forms = {
	Init: function() {
		if ($('span.error:visible').length > 0) {
			try {
				var errorOffset = $('span.error:visible').eq(0).offset();
				$('body').scrollTo(errorOffset.top - 80);
			} catch (err) { }
		}
	}
}

// Initialise methods onto Frontend Object ================================================================================
var Frontend = {
	PageTools: PageTools,
	Collapsing: Collapsing,
	ImageReplace: ImageReplace,
	SearchText: SearchText,
	AjaxRecipePage: AjaxRecipePage,
	ListingHighlight: ListingHighlight,
	SetExternalLinks: SetExternalLinks,
	FieldsetSubmit: FieldsetSubmit,
	RecipeSubmission: RecipeSubmission,
	Forms: Forms
};