// check mandatory fields
var mandatoryChecker = (function() {
	// private variables
	// reg exp for checking valid email address
	var emailCheck 		= /^([0-9a-zA-Z]+([_.-]?[0-9a-zA-Z]+)*@[0-9a-zA-Z]+[0-9,a-z,A-Z,.,-]*(.){1}[a-zA-Z]{2,4})+$/,
		validationOK	= true,
		$targetTitle	= $targetField = $targetField = $focusField = null;

	function checkSpecialInput(checkType) {
		//console.info(checkType);
		switch (checkType) {
			case "email":
				(!$targetField.val().match(emailCheck)) ? markMandatoryField() : "";
				break;
			default:
				alert(checkType+": this is an undefined check type");
		}
	}

	// mark empty mandatory fields
	function markMandatoryField() {
		$targetTitle.addClass("missing");
		($targetField.length === 1) ? (function() {
			$targetField.addClass("missing");
			(validationOK === true) ? $focusField = $targetField : "";
		})() : (function() {
			$targetField.each(function() {
				(validationOK === true) ? $focusField = $targetField[0] : "";
				$(this).addClass("missing");
			});
		})();

		(validationOK === true) ? (function() {			
			validationOK = false;
			$focusField.focus();
		})() : "";
	}

	return {
		// check mandatory fields
		checkMandatoryFields: function() {
			var tagName = "";
			// remove .missing class			
			$("form.feedback label, form.feedback input, form.feedback textarea, form.feedback p").removeClass("missing");
			// get mandatory fields
			$(".mandatory").each(function(){
				tagName 		= $(this).get(0).tagName.toLowerCase(),
				classes 		= $(this).attr("class").split(" "),
				$targetTitle	= $(this);				
				switch (classes.length) {
					case 1:
						(tagName === "label") ? (function(){
							// form field to be checked
							$targetField = $("#" + $targetTitle.attr("for"));
							($targetField.val() === "") ? markMandatoryField() : "";
						})() : (function(){

						});
						break;
					default:
						$targetField = ($("[id='" + classes[1] + "']").length !== 0) ? $("[id='" + classes[1] + "']") : $("[name='" + classes[1] + "']");
						// check mandatory fields
						switch ($targetField.attr("type")) {
							case "text":
								checkSpecialInput(classes[1]);
								break;
							case "radio":
								($targetField.filter(":checked").length < 1) ? markMandatoryField(): "";
								break;
							case "checkbox":
								($targetField.filter(":checked").length < 1) ? markMandatoryField(): "";
								break;
						}
				}
			});

			// return validation status
			return validationOK;
		},
		
		// reset focus field and validation status
		unFocus: function() {
			$focusField = null;
			validationOK = true;
		}
	}
})();

// age verification
function ageVerification() {
	
	// do not display overlay on terms page
	if ($("body.terms").length != 0 ) {
		return false;
	}
	
	$("#age-verification").overlay({ 
		expose: {
			color: '#333',
			loadSpeed: '200',
			opacity: '0.6'
		},
		left: 200,
		closeOnClick: false,
		api: true
	}).load();

	$("body div:last").css("margin-left", "-25%");
	$("body div:last").css("padding-left", "300px");
	$("body div:last").css("padding-right", "300px");
	$("body div:last").css("padding-bottom", "200px");
}

// dom ready
$(function(){
	// check mandatory fields for customer feedback form
	$("form.feedback").submit(function(e){
		mandatoryChecker.unFocus();
		(mandatoryChecker.checkMandatoryFields() === false) ? e.preventDefault() : function() {
			// if form is application for an account, print window
//			($("form#application").length !== 0) ? window.print() : "";
			($("form#application").length !== 0) ? sendUserData(e) : "";
		}();
	})

	// sort by price	
//  	$("#product-list").tablesorter({
//	    sortForce: [[3, 1]],
//	    sortList: [[3,0]]
//  	}); 
	
	// add sort functionality and paging to product list
	$("#product-list").tablesorter({
		3: { sorter:'digit' } ,
		sortList: [[3,0]]
	}).tablesorterPager({container: $("#pager")}); 
	
	// add class last to last list item
	$("li:last-child").addClass("last");
	
	// add class even to product info
	$("div.col2-product tr:even").addClass("even");
	
	// submit content search
	$("#col3-search").submit(function () {
		$("#content-query").val($("#search-altia").val() +' -AuthoringTemplate::"Default Sitearea Content"');
	});

	// age verification confirmation
	$("#age-verification button").click(function() {
		sessvars.ageVerification = "1";		
	});

	// age verification confirmation
	$("#age-verification a").click(function() {
			$("#age-verification #terms").fadeIn("slow");
	});	
		
	// ruokasuositukset
	$recParagraph = null;
	$recParagraph = $("#recommendations p");
	
	var recTexts = $recParagraph.text().split(',');
	$recParagraph = "";
	$.each(recTexts, function(i, v) {
		$recParagraph = $recParagraph + ("<p>" + v.replace(/^\s+|\s+$/g, '') + "</p>")
	});
		
	// listener for click events
	$("body").click(function(e){
	
		var id = $(e.target).attr("id"),
		idProduct = id.substring(0, id.lastIndexOf("-"));
		
		switch (id) {
			// entry - terms
			case "terms-link": 
				$("div#terms").fadeIn("def"); 
				break;
			case "close-terms":
				$("div#terms").fadeOut("def");
				break;
			// entry - responsibility
			case "responsibility-link": 
				$("div#responsibility").fadeIn("def"); 
				break;
			case "close-responsibility":
				$("div#responsibility").fadeOut("def");
				break;
		}
	});
	
		$("ul#col2-product-actions li#pdf a").click(function(){			
			var productId = $("span#content-name").text();
			var libraryId = $("span#library-id").text();
			var productLang = $("input#language").val();
			var isAuthenticated = $("input#authenticated").val();
	
			libraryId = libraryId.split("/")[2];
	
			var uri = (isAuthenticated) ? 
						"/AltiaPDFCreator/PdfCreatorServlet?id=" + productId + "&library=" + libraryId + "&language=" + productLang + "&authenticated=true" :
						"/AltiaPDFCreator/PdfCreatorServlet?id=" + productId + "&library=" + libraryId + "&language=" + productLang;
	
			$("ul#col2-product-actions li#pdf a").attr({
				href:	uri
			});
	});
	
	// get ageVerification flag from session, if undefined - display popup
	(sessvars.ageVerification !== undefined) ? "" : ageVerification();

});

// print product information
$("ul#col2-product-actions li#card a, #product-actions a.print").click(function(){
	window.print();
});

// print product card from product information
$("ul#col2-product-actions li#note a").click(function(){
	$("#col2-product-more ol.more-info").hide();
	$("#col2-product-more .description").hide();
	window.print();
	return false;
});

