window.$login_status = false;

window.$active_lead_id = null;
window.$active_dialog = null;

window.$login_Tries = 0;
window.$login_max_Tries = 3;

window.$phoneNumber = null;

var EVENT_TYPE_VIEW_WEBSITE    = 1;
var EVENT_TYPE_SCHEDULE_ONLINE = 2;
var EVENT_TYPE_VIEW_PHONE      = 3;
var EVENT_TYPE_CLICK_TO_CALL   = 4;

function loggedin(status)
{
	if(typeof status != 'undefined')
	{
		window.$login_status = status;
	}

	if(window.$login_status)
	{
		$('.leadRegistrationForm').remove();
	}
	return window.$login_status;
}

function registerLoginForm(email,id)
{
	var message;
	var $phone = $('#RegistrationPhone_'+id);

//	console.log('registration form',$phone);

	message = 
		'This email is already in use for an existing PriceDoc Member. Please enter your password to proceed or if you prefer, close this window and enter a different email address.'+
		'<form class="loginForm">'+
			'<input type="hidden" id="loginFormEmail_'+id+'" name="email" value="'+email+'" />';

	if($phone.length)
	{
		message+=
			'<input type="hidden" id="loginFormPhone_'+id+'" name="phone" value="'+$phone.val().replace(/[^0-9]/g,"")+'" />';
	}

	message+=
			'<input type="hidden" name="id" value="'+id+'" />'+
			'<input type="password" class="ui-corner-all" id="loginFormPassword_'+id+'" name="password" />'+
			'<button status="false" class="fg-button ui-state-default ui-corner-all" type="submit">Go</button>'+
		'</form>';

	return message;
}

function loginForm(email,id)
{
	var message;
	var $phone_login = $('#LoginPhone_'+id);
	var $phone_registration = $('#RegistrationPhone_'+id);
	var phone;

	var noPhone = false;

	if($phone_login.length && $phone_login.val().length)
	{
		phone = $phone_login.val().replace(/[^0-9]/g,"");
	}
	else if($phone_registration.length && $phone_registration.val().length)
	{
		phone = $phone_registration.val().replace(/[^0-9]/g,"");
	}
//	else
//	{
//		noPhone = true;
//	}

//	console.log('Login form',$phone);

	if(window.$login_Tries > window.$login_max_Tries)
	{
		message = 'Please contact us at: 877.783.2771';
	}
	else
	{
		message =
			'(try ' + window.$login_Tries + ') password Incorrect:<br />Try Again:'+
			'<form class="loginForm">'+
				'<input type="hidden" id="loginFormEmail_'+id+'" name="email" value="'+email+'" />';

		if($phone_login.length)
		{
			message+=
				'<input type="hidden" id="loginFormPhone_'+id+'" name="phone" value="' + phone + '" />';
		}
		else if(noPhone)
		{
			message+=
				'<input type="text" id="loginFormPhone_'+id+'" class="PhoneNumber" name="phone">';
		}

		message+=
				'<input type="hidden" name="id" value="'+id+'" />'+
				'<input type="password" class="ui-corner-all" id="loginFormPassword_'+id+'" name="password" />'+
				'<button status="false" class="fg-button ui-state-default ui-corner-all" type="submit">Go</button>'+
				'<br /><a href="' + window.$website_info.webroot + 'myPriceDoc/newpass.php">Forgot Password</a>'+
			'</form>';
	}
	return message;
}

function validateInit(id)
{
	var $formType = $('#formType_'+id).val();
//	console.log($formType+id);
	switch($formType)
	{
		case 'login':
			Validation.startInputValidation({
				input: document.getElementById('login_'+id),
				validationFunction: Generics.validation.validateEmail,
				errorClass: 'inputError',
				validateOnBlur: true,
				validateOnChange: false,
				validateOnKeyup: false
			});

			Validation.startInputValidation({
				input: document.getElementById('password_'+id),
				validationFunction: Generics.validation.validateNonEmpty,
				errorClass: 'inputError',
				validateOnBlur: true,
				validateOnChange: false,
				validateOnKeyup: false
			});

			if($('#LoginPhone_'+id).length)
			{
				Validation.startInputValidation({
					input: document.getElementById('LoginPhone_'+id),
					validationFunction: Generics.validation.validateNonEmpty,
					errorClass: 'inputError',
					validateOnBlur: true,
					validateOnChange: false,
					validateOnKeyup: false
				});
			}

			break;

		case 'registration':
			Validation.startInputValidation({
				input: document.getElementById('name_'+id),
				validationFunction: function(param){
					return (Generics.validation.validateNonEmpty(param) && param.split(' ').length >= 2);
				},
				errorClass: 'inputError',
				validateOnBlur: true,
				validateOnChange: false,
				validateOnKeyup: false
			});

			Validation.startInputValidation({
				input: document.getElementById('email_'+id),
				validationFunction: Generics.validation.validateEmail,
				errorClass: 'inputError',
				validateOnBlur: true,
				validateOnChange: false,
				validateOnKeyup: false
			});

			if($('#RegistrationPhone_'+id).length)
			{
				Validation.startInputValidation({
					input: document.getElementById('RegistrationPhone_'+id),
					validationFunction: Generics.validation.validateNonEmpty,
					errorClass: 'inputError',
					validateOnBlur: true,
					validateOnChange: false,
					validateOnKeyup: false
				});

			}
			break;
	}
}

function checkPhone()
{
	var $json;
	$.ajax({
		type: 'GET',
		url: window.$website_info.webroot + 'search/searchLeads.ajax.php',
		dataType: 'json',
		data: {
			checkPhone:true
		},
		success: function(json) {
			$json = json;
		},
		async: false
	});
	return Boolean($json.status);
}

function getContactPhone(id,registeration_form_submit)
{

		var message =
			'<form id="provide_phone">' +
			'<p>This Provider Requires your Phone Number.</p>' +
			'<input type="text" id="NewPhoneInput" name="phone" />'+
			'</form>';

		$('#provide_phone').live('submit', function(){

			Validation.validateInput({
				input: document.getElementById('NewPhoneInput'),
				validationFunction: function(param){
					var test = param.replace(/[^0-9]/g,"");
					return (Generics.validation.validateNonEmpty && test.length == 10)
				},
				errorClass: 'inputError'
			});

			if($('#NewPhoneInput').hasClass('inputError'))
			{
				//Invalid Input !
				DialogFactory.openDialog({
					message: 'One or more of the fields are invalid.<br />Please correct the errors and try again.',
					title: 'Error',
					modal: true
				});
				return false;
			}

			$.getJSON(
				window.$website_info.webroot + 'search/searchLeads.ajax.php',
				{
					checkPhone:true,
					phone:$('#NewPhoneInput').val().replace(/[^0-9]/g,"")
				},
				function(){
					$('#leadRequirePhone_'+id).val('false');
					record_lead(id,registeration_form_submit);
				}
			);

			return false;
		});

		window.$active_dialog = DialogFactory.openDialog({
			message: message,
			title: 'Request',
			modal: true,
			width: 400,
			buttons: {
				'Submit':function(){
					$('#provide_phone').submit();
				}
			}
		});
		$('#NewPhoneInput').mask('(999) 999-9999');
}

function submit_lead(eventType,provider_id,proc_id)
{
	$.getJSON(window.$website_info.webroot + 'search/searchLeads.ajax.php', {
		pid:provider_id,
		lt:eventType,
		proc_id:proc_id
	});
}

function record_lead(id,registeration_form_submit)
{

	if(window.$active_dialog != null)
	{
		$(window.$active_dialog.dialogDiv).dialog('close');
	}

	if(typeof registeration_form_submit == 'undefined')
	{
		registeration_form_submit = false;
	}
	else
	{
		registeration_form_submit = true;
	}

	if($('#leadRequirePhone_'+id).val() == 'true' && !checkPhone())
	{
		getContactPhone(id,registeration_form_submit);
		return false;
	}

	var url,lt,phone,phone1,phone2,phone3;
	var eventType    = $('#leadActionType_'+id).val();
	var provider_id  = $('#leadProvider_'+id).val();
	var proc_id = $('#leadProc_'+id).val();

	if(!registeration_form_submit)
	{
		$('#action_'+id+'.leadActions').slideUp('fast');

		switch(parseInt(eventType))
		{
			case EVENT_TYPE_VIEW_WEBSITE:
				submit_lead(eventType,provider_id,proc_id);
				return true;
				break;

			case EVENT_TYPE_SCHEDULE_ONLINE:
				submit_lead(eventType,provider_id,proc_id);
				return true;
				break;
			case EVENT_TYPE_CLICK_TO_CALL:
				submit_lead(eventType,provider_id,proc_id);
				return true;
				break;

			case EVENT_TYPE_VIEW_PHONE:
				$('#action_'+id+'.leadActions')
					.slideDown('fase');
				phone = $('#use_view_phone_'+id).attr('data');
				phone1 = phone.substring(0,3);
				phone2 = phone.substring(3,6);
				phone3 = phone.substring(6,10);
				$('button#submit_'+id+'.submit_button')
					.hide()
					.after('<span id="phone_'+id+'" class="submit_button">('+phone1+') '+phone2+'-'+phone3+'</span>');
				submit_lead(eventType,provider_id,proc_id);
				return false;
				break;
		}
	}
	else
	{
		switch(parseInt(eventType))
		{
			case EVENT_TYPE_VIEW_WEBSITE:
				url = $('#use_view_website_'+id);
				lt = url.attr('event_type');
				window.location.href = window.$website_info.webroot + 'search/url.php?lt='+lt+'&pid='+provider_id+'&procId='+proc_id;
				return true;
				break;

			case EVENT_TYPE_SCHEDULE_ONLINE:
				url = $('#use_schedule_online_'+id);
				lt = url.attr('event_type');
				window.location.href = window.$website_info.webroot + 'search/url.php?lt='+lt+'&pid='+provider_id+'&procId='+proc_id;
				return true;
				break;
			case EVENT_TYPE_CLICK_TO_CALL:
				url = $('#use_click2call_'+id);
				lt = url.attr('event_type');
				window.location.href = window.$website_info.webroot + 'search/url.php?lt='+lt+'&pid='+provider_id+'&procId='+proc_id;
				return true;
				break;

			case EVENT_TYPE_VIEW_PHONE:
				$('#action_'+id+'.leadActions').slideDown('fast');
				phone = $('#use_view_phone_'+id).attr('data');
				phone1 = phone.substring(0,3);
				phone2 = phone.substring(3,6);
				phone3 = phone.substring(6,10);
				$('button#submit_'+id+'.submit_button')
					.hide()
					.after('<span id="phone_'+id+'" class="submit_button">('+phone1+') '+phone2+'-'+phone3+'</span>');
				submit_lead(eventType,provider_id,proc_id);
				return false;
				break;
		}
	}
}

function click_event()
{
	var id = $(this).attr('rel');
	var eventType = $(this).attr('event_type');
	var proc_id = $(this).attr('proc_id');
	var BlockValue = 0;
	var leadsource = '';

	//build BlockArray
	switch(parseInt(eventType)){
		case 1:
			leadsource = 'view_website';
			break;
		case 2:
			leadsource = 'schedule_online';
			break;
		case 3:
			leadsource = 'view_phone';
			break;
		case 4:
			leadsource = 'click2call';
			break;
		default:
			leadsource = 'error';
			break;
	}

	var req_phone = $('#require_phone_'+leadsource+'_'+id).val();
	var req_email = $('#require_email_'+leadsource+'_'+id).val();
	var req_fname = $('#require_firstname_'+leadsource+'_'+id).val();
	var req_lname = $('#require_lastname_'+leadsource+'_'+id).val();

	//Check Lead Settings, determine if we need to block this lead button until login
	var totalrequired = parseInt(req_phone)+parseInt(req_email)+parseInt(req_fname)+parseInt(req_lname);
	if(parseInt(totalrequired) > 0){
		BlockValue = parseInt(eventType);
	}
	
	window.$active_lead_id = id;

	$('#leadActionType_'+id).val(eventType);

	$('.leadActions').slideUp('fast');

	//BLOCK ACCESS TO LEAD per lead settings
	if(!loggedin() && parseInt(eventType)==parseInt(BlockValue))
	{
		var buttonName;

		switch(parseInt(eventType))
		{
			case EVENT_TYPE_VIEW_WEBSITE:
				buttonName = 'Go to Website';
				$('#phone_'+id).hide();
				$('.leadRegistrationForm').show();
				$('.fieldtoggle').show();
				break;

			case EVENT_TYPE_SCHEDULE_ONLINE:
				buttonName = 'Go to Online Scheduling';
				$('.leadRegistrationForm').show();
				$('#phone_'+id).hide();
				$('.fieldtoggle').show();
				break;
			case EVENT_TYPE_CLICK_TO_CALL:
				buttonName = 'Go to Click To Call Window';
				$('.leadRegistrationForm').show();
				$('#phone_'+id).hide();
				break;

			case EVENT_TYPE_VIEW_PHONE:
				buttonName = 'View Phone Number';
				break;
		}

		$('#action_'+id+'.leadActions')
			.slideUp('fast',function(){
				$('#action_'+id+'.leadActions form [name]')
					.removeClass('inputError')
					.val('');

				$('#submit_'+id).text(buttonName);
			})
			.slideDown('fast',function(){
				/*
				 * THIS IS A RAN-HACK
				 */
				window.HACK = this;
				setTimeout(
					function()
					{
						$(window.HACK).css('display','').css('display','block');
					},
					1
				);
			});


		validateInit(id);
		return false;
	}
	else
	{
		if(parseInt(eventType)==EVENT_TYPE_VIEW_PHONE){

			$('.leadRegistrationForm').hide();
			$('.fieldtoggle').hide();
		}
		return record_lead(id);
	}
}

function form_submit(id)
{
	var $formType = $('#formType_'+id).val();
	window.$active_lead_id = id;
	switch($formType)
	{
		case 'login':
			form_login(id);
			break;
		case 'registration':
			form_registration(id);
			break;
	}
}

function form_login(id)
{
	Validation.validateInput({
		input: document.getElementById('login_'+id),
		validationFunction: Generics.validation.validateEmail,
		errorClass: 'inputError'
	});

	Validation.validateInput({
		input: document.getElementById('password_'+id),
		validationFunction: Generics.validation.validateNonEmpty,
		errorClass: 'inputError'
	});

	if($('#LoginPhone_'+id).length)
	{
		Validation.validateInput({
			input: document.getElementById('LoginPhone_'+id),
			validationFunction: Generics.validation.validateNonEmpty,
			errorClass: 'inputError'
		});

	}

	if(
		$('#login_'+id).hasClass('inputError') ||
		$('#password_'+id).hasClass('inputError') ||
		$('#LoginPhone_'+id).hasClass('inputError')
	)
	{
		//Invalid Input !
		DialogFactory.openDialog({
			message: 'One or more of the fields are invalid.<br />Please correct the errors and try again.',
			title: 'Error',
			modal: true
		});
		return;
	}

	//All inputs are valid - submit data to server
	var $login    = $('#login_'+id).val();
	var $password = $('#password_'+id).val();
	var $phone;

	if($('#LoginPhone_'+id).length)
	{
		$phone = $('#LoginPhone_'+id).val().replace(/[^0-9]/g,"");
		login_ajax($login, $password, id, $phone);
	}
	else
	{
		login_ajax($login, $password, id);
	}
}

function login_ajax($login, $password, id, $phone)
{

	var json = null;
	var submit_date = {
		action: 'login',
		login: $login,
		password: $password
	};
	
	var phone = $phone || false;
	if(phone)
	{
		submit_date.phone = phone;
	}

	AjaxHelpers.sendRequest({
		data: submit_date,
		url: window.$website_info.webroot + 'myPriceDoc/login.ajax.php',
		type: 'get',
		onValid: function(data, textStatus)
		{
		
			try{
				eval('json = '+data);
			}catch(e){}

			if(null == json)
			{
				window.$active_dialog = DialogFactory.openDialog({
					message: 'Something Failed',
					title: 'Request Submitted',
					modal: true
				});
				return;
			}
			if(json.status)
			{
				loggedin(json.status);
				record_lead(id,true);
			}
			else
			{
				window.$login_Tries++;
				var message = loginForm($login,id);
				var windowOptions = {
					dialogClass:'login_dialog',
					reserve: true,
					message: message,
					title: 'Password Incorrect',
					modal: true,
					buttons: {}
				};

				if(window.$active_dialog != null)
				{
					windowOptions.dialog = window.$active_dialog;
				}

				window.$active_dialog = DialogFactory.openDialog(windowOptions);
			}
		},
		onExplicitlyInvalid: function(data, textStatus)
		{
			window.$active_dialog = DialogFactory.openDialog({
				message: data,
				title: 'Request Failed',
				modal: true
			});
		},
		onImplicitlyInvalid: function(data, textStatus)
		{
			window.$active_dialog = DialogFactory.openDialog({
				message: 'An unexpected error has occured. Please contact the site\'s management.',
				title: 'Request Failed',
				modal: true
			});
		},
		onError: function(xhr, textStatus, errorThrown)
		{
			window.$active_dialog = DialogFactory.openDialog({
				message: 'A server error has occured. Please contact the site\'s management.',
				title: 'Request Failed',
				modal: true
			});
		},
		validResponseIndicator: 'OK',
		invalidResponseIndicator: 'BAD'
	});
	return false;
}

function form_registration(id)
{
	Validation.validateInput({
		input: document.getElementById('name_'+id),
		validationFunction: function(param){
			return (Generics.validation.validateNonEmpty(param) && param.split(' ').length >= 2);
		},
		errorClass: 'inputError'
	});

	Validation.validateInput({
		input: document.getElementById('email_'+id),
		validationFunction: Generics.validation.validateEmail,
		errorClass: 'inputError'
	});

	if($('#RegistrationPhone_'+id).length)
	{
		Validation.validateInput({
			input: document.getElementById('RegistrationPhone_'+id),
			validationFunction: Generics.validation.validateNonEmpty,
			errorClass: 'inputError'
		});
	}

	if(
		$('#email_'+id).hasClass('inputError') ||
		$('#name_'+id).hasClass('inputError') ||
		$('#RegistrationPhone_'+id).hasClass('inputError')

	)
	{
		//Invalid Input !
		window.$active_dialog = DialogFactory.openDialog({
			message: 'One or more of the fields are invalid.<br />Please correct the errors and try again.',
			title: 'Error',
			modal: true
		});
		return;
	}

	//All inputs are valid - submit data to server
	var $email = Base64.encode($('#email_'+id).val());
	var $name = Base64.encode($('#name_'+id).val());
	var $phone;

	var submit_date = {
		action: 'newuserLead',
		email: $email,
		name: $name
	};

	if($('#RegistrationPhone_'+id).length)
	{
		$phone = $('#RegistrationPhone_'+id).val().replace(/[^0-9]/g,"");
		submit_date.phone = Base64.encode($phone);
	}

	AjaxHelpers.sendRequest({
		data: submit_date,
		url: window.$website_info.webroot + 'myPriceDoc/login.ajax.php',
		type: 'get',
		//method: null,
		onValid: function(data, textStatus)
		{
			var json = null;
			try{
				eval('json = '+data);
			}catch(e){}

			if(null == json)
			{
				window.$active_dialog = DialogFactory.openDialog({
					message: 'Something Failed',
					title: 'Request Submitted',
					modal: true
				});
				return;
			}
			if(json.status)
			{
				loggedin(json.status);
				record_lead(id,true);
			}
			else
			{
				var login = $('#email_'+id).val();
				var message = registerLoginForm(login,id);
				window.$active_dialog = DialogFactory.openDialog({
					dialogClass:'login_dialog',
					message: message,
					title: 'Email Already in Use',
					modal: true
				});
			}
		},
		onExplicitlyInvalid: function(data, textStatus)
		{
			window.$active_dialog = DialogFactory.openDialog({
				message: data,
				title: 'Request Failed',
				modal: true
			});
		},
		onImplicitlyInvalid: function(data, textStatus)
		{
			window.$active_dialog = DialogFactory.openDialog({
				message: 'An unexpected error has occured. Please contact the site\'s management.',
				title: 'Request Failed',
				modal: true
			});
		},
		onError: function(xhr, textStatus, errorThrown)
		{
			window.$active_dialog = DialogFactory.openDialog({
				message: 'A server error has occured. Please contact the site\'s management.',
				title: 'Request Failed',
				modal: true
			});
		},
		validResponseIndicator: 'OK',
		invalidResponseIndicator: 'BAD'
	});
}

$(function(){

	$('.leadButtons').show();

	$('.PhoneNumber').mask("(999) 999-9999");

	$('#newUser').live('click',function(){
		$('#formType_'+window.$active_lead_id).val('registration');
		$(window.$active_dialog.dialogDiv).dialog('close');
		$('.lead.login').hide();
		$('.lead.registration').show();
		return false;
	});

	$('a.use_view_website, a.use_schedule_online, a.use_view_phone, a.use_click2call').click(click_event);
	
	$.getJSON(window.$website_info.webroot + 'myPriceDoc/login.ajax.php', {action:'loginStatus'}, function(json)
	{
		loggedin(json.status);
	});

	$('button.close_action').click(function()
	{
		var id = $(this).attr('rel');
		$('#action_'+id+'.leadActions').slideUp('fast');
	});

	if($.cookie('registered_email') != null && $.cookie('registered_email') == '1')
	{
		$('.lead.login').show();
		$('.lead.registration').hide();
	}
	else
	{
		$('.lead.login').hide();
		$('.lead.registration').show();
	}

	$('.submitALead').submit(function()
	{
		var id = $(this).attr('submit_id');
		$.getJSON(window.$website_info.webroot + 'myPriceDoc/login.ajax.php', {action:'loginStatus'}, function(json)
		{
			if(!json.status)
			{
				form_submit(id);
			}
			else
			{
				loggedin(json.status);
				record_lead(id);
			}
		});
		return false;
	});

	$('.loginForm').live('submit',function(){

		var id = $(this).find('input[name="id"]').val();
		var $login = $('#loginFormEmail_'+id).val();
		var $password = $('#loginFormPassword_'+id).val();
		var $phone;
		
		if($('#loginFormPhone_'+id).length)
		{
			$phone = $('#loginFormPhone_'+id).val();
			login_ajax($login, $password, id, $phone);
		}
		else
		{
			login_ajax($login, $password, id);
		}

		return false;
	});
});
