(function($){
    var ajaxHandler;
    var uid = 0;

    $.uniqueId = function() {
        uid++;
        return 'jQ-uid-'+uid;
    };

    $.fn.isMoreThanHalfVisible= function() {
        if (this.length<1) return false;
        var docViewTop = $(window).scrollTop();
        var docViewBottom = docViewTop + $(window).height();
        var elemTop = this.offset().top;
        var elemBottom = elemTop + this.height();
        return ((elemTop + ((elemBottom - elemTop)/2)) >= docViewTop
            && ((elemTop + ((elemBottom - elemTop)/2)) <= docViewBottom));
    }
    $.fn.moveChildrenToTarget= function() {
        $('[id^="js-replace-"]',this).each(function(){
            var $source=$(this);
            var targetId=$source.attr('id').replace('js-replace-','');
            var $target=$('#'+targetId);
            if ($target){
                $target.empty().append($source.children()).removeClass('js-oculto');
            }
            $source.remove();
        });
        $('[id^="js-appendto-"]',this).each(function(){
            var $source=$(this);
            var targetId=$source.attr('id').replace('js-appendto-','');
            var $target=$('#'+targetId);
            if ($target){
                $target.append($source.children()).removeClass('js-oculto');
            }
            $source.remove();
        });
        return this;
    }
    $.fn.uniqueId=function(){
        return this.each(function(){
            var $this=$(this);
            if(!$this.attr('id')){
                $this.attr('id', $.uniqueId());
            }
        });
    }

    $.fn.handleClickViaAjax=function(e){
        if (ajaxHandler){
            return ajaxHandler.handleClick(e, $(this))
        } else {
            return true;
        }
    }
    
    $.fn.pulsate=function(){
        return this.effect("pulsate",{
            times:1
        },1000);
    }
    
    $.fn.navegarAYResaltar= function(resaltar){
        if (!resaltar){
            resaltar=function(target){
                target.pulsate()
            };
        }
        if (this.length>0){
            var target = this.eq(0);
            if (!target.isMoreThanHalfVisible()){
                $.scrollTo(this,500,{
                    axis:'y',
                    onAfter: resaltar
                });
            } else {
                target.pulsate();
            }
        }
        return this;
    };
    
    
    var onDocumentReady=function onDocumentReady(){
        ajaxHandler=new AjaxHandler();
        var $body=$('body');
        $body.delegate('.js-clickable','click',function(e){
            var $anchor=$(this).closest('a');
            if ($anchor.length>0){
                window.location.href=$anchor.attr('href');
            }
            return false;
        });

        $body.delegate('a.js-externo','click',function(e){
            window.open(this.href);
            return false; 
        });

        $body.delegate('.js-hoverable','hover',function(){
            $(this).toggleClass('ui-state-hover')
        });

        $body.delegate('a.js-ajax','click',function(e){
            return $(this).handleClickViaAjax(e);
        });

        var ua = $.uaMatch(navigator.userAgent);
        $body.addClass(ua.browser);
        $body.addClass(ua.browser + '-' + ua.version.split('.')[0]);
        if (typeof verUsuarioUrl != 'undefined'){
            ajaxHandler.loadUrl(verUsuarioUrl);
        }
		
        $.loading.text='Cargando...';
        $.loading.align='center';
        //$.loading.delay=100;
        $.loading.className='loading';
        $.loading.mask=true;
    }

    $(document).ready(onDocumentReady);
    
})(jQuery);



