(function($)
    {
        $.fn.topNavigation = function(options)
        {
            var items = $("ul", this);
            var links = $(options.links, this);
            items.hide();
        
            $("li:first-child", items).addClass("first");
        
            links.each(function(index){
                var item = $(this).next();
            
                $(this).hover(
                    function (){
                        item.show().prev().addClass("active");
                    }, 
                    function (){
                        item.hide().prev().removeClass("active");
                    }
                    );
                item.hover(
                    function (){
                        $(this).show().prev().addClass("active");
                    }, 
                    function (){
                        $(this).hide().prev().removeClass("active");
                    }
                    );
            });
        };
    
        $.fn.listViewHover = function()
        {
            var holder = $(this);
            var width = holder.width();
            var items = $("div.view-profile", this);
            var links = $("a.hover", this);
        
            items.css({
                "z-index": 1, 
                "position": "absolute", 
                "top": "-11px", 
                "left": "-11px"
            });
        
            links.each(function(index){
                var obj = $(this);
                var item = $(this).prev();
            
                $(this).hover(
                    function(){
                        $(this).css({
                            "z-index": 2, 
                            "position": "relative"
                        }).parent().css({
                            "position": "relative"
                        });
                        item.show();
                    }, function(){
                        $(this).css({
                            "z-index": 0, 
                            "position": "static"
                        }).parent().css({
                            "position": "static"
                        });
                        item.hide();
                    }
                    );
                item.hover(
                    function(){
                        obj.css({
                            "z-index": 2, 
                            "position": "relative"
                        }).parent().css({
                            "position": "relative"
                        });
                        $(this).show();
                    }, function(){
                        obj.css({
                            "z-index": 0, 
                            "position": "static"
                        }).parent().css({
                            "position": "static"
                        });
                        $(this).hide();
                    }
                    );
            });
        };
    
        $.fn.showHover = function(options)
        {
            var items = $("div.hover", this);
            items.css({
                'height': options.height, 
                'bottom': options.start
            });
            this.each(function(index){
                var holder = $(this);
                holder.mouseover(function(){
                    $("div.hover", holder).animate({
                        bottom: options.end
                        },{
                        queue:false,
                        duration:500
                    });
                });
                holder.mouseout(function(){
                    if( $("input.text:focus", holder).length )
                    {
                        if( !$("input.text:focus", holder).length && $("input.text", holder).val() == options.value )
                            $("div.hover", holder).animate({
                                bottom: options.start
                                },{
                                queue:false,
                                duration:500
                            });
                    }
                    else
                    {
                        $("div.hover", holder).animate({
                            bottom: options.start
                            },{
                            queue:false,
                            duration:500
                        });
                    }
                });
            
                $("input.text", holder).blur(function(){
                    if( $(this).val() == options.value )
                        $("div.hover", holder).animate({
                            bottom: options.start
                            },{
                            queue:false,
                            duration:500
                        });
                });
            });
        };
    
        $.fn.showHide = function()
        {
            var item = $($(this).attr("href"));
            item.css({
                "position": "absolute"
            });
            item.hide();
        
            $(this).click(function(){
                item.toggle();
                return false;
            });
        };
    
        $.fn.ticker = function()
        {
            var ticker = $(this);
        
            function animator(current)
            {
                var distance = current.width();
                duration = (distance + parseInt(current.css("marginLeft"))) / 0.025;
        
                current.animate({
                    marginLeft: -distance
                }, duration, "linear", function()
{
                    current.appendTo(ticker).css("marginLeft", 0);
                    animator( $("li:first", ticker) );
                }); 
            };
        
            ticker.mouseenter(function(){
                ticker.children().stop();
            });
            ticker.mouseleave(function(){
                animator( $("li:first", ticker) );
            });
            animator( $("li:first", ticker) );
        };
    
        $.fn.popupBox = function(){
            var holder = $(this);
            holder.hide();
        
            $("a.popup").live('click', function(){
                
                
                
                $(this).popupClick( holder , $(this).attr('href'));
                return false;
            });
        };
	
        $.fn.popupClick = function(holder, url)
        {
            var overlay = $("<div class='overlay'>&nbsp;</div>");
            overlay.css({
                'position': 'fixed', 
                'z-index': 999990, 
                'width': '100%', 
                'height': '100%', 
                'top': '0', 
                'left': '0', 
                'background': '#000000', 
                'cursor': 'default', 
                'opacity': '0.7'
            });
            if($.browser.msie)
            {
                overlay.css({
                    'overflow': 'hidden', 
                    'position': 'absolute', 
                    'filter': 'alpha(opacity = 70)', 
                    'height': ( Math.max( $(document).height(), $(window).height() ) ) + 'px'
                });
                var iframe = $("<iframe src='' frameborder='0'></iframe>");
                iframe.css({
                    'width': '100%', 
                    'height': '100%', 
                    'filter': 'alpha(opacity = 1)'
                });
            }
            $("body").append(overlay);
            if($.browser.msie) overlay.append(iframe);
            
            holder.empty().append($("<div class='preloader' style='padding:10px;background:#000000;'><img src='/assets/images/content/ajax-loader.gif' width='16' height='16' /> Loading please wait...</div>"));
            rePosition();
            showPopup( holder );
            addCloseLink( holder );
        
            var closelink = $("<a href='#' id='overlaycloselink' class='close'><img src='/assets/images/popup/close.png' width='24' height='23' alt='Closing' /></a>");
            closelink.css({
                'position': 'absolute', 
                'top': '-12px', 
                'right': '-12px'
            });
            holder.append(closelink);
        
            url = processUrlForAjax( url ); 
        
            $.ajax({
                url: url,
                dataType: "json",
                success: function(data) {
                    if( typeof data == 'object' )
                    {
                        holder.html( '<div class="template_container"><div id="template_container_popup">'+data['html']+'</div></div>' );
                        rePosition();
                        showPopup( holder );
                        addCloseLink( holder );
                        if( data['fnc'] !== undefined )
                        {
                            var funcName = data['fnc'];
                            eval(funcName);
                        }
                        bindAjaxToTemplateView();
                        bindAjaxSubmitToTemplateView();
                        //init all callbacks 
                        for ( var i in callbacks ){
                            if(typeof callbacks[i] == 'function')
                            {
                                callbacks[i]( this );
                            }
                        }
                        return false;
                    }
                }
            });
        
            return false;
        };
    
        $.fn.pleaseWait = function(holder, message)
        {
            var overlay = $("<div class='overlay'>&nbsp;</div>");
            overlay.css({
                'position': 'fixed', 
                'z-index': 999990, 
                'width': '100%', 
                'height': '100%', 
                'top': '0', 
                'left': '0', 
                'background': '#000000', 
                'cursor': 'default', 
                'opacity': '0.7'
            });
            if($.browser.msie)
            {
                overlay.css({
                    'overflow': 'hidden', 
                    'position': 'absolute', 
                    'filter': 'alpha(opacity = 70)', 
                    'height': ( Math.max( $(document).height(), $(window).height() ) ) + 'px'
                });
                var iframe = $("<iframe src='' frameborder='0'></iframe>");
                iframe.css({
                    'width': '100%', 
                    'height': '100%', 
                    'filter': 'alpha(opacity = 1)'
                });
            }
            $("body").append(overlay);
            if($.browser.msie) overlay.append(iframe);
        
            holder.empty().append($("<div class='preloader' style='padding:10px;background:#000000;'><img src='/assets/images/content/ajax-loader.gif' width='16' height='16' /> " + message + "</div>"));
            rePosition();
            showPopup( holder );
            addCloseLink( holder );
        
            var closelink = $("<a href='#' id='overlaycloselink' class='close'><img src='/assets/images/popup/close.png' width='24' height='23' alt='Closing' /></a>");
            closelink.css({
                'position': 'absolute', 
                'top': '-12px', 
                'right': '-12px'
            });
            holder.append(closelink);
        
            return false;
        };
	
        jQuery.fn.rating = function(options) {
            var settings = {
                increment: .5,
                current: 0
            };
        
            if(options.current) settings.current = options.current / 2;
        
            var container = jQuery(this);
            var stars = jQuery(container).children('.star');
    	
            stars
            .mouseover(function(){
                event.drain();
                event.fill(this);
            })
            .mouseout(function(){
                event.drain();
                event.reset();
            })
            .focus(function(){
                event.drain();
                event.fill(this);
            })
            .blur(function(){
                event.drain();
                event.reset();
            });
    
            stars.click(function(){
                settings.current = (stars.index(this) * settings.increment) + settings.increment;
                return true;
            });
        
            var event = {
                fill: function(el){
                    var index = stars.index(el) + 1;
                    stars.children('a').css('width', '100%').end().slice(0,index).addClass('hover').end();
                },
                drain: function() {
                    stars.filter('.on').removeClass('on').end().filter('.hover').removeClass('hover').end();
                },
                reset: function(){
                    stars.slice(0,settings.current / settings.increment).addClass('on').end();
                }
            };    
            event.reset();
    	
            return(this);
        };
    })(jQuery);

/**
 * Initializes popups.
 */
var popupInitialised = false;
function initPopup() 
{ 
    if( !popupInitialised )
    {
        popupInitialised = true;
        $("#popupholder").popupBox();
    }
} 

/** 
 * Repositions popup holder in case another content is loaded with different size 
 *  
 * @return void 
 */ 
function rePosition()
{
    var holder = $("#popupholder, #loadingholder");
    
    if( holder.outerHeight() > ( $(window).height() - 20) )
    {
        var box = $("div.box", holder);
        box.css({
            "overflow-y": "auto"
        });
        if( $("div.mpus").length ) box.css({
            "height": ( $(window).height() - 240 )
        });
        else box.css({
            "height": ( $(window).height() - 190 )
        });
        $("div.content", box).css({
            "width": "806px"
        });
        $("div.content div.left", box).css({
            "width": "480px"
        });
        if($.browser.msie)
        {
            box.css({
                'width': '824px'
            });
            if($.browser.version > 6) box.css({
                'width': '842px'
            });
            $("div.title", box).css({
                "width": "792px"
            });
            $("ul.dates", box).css({
                "width": "824px"
            });
        }
        $("table", box).css({
            "width": "822px"
        });
    }
    
    holder.css({
        'position': 'fixed', 
        'z-index': 999999, 
        'top': '50%', 
        'left': '50%'
    });
    if($.browser.msie) holder.css({
        'position': 'absolute'
    });
    holder.css({
        'margin-top':  '-' + (holder.height() / 2) + 'px', 
        'margin-left': '-' + (holder.width() / 2) + 'px'
    });
    if($.browser.msie) holder.css({
        'margin-top': ( $(window).scrollTop() - (holder.height() / 2) ) + 'px'
    });
}

function showPopup( holder )
{
    holder.show();
}

function addCloseLink( holder, overlay )
{
    var closelink = $("<a href='#' id='overlaycloselink' class='close'><img src='/assets/images/popup/close.png' width='24' height='23' alt='Closing' /></a>");
    closelink.css({
        'position': 'absolute', 
        'top': '-12px', 
        'right': '-12px'
    });
    holder.append(closelink);
    
    closelink.click(function(){
        $("div.overlay").fadeOut('fast', function(){
            $(this).remove();
        });
        holder.fadeOut('fast', function(){
            holder.empty().hide();
        });
        return false;
    });
}
 
var list_hover_initialized = false;
function initListHover()
{
    if( !list_hover_initialized )
    {
        $(document).ready(function() {
            $("ul#trailer-list-view").listViewHover();
        });
        list_hover_initialized = true;
    }
}

function showScreeningProgress()
{
    var loader = $("<div class='preloader' style='background:#1a1a1a;'><img src='/assets/images/content/screening-loader.gif' width='32' height='32' /></div>");
    var holder = $("div.times");
    var table = $("table", holder);
	
    table.css({
        'opacity': 0.3
    });
    loader.css({
        'position': 'absolute', 
        'z-index': 999, 
        'top': '50%', 
        'left': '50%', 
        'margin-top':  '-' + (loader.height() / 2 + 16) + 'px', 
        'margin-left': '-' + (loader.width() / 2) + 'px'
    });
    holder.css({
        'position': 'relative'
    }).append(loader);
}

$(document).ready(function() {
    initPopup();
    addToCallbackQueue(rePosition);
});

