var CallMe =
{
	dialogId: 'callMe_dialog',
	events:
	{
		click: {name:'Click-to-call Clicked',event:'event13'},
		callInitiated: {name:'Click-to-call Call Initiated',event:'event14'}
	},
	messages: {},

	showDialog: function(link, phone)
	{
		link = $(link);
		var dialog = $(this.dialogId);
		if (dialog)
			Element.remove(dialog);
		new Insertion.Top($$('body')[0], this.dialog);
		dialog = $(this.dialogId);
		var fixNumber = function()
		{
			var input = $('callMe_number');
			input.value = input.value.replace(/[^0-9]/g, '');
		};
		new Effect.Appear(dialog,
		                  {
			                  afterFinish: function()
			                  {
				                  var input = $('callMe_number');
				                  Event.observe(input, 'keydown', function(event)
				                  {
					                  var isNum = (48 <= event.keyCode && event.keyCode <= 57) ||
							                  (96 <= event.keyCode && event.keyCode <= 105);
					                  var isControl = event.keyCode == Event.KEY_BACKSPACE ||
							                  event.keyCode == Event.KEY_LEFT ||
							                  event.keyCode == Event.KEY_RIGHT ||
							                  event.keyCode == Event.KEY_HOME ||
							                  event.keyCode == Event.KEY_END;
					                  if (!isControl && (input.value.length >= 10 || !isNum))
						                  Event.stop(event);
					                  fixNumber();
				                  });
				                  $('callMe_callMe').href = 'javascript:CallMe.call(\'' + phone + '\');';
				                  Event.observe(input, 'keyup', function(event)
				                  {
					                  if (event.keyCode == Event.KEY_RETURN)
						                  this.call(phone);
				                  }.bindAsEventListener(this));
				                  Event.observe(input, 'change', function()
				                  {
					                  fixNumber();
				                  });
				                  input.focus();
			                  }.bind(this)
		                  });
		this.sendOmnitureEvent('click', link, phone);
		_gaq.push(['_trackEvent', 'Marketing', 'Call Me Call Clicked', phone]);
	},

	sendOmnitureEvent: function(eventId, element, phone)
	{
		if (eventId && typeof s_account != 'undefined' && typeof s_gi != 'undefined')
		{
			var event = this.events[eventId];
			var s = s_gi(s_account);
			s.linkTrackVars = 'events,eVar6,eVar7';
			s.linkTrackEvents = event.event;
			s.events = event.event;
			if (this.pageName)
				s.eVar6 = this.pageName;
			if (phone)
				s.eVar7 = phone;
			s.tl(element ? element : true, 'o', event.name);
		}
	},

	close: function()
	{
		var dialog = $(this.dialogId);
		if (dialog)
			new Effect.Fade(dialog);
	},

	setDiv: function(id, wrapperId, content)
	{
		if (content && content.length > 0)
		{
			$(id).innerHTML = content;
			Element.show(wrapperId);
		}
		else
			Element.hide(wrapperId);
	},

	setError: function(error)
	{
		if (error)
			this.setStatus(null);
		this.setDiv('callMe_error', 'callMe_error', error);
	},

	setStatus: function(status)
	{
		if (status)
			this.setError(null);
		this.setDiv('callMe_statusMessage', 'callMe_status', status);
	},

	call: function(phone)
	{
		var input = $('callMe_number');
		var number = input.value;
		if (number.length == 10 && /[0-9]*/.test(number))
		{
			this.setStatus(this.messages.calling);
			input.disable();
			Element.remove('callMe_callMe');
			var params = { n: number, p: phone };
			var onSuccess = function(xmlResponse)
			{
				var json = eval(xmlResponse.responseText);
				if (json)
				{
					if (json.error)
					{
						this.setError(json.error);
					}
					else if (json.status)
					{
						if (json.status.name == 'DIALING')
						{
							this.setStatus(json.status.label);
							params.status = 'check';
							window.setTimeout(function()
							{
								new Ajax.Request("/callMe",
								                 {
									                 parameters: $H(params).toQueryString(),
									                 onSuccess: onSuccess
								                 });
							}, 2000);
						}
						else if (json.status.name == 'SUCCESS')
						{
							this.close();
						}
						else
						{
							this.setError(status.label);
							input.enable();
						}
					}
				}
			}.bind(this);
			new Ajax.Request("/callMe",
			                 {
				                 parameters: $H(params).toQueryString(),
				                 onSuccess: onSuccess
			                 });
			this.sendOmnitureEvent('callInitiated');
			_gaq.push(['_trackEvent', 'Marketing', 'Call Me Call Initiated', phone]);
		}
		else
		{
			this.setError(this.messages.invalidNumber);
		}
	}
};
