// Default JS Variables for Vote iq.com
/*------------------------------------------------------------------------*/
$.spinner = '<div class="ajaxLoader"><img src="/images/spinner.gif" alt="Please wait..." /></div>';

// Defined Functions
/*------------------------------------------------------------------------*/

//plugin for optimizing iterations of a set omitting all 
//results up to offset
$.fn.optimizeEach = function(offset){
    offset = offset ? offset : 0;
    return $(this.slice(offset));
}//end optimizeEach()

// Swap Default Images Functions
/*---------------------------------------------------------------------*/
$.fn.swapDefaultImage = function(image){
    var parts = $(image).attr("rel").split("|");
    var gender = parts[0];
    var maleImage = parts[1];
    var femaleImage = parts[2];
	    
    if(gender == "male"){
        $(image).attr("src", maleImage);
    }
    else{
        $(image).attr("src", femaleImage);
    }//end if
	    
    if($.fancybox){
        $.fancybox.resize();
    }
	    
}//end swapDefaultImage()
	
// Check Profile Image Functions
/*---------------------------------------------------------------------*/
$.fn.checkProfileImage = function(image){
    var img = new Image();
    img.onerror = function(){
        $.fn.swapDefaultImage(image);
    }//end onerror
    img.src = $(image).attr("src");
}//end checkProfileImage()
	
// Show Messages Functions
/*---------------------------------------------------------------------*/
$.fn.showMessages = function(){
    $(".success, .error").each(function(){
        if(!$(this).text())
            return;
	        
        $(this).slideDown("slow").each(function(){
	    
            function hide(){
                hide.el.slideUp("slow");
            }//end hide()
	    
            hide.el = $(this);
            setTimeout(hide, 5000);
        });
    });
}//end showMessages()
	
// One Time Submit Functions
/*---------------------------------------------------------------------*/
$.fn.applyOneTimeSubmit = function(){
    if(this.length){
        $(this).each(function(){
            var submitButton = $(this);
            var form = submitButton.parents("form");
	        
            form.submit(function(){
                if(form.data("abort"))
                    return false;
	            
                var options = {
                    beforeSubmit: function(){ 
                    return false; 
                    }//end beforeSubmit()
                };//end options
	        
                //lock for one call at a time
                if(!form.data("block")){
                    options.beforeSubmit = function(){ return true; }
                }//end if
                    
                form.data("block", true);
                
                submitButton.css({opacity: .5});
	            
                if(submitButton.attr("class") && submitButton.attr("class").indexOf("ajaxClickOnce") >= 0){
                    submitButton.attr("disabled", true);
                }
                else{
                    return options.beforeSubmit();
                }//end if	            
            });//end submit()
        });//end each()
    }
    else{
        $("form .ajaxClickOnce, form .submitClickOnce").each(function(){
            var submitButton = $(this);
            var form = submitButton.parents("form");
	        
            form.submit(function(){
                if(form.data("abort"))
                    return false;
	            
                var options = {
                    beforeSubmit:function(){ 
                    return false; 
                    }//end beforeSubmit()
                };//end options
	        
                //lock for one call at a time
                if(!form.data("block"))
                    options.beforeSubmit = function(){ return true; }
                    form.data("block", true);
                    
                    submitButton.css({opacity: .5});
	            
                    if(submitButton.attr("class") && submitButton.attr("class").indexOf("ajaxClickOnce") >= 0){
                        submitButton.attr("disabled", true);
                        //form.ajaxSubmit(options);
                    }
                    else{
                        return options.beforeSubmit();
                    }//end if
	            
            });//end submit()
        });//end each()
    }//end if
}//end applyOneTimeSubmit()
	
$.fn.reloadImage = function(image){
    var src = image.attr("src");
    if(src.indexOf("?") >= 0)
        src = src.split("?")[0];
                        
    src += "?" + (new Date().getTime());
                        
    image.error(function(){
        setTimeout(function(){
            $.fn.reloadImage(image);
        }, 2000);
    });
            
    image.attr("src", src);
}//end reloadImage()
        
$.fn.replaceBrokenExpressionImages = function(){
    if(this.length){
        var image = $(this);
        var img = new Image();
        img.onerror = function(){
            if(image.attr("src").indexOf("static.voteiq.com") >= 0){
                $(image).attr("src", "/images/expression_broken_image.jpg");
            }
            else{
                $(image).attr("src", "/images/expression_broken_image.jpg");
            }//end if
        }//end onerror
        img.src = $(image).attr("src");
    }
    else{
        $(".expressionImage").each(function(){
            var image = $(this);
            var img = new Image();
            img.onerror = function(){
                if(image.attr("src").indexOf("static.voteiq.com") >= 0){
                    //$.fn.reloadImage(image);
                    $(image).attr("src", "/images/expression_broken_image.jpg");
                }
                else{
                    $(image).attr("src", "/images/expression_broken_image.jpg");
                }//end if
            }//end onerror
            img.src = $(image).attr("src");
        });//end each
    }//end if
}//end replaceBrokenExpressionImages()
	
$.fn.enableSubmit = function(form){
    var submitButton = $(".ajaxClickOnce, .submitClickOnce", form);
    submitButton.attr("disabled", false);
    submitButton.css({opacity: 1});
    $(form).data("block", false);
}//end enableSubmit()
	
$.fn.validateRequired = function(elements, form){
	                
    var errorLabel = form.find("label.error");
    for(var i=0; i<elements.length; i++){
        if(elements[i].val() == elements[i].attr("title") || $.trim(elements[i].val()) == ""){
            errorLabel.text(elements[i].data("message"));
            errorLabel.slideDown("fast");
            form.data("abort", true);
            $.fn.enableSubmit(form);
            return false;
        }//end if
    }//end for
	                
    form.data("abort", false);
    errorLabel.slideUp("fast").text("");
	    
    return true;
}//end validateRequired()
	
$.fn.formReset = function(){
    $(this).find('input').not(':button, :submit, :reset, :hidden').val('').removeAttr('checked').removeAttr('selected');
}

$.fn.applyFancybox = function(){
    var options = {
        transitionIn: "elastic",
        transitionOut: "elastic",
        showNavArrows: false
    };

    if($.fn.fancybox)
        $("a[rel='fancybox']").fancybox(options);
    
    $(document).bind('expressionsLoaded', function(){
        $.fn.applyFancybox(options);
    });
}//end applyFancybox()

$.fn.applyNotificationsHandler = function(){
    $("#notificationLink").each(function(){
        //update notification count
        
        var container = $("#recentNotificationOverlay");
        container.html($.spinner);
        
        $.ajax({
            url: "/ajax/expression/get-recent-notifications",
                method: "POST",
                success: function(data){
                    var res = eval("(" + data + ")");
                
                    if(res.exception){
                        alert(res.exception);
                        return;
                    }//end if
                
                    if(parseInt(res.count)){
                        var nc = $("#notificationLink .notificationCount");
                        nc.text(res.count);
                        nc.addClass("notify");
                    }//end if
                        
                    
                    
                    container.html(res.content);
                }//end success()
        });//end ajax()
        
        $(document).mousedown(function(event){
            if($(event.target).attr("id") != "notificationLink" && !$(event.target).closest("#recentNotificationOverlay").length)
                $("#recentNotificationOverlay").hide();
        });//end click()
        
        $(this).click(function(){
            //update notifications counter
            var nc = $("#notificationLink .notificationCount");
            if(parseInt(nc.text())){
                nc.text(0);
                nc.removeClass("notify");
                
                $.ajax({
                    url: "/ajax/expression/reset-notifications-counter",
                        method: "POST",
                        success: function(data){
                        }//end success()
                });//end ajax()
            }//end if
            
            var link = $("#notificationLink");
            var overlay = $("#recentNotificationOverlay");
            
            overlay.css({
                top: (link.offset().top + link.height()) + "px",
                left: (link.offset().left - overlay.width() + link.width() - 20) + "px"
            });
            
            overlay.toggle();
        });//end click()
        
    });//end each()
}//end applyNotificationsHandler()

// Document Ready Function
/*------------------------------------------------------------------------*/
$(document).ready(function(){
    $.fn.applyDefaultText();
    
    $.fn.showMessages();
    $.fn.applyOneTimeSubmit();   
    $.fn.applyFancybox();
    $.fn.applyNotificationsHandler();
});

// Event Listeners
/*------------------------------------------------------------------------*/	

