$(function()
{

    // font replacement
    Cufon.replace('.september-font');

    // equal height body content	
    $.fn.equalHeight = function()
    {
        var tallest = 0;

        this.each(function()
        {
            thisHeight = $(this).height();
            tallest = (thisHeight > tallest) ? thisHeight : tallest;
        });
        return this.each(function()
        {
            $(this).css('height', tallest);
        });

    }
    $('.home .eh').equalHeight();

    // lightbox	
    try
    {        
        if(document.getElementById("slideshow"))
        {
            $('.slideshow').lightBox({
                imageBtnPrev: '/css/i/btn-prev.png',
                imageBtnNext: '/css/i/btn-nxt.png',
                imageBtnClose: '/css/i/btn-close.png'
            });
        }
    } catch (e) { }
    
    // opacity hover effect	
    if (!$.browser.msie)
    {
        $('ol a, #lang a').css({ 'opacity': 0.6 }).hover(function()
        {
            $(this).animate({ 'opacity': 1 }, 250);
        }, function()
        {
            $(this).animate({ 'opacity': 0.6 }, 250);
        });
    }

    // collapse panels
    $('.toggler').click(function()
    {
        var $this = $(this);
        var $panel = $this.parents('div.panel:eq(0)');
        var $body = $this.parent().siblings('.panel-body');

        if ($panel.hasClass('expanded'))
        {
            $body.slideUp('fast');
            $panel.removeClass('expanded').addClass('collapsed');
        } else
        {
            $body.slideDown('fast');
            $panel.removeClass('collapsed').addClass('expanded');
        }

        return false;
    });

    // collapse sublist	
    $('.toggleSub').click(function()
    {
        var $this = $(this);
        var $sublist = $this.siblings('ul.subList');

        if ($this.hasClass('subExpanded'))
        {
            $sublist.slideUp('fast');
            $this.removeClass('subExpanded').addClass('subCollapsed');
        } else
        {
            $sublist.slideDown('fast');
            $this.removeClass('subCollapsed').addClass('subExpanded');
        }


        return false;

    });

    //title search for input
    $.fn.clearInput = function()
    {
        return this.each(function()
        {
            var defaultVal = $(this).attr('value');
            $(this).focus(function()
            {
                if ($(this).hasClass('default-value'))
                {
                    $(this).attr('value', '');
                    $(this).removeClass('default-value');
                } else
                {
                    $(this).attr('value', $(this).attr('value'));
                }
            }).blur(function()
            {
                if ($(this).attr('value') == '')
                {
                    $(this).attr('value', defaultVal);
                    $(this).addClass('default-value');
                } else
                {
                    $(this).attr('value', $(this).attr('value'));
                    $(this).removeClass('default-value');
                }
            });
        });
    }

    $('#sidebar-search input').clearInput();

    $("#username").keypress(function(e)
    {
        if (e.which == 13)
        {
            Login(REDIRECT_LOGIN);
            return false;
        }
    });

    $("#password").keypress(function(e)
    {
        if (e.which == 13)
        {
            Login(REDIRECT_LOGIN);
            return false;
        }
    });

});   // end domready

function Login(b)
{    
    // set the mask
    var span = document.getElementById("spanLogin");
    if (span)
    {
        span.innerHTML = "Checking...";
        span.Redirect = b;
    }
    // validate on the server
    Web.PostMyStream.GetUserKey(document.getElementById("username").value, document.getElementById("password").value, Login_Success, Login_Fail, span);
}

function Login_Success(result, span)
{
    try
    {
        result = JSON.parse(result);
        if (result.hasError) 
        {
            if (result.Error.indexOf("INACTIVE_") == 0) 
            {
                window.location = "/Register/Inactive/?" + result.Error.substr(9);
                return;
            }
            
            if (document.getElementById('liPassword'))
            {
                if (result.Error.indexOf('user') > 0 || result.Error.indexOf('email') > 0)
                {
                    $("#liUsername").addClass('err');
                    document.getElementById("spanUsername").innerHTML = result.Error;
                    document.getElementById("username").select();
                    document.getElementById("username").focus();
                }
                else $("#liUsername").removeClass('err');

                if (result.Error.indexOf('password') > 0)
                {
                    $("#liPassword").addClass('err');
                    document.getElementById("spanPassword").innerHTML = result.Error;
                    document.getElementById("password").select();
                    document.getElementById("password").focus();
                }
                else $("#liPassword").removeClass('err');
            }
            else 
            {
                document.getElementById("spanLoginError").innerHTML = result.Error;                
            }
            
            if (span)
                span.innerHTML = "LOGIN";        
            return;
        }

        var key = result.Data;
        if (span)
            span.innerHTML = "Connecting...";

        if (document.getElementById("spanLoginError"))
            document.getElementById("spanLoginError").innerHTML = "";
        $("#username").attr("disabled", "true");
        $("#password").attr("disabled", "true");
        
        // if they want to stay logged in, set the cookie here
        if(document.getElementById("keeplogin").checked)
        {
            $.cookie('KeepLogin', '1', { path : '/' });
            $.cookie('Login', document.getElementById("username").value, { path : '/' });
            $.cookie('Password', document.getElementById("password").value, { path: '/' });
        }
        // otherwise, clear the cookies
        else
        {
            $.cookie('KeepLogin', null, { path : '/' });
            $.cookie('Login', null, { path : '/' });
            $.cookie('Password', null, { path : '/' });
        }
        
        // take them home
        window.location = "/Login/?K=" + key + (span && span.Redirect ? "&R=" + escape(window.location) : "");
    }
    catch(e) {alert("Error: " + e); }
}

function Login_Fail(result, span)
{
    alert("fail: " + result.get_message());
}

function startSlideshow()
{
    var target = document.getElementById('slideshow1');
    if (document.dispatchEvent)
    { // W3C
        var oEvent = document.createEvent("MouseEvents");
        oEvent.initMouseEvent("click", true, true, window, 1, 1, 1, 1, 1, false, false, false, false, 0, target);
        target.dispatchEvent(oEvent);
    }
    else if (document.fireEvent)
    { // IE
        target.fireEvent("onclick");
    }
}

function searchResultClick(link)
{
    var win = $("#jquery-live-search");
    if (win)
        win.slideUp();
    $("#live-search-box").val('Loading...');
    window.location = link;
}

var Register = new function() {
    this.setSpanLoading = function(span, bLoading) {
        if (span) {
            if (bLoading) {
                span.innerHTML = "<img border='0' align='left' src='/Images/Loading1.gif'>";
                if (span.style)
                    span.style.display = "inline";
            }
            else if (span.style)
                span.style.display = "none";
        }
    };

    this.setSpanText = function(span, sText) {
        if (span) {
            span.innerHTML = sText;
            if (span.style)
                span.style.display = "inline";
        }
    };

    this.setSpanCheck = function(span) {
        if (span) {
            span.innerHTML = "<img border='0' src='/Images/greencheck.png'>";
            if (span.style)
                span.style.display = "inline";
        }
    };

    this.ValidateUsername = function(el, spanId) {
        // get the username
        var sUsername = el.value;
        if (sUsername.length == 0) {
            this.setSpanText(spanId, "Please select a username");
            return;
        }

        var span = document.getElementById(spanId);
        this.setSpanLoading(span, true);

        // validate it on the server      
        Web.PostMyStream.ValidateUsername(sUsername, this.validateField_Success, this.validateField_Fail, [el, span]);
    };

    this.ValidatePassword = function(idPW1, idPW2, spanPW1, spanPW2) {
        var pw1 = document.getElementById(idPW1).value;
        var pw2 = document.getElementById(idPW2).value;
        var span1 = document.getElementById(spanPW1);
        var span2 = document.getElementById(spanPW2);

        if (pw1.length < 6) {
            this.setSpanText(span1, "Must be at least 6 characters");
            this.setSpanText(span2, "");
        }
        else if (pw1.length > 20) {
            this.setSpanText(span1, "Must be less than 20 characters");
            this.setSpanText(span2, "");
        }
        else if (pw1 != pw2 && pw2.length > 0) {
            this.setSpanText(span1, "Passwords do not match");
            this.setSpanText(span2, "");
        }
        else {
            this.setSpanCheck(span1);

            if (pw2.length > 0)
                this.setSpanCheck(span2);
            else
                this.setSpanText(span2, "");
        }
    };

    this.ValidateEmail = function(el, spanId) {
        // get the username
        var sEmail = el.value;
        var span = document.getElementById(spanId);

        if (sEmail.length == 0) {
            this.setSpanText(span, "Please enter your email address");
            return;
        }

        this.setSpanLoading(span, true);

        // validate it on the server      
        Web.PostMyStream.ValidateEmail(sEmail, this.validateField_Success, this.validateField_Fail, [el, span]);
    };

    this.ValidateFullName = function(el, spanId) {
        // get the name
        var sName = el.value;
        var span = document.getElementById(spanId);

        if (sName.trim().length == 0) {
            this.setSpanText(span, "Please enter your full name");
            return;
        }
        else this.setSpanCheck(span);
    };

    this.clearSpan = function(spanId) {
        var span = document.getElementById(spanId);
        if (span)
            this.setSpanText(span, "");
    };

    this.validateField_Success = function(result, args) {
        try {
            if (args != null && args.length == 2) {
                var result = JSON.parse(result);
                if (result && result.hasError) {
                    Register.setSpanText(args[1], result.Error);
                    //args[0].select();
                    //args[0].focus();
                }
                else {
                    Register.setSpanCheck(args[1]);
                }
            }
        }
        catch (e) {
            Register.setSpanText(args[1], "");
        }
    };

    this.validateField_Fail = function(result, args) {
        if (args != null && args.length == 2)
            Register.setSpanText(args[1], "");
    };

    this.Submit = function() {
        try {
            // mask it

            // get everything
            var sUsername = $('#username').val();
            var sEmail = $('#email').val();
            var sPW1 = $('#password').val();
            var sPW2 = $('#password2').val();
            var sFull = $('#fullname').val();
            var cb = $('#condition').attr('checked');

            // quick and local validation
            if (sUsername.length == 0) {
                var span = document.getElementById('errUsername');
                Register.setSpanText(span, 'Invalid Username Entered');
                document.getElementById('username').select();
                document.getElementById('username').focus();
                return false;
            }
            else if (sEmail.length == 0) {
                var span = document.getElementById('errEmail');
                Register.setSpanText(span, 'Please enter your email address');
                document.getElementById('email').select();
                document.getElementById('email').focus();
                return false;
            }
            else if (sPW1.length < 6) {
                var span = document.getElementById('errPassword');
                Register.setSpanText(span, 'Must be at least 6 characters');
                document.getElementById('password').select();
                document.getElementById('password').focus();
                return false;
            }
            else if (sPW1 != sPW2) {
                var span = document.getElementById('errPassword');
                Register.setSpanText(span, 'Passwords do not match');
                document.getElementById('password').select();
                document.getElementById('password').focus();
                return false;
            }
            else if (sFull.length == 0) {
                var span = document.getElementById('errFullName');
                Register.setSpanText(span, 'Please enter your name');
                document.getElementById('fullname').select();
                document.getElementById('fullname').focus();
                return false;
            }
            else if (cb == false) {
                alert("You must agree to the Terms & Conditions and Privacy Policy.");
                return false;
            }

            // disable the button
            document.getElementById("btnText").innerHTML = "Creating...";
            $("#btnSubmit").addClass("disabled-wrap");
            
            document.forms.regform.submit();
            return false;
        }
        catch (e) { alert("Exception: " + this.displayException(e)); }
    };

    this.displayException = function(e) {
        if (e == null)
            return "";
        else if (e.description != null)
            return e.description;
        else if (e.message != null && e.message.length > 0)
            return e.message;
        else return e;
    }
};
