var Static = {
    register_setup: function (emails) {
        var username_input = $('#register-email');
        var password_input = $('#register-password');
        var url_input = $('#register-url');
        var graduation_year_input = $('#register-graduation-year');
        var graduation_year_label = $('label[for="register-graduation-year"]');
        var linkedin_input = $('#register-linkedin');
        var submit_input = $('#register-submit');
        var submit_error = $('#register-error');
        
        //dynamically generate options for graduation years
        var dt = new Date();
        var my_time = dt.getFullYear();
    
        for (i=0; i < 5; i++) {
            $(graduation_year_input).prepend('<option value=' + '"' +  my_time + '"' + '>' + my_time + '</option>');
            my_time = my_time + 1;
        }

        is_student = false;

        //check to see whether graduation year needs to be displayed
        //This is duplicative. Move submit input here
        username_input.trigger('focus').bind('keyup', function(e) {
            var valid_schools = ["uw.edu", "u.washington.edu","edison.edu","email.socc.edu", "socc.edu","asu.edu","umail.ucsb.edu", "sa.ucsb.edu","northwestern.edu","hartford.edu","avc.edu","bellevuecollege.edu","hawaii.edu","hancockcollege.edu","mail.csuchico.edu", "csuchico.edu","brevard.cc.fl.us","uri.edu", "my.uri.edu","coastline.edu","citruscollege.edu","cocc.edu","osu.edu","gcu.edu","sjsu.edu","elcamino.edu","utoronto.ca","liberty.edu"];
            var user = username_input.val();

            $.each(valid_schools, function(i, email) {
                var re = new RegExp(email + "$","g");
                if (user.match(re) != null) { is_student = true; }
            });
    
            if (is_student) {
                $(graduation_year_label).fadeIn(1000);
                $(graduation_year_input).fadeIn(1000);
            }
        });

        password_input.keydown(function (e) {
            if (e.keyCode == 13) {
                $(submit_input).trigger('click');
                return false;
            }
        });
    
        submit_input.bind('click', function () {
    		if (!$(this).hasClass('disabled')) {
    			$(this).addClass('disabled');
                
                if (emails) {
                    var valid_schools = emails;
                } else {
                    var valid_schools = ["uw.edu", "u.washington.edu","edison.edu","email.socc.edu", "socc.edu","asu.edu","umail.ucsb.edu", "sa.ucsb.edu","northwestern.edu","hartford.edu","avc.edu","bellevuecollege.edu","hawaii.edu","hancockcollege.edu","mail.csuchico.edu", "csuchico.edu","brevard.cc.fl.us","uri.edu", "my.uri.edu","coastline.edu","citruscollege.edu","cocc.edu","osu.edu","gcu.edu","sjsu.edu","elcamino.edu","utoronto.ca","liberty.edu"];
                }
                
                // determine if graduation year needs to be displayed
                var user = username_input.val();

                $.each(valid_schools, function(i, email) {
                    var re = new RegExp(email + "$","g");
                    if (user.match(re) != null) { is_student = true; }
                });
                  
                var graduation_year = (is_student ? $(graduation_year_input).val() : false);
                var url = (url_input.val() ? url_input.val() : false);
                    
                // define default values for initial snapshot and profile
                var title = "Your Profile";
                var xhtml = "<ul id=\"object-F1292E3B-8397-4F34-BE05-A2E2E24DEECE\" class=\"object list resume hresume\">\u000a \u000a\u000a \u000a\u000a \u000a \u000a \u000a \u000a \u000a\u000a \u000a\u000a \u000a\u000a \u000a\u000a \u000a\u000a \u000a <li id=\"object-EF23AD3B-F754-44EF-A356-4C2055C390D1\" class=\"object item contact vcard first-item\">\u000a <div class=\"row light-bg\">\u000a <div class=\"col double left\">\u000a <h1 id=\"object-FC5F5531-93D4-48D9-BBE6-E27028709112\" class=\"object field name fn n\">Sir Frumper of Bumblebury</h1>\u000a </div>\u000a \u000a <div class=\"col single right\">\u000a <ul id=\"object-A60BABB5-9B31-4592-B4DC-03006CC005D7\" class=\"object list addresses\">\u000a \u000a </ul>\u000a \u000a <ul id=\"object-34C553C8-7F20-459C-8FAD-CBF6DA83125B\" class=\"object list tels\">\u000a \u000a </ul>\u000a </div>\u000a <div class=\"cb\"></div></div>\u000a \u000a <div class=\"row dark-bg\">\u000a <div class=\"col single right\">\u000a <ul id=\"object-097C4350-6379-4217-962F-9D08DF85915C\" class=\"object list emails\">\u000a \u000a </ul>\u000a </div>\u000a\u000a <div class=\"cb\"></div></div>\u000a </li><li id=\"object-6F34E6B5-6F35-4963-B816-6DA47DA12E6D\" class=\"object item education vcalendar last-item\">\u000a <div class=\"row\">\u000a <div class=\"col single center empty-left\">\u000a <h2 id=\"object-F142F524-C7F3-47C6-832F-ACD6CBA58010\" class=\"object field heading\">Wait, this isn't Sir Frumper's profile, it's yours! Enter your info in the JobSpice editor and click sync. </h2> \u000a </div>\u000a <div class=\"cb\"></div></div>\u000a \u000a <ul id=\"object-5D60D434-D3DF-4001-8BAA-DC23FA8B7174\" class=\"object list schools\">\u000a \u000a </ul>\u000a </li></ul>";
                var resume = {"tag":"list","type":"resume","children":[{"tag":"item","type":"contact","children":[{"text":"Sir Frumper of Bumblebury","tag":"field","type":"name","id":"object-FC5F5531-93D4-48D9-BBE6-E27028709112"},{"tag":"list","type":"addresses","children":[],"id":"object-A60BABB5-9B31-4592-B4DC-03006CC005D7"},{"tag":"list","type":"tels","children":[],"id":"object-34C553C8-7F20-459C-8FAD-CBF6DA83125B"},{"tag":"list","type":"emails","children":[],"id":"object-097C4350-6379-4217-962F-9D08DF85915C"}],"id":"object-EF23AD3B-F754-44EF-A356-4C2055C390D1"},{"id":"object-6F34E6B5-6F35-4963-B816-6DA47DA12E6D","tag":"item","type":"education","text":"","children":[{"id":"object-F142F524-C7F3-47C6-832F-ACD6CBA58010","tag":"field","type":"heading","text":"Wait, this isn't Sir Frumper's profile, it's yours! Enter your info in the JobSpice editor and click sync. ","children":[]},{"id":"object-5D60D434-D3DF-4001-8BAA-DC23FA8B7174","tag":"list","type":"schools","text":"","children":[]}]}],"id":"object-F1292E3B-8397-4F34-BE05-A2E2E24DEECE"}

                if (!is_student && emails) {
                    submit_input.removeClass('disabled');
                    submit_error.text("Please enter valid school email").show();
                    url_input.focus();
                
                } else {
                    
                    if (url) {

                        $.ajax({
                            type: "POST",
                            url: "ajax/register",
                            dataType: "json",
                            data:jsonify({
                                username: username_input.val(),
                                password: password_input.val(),
                                graduation_year: graduation_year,
                                url: url,
                                resume_data: resume,
                                xhtml: xhtml,
                                title: title
                            }),
                            success: function (data) {
                                if ($('#register-linkedin').attr('checked') == false) {
                				    submit_input.removeClass('disabled');
                                    window.location = "/main";
                                } else {
                                    $.ajax({
                                        type: "GET",
                                        dataType: "json",
                                        url: "ajax/get_authorize_url",
                                        success: function (url) {
                                            window.location = url.toString();
                                        },
                                        error: function (xhr, status, e, data) {
                                            submit_input.removeClass('disabled');

                                            try { data = $.httpData(xhr, this.dataType, this); }
                                            catch (e) { data = { error_message: "Incorrect Email or Password" }; }

                                            submit_error.text(data.error_message).show();
                                        }
                                    });
                                }
                            },
                            error: function (xhr, status, e, data) {
                				submit_input.removeClass('disabled');

                                try { data = $.httpData(xhr, this.dataType, this); }
                                catch (e) { data = { error_message: "Incorrect Email or Password" }; }

                                submit_error.text(data.error_message).show();
                                username_input.focus();
                            }
                        });
                    } else {
    			        submit_input.removeClass('disabled');
                        submit_error.text("Please input a profile URL").show();
                        url_input.focus();
                    }
                }
            }
        });
    },
    
    login_setup: function () {
        var username_input = $('#login-email');
        var password_input = $('#login-password');
        var submit_input = $('#login-submit');
        var submit_error = $('#login-error');
        
        submit_input.bind('click', function () {
    		if (!$(this).hasClass('disabled')) {
    			$(this).addClass('disabled');
			
    			$.ajax({
    			    type: "POST",
    			    url: "ajax/login",
    			    dataType: "json",
    			    data: jsonify({
    			        username: username_input.val(),
    			        password: password_input.val()
    			    }),

    			    success: function () {
    					submit_input.removeClass('disabled');
    			        window.location = "/main";
    			    },

    			    error: function (xhr, status, e) {
    			        submit_input.removeClass('disabled');
                        try { data = $.httpData(xhr, this.dataType, this); }
                        catch (e) { data = { error_message: "Incorrect Email or Password" }; }

                        submit_error.text(data.error_message).show();
    			    }
    			});
    		}
        });        
    },
    
    password_email: function () {
        var username_input = $('#email');
        var submit_input = $('#submit');
        var submit_error = $('#error');

        submit_input.bind('click', function () {
            if (username_input.val() == "") { var valid = false; } else { var valid = true; }
    
    		if (!$(this).hasClass('disabled')) {
    			$(this).addClass('disabled');

                // Check if the email is in our system
                if (valid) {
                    $.ajax({
                        type: "POST",
                        url: "/ajax/check_username",
                        dataType: "json",
                        data: jsonify({
                            username: username_input.val()
                        }),

                        success: function (existing) {
                            $.ajax({
                                type: "POST",
                                url: "/ajax/mail",
                                dataType: "json",
                                data: jsonify({
                                    type: "reset_password",
                                    email: username_input.val()
                                }),

                                success: function (sent) {
    								submit_input.removeClass('disabled');
                                    $('.more-info').empty().append("<h2>Email sent!</h2><br /><p>Please check your email for a link to reset your password.</p>");
                                },

                                error: function (xhr, status, e, data) {
                			        submit_input.removeClass('disabled');
                                    try { data = $.httpData(xhr, this.dataType, this); }
                                    catch (e) { data = { error_message: "Connection Error: Email Failed" }; }

                                    submit_error.text(data.error_message).show();
                               }
                            });
                        },

                        error: function (xhr, status, e, data) {
        			        submit_input.removeClass('disabled');
                            try { data = $.httpData(xhr, this.dataType, this); }
                            catch (e) { data = { error_message: "Incorrect Email" }; }

                            submit_error.text(data.error_message).show();
                       }
                    });
                } else {
			        submit_input.removeClass('disabled');
                    submit_error.text("Please enter a valid email").show();
                }
            }
        });  
    },

    password_reset: function (salt) {
        var password_input = $('#password');
        var confirm_input = $('#password-confirm');        
        var submit_input = $('#submit');
        var submit_error = $('#error');

        submit_input.bind('click', function () {
            if (password_input.val() == confirm_input.val() && password_input.val() != '' && confirm_input.val() != '') { var valid = true; } else { var valid = false; }

            if (!$(this).hasClass('disabled')) {
                $(this).addClass('disabled');
    
                if (valid) {
                    $.ajax({
                        type: "POST",
                        url: "/ajax/password_reset",
                        dataType: "json",
                        data: jsonify({
                            salt: salt,
                            password: $('#password').val()
                        }),

                        success: function (existing) {
                            $(this).removeClass('disabled');
                            window.location = "/main";
                        },

                        error: function (xhr, status, e, data) {
        			        submit_input.removeClass('disabled');
                            try { data = $.httpData(xhr, this.dataType, this); }
                            catch (e) { data = { error_message: "Connection Error" }; }

                            submit_error.text(data.error_message).show();
                       }
                    });
                } else {
			        submit_input.removeClass('disabled');
                    submit_error.text("Passwords don't match").show();
                }
            }
        
        });
    },

    logout: function () {
        // Remove the stored cookie
        $.cookie('user', null, { path: '/',  expires: -1 });
        window.location.reload();
    }
};

function jsonify(ob) {
    result = {}
    $.each(ob, function (name, value) {
        result[name] = JSON.stringify(value);
    });
    
    return result;
}
