$(document).ready(function(){
	
	// $('body').prepend('<div id="global-signin"></div>');

  profileManager.setUserRoot(USERROOT);
  profileManager.setSignIn();
  profileManager.setLoginClicks();
  check_subdomain_result = profileManager.checkSubdomain();
  if (check_subdomain_result) {bindAjaxLoadingMessage('#wrapper');}
});


var profileManager = function()  {
  var user_root;
  var user_id;
  var user_name;
  var user_record;
  var viewing_user;

  return {
    initAnswersTab : function (html_type, user_root, user_id, activity_type, follow_type) {
      if (typeof follow_type === undefined) {follow_type = null};
      this.user_root = user_root;
      this.user_id = user_id;
      //this.loadActivities(html_type, activity_type, follow_type);
      this.setToggleClicks();
      this.setUnfollowForProfile();

    },
    
    initProfileEdit : function () {
     
      $('select[name=country]').change(function(){
          country_value = $(this).val();
          if (country_value != 'US' && country_value != 'CA') {
            $('select[name=state]').val('none').parent().hide();
            
          } 
          else {
            
            $('select[name=state]').parent().show();
          }
          
          profileManager.checkStateAndCity();
      });
      
      $('select[name=state]').change(function(){

        profileManager.checkStateAndCity();
    });
      
     
      $('input[name=city]').keyup(function(){
        profileManager.checkStateAndCity();
      });
      
      profileManager.setProfileSubmit();
      
      
      
    },
    
    
    setProfileSubmit : function () {
      $('.edit-form').submit(function(event) { 
        
        //$(".error").hide();
        var hasError = false;
        var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
        var emailaddressVal = $("input[name=email]").val();
        if(!emailReg.test(emailaddressVal)) {
          $("input[name=email]").parent().before('<div class="warning user-message"><p>Enter a valid email address.</p></div>');
          return false;
        }
        
        else {return true}
 
        
 
    });
      
      
    },
    
    
    checkStateAndCity : function () {
      country_value = $('select[name=country]').val();
      state_value = $('select[name=state]').val();
      input_city = capitaliseFirstLetter($('input[name=city]').val())
      //Removed Neighborhood check for Times Review
      /*
      if (state_value == 'NY' && input_city == 'Brooklyn' && country_value == 'US') {
        $('select[name=neighborhood]').parent().show();
        $('#city_message').hide();
      }
      
      else {
        $('select[name=neighborhood]').val('none').parent().hide();
        $('#city_message').show();
      }
      */
    },
    
    checkSubdomain : function()  {
      var host_name = window.location.hostname;
      host_name_array = host_name.split('.');
      if (host_name_array.length < 3 || host_name_array[0] == 'www')
        {return false}
      else {return true}
    },
    
    initFollowingPagination : function (user_id, viewing_user, user_root) {
      profileManager.user_id = user_id;
      profileManager.viewing_user = viewing_user;
      profileManager.user_root = user_root;
      
      $('#profile-container .pagination a').live('click', function(event){
        event.preventDefault();
        href = $(this).attr('href');
        profile_type = profileManager.getParameterByName('pagetype', href)
        $("#user-actions-list").fadeOut();
        $('.pagination a').removeClass('active');
        $(this).addClass('active');
        var url_to_load = profileManager.returnLoadString(profile_type);
        $("#user-actions-list").load(profileManager.user_root + 'api/api.php'+$(this).attr('href') + '&html=' + profile_type + '&user_id=' + profileManager.user_id + '&viewing_user=' + profileManager.viewing_user, function(){
          $("#user-actions-list").fadeIn();
        });
        
        return false;
        //var url_to_load = profileManager.returnLoadString(profile_type);
      });
    },
    
    
    getParameterByName : function ( name, href )
    {
      name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
      var regexS = "[\\?&]"+name+"=([^&#]*)";
      var regex = new RegExp( regexS );
      var results = regex.exec( href );
      if( results == null )
        return "";
      else
        return decodeURIComponent(results[1].replace(/\+/g, " "));
    },

    
    checkHash : function()  {
      if(window.location.hash == '#sign-in') {
        var api_for_sign_in = $(".sign-in").data("overlay");
        api_for_sign_in.load();
      } 
      
    },

    setUnfollowForProfile : function () {
      $('.unfollow_from_profile').live('click', function(){        
        url = $(this).attr('rel') + '&callback=?';
        $.getJSON(url, function(data){
            profileManager.loadActivities('activities','follow', 'question');
          });
      });
      
    },
    
    returnLoginFunctionsBase : function () {
      var load_string_base = profileManager.user_root + 'ajax/ajax-login-functions-jsonfix.php?';
      return load_string_base;
    },

    
    returnLoadString : function (profile_type, activity_type, follow_type)  {

      var load_string = this.user_root + 'api/api.php?html=' + profile_type + '&pg=1&user_id=' + this.user_id + '&viewing_user=' + this.viewing_user;
      if (activity_type !== undefined) {
        load_string += '&type=' + activity_type;
      }

      if (follow_type != null)  {
        load_string += '&follow_type=' + follow_type;
      }
      return load_string;
    },


    loadActivities : function(html_type, activity_type, follow_type) {
      $("#user-actions-list").load(this.returnLoadString(html_type, activity_type, follow_type), function(){
        //$("#answers-list .comment-form").hide();
      });
    },

    setToggleClicks : function () {
      $('.toggle-type').click(function(){
        var follow_type=null;
        var activity_type = $(this).attr('type');
        profile_type='activities';
        if ($(this).attr('follow_type')) follow_type = $(this).attr('follow_type');
        $('.toggle-type').removeClass('selected');
        $(this).addClass('selected');
        var url_to_load = profileManager.returnLoadString(profile_type, activity_type, follow_type);
        $("#user-actions-list").load(url_to_load, function(data){});
      });

    },

    setLoginClicks : function()   {
      $('.resend_password').live('click', function(event){
          event.preventDefault();
          var load_string = profileManager.user_root + 'login/files/login-initial.php?loginstate=reset&returnfullview=false&callback=?';
          $.getJSON(load_string, function(json){
            $('.login_ajax_box').html(json.html);
          });
      });
      
      $('.resend_registration').live('click', function(event){
        event.preventDefault();
        $('.login_overlay .success_box').remove();
        var load_string_base = profileManager.returnLoginFunctionsBase();
        var load_string_query = "&reg=resend-registration&registration_username=" + $(this).attr('username');
        var load_string = load_string_base + load_string_query + '&callback=?';
        $.getJSON(load_string, function(json){
          var success_box = profileManager.returnSuccessBoxWithBottom(json.returnMessage);
          $('.resend_registration').before(success_box);
        });
    });      

      $('.login_sign_up').live('click', function(event){
          event.preventDefault();
          var load_string = profileManager.user_root + 'login/files/login-initial.php?loginstate=register&returnfullview=false&callback=?';
          $.getJSON(load_string, function(json){
            $('.login_ajax_box').html(json.html);
          });
      });

      $('.login_sign_in').live('click', function(event){
          event.preventDefault();
          var load_string = profileManager.user_root + 'login/files/login-initial.php?loginstate=sign-in&returnfullview=false&callback=?';
          $.getJSON(load_string, function(json){
            $('.login_ajax_box').html(json.html);
          });
      });

      $('.login_overlay input').live('focus', function(){
          if ($(this).attr('value') == $(this).attr('defaultValue')){$(this).attr('value', '');}
      });


      $('.login_overlay form').live('submit', function(event){
          event.preventDefault();
          $('.login_overlay .error_box').remove();
          $('.login_overlay input').removeClass('default_error');
          var blank_value_string = "Please enter something in this field";
          var terms_of_service_string = "Please agree to the terms of service";
          var username_illegal_characters = "Please choose a username without spaces or special characters";
          var deactivate_string = "Please check the box to ensure account deactivation";
          
          var load_string_base = profileManager.returnLoginFunctionsBase();//profileManager.user_root + 'ajax/ajax-login-functions-jsonfix.php?';
          
          var load_string_query = '';
          var username_input = $(".login_overlay form input[name=username]");
          var email_input = $(".login_overlay form input[name=email]");
          var password_input = $(".login_overlay form input[name=password]");
          var username_regex = /^[A-Za-z0-9_-]*[A-Za-z0-9][A-Za-z0-9_-]*$/;
          var terms_of_service_input = $(".login_overlay form input[name=terms_of_service]");
          var deactivate_input = $(".login_overlay form input[name=deactivate]");
          var name_to_deactivate_input = $(".login_overlay form input[name=name_to_deactivate]");
          var record_to_deactivate_input = $(".login_overlay form input[name=record_to_deactivate]");
          
          var error_array = [];
          var error_object = {}
          var form_type = $(".login_overlay form input[name=form_type]").val();

          load_string_query +='reg='+form_type;

          
        //Cancelation validation
          if (deactivate_input.length > 0){
              if (deactivate_input.attr('checked')!=true){
                error_object.deactivate = deactivate_string;
              }
              load_string_query +='&name_to_deactivate='+name_to_deactivate_input.val();
              load_string_query +='&record_to_deactivate='+record_to_deactivate_input.val();
          }
          	
          
          //Terms of service validation
          
          
          if (terms_of_service_input.length){        	  
        	  if (terms_of_service_input.attr('checked') != true) {
                error_object.terms_of_service = terms_of_service_string;
              }
          }
          

          //Username validation & query load
          if (username_input.length > 0){
              if (username_input.attr('value') == username_input.attr('defaultValue') || username_input.attr('value') == ''){
                error_object.username = blank_value_string;
              }
              
              //check regex              
              if (!username_input.attr('value').match(username_regex) && form_type != 'reset') {error_object.username = username_illegal_characters;}
              
              
              load_string_query +='&username='+ username_input.val();
          }

          //Email validation & query load
          if (email_input.length > 0){
              if (email_input.attr('value') == email_input.attr('defaultValue') || email_input.attr('value') == ''){
                error_object.email = blank_value_string;
              }
              load_string_query +='&email='+email_input.val();
          }

          //Password validation & query load
          if (password_input.length > 0){
              if (password_input.attr('value') == password_input.attr('defaultValue') || password_input.attr('value') == ''){
                error_object.password = blank_value_string;
              }
              load_string_query +='&password='+password_input.val();
          }


          if (!profileManager.isEmpty(error_object)) {
            jQuery.each(error_object, function(input_name, error_message){
              if (input_name != 'terms_of_service' && input_name !='deactivate'){
                var error_box = profileManager.returnErrorBox(error_message);
                $(".login_overlay form input[name="+input_name + "]").addClass('default_error').before(error_box);
              }
              else {
                var error_box = profileManager.returnErrorBoxWithBottom(error_message);
                $(".login_overlay form input[name="+input_name + "]").after(error_box);
              }
            
            });
          } else {
            var load_string = load_string_base + load_string_query + '&callback=?';
           
            //insert the overlay into the DOM
            $.getJSON(load_string, function(json){
            	
              if (json.status != "0") {
                var server_error_box = profileManager.returnErrorBox(json.returnMessage);
                
                for(var i in json.attachField){                	
                	 $(".login_overlay form input[name="+ json.attachField[i] + "]").addClass('default_error').before(server_error_box);
                }
                
               /*
                json.attachField.forEach( function(input_name){
                  $(".login_overlay form input[name="+ input_name + "]").addClass('default_error').before(server_error_box);
                });
                */
                
              }
              else {
                
                if (json.action == "register") {
                  var registration_username = json.registration_username;
                  var registration_success_string = profileManager.user_root + 'login/files/login-initial.php?loginstate=registration-success&returnfullview=false&registration_username=' + registration_username + '&callback=?';
                  $.getJSON(registration_success_string, function(json){
                    $('.login_ajax_box').html(json.html);
                  });
                  
                }
                
                else if (typeof json.attachField !== "undefined")  {
                  var server_success_box = profileManager.returnSuccessBox(json.returnMessage);
                  
                  for(var i in json.attachField){                	
                	  $(".login_overlay form input[name="+ json.attachField[i] + "]").before(server_success_box);
                  }
                  /* Following does not work in IE
                  json.attachField.forEach( function(input_name){
                    $(".login_overlay form input[name="+ input_name + "]").before(server_success_box);
                  });
                  */
                }

                if (json.action == "auth")  {                 
                
                  if (json.tempValue != 1) window.location.reload(true);
                  else {
                    password_url = profileManager.user_root + 'changepassword/' + json.recordKey + '/?temp_pass=true'
                    if (json.firstLogin == "yes") { password_url += '&next=profile'} 
                    window.location.assign(password_url);
                  }
                }
                
                
                if (json.action == "deactivate")  {                 
                  
                  var deactivate_success_string = profileManager.user_root + 'login/files/login-initial.php?loginstate=deactivate-success&returnfullview=false&callback=?';
                  $.getJSON(deactivate_success_string, function(json){
                    $('.login_ajax_box').html(json.html);
                  });
                  /*
                  if (json.tempValue != 1) window.location.reload(true);
                  else {
                    password_url = profileManager.user_root + 'changepassword/' + json.recordKey + '/?temp_pass=true'
                    window.location.assign(password_url);
                  } */
                }
              }
            });
          }


          
          //if ($(this).attr('value') == $(this).attr('defaultValue')){$(this).attr('value', '');}
      });
      
      
      $('#global-signin').hover(
          function () {
            $('.login-dropdown').show();
            $('a.login_menu_submenu').addClass('login_menu_submenu-down');
          },
          function () {
            $('.login-dropdown').hide();
            $('a.login_menu_submenu').removeClass('login_menu_submenu-down');
          }

        );

      $('a.login_menu_submenu').live('click', function(){
    	  if($('.login-dropdown').is(":visible")){
    		  $('.login-dropdown').hide();
    		  $('a.login_menu_submenu').removeClass('login_menu_submenu-down');
    	  }else{
    		  $('.login-dropdown').show(); 
    		  $('a.login_menu_submenu').addClass('login_menu_submenu-down');
    	  }
      });
      
    },
    
    
    isEmpty : function (o){
      for(var i in o){
          if(o.hasOwnProperty(i)){
              return false;
          }
      }
      return true;
    },
    
    
    returnSuccessBox : function (string_to_insert) {
      return "<div class=\"success_box\">" + string_to_insert + "</div>";
    },

    returnErrorBox : function (string_to_insert) {
      return "<div class=\"error_box\">" + string_to_insert + "</div>";
    },
    
    //because I'm lazy
    returnErrorBoxWithBottom : function (string_to_insert) {
      return "<div class=\"error_box with_bottom\">" + string_to_insert + "</div>";
    },
    
    returnSuccessBoxWithBottom : function (string_to_insert) {
      return "<div class=\"success_box with_bottom\">" + string_to_insert + "</div>";
    },

    setUserRoot : function (user_root)   {
      this.user_root = user_root;
    },
    
    setUserRecord : function (user_record) {
      
      this.user_record = user_record;
    },
    
    setUserName : function (user_name)   {
      this.user_name = user_name;
    },
    setSignIn : function ()  {

      var load_string = this.user_root + 'login/files/login-initial.php?loginstate=sign-in&returnfullview=true&callback=?';
      //insert the overlay into the DOM
      $.getJSON(load_string, function(json){
        //alert("JSON Data: " + json.html);
        $('body').append(json.html);
        //total hack magic

        $('.sign-in').overlay({
          mask: {
            color: '#000',
            loadSpeed: 200,
            opacity: 0.5
          },
          
          onBeforeLoad : function () {
            var reset_load_string = profileManager.user_root + 'login/files/login-initial.php?loginstate=sign-in&returnfullview=false&callback=?';
            $.getJSON(reset_load_string, function(json){
              $('.login_ajax_box').html(json.html);
            });
          }
        
        });


        $('.register').overlay({
            mask: {
              color: '#000',
              loadSpeed: 200,
              opacity: 0.5
            },

            onBeforeLoad : function () {
              var register_load_string = profileManager.user_root + 'login/files/login-initial.php?loginstate=register&returnfullview=false&callback=?';
              $.getJSON(register_load_string, function(json){
                $('.login_ajax_box').html(json.html);
              });
              
            }
        });
        
        $('.deactivate_account_link').overlay({
          mask: {
            color: '#000',
            loadSpeed: 200,
            opacity: 0.5
          },

          onBeforeLoad : function () {
            var register_load_string = profileManager.user_root + 'login/files/login-initial.php?loginstate=deactivate&returnfullview=false&user_name=' + profileManager.user_name + '&user_record=' + profileManager.user_record + '&callback=?';
            $.getJSON(register_load_string, function(json){
              $('.login_ajax_box').html(json.html);
            });
            
          }
      });
        
        
        //set the overlay to display for any .login-first elements
        $('.login-first').click(function(event){event.preventDefault(); ($('.sign-in').trigger('click'))});
        //check the Hash if once the HTML is loaded for the login overlay
        profileManager.checkHash();
      });
      
     
    }



  };

}();


function bindAjaxLoadingMessage(location_string){
  
	// take note of the spin gif loading here... from brownstoner, change in neccessary 
  if (!$('#loading_message').length) {
    loading_message_string = '<div id="loading_message">Loading&#8230; <img src="https://s3.amazonaws.com/cdn.blankslate.com/images/ajax-loader.gif" alt="loader"/></div>';
    $(location_string).before(loading_message_string);
    
    $("#loading_message").bind("ajaxSend", function(){
        $(this).show();
      }).bind("ajaxComplete", function(){
        $(this).hide();
      });
  }
}


function capitaliseFirstLetter(string)
{
    return string.charAt(0).toUpperCase() + string.slice(1);
}


function parseInfo(data)
{
    $('body').html(data.name +', '+ data.email);
} 
