﻿var InviteSubscribeHelper = function(config) {
	//PRIVATE VARIABLES 
	var _config = config;
	var _contentType = 'application/json; charset=utf-8';
	var _type = 'Post';
	var _dataType = 'json';
	var _page = '';
	var _emailAddress = '';
	//var _callType = 'create';

	var _currentMailProvider = 'hotmail';
	var _username = '';

	var _sendSubscriptionEmail = function(emailAddressText) {
		var url;
		if ($.trim(emailAddressText).length > 0) {
			url = _config.SubscribeToBlogUrl;
			$.getJSON(url, { emailAddress: emailAddressText }, _toggleBlock);
		}
	}

	var _toggleBlock = function(data) {
		if (data.success == true) {
			document.getElementById('emailAddress').value = '';
			alert(Resources.Invite.SubscribeSuccess);
		}
	}

	var isValidEmail = function(email) {
		var emailReg = "^[\\w-_\.+]*[\\w-_\.]\@([\\w]+\\.)+[\\w]+[\\w]$";
		var regex = new RegExp(emailReg);
		return regex.test(email);
	}

	var validateInputs = function(isManualForm) {
		var username = $('#username').val();
		var emailUsername = username + $('#mailProvider').val(); //$('#emailUsername').val();
		$('#emailUsername').val(emailUsername);
		var password = $('#password').val();
		var emailsEntered = $('#emailsEntered').val();

		if (!isManualForm) {
			if (username == '' || emailUsername == '-1' || emailUsername == '' || password == '' || !isValidEmail(emailUsername)) {
				alert(Resources.Invite.InvalidEmail);
				return false;
			}
			else {
				$('#emailUsername').val(emailUsername);
				return true;
			}
		}
		else {
			var emails = $('#emailsEntered').val();
			emails = emails.replace('\n', '');
			var emailArray = emails.split(",");

			for (var i = 0; i < emailArray.length; i++) {
				if (emailArray[i] != '') {
					if (!isValidEmail(emailArray[i])) {
						alert(Resources.Invite.InvalidEmail);
						return false;
					}
					else
						$('#emailsEntered').val(emails);
				}
			}
		}
	}


	var attachClicks = function() {

		$('#getContacts').click(function() { return validateInputs(false); });
		$('#manualInvite').click(function() { return validateInputs(true); });
		$('#invite').click(function() { window.location = _config.SendInvitesUrl; });

		attachSubscribeClick();
		attachRadioClicks();
		attachSelectClick();
		attachContactsChkClick();
		attachSubscribersChkClick();
		attachDeleteSubscribeClick();
		attachResendInviteClick();
	}

	var attachDeleteSubscribeClick = function() {
		$('#cmdDelete').click(function() {
		if ($(":checkbox[@id*=recipients_]:checked").length > 0)
			{
				var frm = document.getElementById("frmContactsInvite");
				frm.action = _config.DeleteSubUrl;
				frm.submit();
			}
			else {
				alert(Resources.Invite.SelectAnItem);
			}
		});
	}

	var attachResendInviteClick = function() {
		$('#cmdResend').click(function() {
			if ($(":checkbox[@id*=recipients_]:checked").length > 0) {
				var frm = document.getElementById("frmContactsInvite");
				frm.action = _config.ResendInviteUrl;
				frm.submit();
			}
			else {
				alert(Resources.Invite.SelectAnItem);
			}
		});
	}

	var attachSubscribeClick = function() {
		//SUBSCRIBE TO BLOG FROM BLOG PAGE
		$('#subscribeBlog').click(function() {
			emailAddressText = $('#emailAddress').val();
			if (isValidEmail(emailAddressText))
				_sendSubscriptionEmail(emailAddressText);
			else
				alert(Resources.Invite.InvalidEmail);
		});
	}

	var attachRadioClicks = function() {
		$("input[name='rdio']").click(function() {
			setSelectedProvider(this);
		});
	}

	var attachSelectClick = function() {
		$("#mailProviders").change(function() {
			setSelectedProvider(this);
		});
	}

	var attachContactsChkClick = function() {
		$("#chkToggleAll").click(function() {
			toggleAllContacts(this);
		});
	}

	var attachSubscribersChkClick = function() {
		$("#chkToggleAllSubs").click(function() {
			toggleAllSubs(this);
		});
	}

	var setSelectedProvider = function(mailProvider) {
		//if "other" radio button selected, or dropdown
		//validate to not be null??
		_username = $('#username').val()
		if (mailProvider.value == "-1" || mailProvider.name == "mailProviders") {
			// set selected index of mail providers select
			var a = $('#mailProviders');
			_currentMailProvider = mailProvider.value;
			$('#mailProvider').val(_currentMailProvider);
			$('#emailUsername').val(_username + _currentMailProvider);
			toggleMailProviders(false);
		}
		else if (mailProvider.name == "rdio") {
			_currentMailProvider = mailProvider.value;
			$('#mailProvider').val(_currentMailProvider);
			$('#emailUsername').val(_username + _currentMailProvider);
			toggleMailProviders(true);
		}
	}

	var toggleMailProviders = function(show) {
		if (show) {
			$('#mailProviders').hide();
			$('#mailProvider').show();
		}
		else {
			$('#mailProviders').show();
			$('#mailProvider').hide();
		}
	}

	var toggleAllContacts = function(cb) {
		var val = cb.checked;
		var frm = $("#frmContactList")[0];
		var len = frm.elements.length;
		var i = 0;
		for (i = 0; i < len; i++) {
			if (frm.elements[i].type == "checkbox" && frm.elements[i] != cb) {
				frm.elements[i].checked = val;
			}
		}
	}

	var toggleAllSubs = function(cb) {
		var val = cb.checked;
		var frm = $("#frmContactsInvite")[0];
		var len = frm.elements.length;
		var i = 0;
		for (i = 0; i < len; i++) {
			if (frm.elements[i].type == "checkbox" && frm.elements[i] != cb) {
				frm.elements[i].checked = val;
			}
		}
	}

	var _setup = function() {
		$.ajaxSetup({ cache: false, timeout: 10000 });

		attachClicks();

		// TOGGLE THE SUBSCRIBE OR INVITE BLOCKS//  ---------------------------------------------------------------------------------                
		if (_config.IsOwner == 1) {
			$('#OutwardFacing').remove();
			$('#InwardFacing').show();
		}
		else {
			$('#OutwardFacing').show();
			$('#InwardFacing').remove();
		}
	}

	return {
		Setup: function() {
			_setup();
		},

		Validate: function(username, emailUsername, password) {
			validateInputs(username, emailUsername, password);
		}
	}
};
