﻿(function($) {
    
    $.validateChangedUser = function(callbackEvent, email, emailErrorElementId, retypedEmail, retypedEmailErrorElementId, password, passwordErrorElementId, retypedpassword, retypedPasswordElementId, userExistsElementId, alias, aliasExistsElementId) {
        $(".error").hide();
        var ErrorMessageObject = new Object();
        var valid = true;
        
        ErrorMessageObject.EmailElementId = emailErrorElementId;
        ErrorMessageObject.RetypedEmailErrorElementId = retypedEmailErrorElementId;
        ErrorMessageObject.PasswordElementId = passwordErrorElementId; 
        ErrorMessageObject.RetypedPasswordErrorElementId = retypedPasswordElementId;
        ErrorMessageObject.PasswordElementId = passwordErrorElementId;
        
        if ($.validateString(email) || $.validateString(retypedEmail))
        {
            if (!$.validateString(retypedEmail))
            {
                valid = false;
                ErrorMessageObject.NoRetypedEmail = true;
            }
            if (!$.validateString(email))
            {
                valid = false;
                ErrorMessageObject.NoEmail = true;
            }
            
            if (valid && retypedEmail != email)
            {
                valid = false;
                ErrorMessageObject.EmailsNoMatch = true;
            }
            else if (!$.validateEmailPattern(email)) {
                ErrorMessageObject.EmailError = true;
                valid = false;
            }
        }
        
        if ($.validateString(password) || $.validateString(retypedpassword))
        {        
            if (!$.validateString(retypedpassword))
            {
                valid = false;
                ErrorMessageObject.NoRetypedPassword = true;
            }
            if (!$.validateString(password))
            {
                valid = false;
                ErrorMessageObject.NoPassword = true;
            }
            
            if (retypedpassword != password)
            {
                valid = false;
                ErrorMessageObject.PasswordsNoMatch = true;
            }
            if ($.validateString(password) && !$.validatePasswordPattern(password)) {
                ErrorMessageObject.PasswordError = true;
                valid = false;
            }
        }
        if (!valid) {
            ErrorMessageObject.CallName = 'User';
            $.getErrorMessages(ErrorMessageObject, callbackEvent);
        }

        else if ($.validateString(email) || $.validateString(alias)) $.validateUserExists(email, callbackEvent, userExistsElementId, alias, aliasExistsElementId);
        
        else callbackEvent(true, "User");
    }
    
    $.validateNewUser = function(callbackEvent, email, emailErrorElementId, retypedEmail, retypedEmailErrorElementId, password, passwordErrorElementId, retypedpassword, retypedPasswordElementId, conditionsChecked, conditionsErrorElementId, userExistsElementId, alias, aliasExistsElementId) {
        $(".error").hide();
        var ErrorMessageObject = new Object();
        var valid = true;
        
        ErrorMessageObject.EmailElementId = emailErrorElementId;
        ErrorMessageObject.RetypedEmailErrorElementId = retypedEmailErrorElementId;
        ErrorMessageObject.PasswordElementId = passwordErrorElementId; 
        ErrorMessageObject.RetypedPasswordErrorElementId = retypedPasswordElementId;
        ErrorMessageObject.PasswordElementId = passwordErrorElementId;
        
        if (!$.validateString(retypedEmail))
        {
            valid = false;
            ErrorMessageObject.NoRetypedEmail = true;
        }
        if (!$.validateString(email))
        {
            valid = false;
            ErrorMessageObject.NoEmail = true;
        }
        
        if (valid && retypedEmail != email)
        {
            valid = false;
            ErrorMessageObject.EmailsNoMatch = true;
        }
        else if (!$.validateEmailPattern(email)) {
            ErrorMessageObject.EmailError = true;
            valid = false;
        }
        
        var passwordvalid = true;
        
        if (!$.validateString(retypedpassword))
        {
            valid = false;
            ErrorMessageObject.NoRetypedPassword = true;
        }
        if (!$.validateString(password))
        {
            valid = false;
            ErrorMessageObject.NoPassword = true;
        }
        
        if (passwordvalid && retypedpassword != password)
        {
            valid = false;
            ErrorMessageObject.PasswordsNoMatch = true;
        }
        else if (!$.validatePasswordPattern(password)) {
            ErrorMessageObject.PasswordError = true;
            valid = false;
        }
        if (!conditionsChecked)
        {
            valid = false;
            ErrorMessageObject.ConditionsChecked = false;
            ErrorMessageObject.ConditionsErrorElementId = conditionsErrorElementId;
        }
        if (!valid) {
            ErrorMessageObject.CallName = 'User';
            $.getErrorMessages(ErrorMessageObject, callbackEvent);
        }

        else $.validateUserExists(email, callbackEvent, userExistsElementId, alias, aliasExistsElementId);
    }

    $.validateVideoUpload = function(callbackEvent, url, urlErrorElementId, title, titleErrorElementId, topicId, topicErrorElementId) {
        $(".error").hide();
        var ErrorMessageObject = new Object();
        var valid = true;
        ErrorMessageObject.UrlErrorElementId = urlErrorElementId;
        var urlPattern = /((https?):\/\/([\-\w]+\.)+\w{2,3}(\/[%\-\w]+(\.\w{2,})?)*(([\w\-\.\?\\/+@&#;`~=%!]*)(\.\w{2,})?)*\/?)/;
        
        if(topicId=="-1") {
            ErrorMessageObject.TopicError = true;
            ErrorMessageObject.TopicErrorElementId = topicErrorElementId;
            valid=false;
        }
        
        if (!$.validateString(title)) {
            ErrorMessageObject.TitleError = true;
            ErrorMessageObject.TitleErrorElementId = titleErrorElementId;
            valid = false;
        }

        if (!$.validateString(url)) {
            ErrorMessageObject.NoUrl = true;
            valid = false;
        }

        else if (!urlPattern.test(url)) {
            ErrorMessageObject.UrlInvalid = true;
            valid = false;
        }

        if (!valid) {
            ErrorMessageObject.CallName = 'VideoUpload';
            $.getErrorMessages(ErrorMessageObject, callbackEvent);
        }
        else $.validateUrl(callbackEvent, url, urlErrorElementId);
    }

    $.validateUrl = function(callbackEvent, url, urlErrorElementId) {
        var urlObject = new Object();
        urlObject.Url = url;
        urlObject.UrlErrorElementId = urlErrorElementId;
        $.ajax({
            url: '/Additions/Services/ValidationService.asmx/ValidateUrl',
            type: 'post',
            dataType: 'json',
            contentType: 'application/json',
            data: $.toJSON({ arguments: $.toJSON(urlObject) }),
            callback: callbackEvent,
            success: $.handleValidateUrl
        });
    }

    $.validateUserExists = function(userName, callbackEvent, userExistsElementId, alias, aliasExistsElementId) {
        var userExistsObject = new Object();
        userExistsObject.UserName = userName;
        userExistsObject.UserExistsElementId = userExistsElementId;
        userExistsObject.Alias = alias;
        userExistsObject.AliasExistsElementId = aliasExistsElementId;
        $.ajax({
            url: '/Additions/Services/ValidationService.asmx/CheckUser',
            type: 'post',
            dataType: 'json',
            contentType: 'application/json',
            data: $.toJSON({ arguments: $.toJSON(userExistsObject) }),
            callback: callbackEvent,
            success: $.handleUserExists
        });
    }
    
    $.validateSignIn = function(callbackEvent, userName, password, authenticationFailedElementId, languageId) {
        var signInObject = new Object();
        signInObject.UserName = userName;
        signInObject.Password = password;
        signInObject.AuthenticationFailedElementId = authenticationFailedElementId;
        signInObject.LanguageId = languageId;
        $.ajax({
            url: '/Additions/Services/ValidationService.asmx/ValidateSignIn',
            type: 'post',
            dataType: 'json',
            contentType: 'application/json',
            data: $.toJSON({ arguments: $.toJSON(signInObject) }),
            callback: callbackEvent,
            success: $.handleValidateSignIn
        });
    }
    
    $.validateEmail = function(callbackEvent, email, emailErrorElementId){
        var ErrormessagesObject = new Object();
        var valid = true;
        
        if (!$.validateString(email)){
            ErrormessagesObject.NoEmail = true;
            ErrormessagesObject.EmailElementId = emailErrorElementId;
            valid = false;
        }
        
        else if (!$.validateEmailPattern(email)){
            valid = false;
            ErrormessagesObject.EmailError = true;
            ErrormessagesObject.EmailElementId = emailErrorElementId;
        }
        
        if (!valid) $.getErrorMessages(ErrormessagesObject, callbackEvent);
        else if (callbackEvent != null) callbackEvent(true, "Email");
        
        return valid;
    }
    
    $.ensureMaxLength = function(e, typeElement, maxLength){
        var keycode;
        if (window.event) keycode = window.event.keyCode;
        else if (e) keycode = e.which;
        
        if (keycode == 8 || keycode == 9 || keycode == 46 || keycode == 37 || keycode == 38 || keycode == 39 || keycode == 40) return true;
        var length = $(typeElement).val().length;
        if (maxLength <= length) return false;
        else return true;
    }
    
    $.remainingCharacters = function(typeElement, displayElementId, maxLength){
        $("#" + displayElementId).text((maxLength - $(typeElement).val().length).toString());
    }

    $.validateEmailPattern = function(email) {
        var emailPattern = /^([A-Za-z0-9]{1,}([-_\.&'][\w]{1,}){0,}){1,}@(([\w]{1,}[-]{0,1})\.){1,}[A-Z]{2,6}$/i;
        return emailPattern.test(email);
    }

    $.validatePasswordPattern = function(password) {
        var passwordPattern = /(?=.*[\d\W]).{6,}/i;
        return passwordPattern.test(password);
    }

    $.validateString = function(text) {
        if (text != null && text != "") return true;
        else return false;
    }

    $.getErrorMessages = function(error, callbackEvent) {
        $.ajax({
            url: '/Additions/Services/ValidationService.asmx/GetErrorMessages',
            type: 'post',
            dataType: 'json',
            contentType: 'application/json',
            data: $.toJSON({ errorMessages: $.toJSON(error), languageId: $("#_hidden-language").val() }),
            callback: callbackEvent,
            success: $.handleErrorMessage
        });
    }

    $.handleErrorMessage = function() {
        var responseArgs = arguments;
        var response = arguments[0].d.ResponseMessage;
        var ErrorMessagesObject = eval('(' + response + ')');
        if (ErrorMessagesObject.EmailError == true){
            $("#" + ErrorMessagesObject.EmailElementId).text(ErrorMessagesObject.EmailErrorMessage);
            $(".email-error").show();
        }
        if (ErrorMessagesObject.RetypedEmailError == true || ErrorMessagesObject.EmailsNoMatch == true){
            $("#" + ErrorMessagesObject.RetypedEmailErrorElementId).text(ErrorMessagesObject.RetypedEmailErrorMessage);
            $(".retype-email-error").show();
        }
        if (ErrorMessagesObject.PasswordError == true){
            $("#" + ErrorMessagesObject.PasswordElementId).text(ErrorMessagesObject.PasswordErrorMessage);
            $(".password-error").show();
        }
        if (ErrorMessagesObject.RetypedPasswordError == true || ErrorMessagesObject.PasswordsNoMatch == true){
            $("#" + ErrorMessagesObject.RetypedPasswordErrorElementId).text(ErrorMessagesObject.RetypedPasswordErrorMessage);
            $(".retype-password-error").show();
        }
        if (ErrorMessagesObject.UserExists == true){
            $("#" + ErrorMessagesObject.UserExistsElementId).text(ErrorMessagesObject.UserExistsMessage);
            $(".user-exists-error").show();
        }
        if (ErrorMessagesObject.ConditionsChecked == false){
            $("#" + ErrorMessagesObject.ConditionsErrorElementId).text(ErrorMessagesObject.ConditionsErrorMessage);
            $(".conditions-error").show();
        }
        if (ErrorMessagesObject.NoUrl == true){
            $("#" + ErrorMessagesObject.UrlErrorElementId).text(ErrorMessagesObject.UrlErrorMessage);
            $(".url-error").show();
        }
        if (ErrorMessagesObject.UrlError == true){
            $("#" + ErrorMessagesObject.UrlErrorElementId).text(ErrorMessagesObject.UrlErrorMessage);
            $(".url-error").show();
        }
        if (ErrorMessagesObject.UrlInvalid == true){
            $("#" + ErrorMessagesObject.UrlErrorElementId).text(ErrorMessagesObject.UrlErrorMessage);
            $(".url-error").show();
        }
        if (ErrorMessagesObject.TitleError == true){
            $("#" + ErrorMessagesObject.TitleErrorElementId).text(ErrorMessagesObject.TitleErrorMessage);
            $(".title-error").show();
        }
        if (ErrorMessagesObject.TopicError == true){
            $("#" + ErrorMessagesObject.TopicErrorElementId).text(ErrorMessagesObject.TopicErrorMessage);
            $(".topic-error").show();
        }
        if (ErrorMessagesObject.AliasExists == true){
            $("#" + ErrorMessagesObject.AliasExistsElementId).text(ErrorMessagesObject.AliasExistsMessage);
            $(".alias-exists-error").show();
        }

        if(this.callback)
            this.callback(false, ErrorMessagesObject.CallName);
    }
    
    $.handleValidateSignIn = function() {
        var response = arguments[0].d.ResponseMessage;
        var SignInReturnObject = eval('(' + response + ')');
        if (SignInReturnObject.AuthenticationSucces) {
            this.callback(true, 'User');
        }

        else {
            $("#" + SignInReturnObject.AuthenticationFailedElementId).text(SignInReturnObject.AuthenticationFailedError).show();
        }
    }

    $.handleUserExists = function() {
        var response = arguments[0].d.ResponseMessage;
        var UserExistsObject = eval('(' + response + ')');
        if (!UserExistsObject.UserExists && !UserExistsObject.AliasExists) {
            this.callback(true, 'User');
        }

        else $.getErrorMessages({AliasExists: UserExistsObject.AliasExists, AliasExistsElementId: UserExistsObject.AliasExistsElementId, UserExists: UserExistsObject.UserExists, UserExistsElementId: UserExistsObject.UserExistsElementId, CallName: 'User' }, this.callback);
    }

    $.handleValidateUrl = function() {
        var response = arguments[0].d.ResponseMessage;
        var UrlObject = eval('(' + response + ')');
        if (!UrlObject.UrlError) {
            this.callback(true, 'VideoUpload');
        }

        else $.getErrorMessages({ UrlError: true, UrlErrorElementId: UrlObject.UrlErrorElementId, CallName: 'VideoUpload' }, this.callback);
    }
    
    $.doBeforePaste = function(control)
    {
        $.maxLength = control.attributes["maxLength"].value;
        if(maxLength)
        {
            event.returnValue = false;
        }
    }
    
    $.doPaste = function(control)
    {
        maxLength = control.attributes["MaxLength"].value;
        value = control.value;
        if(maxLength){
            event.returnValue = false;
            maxLength = parseInt(maxLength);
            var o = control.document.selection.createRange();
            var iInsertLength = maxLength - value.length + o.text.length;
            var sData = window.clipboardData.getData("Text").substr(0,iInsertLength);
            o.text = sData;
        }
    }
    $.LimitInput = function(control)
    {
        var maxLength = $(control).attr('MaxLength');
        if(maxLength)
        {
            if(control.value.length > maxLength)
            {
                control.value = control.value.substring(0,maxLength);
            }
        }
    }; 

})(jQuery);



