/**
 *
 * Event Listeners and actions for non-member area of the site
 * @version 1.0
 *
 */

/**
 * This file holds all the main javascript actions while the user
 * is logged into the system.
 */

function bootStrap() {
    $('input[type=submit], input[type=button], .linkButton').button();
    $('.linkButton, .linkAction').removeAttr('href');
    $('.calendar').datepicker({'showAnim': 'fadeIn', 'dateFormat': 'dd/mm/yy'});
}

/**
 * Event listener for nextMember Button
 * @return void
 */
function nextMemberClick(e)
{
    clearInterval(timer);
    nextMember();
}

/**
 * Event Listener for prevoiusMember Button
 * @return void
 */
function previousMemberClick(e)
{
    clearInterval(timer);
    previousMember();
}

/**
 * Go to the next member in the member flow
 * @return void
 */
function nextMember()
{
    current = $('.activeMember');
    current.removeClass('activeMember');
    nextCurrent = current.next();
    tabCircle = $('.tabCircleActive');
    if(!nextCurrent.length) {
        $('#memberFlow').animate({'left': '0px'}, "slow");
        nextCurrent = $('.member:first');
        nextCurrent.addClass('activeMember');
        tabCircle.removeClass('tabCircleActive').addClass('tabCircle');
        $('.tabCircle:first').removeClass('tabCircle').addClass('tabCircleActive');
    } else {
        nextCurrent.addClass('activeMember');
        $('#memberFlow').animate({'left': '-=626px'}, "slow");
        tabCircle.removeClass('tabCircleActive').addClass('tabCircle');
        tabCircle.next().removeClass('tabCircle').addClass('tabCircleActive');
    }
}

/**
 * Go to the previous member in the member flow
 * @return void
 */
function previousMember()
{
    current = $('.activeMember');
    current.removeClass('activeMember');
    nextCurrent = current.prev();
    tabCircle = $('.tabCircleActive');
    if(!nextCurrent.length) {
        $('#memberFlow').animate({'left': '-1878px'}, "slow");
        nextCurrent = $('.member:last');
        nextCurrent.addClass('activeMember');
        tabCircle.removeClass('tabCircleActive').addClass('tabCircle');
        $('.tabCircle:last').removeClass('tabCircle').addClass('tabCircleActive');
    } else {
        nextCurrent.addClass('activeMember');
        $('#memberFlow').animate({'left': '+=626px'}, "slow");
        tabCircle.removeClass('tabCircleActive').addClass('tabCircle');
        tabCircle.prev().removeClass('tabCircle').addClass('tabCircleActive');
    }
}

/**
 * Check the sign in form for validility
 * @return boolean
 */
function checkSignin()
{
    checker = true;
    regex = /^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$/;
    if($('#usernameText').val() == '') {
            $('#usernameError2').slideUp();
            $('#usernameError').slideDown();
            checker = false;
    } else if(!regex.test($('#usernameText').val())) {
            $('#usernameError').slideUp();
            $('#usernameError2').slideDown();
            checker = false;
    }
    if($('#passwordText').val() == '' || $('#passwordText').val() == 'password') {
            $('#passwordError').slideDown();
            checker = false;
    } else {
            $('#passwordError').slideUp();
    }

    if(checker) {
            return true;
    } else {
            return false;
    }
}

/**
 * This is a event listener for the invalid username or password
 * login form. It does the exact same function as checkSign
 * @return boolean
 */
function checkSignin2()
{
    checker = true;
    regex = /^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$/;
    if($('#username').val() == '') {
            $('#usernameError2-1').slideUp();
            $('#usernameError-1').slideDown();
            checker = false;
    } else if(!regex.test($('#username').val())) {
            $('#usernameError-1').slideUp();
            $('#usernameError2-1').slideDown();
            checker = false;
    }
    if($('#password').val() == '' || $('#password').val() == 'password') {
            $('#passwordError-1').slideDown();
            checker = false;
    } else {
            $('#passwordError-1').slideUp();
    }

    if(checker) {
            return true;
    } else {
            return false;
    }
}

/**
 * Moves to the next slide in the registration process
 * @return void
 */
function nextSlide(button)
{
    current = $('.activeState');
    switch(current.attr('id')) {
        case 'slide1':if(!checkSlide1(button)) {return false;}
                       break;
        case 'slide2':if(!checkSlide2(button)) {return false;}
                       break;
        default:break;
    }
    $(button).attr('disabled', true);
    step = $('.activeStep');
    nextState = $(current).next();
    if(!nextState.length) {
        $('#registerForm').submit()
    } else {
        step.removeClass('activeStep');
        step.next().addClass('activeStep');
        current.children('.stateContainer').fadeOut();
        nextState.children('.stateContainer').fadeIn();
        current.removeClass('activeState');
        nextState.addClass('activeState');
        $('#slides').animate({'left': '-=475px'}, 'slow');
        $(button).attr('disabled', false);
    }
}

/**
 * Checks to see if the slide one of the registration process
 * is valid
 * @return boolean
 */
function checkSlide1(button)
{
    regex = /^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$/;
    blank = true;
    $('#slide1 input[type=text], #slide1 input[type=password]').each(function()
    {
       if($(this).val() == '') {
           $(this).css('border', '1px solid #ff0000');
           $('#slide1Error').show();
           blank = false;
       } else {
           $(this).css('border', '1px solid #ddd');
       }

       if($(this).val() == 'First Name' || $(this).val() == 'Last Name' ||
           $(this).val() == 'password' || $(this).val() == 'john@example.com') {
           $(this).css('border', '1px solid #ff0000');
           $('#slide1Error').show();
           blank = false;
       } else {
           $(this).css('border', '1px solid #dd');
       }
    });
    if(!blank) {
        return false;
    } else {
        $('#slide1Error').hide();
    }
    if(!regex.test($('#email').val())) {
        $('#email').css('border', '1px solid #ff0000');
        $('#slide1Error2').show();
        return false;
    } else {
        $('#email').css('border', '1px solid #ddd');
        $('#slide1Error2').hide();
    }
    if($('#email').val() != $('#emailConfirm').val()) {
        $('#email').css('border', '1px solid #ff0000');
        $('#emailConfirm').css('border', '1px solid #ff0000');
        $('#slide1Error3').show();
        return false;
    } else {
        $('#email').css('border', '1px solid #ddd');
        $('#emailConfirm').css('border', '1px solid #ddd');
        $('#slide1Error3').hide();
    }
    
    if($('#password').val() != $('#passConfirm').val()) {
        $('#password').css('border', '1px solid #ff0000');
        $('#passConfirm').css('border', '1px solid #ff0000');
        $('#slide1Error4').show();
        return false;
    } else {
        $('#password').css('border', '1px solid #ddd');
        $('#passConfirm').css('border', '1px solid #ddd');
        $('#slide1Error4').hide();
    }
    regex = /.{6,}/;
    if(!regex.test($('#password').val())) {
        $('#password').css('border', '1px solid #ff0000');
        $('#slide1Error5').show();
        return false;
    } else {
        $('#password').css('border', '1px solid #ddd');
        $('#slide1Error5').hide();
    }
    if(!checkEmail()) {return false;}
    $('#registerTitle').text('Hi ' + $('#fname').val().substr(0, 1).toUpperCase() +
      $('#fname').val().substr(1));
    $('#registerSubTitle').text('Do you come here often? How old are you? ' +
      'Where you from? Just the usual...');
    $(button).attr('tabindex', '14');
    return true;
}

/**
 * Checks to see if slide 2 of the registration process is
 * valid before moving onto the next
 * @return boolean
 */
function checkSlide2(button)
{
    blank = true;
    regex = /^\d{2}$/;
    regex2 = /^\d{4}$/;
    $('#slide2 input, #slide2 select').each(function()
    {
       if($(this).val() == '' || $(this).val() == 'DD' ||
          $(this).val() == 'MM' || $(this).val() == 'YYYY') {
           $(this).css('border', '1px solid #ff0000');
           $('#slide2Error1').show();
           blank = false;
       } else {
           $(this).css('border', '1px solid #ddd');
       }
    });
    if(!blank) {
        return false;
    } else {
        $('#slide2Error1').hide();
    }
    if(!regex.test($('#dobd').val()) && !regex.test($('#dobm').val()) &&
        !regex2.test($('#doby').val())) {
        $('#dobd').css('border', '1px solid #ff0000');
        $('#dobm').css('border', '1px solid #ff0000');
        $('#doby').css('border', '1px solid #ff0000');
        $('#slide2Error2').show();
        return false;
    } else {
        $('#dobd').css('border', '1px solid #ddd');
        $('#dobm').css('border', '1px solid #ddd');
        $('#doby').css('border', '1px solid #ddd');
        $('#slide2Error2').hide();
    }
    //Test to see if the date entered is actually a date
    date = new Date($('#doby').val(), $('#dobm').val()-1, $('#dobd').val());
    if($('#doby').val() != date.getFullYear() ||
       $('#dobm').val()-1 != date.getMonth()    ||
       $('#dobd').val() != date.getDate()) {
       $('#dobd').css('border', '1px solid #ff0000');
       $('#dobm').css('border', '1px solid #ff0000');
       $('#doby').css('border', '1px solid #ff0000');
       $('#slide2Error4').show();
       return false;
    } else {
        $('#dobd').css('border', '1px solid #ddd');
        $('#dobm').css('border', '1px solid #ddd');
        $('#doby').css('border', '1px solid #ddd');
        $('#slide2Error4').hide();
    }
    //Test to see if they have entered in a date beyond today
    today = new Date();
    if(date > today) {
       $('#dobd').css('border', '1px solid #ff0000');
       $('#dobm').css('border', '1px solid #ff0000');
       $('#doby').css('border', '1px solid #ff0000');
       $('#slide2Error5').show();
       return false;
    } else {
        $('#dobd').css('border', '1px solid #ddd');
        $('#dobm').css('border', '1px solid #ddd');
        $('#doby').css('border', '1px solid #ddd');
        $('#slide2Error5').hide();
    }
    regex = /\d{4,}/;
    if(!regex.test($('#postCode').val())) {
        $('#postCode').css('border', '1px solid #ff0000');
        $('#slide2Error3').show();
        return false;
    } else {
        $('#postCode').css('border', '1px solid #ddd');
        $('#slide2Error3').hide();
    }
    
    $('#userFname').text($('#fname').val().substr(0,1).toUpperCase() +
        $('#fname').val().substr(1));
    $('#registerTitle').text('One last step we promise.');
    $('#registerSubTitle').text('Name check. Email check. Age check. Gender check. Location check...');
    $(button).hide();
    return true;
}

/**
 * Checks to see if the email address provided has been used or not
 * @return boolean
 */
function checkEmail()
{
    regex = /^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$/;
    if(!regex.test($('#email').val())) {
        return false;
    }
    $('#emailCheck').removeClass();
    $('#emailCheck').html('<span class="loaderIcon"></span> Checking availability');
    $('#emailCheck').show();
    $.ajax({url: '/ajax/registration/checkemail',
            method: 'post',
            dataType: 'json',
            data: {email : $('#email').val()},
            success: function(data) {
                if(data.valid == true) {
                    $('#emailCheck').addClass('correctText');
                    $('#emailCheck').text('Email Available');
                } else {
                    $('#emailCheck').addClass('errorText');
                    $('#emailCheck').text('Email not available');
                    return false;}
            }
    });
    return true;
}

/**
 * Checks to see if the email box in the password reset
 * section has been entered properly
 */
function checkReset()
{
    regex = /^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$/;
    if($('#username').val() == '') {
        $('#usernameError2-1').hide();
        $('#usernameError-1').show();
        return false;
    }
    if(!(regex.test($('#username').val()))) {
        $('#usernameError-1').hide();
        $('#usernameError2-1').show();
        return false;
    }
    return true;
}


