/*!
 * Javascript file for auth module
 * @author  developer@evoknow.com
 */      

   $(document).ready(function()
   {
	  window.fbAsyncInit = function() 
	  {
		  FB.init({
		    appId      : fbAppID, // App ID
		    channelUrl : channelUrl, // Channel File
		    status     : true, // check login status
		    cookie     : true, // enable cookies to allow the server to access the session
		    xfbml      : true,  // parse XFBML
		    oauth      : true
		  });
	  
	      // Now do login
	      doFBLogin();
	  };
	  
	  // Load the SDK Asynchronously
	  (function(d){
	   var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
	   js = d.createElement('script'); js.id = id; js.async = true;
	   js.src = "//connect.facebook.net/en_US/all.js";
	   d.getElementsByTagName('head')[0].appendChild(js);
	  }(document));
   
      // If user is already logged in via facebook
      if (readCookie('fb_user_id'))
      {
         return false;
      }
        
   function doFBLogin()
   {
                      
      FB.Event.subscribe('auth.login', function(response) 
      {                                        
         $.getJSON('https://graph.facebook.com/me?access_token='+response.authResponse.accessToken+'&callback=?',            
         function (data) 
         {                                
            $.ajax
            ({
               type: 'POST',
               url: '/Auth/Login/facebookLogin',
               data: data,
               dataType: 'json',      
               success: function(signup_response)
               {
                  if(signup_response.success == true)
                  {                                       
                     
                     createCookie('fb_user_id', response.authResponse.userID );
                     var curDate = new Date();
                     location.href = signup_response.referrer;
                  }
               }                  
            });                           
         });               
      });
     }        
   })
   
  function doFacebookLoginStatusResponse(response) 
  {

   if (response.status === 'connected') 
   {
      // the user is logged in and connected to our
      // app, and response.authResponse supplies
      // the user's ID, a valid access token, a signed
      // request, and the time the access token 
      // and signed request each expire
      var uid = response.authResponse.userID;
      
      var accessToken = response.authResponse.accessToken;
   } 
   else if (response.status === 'not_authorized') 
   {
      // the user is logged in to Facebook, 
      //but not connected to our app
      
   } else 
   {
      // the user isn't even logged in to Facebook.
      
   }
  }
 
 
  function doFacebookLogout(response) 
  {   
   if (response.status === 'connected') 
   {
      // the user is logged in and connected to our
      // app, and response.authResponse supplies
      // the user's ID, a valid access token, a signed
      // request, and the time the access token 
      // and signed request each expire
      var uid = response.authResponse.userID;
      
      var accessToken = response.authResponse.accessToken;
      FB.logout(logoutFromFacebook);
      
   } 

  }
  
    // http://developers.facebook.com/docs/reference/javascript/FB.getLoginStatus/
     function logoutFromFacebook(response) 
   {
       //FB.logout(handleSessionResponse);

      deleteCookie('fb_user_id');
      //if we dont have a session (which means the user has been logged out, 
      // redirect the user)
      if (!response.session) 
      {
          location.href="/Auth/Logout";
          //location.href="http://www.evoknow.com";
          return;
      }
      
      //if we do have a non-null response.session, call FB.logout(),
      //the JS method will log the user out of Facebook and remove any authorization cookies
   
      FB.logout(logoutFromFacebook);
      
   }
   
   
   
   function doLogout()
   {
      
      if (readCookie('fb_user_id'))
      {
         deleteCookie('fb_user_id');
      }      
      
      location.href="/Auth/Logout";
        
   } 
   
$(function()
{           
   var doc_width = $(document).width()/2+147; 
   $('#login_popup').dialog({
        autoOpen: false,
        show: 'scale',
        hide: 'scale',
        modal: true,
        resizable: false,
        position: [doc_width,25],              
        width: '335px'
    });
    
        
    $('#signin_up').click(function() 
    {              
       if ($('#login_popup').dialog('isOpen') == true)
       {
          $('#login_popup').dialog('close');
       }
       else
       {
         var fb_appid = $('#fb_appid').val();
         var popupContent = '<script>FB.init({appId:'+fb_appid+',cookie:true,status:true,xfbml:true});</script><h1>Connect To Veria Living</h1><img onclick="closePopup();" src="/images/close.png">'+
                            '<div class="facebook"><fb:login-button perms="email" autologoutlink="true">Facebook</fb:login-button></div>'+
                            '<div class="social_network" id="twitter_login" onclick="openTwitterPopup();"><span>Twitter</span></div>'+
                            '<div class="social_network" id="google_plus" onclick="openGoolgePlusPopup();"><span>Google+</span></div>'+
                            '<div class="cleardiv"></div>'+
                            '<div class="signin_link">Or <a href="Javascript:void(0);">Sign In</a> with Veria Living. <a href="javascript:void(0);" style="opacity:0.1;" onclick="showFPForm();">Forgot Password?</a></div>'+
                            '<div class="veria_login">'+
                            '<div class="veria_login_left"><div id="signin_error_container"><span id="signin_error_msg" style="display:none;"></span></div>'+
                            '<input name="Email" onfocus="emptyTheValue(this);" onblur="fillTheValue(this);" type="text" id="email" onkeypress="callSignin(event);" value="Email">'+
                            '<span id="pass_lbl" onclick="moveLabel(this);">Password</span><input onfocus="emptyTheValue(this);" onblur="checkField(this);" type="password" onkeypress="callSignin(event);" name="Password" id="password">'+
                            '</div>'+
                            '<div class="veria_login_right"><div class="signin" id="signin" onclick="doSignin();"><span>Sign In</span></div></div>'+
                            '<div class="cleardiv"></div>'+
                            '<div class="signin_link">New to Veria Living? <a href="Javascript:void(0);">Sign Up Today!</a></div>'+
                            '<div class="veria_login"><div class="veria_login_left"><div id="signup_error_container"><span id="signup_error_msg" style="display:none;"></span></div>'+
                            '<input type="text" value="Email" id="signup_email" onblur="fillTheValue(this);" onkeypress="callSignup(event);" onfocus="emptyTheValue(this);" name="Email">'+
                            '<span id="signup_pass_lbl" onclick="moveLabel(this);">Password</span><input type="password" id="signup_password" name="Password" onkeypress="callSignup(event);" onblur="checkField(this);" onfocus="emptyTheValue(this);">'+
                            '<span id="confirm_pass_lbl" onclick="moveLabel(this);">Confirm Password</span>'+
                            '<input type="password" id="confirm_password" onblur="checkField(this);" onkeypress="callSignup(event);" onfocus="emptyTheValue(this);" name="Confirm Password"></div>'+
                            '<div class="veria_login_right"><div onclick="doSignup();" id="signup"><span>Sign Up</span></div></div></div>'
                            '</div>'; 
         
         $('#login_popup').html(popupContent);
         $('#login_popup').dialog('open');
         $('#login_popup').parent().removeClass('ui-corner-all');
         $('#login_popup').parent().css('border','none');         
         
         $(".ui-dialog-titlebar").hide();
       }
       return false;
    });
    
   });

   function showFPForm()
   {
      var fpform = '<div id="fp_error_container"><span id="fp_error_msg" style="display:none;"></span></div><div id="forgot_password"><div class="label">Enter your email address</div>'+
                    '<div><span id="error_msg" style="display:none;"></span><input type="text" name="fp_email" id="fp_email" onkeypress="callOnEnter(event);"></div>'+
                   '<div class="button" onclick="sendEmail();"><span>Submit</span></div><img id="fp_preloader" style="display:none;" src="">'+                   
                   '<div class="button" onclick="closePopup();"><span>Cancel</span></div>'+
                   '</div>'
      $('.veria_login').html(fpform);
   }
   
   function sendEmail()
   {
      var fp_email = $('#fp_email').val();
      
      if(!fp_email)
      {
         showErrorMessage('Enter email address.','fp_error_msg');         
         return false;      
      }
      
      if(!checkValidEmail(fp_email))
      {
         showErrorMessage('Invalid email address.','fp_error_msg');          
         return false;      
      }      
      
      $.post('/Auth/Login/checkEmail',{"email" : fp_email}, function(emailResponse)
      {
         if(!emailResponse.success)                    
         {
            showErrorMessage('Email does not exist.','fp_error_msg');          
            return false;               
         }
        
         $('#fp_email').css("border","1px solid #dbdbdb");
         $('#fp_preloader').show().attr('src','/images/preloader.gif');  
        
         $.post('/Auth/Forgotpassword/sendEmail',{"email" : fp_email},
         function(response)
         {
            if(response.success)
            {
               var confirmMsg = '<div id="fp_error_container"><span id="fp_error_msg" style="display:none;"></span></div><div><div>An email has been sent to '+fp_email+'.</div>'+
                                '<div class="button" id="ok_button" onclick="closePopup();"><span>Ok</span></div></div>'                                         
               $('.veria_login').html(confirmMsg);
            }
         },"json");    
      }, "json"); 
   }

   function openGoolgePlusPopup()
   {      
       var authURL = 'https://accounts.google.com/o/oauth2/auth?response_type=code&redirect_uri='+
                     $('#g_redirect_url').val()+'&client_id='+$('#g_client_id').val()+'&scope=https://www.googleapis.com/auth/plus.me';                     
      $.oauthpopup({
          path: authURL,
          callback: function(response)
          {             
             window.location.reload();
          }          
      });      
   }
         
   function openTwitterPopup()
   {
      $.oauthpopup({
          path: '/Auth/Login/twitterLogin',
          callback: function(response)
          {             
             window.location.reload();
          }          
      });
   }
   
   function doSignup()
   {           
      if(!checkEmail($('#signup_email')))    return false;        
      if(!passwordStrength($('#signup_password'),'signup_error_msg'))  return false;
      if(!misMatch()) return false;
                                               
      var email    = $('#signup_email').val(); 
      var password = $('#signup_password').val();          

      $.post("/Auth/Signup/",{"email" : email, "password" : password},
      function(response)
      {
         if(response.success)
         {                      
            location.href=response.referrer; 
         }         
      },"json"); 
   }
   
   function misMatch()
   {
      if($('#signup_password').val() == $('#confirm_password').val())
      {
         $('#confirm_password').css("border","1px solid #dbdbdb;");
         return true;
      }   

      showErrorMessage("Password didn't match.",'signup_error_msg');         
      return false;
   }
   
   function callSignup(obj)
   {
      var keyunicode=obj.keyCode? obj.keyCode : obj.charCode;      
      if(keyunicode == 13)
      {         
        doSignup();     
      }      
   }   
   
   function callSignin(obj)
   {
      var keyunicode=obj.keyCode? obj.keyCode : obj.charCode;      
      if(keyunicode == 13)
      {         
        doSignin();     
      }      
   }    
   
   function callOnEnter(obj)
   {
      var keyunicode=obj.keyCode? obj.keyCode : obj.charCode;
      
      if(keyunicode == 13)
      {                     
         sendEmail();
      }      
   }

   function callLogout()
   {
      location.href="/Auth/Logout";   
   }

   function moveLabel(obj)
   {
      obj.innerHTML='';
   }
      
   function doSignin()
   {
     if(!checkEmail($('#email')))    return false;
      var email    = $('#email').val(); 
      var password = $('#password').val(); 
      
      $.post("/Auth/Login/",{"email" : email, "password" : password},
      function(response)
      {
         if(response.success)
         {                      
            location.href = response.referrer; 
         }       
         else
         {
            showErrorMessage("Email or password incorrect.",'signin_error_msg'); 
            $('#password').css("border","1px solid red");
            return false;           
        }  
      },"json");          
   }
   
   function closePopup()
   {
      $('#login_popup').dialog('close');    
   }
   
   function checkField(obj)
   {      
      if(obj.id == 'password')
      {
         (obj.value == '') ? $('#pass_lbl').html('Password') : '';                                
      }
            
      if(obj.id == 'signup_password')
      {
         (obj.value == '') ? $('#signup_pass_lbl').html('Password') : ''; 
      }      
            
      if(obj.id == 'confirm_password')
      {
         (obj.value == '') ? $('#confirm_pass_lbl').html('Confirm Password') : '';              
      }      
   }    
   
   function checkEmail(obj)
   {           
      var reg = /^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$/;              
      if(!reg.test(obj.val()))
      {
       var error_msg_mode = (obj.attr('id') == 'email') ? 'signin_error_msg' : 'signup_error_msg';
         showErrorMessage("Enter email address correctly.", error_msg_mode);
         $('#'+obj.attr('id')).css("border","1px solid red");
         return false; 
      }
      else
      {
         $('#'+obj.attr('id')).css("border","1px solid #dbdbdb");                  
      }
      
      var flag = 1;      
      $.ajax({
        type: "POST",
        url: '/Auth/Login/checkEmail',
        async: false,
        data: {"email" : obj.val()},
        dataType: 'json',
        success: function (response) 
        {
           if(response.success)
           {
                if(obj.attr('id') == 'signup_email')
                {
                 showErrorMessage("Email already exists.",'signup_error_msg'); 
                 flag = 0;
              }
           }
           else
           {          
                if(obj.attr('id') == 'email')
                {
                 showErrorMessage("Email does not exist.",'signin_error_msg'); 
                 flag = 0;
              }                      
           }
        }
      });
                      
      return (flag) ? true : false; 
   }
   
   function emptyTheValue(obj)
   { 
      if(obj.value == 'Email')
      {
         obj.value = '';  
      }
      else
      {         
         if(obj.id == 'password')
         {
            $('#pass_lbl').html(''); 
         }  
         
         if(obj.id == 'signup_password')
         {
            $('#signup_pass_lbl').html(''); 
         }       
           
         if(obj.id == 'confirm_password')
         {
            $('#confirm_pass_lbl').html(''); 
         }                 
      }     
   }
   
   function fillTheValue(obj)
   {
      if(obj.value == '')
      {
       obj.value = obj.name;  
     }
   }
   
   function showVeriaLogin()
   {
      $('.veria_login').show('slow');
   }
   
   function inArray(needle, haystack) 
   {
       var length = haystack.length;
       for(var i = 0; i < length; i++) 
       {
           if(haystack[i] == needle) 
           return true;
       }
       return false;
   }   
   
   $.fn.exists = function()
   {
      return $(this).length>0;
   }  
   
   function checkValidEmail(email)
   {
      var reg = /^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$/;              
      if(reg.test(email))
      {         
         return true; 
      } 
      
      return false;     
   } 
   
   function showErrorMessage(error_message,field_name)
   {       
     $('#'+field_name).show();    
      $('#'+field_name).html(error_message);      
      $('#'+field_name).fadeOut(3000);                    
   }

   function goHomePage()
   {
      location.href='/';   
   }
   
   function passwordStrength(obj,fieldname)
   {         
      if(!obj.val()) 
      {
       showErrorMessage("Password cannot be left blank.",fieldname); 
       return false;
     }
     
      if(obj.val().length >= 1 && obj.val().length <= 5 )
      {               
         showErrorMessage("Weak password.",fieldname); 
         return false;              
      }
      
      return true;
   }   
   
   function resetPasswordStrength()
   {
     var obj = document.getElementById('password');     
     if(!obj.value) return false;
     
      if(obj.value.length >= 1 && obj.value.length <= 5 )
      {               
         $('#weak_password').show();         
         $('#weak_password').html('Weak password.');               
         $('#weak_password').fadeOut(2000);  
         return false;              
      }
      resetPassword();   
   }
   
   function resetPassword()
   {
      var email    = $('#email').val();
      var password = $('#password').val();

      $.post("/Auth/Signup/",{"email" : email, "password" : password},
      function(response)
      {
         if(response.success)
         {
            location.href='/';
         }
      },"json");
   }


function resetOnEnter(obj)
   {
      var keyunicode=obj.keyCode? obj.keyCode : obj.charCode;
      
      if(keyunicode == 13)
      {         
         resetPasswordStrength();
      }      
   }

 // Cookies
    function createCookie(name, value, days) 
    {
        if (days) {
            var date = new Date();
            date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
            var expires = "; expires=" + date.toGMTString();
        }
        else var expires = "";


        document.cookie = name + "=" + value + expires + "; path=/";
    }

    function readCookie(name) {
        var nameEQ = name + "=";
        var ca = document.cookie.split(';');
        for (var i = 0; i < ca.length; i++) 
        {
            var c = ca[i];
            while (c.charAt(0) == ' ') c = c.substring(1, c.length);
            if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
        }
        return null;
    }

    function deleteCookie(name) 
    {
        createCookie(name, "", -1);
    }


