﻿///
/// ArticleAttribute functions
///

// Versie 1.7.2 (LR)
function getArticleAttributes() {
    var attrArray = new Array();
	$("[id^=articleAttribute-]").each(function() {
		var id = $(this).attr("id");
		var name = $(this).attr("name");
		var type = $(this).attr("type");
		var value = $(this).val();

		if (type == "radio" || type == "checkbox") {
			if (this.checked) {
				attrArray.push("[[" + name + "::" + value + "]]");
			}
		} else if (type == "select-multiple") {
			if ($(this).children(":selected").length > 0) {
				var result = "[[" + id + "::";
				var values = "";

				$(this).children(":selected").each(function() {
					values += $(this).val() + "|";
				});

				if (values != "")
					values = values.substring(0, values.length - 1);

				attrArray.push(result + values + "]]");
			}
		} else if (type == "select-one") {
			if ($(this).children(":selected").length > 0) {
				if ($(this).val() != undefined && $(this).val() != "")
					attrArray.push("[[" + id + "::" + value + "]]");
			}
		} else {
			if (value != "") {
				attrArray.push("[[" + id + "::" + value + "]]");
			}
		}
	});
	attrArray = attrArray.sort();
	return attrArray.join(".@.");
}

// Versie 1.7.2 (LR)
function attributeArraySorter(a, b) {
	return b - a;
}

// Versie 1.7.2 (LR)
function attributesValid(sender) {
	var result = true;
	$("[id^=articleAttribute-]").each(function() {
		var accesskey = $(this).attr("accesskey"); 						// {Rule:Integer,Required:true}
		if (accesskey != undefined && accesskey.length > 2) {
			tmp = accesskey.substring(1, accesskey.length - 1).split(","); // strip: "{" .. "}"
			var rule = tmp[0].split(":")[1];
			var required = tmp[1].split(":")[1] == "true" ? true : false;
			
			if (!chckFieldAttribute(this, null, rule, required))
				result = false;
		} else {
			result = false;
		}
	});
	if (result == true)
		$(sender).parent("form").find("INPUT[id=attributes]").val(getArticleAttributes());
	return result;
}

// Versie 1.7.2 (LR)
function chckFieldAttribute(o, e, rule, required) {
	var onkeydown = (e != null);
	//var required = ((o.type == "select-one" || o.type == "select-multiple" ? $(o).attr("title") : $(o).attr("accesskey")) != "");
	switch (o.type) {
		case "text":
			{
				if (required && !onkeydown) {
					// Field is required, and event = onblur()
					if (rule != "") {
						// Validate field
						var r = getRuleRegex(rule);
						if (!r.test(o.value)) {
							errorLayout(o, false, "Ongeldige " + rule + " waarde.");
							return false;
						} else {
							errorLayout(o, true, "");
							return true;
						}
					}
					// No rule specified, check if not empty
					if (o.value == "") {
						errorLayout(o, false, "Verplicht");
						return false;
					}
				} else if (onkeydown) {
					return keyAllowed(e, rule);
				}
				errorLayout(o, true, "");
				return true;
				break;
			}
		case "textarea":
			{
				if (required && o.value == "") {
					errorLayout(o, false, "Verplicht");
					return false;
				} else {
					errorLayout(o, true, "");
					return true;
				}
				break;
			}
		case "radio":
		case "select-one":
		case "select-multiple":
			{
				if (required) {
					var nrSelected = (o.type == "radio" ? $(o).parent().find(":checked").length : $(o).find(":selected").length);
					if (nrSelected == 0 || o.value == "") {
						errorLayout(o, false, "Verplicht");
						return false;
					} else {
						errorLayout(o, true, "");
						return true;
					}
				}
				break;
			}
		default:
			break;
	}
	return true;
}

// Versie 1.7.2 (LR)
function getRuleRegex(rule) {
	switch (rule) {
		case "Decimal":				return /^(\-?[0-9]+[\,\.]+[0-9]+)+$/;
		case "Money":				return /^(\-?[0-9]+[\,\.]+[0-9]+)+$/;
		case "Integer":				return /^([0-9])+$/;
		case "Email":				return /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
		case "Letters":				return /^([a-zA-Z ])+$/;
		case "LettersAndNumbers":   return /^([a-zA-Z0-9 ])+$/;
		case "Date":				return /^([0-3]?[0-9]+)[\-\/]{1}([0-1]?[0-9]+)[\-\/]{1}([0-9]{4})$/;
		case "ZipcodeNL":			return /^[1-8]{1}[0-9]{3}[A-Za-z]{2}$/;
	}
}

// Versie 1.7.2 (LR)
function keyAllowed(e, rule) {
	var k = (document.all ? e.keyCode : e.which);
	switch (rule) {
		case "Decimal":				return isControlKey(k) || isDecimalKey(k, e);
		case "Money":				return isControlKey(k) || isDecimalKey(k, e);
		case "Integer":				return isControlKey(k) || isNumberKey(k, e);
		case "Letters":				return isControlKey(k) || isAlphaKey(k);
		case "LettersAndNumbers":	return isControlKey(k) || isAlphaKey(k) || isNumberKey(k, e);
		case "Date":				return isControlKey(k) || isDateKey(k, e);
		case "ZipcodeNL":			return isControlKey(k) || isAlphaKey(k) || isNumberKey(k, e);
		case "PhoneNL":				return isControlKey(k) || isNumberKey(k, e);
	}
}


// Versie 1.7.2 (LR)
function isControlKey(k) {
	return (
		k == 8 || 				// (backspace)
		k == 9 || 				// (tab)
		k == 35 || 				// (home)
		k == 36 || 				// (end)
		k == 37 || 				// (left)
		k == 39 ||  			// (right)
		k == 46); 				// (delete)
}

// Versie 1.7.2 (LR)
function isNumberKey(k, e) {
	return (
		(k > 47 && k < 58 && e.shiftKey != 1) || 	// 0-9
		(k >= 96 && k <= 105)						// (numpad keys)
	);
}

// Versie 1.7.2 (LR)
function isDecimalKey(k, e) {
	return (isNumberKey(k, e) || k == 46); 		// 0-9.
}

// Versie 1.7.2 (LR)
function isAlphaKey(k) {
	return (
		(k >= 65 && k <= 90) || 					// A-Z
		(k >= 97 && k <= 122) ||					// a-z
		k == 32										// (space)
	);
}

// Versie 1.7.2 (LR)
function isDateKey(k) {
	return (
		isNumberKey(k) ||
		k == 45
	);
}

function errorLayoutAttr(o, OK, errorMessage) {
	if (OK) {
		$(o).removeClass("error");
		if ($("#marker_" + (o.type == "radio" ? o.name : o.id)).length > 0)
			$("#marker_" + (o.type == "radio" ? o.name : o.id)).html("Correct");
	}
	else {
		$(o).addClass("error");
		if ($("#marker_" + (o.type == "radio" ? o.name : o.id)).length > 0)
			$("#marker_" + (o.type == "radio" ? o.name : o.id)).html(errorMessage);
	}
}
