/**
 * Implémente le gap entre les specs HTML et les navigateurs en rendant utilisable l'attribut accept des champs de type file
 * Lorsqu'un fichier est sélectionné : son extension est envoyée au serveur pour en déduire son type du coté serveur
 * Si le type correspond à un de ceux renseignés dans le champ accept : le fichier est sélectionné normalement
 * Si le type ne correspond pas : l'input est vidé et un message d'erreur du BO est levé.
 * Les content type avec des jokers sont gérés : image/* accepte tous les types images, *\/* accepte tout
 *
 * L'url par défaut appelée pour récupérer les contents types peut être surchargée en renseignant la variable "wedia.wxm.bov3.params.urls.get_content_type" avec le chemin relatif à cette dernière
 * Cette url recoit un ou plusieurs paramètres ext et envoit un objet json du type {"ext1": "content_type1", "ext2":"content_type2"}
 *
 */
jQuery(document).ready(function($) {
	"wedia.wxm.bov3.params.urls".namespace({get_content_type: "/bov3/common/actions/get_content_type.jspz"});
	var GET_CONTENT_TYPE_URL = "/bov3/common/actions/get_content_type.jspz";
	$("body").delegate("input:file[accept]", "change", function() {
		var $this = $(this);
		var filename = $this.val();
		var ext = filename.match(/\.([^\.]+)$/)[0].toLowerCase();
		var accepts = $this.attr('accept').split(',');
		function parse_content_type(s_content_type) {
			var accept = s_content_type.trim().split("/");
			return {type: accept[0], subtype: accept[1]};
		};
		var filtered = true;
		for( var i in accepts ) {
			accepts[i] = parse_content_type(accepts[i]);
			if( accepts[i].type == '*' && accepts[i].subtype == '*' ) filtered = false;
		}
		if( filtered ) {	/* Pas la peine de requeter si on veut tout */
			$.get(boState.getContextPath() + wedia.wxm.bov3.params.urls.get_content_type, {ext: ext}, function(ctypes) {
				var s_content_type = ctypes[ext];
				if( s_content_type ) {
					var content_type = parse_content_type(s_content_type);
					for( var i in accepts ) {
						var accept = accepts[i];
						if( (accept.type == content_type.type || accept.type == '*')
							&& ( accept.subtype == content_type.subtype || accept.subtype == '*' )
						) return;
					}
					var title = boi18n.getMessage('/bov3/wcm', 'content_type_refused_by_field {0}', ext);
					boError.setTitle(title).show();
					$this.val("");
				} else {
					var title = boi18n.getMessage('/bov3/wcm', 'content_type_unknown for {0}', ext);
					boError.setTitle(title).show();
					$this.val("");
				}
			});
		}
	});
});

