TV = {
    base_url : base_url, 
    YES : 1,
    NO : 0, 
    popupRegister : false,
    popupLogin : false,
    popupAddLink : false,
    popupContact : false,
    isNotificationOn:false,
    init:function() {
        
        $("#s").focus(TV.searchFocus);
        $("#s").blur(TV.searchBlur);
        
        $("#s").autocomplete(base_url+'show/autocomplete', {
		width: 955,
                dataType: "json",
                minChars:3,
                parse: function(data) {
			return $.map(data, function(row) {
				return {
					data: row,
					value: row.name,
					result: function(){
                                            url = base_url;
                                            if (row.url != undefined) {
                                               url += 'tv-shows/'+row.url;
                                            } else {
                                                console.info(row);
                                                url += 'tv-shows/a/a/'+row.id;
                                            }
                                            window.location =  url;
                                        } 
				}
			});
		},
		formatItem: function(item) {
			return TV.format(item);
		}
	});
        
        // facebook register
        $("#button_fb_login").click(TV.fbLogin);
        
        // twitter register
        twttr.anywhere(function (T) {
         
            $(".button_twitter,#button_tw_login").live("click",function(){
                 T.signIn();
                 return false;
            });    
             T.bind("authComplete", function (e, user) {
                 
                 if ($("#button_tw_login").length > 0) { 
                     
                      
                      var autentificate_tw_data = {"username":user.screenName};
                      $.ajax({
                                type     : "POST",
                                url      : TV.base_url + 'user/autentificate_tw',
                                data     : autentificate_tw_data,
                                dataType : "json",
                                success  : function(jsonResponse){
                                      if ( jsonResponse.success== true) {
                                          window.location = TV.base_url;
                                      } else {
                                         TV.notifyMessage(jsonResponse.error);
                                      }
                                }
                        });
                        
                    
                 } else {
                      $(".button_twitter").hide();
                      $("#f-name").val(user.name);
                      $("#u-name").val(user.screenName);
                      

                      var twitter_data = "<input type='hidden' name='twitter_autentificated' value='true' /> ";
                      twitter_data += "<input type='hidden' name='picture_url' value='"+user.profileImageUrl+"' /> ";
                      $("#form_register").append(twitter_data);
                 }
             });
        });
        
        // onsite registration
        
        $("#form_register").submit(TV.register);
        $("#form_login").submit(TV.login);
        $("#form_forgotpassword").submit(TV.resetPassword);
        
        
        $('a[rel="external"]').live("click", function() {
            window.open( $(this).attr('href') );
            return false;
        });  
        
        $("#sign_up_link").live("click",TV.signUpNow);
        $("#register_sign_in_link").live("click",TV.signInNow);
        
        $("a.contact_page").click(TV.showContact);
        $("#close_contact,#cancel_contact").live("click",TV.closeContact);
        $("#form_contact").live("submit",TV.sendContact);
        
        $("#s").focus(function(){
            if ( $(this).val() == "Search here.." ) {$(this).val("");}
        }).blur(function(){
            if ( $(this).val() == "" ) {$(this).val("Search here..");}
        });
            
            
         if ( $('#example-1').length > 0) {
              $('#example-1').ratings(5,2).bind('ratingchanged', function(event, data) {
                $('#example-rating-1').text(data.rating);
              });
         }
         
        $("#close").live("click",TV.hideNotification);
        $("#register_back").click(TV.backRegister);
      
    },
    format : function(row) {
        res = '';
        if (row.url != undefined) {
            res += "Show : ";
        } else {
            res += "Episode on "+row.series_name+" : ";
        }
        res += row.name;
        return res;
    },
    searchFocus : function(){
        if ($(this).val()=='Search'){
            $(this).val("");
        }
    },
    blurFocus : function(){
        if ($(this).val()==''){
            $(this).val("Search");
        }
    },
    backRegister : function(){
      history.go(-1);
      return false;
    },
    sendContact : function(){
              var form_valid = true;
              $(".form_error").hide();
              var error = '';
              
              var ck_email = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i
              
              var contact_name = jQuery.trim($("#contact_name").val());
              if (contact_name == '') {
                    form_valid = false;
                    if ($(".errors_div").css("display") == "none") {$(".errors_div").show();}
                     error +=  "&bull;&nbsp;&nbsp; Please enter your name<br/>";
              } 
              
              var contact_email = jQuery.trim($("#contact_email").val());
               if (!ck_email.test(contact_email)){
                    form_valid = false;
                    if ($(".errors_div").css("display") == "none") {$(".errors_div").show();}
                    error +=  "&bull;&nbsp;&nbsp; Please enter a valid email<br/>";
              }
              
              var contact_message = jQuery.trim($("#contact_message").val());
              if (contact_message == '') {
                    form_valid = false;
                    if ($(".errors_div").css("display") == "none") {$(".errors_div").show();}
                     error +=  "&bull;&nbsp;&nbsp; Please enter your message<br/>";
              } 
            
              
              if (form_valid == true) {
                  
                   $("#error_contact").hide();
                   $("#close_contact").hide();
                   $("#form_contact").hide().after("<p id='contact_notification'>Please wait while we send your contact information!</p>");
                 
                   
                   $.ajax({
                            type     : $(this).attr("method"),
                            url      : $(this).attr("action"),
                            data     : $(this).serialize(),
                            dataType : "json",
                            success  : function(jsonResponse){
                                
                                if ( jsonResponse.success== true) {
                                    TV.closeContact();
                                    TV.notifyMessage(jsonResponse.message); 
                                }
                                    
                            }
                    });

              } else {
                  $("#error_contact").html(error).show("slow");
              }

           return false;
    },
    showOverlay : function(){
        $("<div/>")
         .css({
            width:"100%",
            height:"100%",
            position:"fixed", 
            background:"#000",
            opacity:.4,
            top:0,
            left:0,
            zIndex: 1000
          }).attr("id","overlay").appendTo("body").show();

    },  
    hideOverlay : function(){      
      $("#overlay").remove();
    },
    backToTop : function(){
        $('html, body').animate({scrollTop:0}, 'slow');
        return false;
    },
    showContact : function(){
        TV.backToTop();
       if (TV.popupContact == false) {
                  TV.showOverlay();
                   TV.popupContact = true;
                   $.ajax({
                            type     : "GET",
                            url      : $(this).attr("href"),                                        
                            success  : function(htmlResponse){
                                var dialog = $('<div id="popup_container_contact" style="display:none;"></div>').appendTo('body'); 
                                dialog.html(htmlResponse).show();
                            }
                 });
            }
         return false;
    },
    closeContact : function(){
      $("#popup_container_contact").hide("fast",function(){
             TV.hideOverlay();
             $(this).remove();
      });
      TV.popupContact = false;       
      return false;
    },
    notifyMessage : function(message){
       if (TV.isNotificationOn == false) {
           $("#notify_message").html(message);
           $("#notification").fadeIn("slow",function(){
                TV.isNotificationOn = true;
                $(this).delay(4000).fadeOut("slow",function(){
                    TV.isNotificationOn = false;
                    $("#notify_message").html('');
                });
           });
       }
    },
    hideNotification : function(){
        $("#notification").hide();
        TV.isNotificationOn = false;
        $("#notify_message").html('');
        return false;
    },
     resetPassword : function(){
      var form_valid = true;
     
      $("#u-name2").removeClass("empty");
      var error = '';
       
      var username = jQuery.trim($("#u-name2").val());
      
      
      var ck_username = /^[A-Za-z0-9_]{5,20}$/;
      
      if ( username == '')  {
          $("#u-name2").addClass("empty");
          error += "Please enter your username in order to reset your password<br/>";
          form_valid = false;
      } else if  ( username != '' )  {
          
          if (!ck_username.test(username)) {
               form_valid = false;
               $("#u-name2").addClass("empty");
               error += "Invalid username. Only letters, numbers and _ character allowed<br/>"; 
          }
      }
      
     if (form_valid == true) {
         
           $.ajax({
                    type     : $(this).attr("method"),
                    url      : $(this).attr("action"),
                    data     : $(this).serialize(),
                    dataType : "json",
                    success  : function(jsonResponse){
                        
                       if ( jsonResponse.success == true) {
                            TV.notifyMessage(jsonResponse.message);
                          
                       } else {
                             TV.notifyMessage(jsonResponse.message);                          
                       }                  
                    }
            });
               
      } else {
          TV.notifyMessage(error);
      }
      
      return false;
    },
    signUpNow : function(){
      
      TV.closeLogin();
      $("#signup_link").trigger("click");
      
      return false;
    },
    signInNow : function(){
        TV.closeRegister();
        $("#login_link").trigger("click");
        return false;
    },
    register : function(){
      
      var form_valid = true;
      var error = '';
      $("#f-name,#u-name,#password,#p-confirm,#email").removeClass("empty");
      
      // validate name
      var name = jQuery.trim($("#f-name").val());
      if (name == '') {
          form_valid = false;          
          $("#f-name").addClass("empty");
          error += "Please enter your name<br/>";       
      } else if (name.length <5 ) {
          form_valid = false;
          $("#f-name").addClass("empty");
          error += "The name should have at least 5 characters <br/>";      
      }

      // validate username      
      var ck_username = /^[A-Za-z0-9_]{5,20}$/;
      var username = jQuery.trim($("#u-name").val());
      if (username == '') {
          form_valid = false;          
          $("#u-name").addClass("empty");
          error +=  "Please enter your username<br/>";
      } else if (username.length <5 ) {
          form_valid = false;
          $("#u-name").addClass("empty");
          error +=  "The username should have at least 5 characters<br/>";  
      } else if (!ck_username.test(username)) {
           form_valid = false;
            $("#u-name").addClass("empty");
            error += "Invalid username. Only letters, numbers and _ character allowed<br/>";
      }
           
      // validate password 
      var ck_password = /^[A-Za-z0-9!@#$%^&*()_]{5,20}$/;
      var password = jQuery.trim($("#password").val());
      if (!ck_password.test(password)){
           form_valid = false;
           $("#password").addClass("empty");
           error += "Invalid password , it should have at least 5 characters<br/>";
      }   
      
      var confirm_password = jQuery.trim($("#p-confirm").val());
      if (password != confirm_password) {
           form_valid = false;
           $("#p-confirm").addClass("empty");
           error += "Password and Confirm password don't match<br/>";
      }
      
      // validate email 
      var ck_email = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i
      var email = jQuery.trim($("#email").val());
      if (!ck_email.test(email)){
           form_valid = false;
           $("#email").addClass("empty");
           error += "Invalid email address<br/>";
      }    
      
      if (!$("#agree").is(":checked")){
           form_valid = false;
           $("#agree").addClass("empty");
           error += "Please agree to the <a rel='external' href='"+base_url+"page/tos'>Terms of Use</a><br/>";
      }
      
      if (form_valid == true) {
        
           $.ajax({
                    type     : $(this).attr("method"),
                    url      : $(this).attr("action"),
                    data     : $(this).serialize(),
                    dataType : "json",
                    success  : function(jsonResponse){
                        
                       if ( jsonResponse.success == true) {
                              TV.notifyMessage(jsonResponse.message);
                              $("#form_register").fadeOut("slow",function(){
                                 $(".signup-icons-wrap").html("<h3>"+jsonResponse.message+"</h3>"); 
                                 $(".signup-icons").hide();
                              });
                       } else {
                           var error = '';
                           for(var i=0; i<jsonResponse.arErrors.length; i++) {
                               var arError = jsonResponse.arErrors[i];   
                               switch(arError.field){
                                   case 'email': $("#email").addClass("empty");  break;
                                   case 'username': $("#u-name").addClass("empty");  break;
                                   case 'name': $("#f-name").addClass("empty");  break;
                                   case 'password': $("#password").addClass("empty");  break;
                               }
                               error += arError.error+'<br/>';
                           }
                           TV.notifyMessage(error);
                       }                  
                    }
            });
               
      } else {
          TV.notifyMessage(error);
      }
      
      return false;
    },
    login : function(){
        
      var form_valid = true;      
      
      var error = '';
   
       
      // validate username      
      var ck_username = /^[A-Za-z0-9_]{5,20}$/;
      var username = jQuery.trim($("#u-name").val());
      if (!ck_username.test(username)) {
           form_valid = false;
          $("#u-name").addClass("empty");
           error += " Please specify a valid username <br />";
      } else {
          $("#u-name").removeClass("empty");
      }
           
      // validate password 
      var ck_password = /^[A-Za-z0-9!@#$%^&*()_]{5,20}$/;
      var password = jQuery.trim($("#password").val());
      if (!ck_password.test(password)){
           form_valid = false;
           $("#password").addClass("empty");
           error +=  " Please specify a valid password  <br />";
            
      } else {
          $("#password").removeClass("empty");
      }
    
      if (form_valid == true) {
          
           $.ajax({
                    type     : $(this).attr("method"),
                    url      : $(this).attr("action"),
                    data     : $(this).serialize(),
                    dataType : "json",
                    success  : function(jsonResponse){
                        
                       if ( jsonResponse.success == true) {
                           if (jsonResponse.redirect != undefined) {
                                window.location = jsonResponse.redirect;
                           } else {
                                window.location = TV.base_url;
                           }
                       } else {                            
                             TV.notifyMessage(jsonResponse.error);
                             $("#password").addClass("empty");      
                             $("#u-name").addClass("empty");
                       }                  
                    }
            });
               
      } else {
           TV.notifyMessage(error);
      }
      
      return false;
    },
    fbLogin : function(){   
        FB.login(function(response) {
            console.info(response);
            if (response.authResponse) {
                
                TV.notifyMessage("<h3>Please wait while we autentificate you using Facebook!</h3>");
                
                $.ajax({
                    type     : "POST",
                    url      : TV.base_url+'user/fb_register',
                    dataType : "json",
                    success  : function(jsonResponse){
                        if (jsonResponse.sucess == true) {
                             window.location = TV.base_url;
                        }                        
                    }
                });
               

            }
             
        }, {
            scope:'email'
        });       
        return false;
    }
   
};

$(document).ready(TV.init);

