$(document).ready(function() {     
     
       //main.preloadImages();
	   main.IncludeExceptions();
	   main.lazyLoad();	
       main.leftmenu();
       main.loginInit();   
       main.LeftHandMenuHeight();    
       main.Footer();
       main.Header();
       main.Banner();
       
 });
 
 
 var main = {};
 main.LoggedIn = false;
 /***************************************************************************************************
 *                         Main Left hnad Menu  Function 
 ****************************************************************************************************/

 
 main.Banner = function(){

	 $(".slideshow").click(function(){
		 if(main.LoggedIn === false) window.location.href = APPLICATION_PATH+"Register/"; 
	 });
	 
if($('.slideshow').length){			

    $('.slideshow').cycle({
		fx: 'scrollLeft', // choose your transition type, ex: fade, scrollUp, shuffle, etc...
		timeout: 6000	
	});
}
	

	 
 };
 
 
 
 main.leftmenu = function(){
   
   main.leftmenu.listSize = 10;     
   main.leftmenu.LinkEffect(); 
   main.leftmenu.LinkListSizeLimit(); 
   main.leftmenu.Tooltip();
 };
 
      
 
 
main.LeftHandMenuHeight = function(){
		
	   var ItemDescriptionHeight = 0;
	   if($(".ItemDescriptions").length){ 
		   $(".ItemDescriptions").hide();
		   ItemDescriptionHeight = 600
	   }
       var bodyHeight = $("#g-body-center-content").height()+ItemDescriptionHeight;  
       //console.log($("#g-body-left-menu").height());
       if($("#g-body-left-menu").height() < bodyHeight){
           var LeftHandMenuHeight =  bodyHeight ;
           $("#g-body-left-menu").css({height : LeftHandMenuHeight+"px"});           
       }
       //console.log($("#g-body-left-menu").height());
       if($(".ItemDescriptions").length){  $(".ItemDescriptions").show(); }
           
}; 

$.fn.TraverseDown = function(expr) {
	//	return this.each(function(index){
	var $t = $(this);
    return ($t.is(expr)) ?  $t : $t.find(expr).eq(0);
	//	});

};



main.leftmenu.LinkEffect = function(){
	
	$("ul#left-menu-nav li a:not(.active,.all)").hover(function(){
		var toggleClass = ($(this).parent().is(".child")) ? "HoverValuesMain" :  "HoverValues";
		$(this).addClass(toggleClass).stop().animate({paddingLeft : '30px' } , 200 )
			   .children('span').show().stop().animate({ left: 10 }); 
	},function(){
		var toggleClass = ($(this).parent().is(".child")) ? "HoverValuesMain" :  "HoverValues";
		$(this).removeClass(toggleClass).stop().animate({paddingLeft : '25px' } , 200 )
			   .children('span').show().stop().animate({ left: -30 },function(){ $(this).hide();  });
	});
	
	
    
};



main.leftmenu.LinkListSizeLimit = function(){
        
   var $self,$li,$a;
   $("ul#left-menu-nav").find("li.attributes ul").each(main.leftmenu.LinkListSizeLimitCallback);


};



main.leftmenu.ClickMore = function(){
    
    
    var $ul = $(this).parent().parent("ul");
    $(this).parent("li").siblings(":hide").slideDown();
    $(this).parent("li.moreLess").remove();
    
     $li = $("<li />")
     $li.addClass("values moreLess");
     $a = $("<a />");
     $a.attr("href","#").html("less &laquo;").addClass("bold").click(main.leftmenu.ClickLess);
     $a.appendTo($li); 
             
    $ul.append($li);
    return false;
}






main.leftmenu.ClickLess = function(){
    
    $ul = $(this).parent().parent("ul");
    $ul.find(">li:gt("+main.leftmenu.listSize+")").slideUp();    
    $(this).parent("li.moreLess").remove();
     main.leftmenu.LinkListSizeLimitCallback($ul)
     return false;
    
};
                
                
                

main.leftmenu.LinkListSizeLimitCallback = function(){
                  
       if(arguments.length == 1){ $self = arguments[0]; }
       else{$self = $(this);}
      
      if($self.find(">li").length > main.leftmenu.listSize){
        
         $li = $("<li />")
         $li.addClass("values moreLess");
         $a = $("<a />");
         $a.attr("href","#").html("more &raquo;").addClass("bold").click(main.leftmenu.ClickMore);
         $a.appendTo($li); 
         
         $self.find(">li:gt("+main.leftmenu.listSize+")")
              .hide();
         $self.append($li);       
    
      } // If Ends
      
      
                                                              
}



main.leftmenu.Tooltip = function(){
	if(jQuery().qtip){
		$("ul#left-menu-nav li:not(:contains('more')) a,.qTooltip").each(function(){
			if(this.className == "qTooltip"){
				tooltip = "bottomLeft";
				target = "rightMiddle";
			}else{
	              tooltip = "topLeft"; 
	              target  = "bottomMiddle" ;
			}
			$(this).qtip({    
		        position: {
		           corner: {
		              tooltip : tooltip, 
		              target  : target 
		           }
		        },            
		        style: {
		           border: {
		              width: 2,
		              radius: 3
		           },
		           padding: 10, 
		           textAlign: 'left',
		           tip: true, // Give it a speech bubble tip with automatic corner detection
		           name: 'blue', // Style it according to the preset 'cream' style
		           fontSize: 11 ,
		           fontFamily : 'arial' ,
		           color: '#333',
		           background:'#fff'  ,
		           title : {
		             'font-size': '12px' ,  
		             'color': '#2C9AE4'
		           },
		           width:{ min : 220  ,  max : 320}  
		        },
		        show: { delay: 500  , effect: { type: 'fade'  , length: 500 }   },   
		        hide: { delay: 500  , effect: { type: 'fade'  , length: 500 }   }   
		     });   
		});
	}
 
 
 
}



 /***************************************************************************************************
 *                         Main Left hnad Menu  Function  Ends  
 ****************************************************************************************************/
 

 
 /***************************************************************************************************
 *                         Main Login Function 
 ****************************************************************************************************/
 main.loginVars = {};
 main.loginStatus = false;
 main.loginInit = function(){

       
       main.setLoginVar();
       main.loginEvents();  
       main.showUnsuccessLogin();     
 
 };
 
 
 
 main.showUnsuccessLogin = function(){
   
    var params = Tools.Application.QueryStringObject();
    if(params){
        if(params['Login'] && params['Login'] == "unsuccess"){
            main.toggleLoginPopup();  
        }          
    }           
    
 };
 
 
 
 main.setLoginVar = function(){
     
         main.loginVars = {
            popupDiv   : $("#popup_login"),
            popupLink  : $(".loginLink")  ,
            popupClose : $("#popup_login").find(".loginClose"),
            popupForm           :   $("#login-form").find("form")   ,
            popupFormInput : $("#login-form").find(":text"),
            login          :  $("#login-form").find("#loginAction"), 
            errorLogin    :  $("#login-form").find("#errorLogin")   ,
            loadingImage : $(".popup_content .loading img")  ,
            loginNav : $(".logged-in-nav") ,
            logoutNav : $(".logged-out-nav"),
            popupPass: $("#login-form").find("#password")
            
         };       
         //THis one SHould be here for liveQuery The other way it the event Delegation to it but not worthed           
         main.loginVars.popupPass.keypress(main.popupPassClick);  
 };
 
 
 
 
 main.loginEvents = function(){

      main.loginVars.popupLink.click(main.toggleLoginPopup);
      main.loginVars.popupClose.click(main.toggleLoginPopup);
      main.loginVars.popupFormInput.focus(main.focusLoginInput);
      main.loginVars.login.click(main.login);
      main.loginVars.popupForm.submit(function(event){   main.login(event);   return false;});
        
       
 };
 
 
 
 main.popupPassClick = function(event){
	 
    if(event.charCode == 0  && event.keyCode == 13 ){ 
    	main.loginVars.popupForm.trigger("submit");    
        return false;
     }
 }
 
 
 
 main.toggleLoginPopup = function(){
	 
     window.scrollTo(0,0);
     if(arguments.length){
       main.FixEvents(arguments[0]);    
     }
     main.loginReset();
     main.loginVars.popupDiv.slideToggle();

     return false;
     
 };
 
 
 
 
  main.loginReset = function(){
  
      main.loginStatus = false; 
      main.loginVars.errorLogin.hide();
      var password = main.loginVars.popupPass;

      if(password.length){
    	  
          var $li = password.parent(); 
          password.remove();
          var newPassword = $("<input type='text' name = 'password' title='password' id = 'password' />");
          newPassword.appendTo($li);
          main.setLoginVar();  
          main.loginVars.popupFormInput.focus(main.focusLoginInput); 
             
      }
      main.setLoginVar();  
      main.loginVars.popupFormInput.filter("[type = text]").each(function(){
          $(this).addClass("dump").val(this.name);
      });

      
 }; 
 
 
 
 main.focusLoginInput = function(){ 
      
     var oldPassword = main.loginVars.popupFormInput.filter("[type = text][name = password]");  
     if(oldPassword.length){
         
         var $li = oldPassword.parent();
         oldPassword.remove();
         var $password = $("<input type='password' name = 'password' title='password' id = 'password' />");
         $password.appendTo($li);
         main.loginVars.popupFormInput.focus(main.focusLoginInput); 
         main.setLoginVar();   
         main.loginVars.popupFormInput.removeClass("dump").val("");
         main.loginVars.popupFormInput.filter("#username").focus();       
     
     }
     main.loginStatus = true;  

 
 };
 
 
 
 main.login = function(event){
     
     main.FixEvents(event);  
     var validate = main.loginValidate();
     if(validate === true){
          main.loginAjax();  
     }else{  main.loginError(validate); }
     return false;
 };
 
 
 
 main.loginValidate = function(){
     var value,msg = true;
     main.loginVars.popupFormInput.each(function(){
        value = $.trim(this.value);
        if(value == "" || main.loginStatus === false ){ 
            msg =  "Please enter both your username and password."; 
            return;
        }
     });
     return  msg;
     
 };
 
 
 
 main.loginError = function(message){
	 
      main.loginVars.errorLogin.fadeOut(500,function(){  
          var self = $(this);
            self.text(message).fadeIn(500,function(){  
                 setTimeout(function(){   self.fadeOut(500);  }, 3000); 
            }) 
      });
 }
 
 
 
 main.FixEvents = function(event){
  
        event.stopPropagation();  // ingonring multiple clicks
        event.preventDefault();  //  ignoring Enter to submit the form     
    
};



main.loginAjax = function(){
	
        var Data = main.loginVars.popupForm.serialize();
        var AjaxVars = {
            url        : Tools.Application.GetApplicationURL("Login") ,
            data       : Data                                        , 
            beforeSend : main.LoadLoginImage , 
            error : main.HideLoginImage ,
            dataType   : 'json' ,           
            success    : main.LoginAjaxSucess
        };
        Tools.Ajax.run(AjaxVars);        
          
}



main.LoginAjaxSucess = function(json){
	
    main.HideLoginImage();
    if(json.GenomeData.login.Error !== undefined){
    	main.loginError(json.GenomeData.login.Error);
    }else{  // Login Successful
    	Tools.Application.QueryStringObject();
         main.toggleLoginPopup(); 
         if(window.ACTION_TYPE === undefined){ window.location.href = window.location.href ;  }
         
         // this redirect even if it is the home page...this should be taken out later when a 'buy it now' check is enabled to see if the user is already logged in.
         window.location.href = window.location.href ; 
         
         main.loginVars.loginNav.hide();
         
         main.loginVars.logoutNav.find(".welcome-username").text("Welcome "+json.GenomeData.login.USERNAME);
         main.loginVars.logoutNav.fadeIn(700,function(){ 
        	 
        	 if(window.REDIRECT_PAGE !== undefined && REDIRECT_PAGE && window.location.href != REDIRECT_PAGE){ 
        		 window.location.href = REDIRECT_PAGE; 
             } 
         });
         USER_NAME = json.GenomeData.login.USERNAME;
         main.LoggedIn = true;
    }
};




main.LoadLoginImage = function(){
    
        main.loginVars.loadingImage.show(); 
        
};




main.HideLoginImage = function(){
    
        main.loginVars.loadingImage.hide();  
        
};




main.preloadImages = function(){
    
    jQuery.preloadImages(IMAGE_PATH+"/ItemActionButtonHover.jpg");
  
};



main.lazyLoad = function(){
	// console.log(IMAGE_PATH);
	if (jQuery().lazyload) {
		
	 $(".itemFrame img").lazyload({ effect : "fadeIn" , placeholder : IMAGE_PATH+"/lazyload.gif" });
	
	}

};



main.Footer = function(){
	
	$("#g-footer-content").find("a").hover(function(){
		$(this).parent().addClass('hover');
	},function(){
		$(this).parent().removeClass("hover");
	});
}




main.Header = function(){

	$(".domainTitle").find("a").hover(
			function(){ $(this).children().toggleClass("Domainhover"); },
			function(){ $(this).children().toggleClass("Domainhover"); });
	
	
	if(!jQuery.browser.mozilla){
		
		$(".domainTitle").find("a").children().addClass("nonFirefox");

	}
	
}




main.IncludeExceptions = function(){
	
	STYLE_PATH = IMAGE_PATH.replace(/images/,"");
	Tools.includeCSS(STYLE_PATH+"exceptions.css");
	
}






