/*
	Add class to external links and make them open in new window
*/
(function($){
	$.scf.behavior.add('sml_browseaway_Behavior', {
		attach: function(el, options, j){

			if(typeof($.fn.dialog) == 'undefined')
				return; // jQuery.ui dialog not found


			// Get the hostheader from the request.
			var hostHeader = null, rx = /^\s*(http:\/\/[\w\.\-]+)/, match = rx.exec(window.location);
			if (match != null && match.length == 2)
				hostHeader = match[1] + "/";

			var h = options.hostheaders;
			if(options.blacklist){
				if(h) h+=",";
				h+=options.blacklist;
			}
			if(!h)h=hostHeader;

			$.extend(options, {
				strings: {
					cancel: "Nee",
					ok: "Ja",
					navigateTo: "Navigeren naar {0}?",
					extCaption: "Externe link openen",
					docCaption: "Document openen"
				},
				extensions: "doc,docx,ppt,pptx,pps,ppsx,pdf"
			});

			options.hosts = h.split(',');

			options.ext = options.extensions.split(',');
			if(options.warningText)
				options.strings.navigateTo = options.warningText;
			if(options.extCaption)
				options.strings.extCaption = options.extCaption;
			if(options.docCaption)
				options.strings.docCaption = options.docCaption;

			var dlg = $("<span></span>").css({fontSize: 'small'});
			dlg.appendTo(j);

			j.addClass("browse-away");

			dlg.dialog({
				autoOpen: false,
				draggable: false,
				resizable: false,
				width: '400px',
				modal: true
			});


			function isDocExt(url){
				for(var e in options.ext){
					var ex = options.ext[e];
					var p = url.lastIndexOf(".")
					if(p != -1){
						if(url.substr(p, ex.length+1) == "." + ex)
							return true;
					}
				}
				return false;
			}

			function isLocal(url){
				var p = url.indexOf("//");
				if(p == -1)
					return true;
				var prot = url.substr(0, p-1);

				if(prot.substr(0, 4)!='http')
					return true;

				p = url.indexOf("/", p+2);
				if(p==-1)url+="/";

				for(var e in options.hosts){
					if(url.indexOf(options.hosts[e]) == 0)
						return true;
				}
				return false;
			}


			j.bind("click", function(e){
				if(e.target.tagName == 'A'){
					var a = $(e.target), url = a.attr("href");

					var exclude = (options.excludeClass != null && (a.hasClass("." + options.excludeClass) 
						|| a.closest("." + options.excludeClass).length>0));

					var doc = isDocExt(url), ext = !isLocal(url);

					if(!exclude && (doc == true || ext == true)){
						var confirm = (ext && options.confirmExt) || (doc && options.confirmDoc);

						if(confirm){
							e.stopImmediatePropagation();
							e.stopPropagation()
							e.preventDefault();

							dlg.html(options.strings.navigateTo.replace('{0}', url)).dialog({
								title: (doc ? options.strings.docCaption : options.strings.extCaption),
								buttons : {
									Ja : function() {
										window.open(url);
										dlg.dialog("close");
										return true;
									},
									Nee : function() {
										dlg.dialog("close");
										window.location.href = url;
										return false;
									}
								}
							});

							dlg.dialog("open");

						}
						else
							window.open(url);

						return false;
					}
				}
			});
		}
	})
})(jQuery);
