var INPUT = {
	rule: {
		ONLY_NUMBERS: "0,8,9,13,48-57,127",
		ONLY_CHARS: "0,8,9,13,32,45-127",
		EMAIL:"0,8,9,13,24,25,33-43,45-57,61,63-90,94-127",
		CURRENCY: "0,8,9,13,24,25,44,48-57,127"
	},
	init: function(){
		INPUT.chars = {};
		for (var r in INPUT.rule){
			INPUT.chars[r] = new Array();
			var aChar = INPUT.rule[r].split(",");
			for (token in aChar){
				if (aChar[token].indexOf("-")>0){
					var aRange = aChar[token].split("-");
					for (var i=Number(aRange[0]); i<=Number(aRange[1]); i++) INPUT.chars[r][INPUT.chars[r].length] = i;
				} else {
					INPUT.chars[r][INPUT.chars[r].length] = Number(aChar[token]);
				}
			}
		}
		for (var i=0; i<INPUT.fieldRules.length; i++){
			$("form[@name="+INPUT.fieldRules[i].formName+"] input[@name="+INPUT.fieldRules[i].fieldName+"]").bind("keypress", {chars:INPUT.chars[INPUT.fieldRules[i].rule]}, function(event){
				if (event.keyCode) event.charCode = event.keyCode; else if (event.which) event.charCode = event.which;
				var pass = false;
				for(var c = 0; c < event.data.chars.length; c++){
					if(event.data.chars[c] == event.charCode) pass = true;
					if((event.charCode == 99 && event.ctrlKey) || event.keyCode == 67) pass = true;
					if((event.charCode == 118 && event.ctrlKey) || event.keyCode == 86) pass = true;
					if(event.keyCode==37 || event.keyCode==39 || event.keyCode==46) pass=true;
				}
				if(!pass) {
					event.returnValue = false;
					event.cancel = true;
					event.preventDefault();
					event.stopPropagation();
				}
			});
		}
	}
};

function manageFavorites(el, updateList, event, isRecommended){
	var cl = (isRecommended) ? "shoppingCenter" : "favorite";
	var $el = $(el);
	var clx = "transparent";
	var $div = $el.parents("div[@shopId]");
	var shopId = $div.attr("shopId");
	var shopAdded = $div.attr("shopAdded");
	var url = (shopAdded!="true") ? "/addFavoriteShop.html" : "/removeFavoriteShop.html";
	var ts = (new Date()).getTime();
	$.getJSON(url, {sid: shopId, t: ts, type: cl}, function(json){
		if (json.result=="added"){
			$div.addClass(cl);
			var txt = (isRecommended) ? "- Shop nicht empfehlen" : "- aus Favoriten entfernen";
			$el.text(txt);
			$div.attr("shopAdded", "true");
			if (updateList){
				$div.removeClass(clx);	
			}
		} else if (json.result=="removed"){
			$div.removeClass(cl);
			var txt = (isRecommended) ? "+ Shop empfehlen" : "+ zu Favoriten hinzuf\u00fcgen";
			$el.text(txt);
			$div.attr("shopAdded", "false");
			if (updateList){
				$div.addClass(clx);	
			}
		}
		if (!isRecommended) TB_syncFavs();
	});
	event.returnValue = false;
	event.cancel = true;
	event.preventDefault();
	event.stopPropagation();
	return false;
}
