﻿var ajaxWebServiceUrl;
var currentPageUrl;
var homePageUrl;
var siteId;
var passwordResetUrl;
var page;
var fields = new Array();
var values;
var formError = "";
var isAllErrors = true;
var validationPageId = "";
var siteHomeUrl = "";

function ShowLoginPopup(uEmail) {
	$("#loginPopup").empty();
	$("#loginPopup").css("top", "30%");
	$("#loginPopup").jqmShow();

	$.ajax({
		type: "POST",
		async: false,
		cache: false,
		url: ajaxWebServiceUrl + "/GetLoginHtml",
		data: "{}",
		contentType: "application/json; charset=utf-8",
		dataType: "json",
		success: function(msg) {
			$("#loginPopup").append(msg.d);
			if (uEmail != null) {
				$("#loginPopup #txtEmail").val(uEmail);
				$("#loginPopup #txtPassword").focus();
			}
			else {
				$("#loginPopup #txtEmail").focus();
			}
			$("#loginPopup").unbind("keypress").keypress(function(event) {
				if (event.which == 13) {
					$("#loginPopup #btnLogin").click();
					event.returnValue = false;
					event.cancel = true;
					event.keyCode = 0;
					return false;
				}
			});
			$("#loginPopup #txtPassword").keypress(function(event) {
				if (event.which == 13) {
					$("#loginPopup #btnLogin").click();
					event.returnValue = false;
					event.cancel = true;
					event.keyCode = 0;
					return false;
				}
			});
			$("#loginPopup #txtForgotPasswordEmail").keypress(function(event) {
				if (event.which == 13) {
					$("#loginPopup #btnForgotPassword").click();
					event.returnValue = false;
					event.cancel = true;
					event.keyCode = 0;
					return false;
				}
			});

			$("#loginPopup #btnLogin").click(function() {
				if (ValidateLogin()) {
					$.ajax({
						type: "POST",
						url: ajaxWebServiceUrl + "/Authenticate",
						async: false,
						cache: false,
						data: "{'email':'" + $('#loginPopup #txtEmail').val() + "','password':'" + $('#loginPopup #txtPassword').val() + "','siteId':'" + siteId + "'}",
						contentType: "application/json; charset=utf-8",
						dataType: "json",
						success: function(msg) {
							if (msg.d == "") {
								$("#loginPopup #loginMessage").text("Login failed");
								$("#loginPopup #txtPassword").val("");
							}
							else {
								//create cookie and redirect to the same page again
								document.cookie = "VpLogin=" + msg.d + "; path=/";
								$("#loginPopup").jqmHide();
								window.location = currentPageUrl;
							}
						}
					});
				}
			});

			$("#loginPopup #btnForgotPassword").click(function() {
				if (ValidatePasswordRecovery()) {
					$.ajax({
						type: "POST",
						url: ajaxWebServiceUrl + "/ResetPassword",
						async: false,
						cache: false,
						data: "{'email':'" + $('#loginPopup #txtForgotPasswordEmail').val() + "','siteId' : '" + siteId + "','siteHomeUrl':'" + siteHomeUrl + "','passwordResetUrl':'" + passwordResetUrl + "'}",
						contentType: "application/json; charset=utf-8",
						dataType: "json",
						success: function(msg) {
							$("#loginPopup #forgotPasswordMessage").text(msg.d);
							$("#loginPopup #txtForgotPasswordUserName").val("");
							$("#loginPopup #txtForgotPasswordEmail").val("");
						}
					});
				}
			});

			$("#loginPopup #btnCancelLogin").click(function() {
				$("#loginPopup").jqmHide();
			});
		}
	});
}

$(document).ready(function() {
	$("#loginPopup").jqm(
	{
		modal: true
	});

	var cookie = document.cookie;
	if (cookie != "") {
		var keyValuePairArray = cookie.split(';');
		var isLoginCookieFound = false;
		var matchingKeyValuePair = "";
		for (var i = 0; i < keyValuePairArray.length; i++) {
			if (keyValuePairArray[i].match("VpLogin") != null) {
				isLoginCookieFound = true;
				matchingKeyValuePair = keyValuePairArray[i];
				break;
			}
		}

		if (isLoginCookieFound) {
			var name = matchingKeyValuePair.split("=");
			var valueItems = name[name.length - 1].split("^");
			var userName = valueItems[valueItems.length - 1];
			var userSiteId = valueItems[valueItems.length - 2];
			if (siteId == userSiteId) {
				$("#divLogin").append("<div class='welcome' id='welcome'>Welcome " + userName + "</div>");
				$("#btnLoginPopup").before($("#welcome"));
				$("#btnLoginPopup").text("Logout");
				$("#btnLoginPopup").attr("title", "Logout");
				$("#btnRegisterPopup").hide();
			}
			else {
				$("#btnLoginPopup").text("Login");
				$("#btnRegisterPopup").show();
			}
		}
		else {
			$("#btnLoginPopup").text("Login");
			$("#btnRegisterPopup").show();
		}
	}

	$("#btnLoginPopup").click(function() {

		if ($("#btnLoginPopup").text() == "Login") {
			ShowLoginPopup();
		}
		else {
			var date = new Date();
			date.setTime(date.getTime() + (-2 * 24 * 60 * 60 * 1000));
			document.cookie = "VpLogin=sometghing; expires=" + date.toGMTString() + "; path=/";

			window.location = currentPageUrl;
		}
	});

	$("#btnRegisterPopup").click(function() {
		$("#loginPopup").empty();
		$("#loginPopup").css("top", "5%");
		$("#loginPopup").jqmShow();
		page = 'p_0';
		values = siteId;
		$.ajax({
			type: "POST",
			async: false,
			cache: false,
			url: ajaxWebServiceUrl + "/GetRegisterUserHtml",
			data: "{'SiteId':'" + siteId + "','PageId':'" + page + "'}",
			contentType: "application/json; charset=utf-8",
			dataType: "json",
			success: function(msg) {
				$("#loginPopup").append(msg.d);

				$("#loginPopup").unbind("keypress").keypress(function(event) {
					if (event.which == 13) {
						RegisterUser();
						event.returnValue = false;
						event.cancel = true;
						event.keyCode = 0;
						return false;
					}
				});
				ShowPage(page);
				fields = $("#loginPopup #hiddenFields").text().split(',');
			}
		});
	});
	$(document).keyup(function(event) {
		if (event.keyCode == 27) {
			$("#loginPopup").jqmHide();
		}
	});
});

function RegisterUser() {
	if (Validate(true, page)) {
		SubmitForm();
		$.ajax({
		    type: "POST",
		    url: ajaxWebServiceUrl + "/RegisterPublicUser",
		    async: false,
		    cache: false,
		    data: "{'args':'" + values + "'}",
		    contentType: "application/json; charset=utf-8",
		    dataType: "json",
		    success: function(msg) {
		        var flag = msg.d.charAt(0);
		        if (flag == "-") {
		        	$("#loginPopup .formList").append("<li id='errorMessage'>" +
						RemoveMsgFlag(msg.d) +
					"</li>");
		            values = siteId;
		        }
		        else {
		            //create cookie and redirect to the same page again
		            document.cookie = "VpLogin=" + msg.d + "; path=/";
		            values = siteId;
		            $("#loginPopup").jqmHide();
		            window.location = currentPageUrl;
		        }
		    },
		    error: function(XMLHttpRequest, textStatus, errorThrown) {
		        var error = XMLHttpRequest;
		        values = siteId;
		        $("#loginPopup .formList").append("<li id='errorMessage'>User creation failed. Please try again later</li>");
		    }
		});
	}
}

function CloseModalPopup() {
	$("#loginPopup").jqmHide();
}

function ValidateLogin()
{
	var isValid = true;
	isValid = ValidateEmail("txtEmail", "rfvEmail") && isValid;
	isValid = ValidateTextBox("txtPassword", "rfvPassword") && isValid;
	return isValid;
}

function ValidatePasswordRecovery()
{
	var isValid = true;
	isValid = ValidateEmail("txtForgotPasswordEmail", "rfvForgotPasswordEmail") && isValid;
	return isValid;
}

function ValidateTextBox(textBoxId, validatorId)
{
	if ($("#loginPopup #" + textBoxId).val() == "")
	{
		$("#loginPopup #" + validatorId).css("display", "inline");
		return false;
	}
	else
	{
		$("#loginPopup #" + validatorId).css("display", "none");
		return true;
	}
}

function ValidateEmail(textboxId, validatorId) {
	var isValid = ValidateTextBox(textboxId, validatorId);
	if (isValid) {
		var regularExpression = new RegExp
			("^([\\w-]+(?:\\.[\\w-]+)*(?:[\\+]){0,1})@((?:[\\w-]+\\.)*\\w[\\w-]{0,66})\\.([A-Za-z]{2,6}(?:\\.[A-Za-z]{2})?)$");
		if ($("#loginPopup #" + textboxId).val().match(regularExpression))
		{
			return true;
		}
		else
		{
			$("#loginPopup #" + validatorId).text("Invalid email");
			$("#loginPopup #" + validatorId).css("display", "inline");
		}
		return false;
	}
	return isValid;
}

function RemoveMsgFlag(msg) {

    return msg.substring(1,msg.length);
}

function Prev(pageId) {
	ClearAllErrorMessages();
	var pages = $("#loginPopup .formHolder");
    var prevPageId;
    for (var i = 0; i < pages.length; i++) {
        var currentPageId = $(pages[i]).attr('id')
        if (currentPageId == pageId) {
            if (prevPageId != null) {
                ShowPage(prevPageId);
                page = prevPageId;
                break;
            }
        }
        prevPageId = currentPageId;
    }
    return false;
}

function Next(pageId) {
       if (Validate(false, pageId)) {
       	var pages = $("#loginPopup .formHolder");
        var isNextPage = false; ;
        for (var i = 0; i < pages.length; i++) {
            var currentPageId = $(pages[i]).attr('id')
            if (isNextPage) {
                ShowPage(currentPageId);
                page = currentPageId;
                break;
            }
            if (currentPageId == pageId) {
                isNextPage = true;
            }
        }
   }
   return false;
}

function ShowPage(pageId) {
	var pages = $("#loginPopup .formHolder");
    for (var i = 0; i < pages.length; i++) {
        if ($(pages[i]).attr('id') == pageId) {
            $(pages[i]).show();
        }
        else {
            $(pages[i]).hide();
        }
    }
}

function SubmitForm() {
    for (var i = 0; i < fields.length; i++) {
        var fieldData = new Array();
        fieldData = fields[i].split(":");
        var fieldType = fieldData[2];
        switch (fieldType) {
            case "1":
                if (typeof (values) == 'undefined') {
                	values = fieldData[0] + ":" + $("#loginPopup #" + fieldData[1]).val();
                }
                else {
                	values = values + ";" + fieldData[0] + ":" + $("#loginPopup #" + fieldData[1]).val();
                }
                break;
            case "2":
                if (typeof (values) == 'undefined') {
                	values = fieldData[0] + ":" + $("#loginPopup #" + fieldData[1]).val();
                }
                else {
                	values = values + ";" + fieldData[0] + ":" + $("#loginPopup #" + fieldData[1]).val();
                }
                break;

            case "3":
            	var checkBoxes = $("#loginPopup #" + fieldData[1] + " .checkbox");
                var selectedValues;
                for (var j = 0; j < checkBoxes.length; j++) {
                    if (checkBoxes[j].checked) {
                        if (typeof (selectedValues) == 'undefined') {
                            selectedValues = checkBoxes[j].value;
                        }
                        else {
                            selectedValues = selectedValues + "|" + checkBoxes[j].value;
                        }
                    }
                }
                if (typeof (selectedValues) == 'undefined') {
                    selectedValues = "";
                }
                if (typeof (values) == 'undefined') {
                    values = fieldData[0] + ":" + selectedValues;
                }
                else {
                    values = values + ";" + fieldData[0] + ":" + selectedValues;
                }
                break;

            case "5":
                if (typeof (values) == 'undefined') {
                	values = fieldData[0] + ":" + $("#loginPopup #" + fieldData[1]).val();
                }
                else {
                	values = values + ";" + fieldData[0] + ":" + $("#loginPopup #" + fieldData[1]).val();
                }
                break;

            case "6":
            	var radioBtns = $("#loginPopup #" + fieldData[1] + " .radio");
                for (var j = 0; j < radioBtns.length; j++) {
                    if (radioBtns[j].checked) {
                        if (typeof (values) == 'undefined') {
                            values = fieldData[0] + ":" + radioBtns[j].value;
                        }
                        else {
                            values = values + ";" + fieldData[0] + ":" + radioBtns[j].value;
                        }
                    }
                }
                
                break;

            case "12":
                if (typeof (values) == 'undefined') {
                	values = fieldData[0] + ":" + $("#loginPopup #" + fieldData[1]).val();
                }
                else {
                	values = values + ";" + fieldData[0] + ":" + $("#loginPopup #" + fieldData[1]).val();
                }
                break;
        }
    
    }
}

function Validate(isAll, pageId) {
    isAllErrors = isAll;
    validationPageId = pageId;
    ClearAllErrorMessages();
    var isValidate = ClientValidate();
    if (!isValidate) {
    	$("#loginPopup .formList").prepend("<li id='errorMessage'>" +
			$("#loginPopup #" + pageId).find(".hiddenPageError").html() +
			"</li>")
    }
    return isValidate;
}

function ValidateField(fieldType, controlId, listId, isRequired, requiredErrorMessage, shouldMatchRegex
		, regularExpression, regularExpressionErrorMessage, pageId) {
    var isValidate = true;
    if (isRequired) {
        isValidate = ValidateRequiredField(fieldType, controlId, listId, requiredErrorMessage, pageId);
    }
    if (isValidate && shouldMatchRegex) {
        isValidate = ValidateRegularExpressionField(fieldType, controlId, listId, regularExpression
			, regularExpressionErrorMessage, pageId);
    }

    return isValidate;
}

function ValidateRequiredField(fieldType, controlId, listId, requiredErrorMessage, pageId) {
    switch (fieldType) {
        case 1:
            return ValidateDropdownInput(controlId, listId, requiredErrorMessage, pageId);
        case 2:
        case 5:
        case 12:
            return ValidateTextboxInput(controlId, listId, requiredErrorMessage, pageId);
        case 3:
            return ValidateCheckboxlistInput(controlId, listId, requiredErrorMessage, pageId);
    }

    return true;
}

function ValidateRegularExpressionField(fieldType, controlId, listId, regularExpression
		, regularExpresionErrorMessage, pageId) {
    switch (fieldType) {
        case 2:
        case 5:
        case 12:
            return ValidateRegularExpression(controlId, listId, regularExpression
				, regularExpresionErrorMessage, pageId);
    }

    return true;
}


function ClearAllErrorMessages() {
	$("#loginPopup .formList").find("li#errorMessage").remove();
    $("#loginPopup .formList li").removeClass("error").find(".error").remove();
}

function ClearErrorMessage(listId) {
    $("#loginPopup li" + "#" + listId).removeClass("error").find(".error").remove();
}

function AddErrorMessage(listId, errorMessage, pageId) {
	if ($("#loginPopup").find("#" + listId + " p.error").length == 0) {
		$("#loginPopup").find("#" + listId).addClass("error").append("<p class=\"error\">" + errorMessage + "</p>");
    }
    else {
    	$("#loginPopup").find("#" + listId + " p.error").append("<br />" + errorMessage);
    }
}

function ValidateRegularExpression(controlId, listId, regularExpression, errorMessage, pageId) {
    if (ShouldValidate(controlId, pageId)) {
    	var val = $("#loginPopup #" + controlId).val();
        var regex = null;
        try {
        	regex = new RegExp(regularExpression,"i");
        }
        catch (err) {
        	return true;
        }
        if (val.match(regex) != null) {
            return true;
        }
        else {
            if (errorMessage == "") {
                errorMessage = "Value not in correct format";
            }
            AddErrorMessage(listId, errorMessage);
            return false;
        }
    }
    else {
        return true;
    }
}

function ShouldValidate(controlId, pageId) {
    if (!isAllErrors) {
    	var control = $("#loginPopup #" + validationPageId + " #" + controlId);
        if (control.length == 0) {
            return false;
        }
    }

    return true;
}

function ValidateTextboxInput(controlId, listId, errorMessage, pageId) {
    if (ShouldValidate(controlId, pageId)) {

    	var val = $("#loginPopup #" + controlId).val();
        if (val == "") {
            if (errorMessage == "") {
                errorMessage = "This field is required";
            }
            AddErrorMessage(listId, errorMessage);
            return false;
        }
        else {
            return true;
        }
    }
    else {
        return true;
    }
}

function ValidateDropdownInput(controlId, listId, errorMessage, pageId) {
    if (ShouldValidate(controlId, pageId)) {
    	var val = $("#loginPopup #" + controlId).val();
        if (val == "") {
            if (errorMessage == "") {
                errorMessage = "This field is required";
            }
            AddErrorMessage(listId, errorMessage);
            return false;
        }
        else {
            return true;
        }
    }
    else {
        return true;
    }
   }

   function RegisterDatePicker(datePickerId) {
	$(document).ready(function() {
	$("#loginPopup #" + datePickerId).datepicker(
		{
			changeYear: true
		});
	});
}

function ValidateCheckboxlistInput(controlId, listId, errorMessage, pageId) {
    if (!isAllErrors) {
    	var chk = $("#loginPopup #" + validationPageId + " #" + listId + " input[type=checkbox]");
        if (chk.length == 0) {
            return true;
        }
    }

    var status = false;
    var chkArray = $("#loginPopup #" + listId + " input[type=checkbox]");
    for (var i = 0; i < chkArray.length; i++) {
        status = $(chkArray[i]).attr('checked') || status;
    }

    if (status == false) {
        if (errorMessage == "") {
            errorMessage = "This field is required";
        }
        AddErrorMessage(listId, errorMessage);
    }

    return status;
}

function CheckRegistrationEmail(id, listId) {
    var email = $("#loginPopup #" + id).val();
    ClearErrorMessage(listId);
    if (email != "") {
    	var regularExpression = new RegExp
    		("^([\\w-]+(?:\\.[\\w-]+)*(?:[\\+]){0,1})@((?:[\\w-]+\\.)*\\w[\\w-]{0,66})\\.([A-Za-z]{2,6}(?:\\.[A-Za-z]{2})?)$")
        if (email.match(regularExpression)) {
            $.ajax({
                type: "POST",
                async: false,
                cache: false,
                url: ajaxWebServiceUrl + "/IsUserExist",
                data: "{'email' : '" + email + "','siteId' : '" + siteId + "'}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function(msg) {
                    if (msg.d) {
                        AddErrorMessage(listId, "This email is already taken. Please provide another");
                    }
                },
                error: function(XMLHttpRequest, textStatus, errorThrown) {
                    var error = XMLHttpRequest;
                }

            });
        }
    }
}

function ValidateRegistrationConfirmPassword(password, confirmPassword, pwdListId, cnfPwdListId) {
	if ($("#loginPopup #" + password).val() == $("#loginPopup #" + confirmPassword).val()) {
        return true;
    }
    else {
    	if ($("#loginPopup").find("#" + cnfPwdListId + " p.error").length == 0) {
    		AddErrorMessage(cnfPwdListId, "Passwords does not match");
    		$("#loginPopup #" + password).val("");
    		$("#loginPopup #" + confirmPassword).val("");
    		$("#loginPopup").find("#" + pwdListId).addClass("error");
    	}
    	return false;
    }
}