﻿

(function()
{	
	jQuery(function()
	{
		// for the iphone - scrolls the title bar up
		try { scrollTo(0, 1); } catch(e) {}

		_PrepareForm();
		_AlertUser();
		_HandleUrlify();
		
		// handle ScrollTo
		var sScrollToElement = $.GetServerValue("ScrollToSelector");
		if(sScrollToElement)
		{
			scrollTo(0, $(sScrollToElement).position().top);
		}
	});	
	
	jQuery.extend(
	{		
		SubmitEvent: function(sTarget, sType, sArgument, oElement)
		{	
			$.Watermark.HideAll();
			Nm.SubmitEvent(sTarget, sType, sArgument, oElement);
		},
		
		GetServerValue: function(sName)
		{
			return $("server[name="+sName+"]").attr("value");
		},
		
		GetServerObject: function(sName)
		{
			return JSON.FromString(decodeURIComponent($.GetServerValue(sName)));
		},
		
		EventType: function(sEventType, sElementTagName)
		{	/* (sEventType, [sElementTagName]) */
			return $([sElementTagName||"","[eventtype='",sEventType,"']"].join(""));
		},
		
		EventData: function(oEventElement)
		{
			return JSON.FromString(decodeURIComponent($(oEventElement).attr("eventdata")));
		},
		
		KeyCode: function(oEvent)
		{	/* cross browser way of getting the key code */
			return oEvent.charCode || oEvent.keyCode || 0;
		}
	});
	
	
	// private functions and variables //
	
	var _AlertUser = function()
	{
		var sControlName = $.GetServerValue("Nm.Form.AlertControlName");
		if(sControlName != null)
		{
			// attempt to focus the control and make the label red		
			$("label[for='"+sControlName+"']").css("color", "red");
			
			$("#"+sControlName).trigger("focus");
			$("#"+sControlName).trigger("select");
		}
		
		// alert the error
		var oAlerts = $.GetServerObject("Nm.Form.Alerts");
		if(oAlerts)
		{
			alert(oAlerts.join("\n\n"));
		}
	};
	
	var _PrepareForm = function() // $.GetServerObject("Nm.Form.ExecuteOnEnter");
	{
		$(":input").keydown(function(oEvent)
		{
			var nKeyCode = $.KeyCode(oEvent);
			if(nKeyCode == 10 || nKeyCode == 13)
			{
				$("[clickonenter]").trigger("click");
			}
		});
		
		// attach the inner labels 
		if($.browser.opera==false) 
		{	// do not attach to opera since the mobile browser does not fire focus/blur events
			$(":text[innerlabel]").each(function()
			{
				$(this).Watermark($(this).attr("innerlabel"));
			});
		}
	};
	
	/* Matches tel hrefs that may have been dynamically added via Urlify, tests to see if it is an IPV4 address and
	replaces the link element with the original text */
	var _HandleUrlify = function()
	{
		var oIpv4Exp = /^(25[0-5]|2[0-4]\d|[01]\d{2}|\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]\d{2}|\d{1,2})){3}$/;
		var oTels = $("a[href^=tel]");
		$.each(oTels, function()
		{
			var sText = $(this).html();
			var sHref = $(this).attr("href").replace("tel:","");
			if(oIpv4Exp.test(sHref)==true) { $(this).replaceWith(sText); }
		});
	};
})();


// Watermark extension
(function($)
{
	var map = new Array();
	
	$.Watermark =
	{
		ShowAll: function()
		{
			for (var i=0;i<map.length;i++)
			{
				if(map[i].obj.val()=="")
				{
					map[i].obj.val(map[i].text);					
					map[i].obj.css("color",map[i].WatermarkColor);
				}
				else { map[i].obj.css("color",map[i].DefaultColor); }
			}
		},
		
		HideAll: function()
		{
			for (var i=0;i<map.length;i++)
			{
				if(map[i].obj.val()==map[i].text) { map[i].obj.val(""); }
			}
		}
	}
	
	$.fn.Watermark = function(text, color)
	{
		if(!color) { color="#BBBBBB"; }
		return this.each(function()
		{
				var input=$(this);
				var defaultColor=input.css("color");
				map[map.length]={text:text,obj:input,DefaultColor:defaultColor,WatermarkColor:color};
				function clearMessage()
				{
					if(input.val()==text) { input.val(""); }
					input.css("color",defaultColor);
				}

				function insertMessage()
				{
					if(input.val().length==0 || input.val()==text)
					{
						input.val(text);
						input.css("color",color);	
					}
					else { input.css("color",defaultColor); }
				}

				input.focus(clearMessage);
				input.blur(insertMessage);								
				input.change(insertMessage);
				insertMessage();
			}
		);
	};
})(jQuery);