function create_call_me_form() {
	$("#container").append('' +
		'<div id="callme_dialog" title="Call">' +
			'<form id="callme_form" onsubmit="return false;">' +
				'<p>By entering your phone number, we will call you and then connect '+
				'you directly to the restaurant to place your order.</p>' +
				'<input type="hidden" name="callme_object_id" id="callme_object_id" value="0" />' +
				'<label>Your Phone Number</label>' +
				'<div class="left">' +
					'<input type="text" name="callme_phone" id="callme_phone" style="width:150px;" />' +
				'</div>' +
				'<div class="left" style="padding-left: 10px; margin-top: -2px;">' +
					'<button id="callme_submit_btn" class="submit dt_btn">Connect Me</button>' +
				'</div>' +
			'</form>' +
			'<div id="callme_messages" style="display:none"></div>' +
			'<div id="callme_closing_msg" style="display:none"></div>' +
		'</div>'
	);
}

var dialog;
var form;
var phone;
var messages;
var closing_msg;
var canClose = true;
var closeTime = 10; //in seconds
var secondElapsed = -1; //in seconds
var timer;
connecting_message = '<span>'+
	'Connecting your call...'+
'</span>';

success_message = '<span style="color:green">'+
	'Call connected.'+
'</span>';

close_message = '<span style="color:red">'+
	'We cannot place the call because the merchant is likely closed.'+
'</span>';

error_message = '<span style="color:red">'+
	'There was a problem connecting your call. Please try again later.'+
'</span>';

autoclosing_message = 'Dialog will automatically close in {0} second(s)';

function processPhone() {
	phone.val(phone.val().replace("(","").replace(")","").replace(".","").replace("-","").replace(" ",""));
	phone.removeClass("ui-state-error");
	
	if ( phone.val().length == 10 && !isNaN(phone.val()) ) {
		canClose = false;
		$.ajax({
			url: "/sip/callme",
			type: "post",
			data: { object_id: $("#callme_object_id").val(), phone: phone.val() },
			beforeSend: function(jqXHR, settings) {
				form.hide();
				messages.html(connecting_message).show();
				return true;
			},
			success: function(response, textStatus, jqXHR){
				messages.html(success_message);
			},
			error: function(jqXHR, textStatus, errorThrown){
				if (jqXHR.response == "Merchant not Open") {
					messages.html(close_message);
				} else {
					messages.html(error_message);
				}
			},
			complete: function(){
				closeBox();
				canClose = true;
			}
		});
	} else {
		phone.addClass("ui-state-error");
	}
}

function closeBox() {
	secondElapsed += 1;
	closing_msg.html(autoclosing_message.replace("{0}", closeTime - secondElapsed)).show()
	if (secondElapsed > closeTime) {
		dialog.dialog("close");			
	} else {
		timer = setTimeout("closeBox()",1000);
	}
}

$(function() {
	var detected_link = false;
	$('.callme_link').each(
		function(index, element){
			detected_link = true;
			$(element).click(
				function() {
					object_id = $(element).attr('object_id');
					object_name = $(element).attr('object_name');
					
					if (object_id && object_name) {
						$('#callme_object_id').val(object_id);
						$('#callme_dialog').attr('title','Calling: ' + object_name).dialog("open");
						$('#ui-dialog-title-callme_dialog').html('<span class="calling">Calling:</span> ' + object_name);
					}
				}
			)
		}
	)
	if (detected_link) {
		create_call_me_form();
		dialog = $('#callme_dialog');
		form = $('#callme_form');
		phone = $("#callme_phone");
		messages = $('#callme_messages');
		closing_msg = $('#callme_closing_msg');
		
		phone.keypress(function(e){
			if(e.which == 13) {
				processPhone();
			}
		});
		$("#callme_submit_btn").click(function(e){processPhone();});
		phone.val($("#callme_phone_number").html().trim().replace("(","").replace(")","").replace(".","").replace("-","").replace(" ",""));
		
		dialog.dialog({
			autoOpen: false,
			//height: 120,
			width: 400,
			modal: true,
			position: 'top',
			draggable: false,
			resizable: false,
			beforeclose : function() { return canClose; },
			close: function() {
				phone.removeClass( "ui-state-error" );
				form.show();
				messages.hide();
				closing_msg.hide();
				secondElapsed = -1;
				clearTimeout(timer);
			}
		});
	}
});
