SOLAR = {loaders : [], addOnload : function (f) {SOLAR.loaders.push(f);return SOLAR;}};
SOLAR.onload = function ()
{
    var loaders = SOLAR.loaders,
        len = -loaders.length;
    do {len++;loaders[-len]();} while (!len);
};
SOLAR.ajax = {form : {options : {
    success : function (text, status, xhr, that)
    {
        jQuery('#fancybox-content > div').html(text);
        jQuery.fancybox.resize();
        //SOLAR.pm.init();
        SOLAR.onload();
    }
}}};
SOLAR.ajax.init = function ()
{
    jQuery('.behavior_ajax').each(function () {
        var oElement = jQuery(this);
        switch (this.tagName.toLowerCase())
        {
            case 'a':
                /* skip pm since it should be treated specially */
                if (!oElement.hasClass('behavior_pm')) {oElement.fancybox();}
                break;
            case 'form':
                /* skip pm since it should be treated specially */
                if (!oElement.hasClass('behavior_pm')) {oElement.ajaxForm(SOLAR.ajax.form.options);}
                break;
        }
    });
};
SOLAR.addOnload(SOLAR.ajax.init)
        .addOnload(function () {jQuery('a.behavior_pm, button.behavior_pm').fancybox(SOLAR.pm.box);});
SOLAR.loginbox = {
    //autoDimensions : false,
    //height         : 350,
    //width          : 700,
    href           : '/login/'
};
SOLAR.msg = {
        levels: ['success', 'error'],
        template : '<div class="successMessage"><span class="err"><ul class="error_list"></ul></span></div>',
        templateError : '<div class="errorMessage"><span class="err"><ul class="error_list"></ul></span></div>',
        getBlock : function ()
        {
            return jQuery('.successMessage .err .error_list');
        },
        getBlockError : function ()
        {
            return jQuery('.errorMessage .err .error_list');
        },
        set : function (p_form, p_msg, p_level)
        {
            /* remove other messages */
            for (var i = 0, levels = SOLAR.msg.levels; i < levels.length; i++)
            {
                if (p_level !== levels[i])
                {
                    jQuery('.' + levels[i] + 'Message').remove();
                }
            }
            /* render messages */
            var level = p_level.substr(0, 1).toUpperCase() + p_level.substr(1, p_level.length),
                oTarget = SOLAR.msg['getBlock' + level]();
            if (!oTarget.length)
            {
                jQuery(p_form/*'#fancybox-content form'*/).prepend(SOLAR.msg['template' + level]);
            }
            oTarget = SOLAR.msg['getBlock' + level]();
            oTarget.html('<li>' + p_msg + '</li>');
        },
        setError : function (p_form, p_msg)
        {
            SOLAR.msg.set(p_form, p_msg, 'error');
        }
};
SOLAR.fixMessages = function ()
{
    $('.errorMessage, .successMessage').click(function () {$(this).remove();})
                                        .delay(10000)
                                        .fadeOut(300);
};
SOLAR.pm = { /* number of bbedits been openned so far */num : 0};
SOLAR.pm.error = 'All fields should be filled';
SOLAR.pm.validate = function (p_aElements)
{
    var oRegex = /^\s*$/;

    return !(oRegex.test(p_aElements['recipient_login'].value)
        || oRegex.test(p_aElements['subject'].value)
        || oRegex.test(p_aElements['body'].value));
};
SOLAR.pm.init = function ()
{
    /* assign auto suggest to recipient field on PM form */
    var oForm = document.getElementById('pm_');
    if (oForm)
    {
        oForm.id = 'pm_' + SOLAR.pm.num++;
        var aElements = oForm.elements;
        jQuery(aElements['recipient_login']).autocomplete({
                source: '/suggest-user/',
                select: function (e, ui) {
                    aElements['recipient'].value = ui.item.id;
                }
            }
        );
        jQuery(aElements['body']).bbedit({highlight: true});

        oForm = jQuery(oForm);
        if (oForm.hasClass('behavior_ajax'))
        {
            var options = {
                    beforeSubmit : function (elements, form, options)
                    {
                        var aElements = form.get(0).elements;

                        if (!SOLAR.pm.validate(aElements))
                        {
                            SOLAR.msg.setError(form, SOLAR.pm.error);
                            SOLAR.fixMessages();
                            return false;
                        }
                    }
            };
            jQuery.extend(options, SOLAR.ajax.form.options);
            oForm.ajaxForm(options);
        }
        else
        {
            oForm.submit(function () {if (!SOLAR.pm.validate(this.elements)) {SOLAR.msg.setError(this, SOLAR.pm.error);SOLAR.fixMessages();return false;}});
        }
    }
};
SOLAR.pm.box = {
    //autoDimensions : false,
    //height         : 370,
    //width          : 700,
    onComplete     : function () {/* make sure pm.init gets executed upon each load from now on */SOLAR.addOnload(SOLAR.pm.init);SOLAR.onload(); /*SOLAR.pm.init();*/}
};
SOLAR.movie = {
    id:       null,
    isTv:     null,
    episodes: null
};

jQuery.fn.fancybox.defaults.onComplete = SOLAR.ajax.init;
var feedback_widget_options = {};
feedback_widget_options.display = "overlay";
feedback_widget_options.company = "solarmovie";
feedback_widget_options.placement = "right";
feedback_widget_options.color = "#222";
feedback_widget_options.style = "idea";
/*
var innerGigyaContainerID = 0;

solarGigya = {

    HTTP_HOST: function(){
    var url = window.location.href;
    url 	= url.replace("http://", "");

    var urlExplode = url.split("/");
    var serverName = urlExplode[0];

    serverName = 'http://'+serverName;
    return serverName;
    },

    onLogin: function(ev) {
        jQuery.ajax({
            type: "POST",
            url: solarGigya.HTTP_HOST()+'/login/gigya/',
            data: {"data": jQuery.toJSON(ev)},
            success:function(data, result) {
                data = jQuery.parseJSON(data);
                if(data.result == "new" || data.firstLogin != undefined) {
                    window.location.href="/profile/" + encodeURIComponent(urldata.login) + "/preferences/?message=changepass";
                } else {
                    window.location.reload();
                }
            }
        });
    }
};

var conf = {
    APIKey: '2_DVg1pOOZdwo-Q1ifPKZCPxlQanApDl3rzSXCUP4UpmPl0YADi5yfIcYLPqUJqrG-',
    enabledProviders: 'facebook,twitter,yahoo,messenger,google,linkeiIn,myspace,livejournal,openid'
};
*/
Tool = {

    isJson: function(xhr) {
       if(xhr.charAt(0) == "{" && xhr.charAt(xhr.length-1) == "}") {
           return true;
       }
       return false;
    },

    errorBox: function(message) {
        Tool.Box("error", message);
    },

    messageBox: function(message) {
        Tool.Box("message", message);
    },

    Box: function(type, message) {
        switch(type) {
            case "message":{
                Tool.css.color = "#333";
                break;
            }
            case "error":{
                Tool.css.color = "red";
                break;
            }
        };

    message = jQuery("<div id='messageBox'><div class='message'>"+message+"</div></div>")
      .css(Tool.css)
      .click(function(){
          Tool.removeBox();
      });
      jQuery("body").append(message);
      setTimeout("Tool.removeBox()", 5000);
    },

    removeBox: function() {
        jQuery("#messageBox").fadeOut(100, function(){
            jQuery("#messageBox").remove();
        });
    },

    css: {
        backgroundColor: "#FFF1A8",
        borderBottom: "2px solid #CCC",
        cursor: "pointer",
        display: "block",
        left: "0px",
        opacity: "0,95",
        overflow: "visible",
        position: "fixed",
        textAlign: "center",
        top: "0px",
        width: "100%",
        zIndex: "10000"
    }
};

Comm = {
    tool: {
        isEmpty: function( inputStr ) {if ( null == inputStr || "" == inputStr ) {return true;}return false;},
        isJSON: function(str) {
            if (jQuery.trim(str) == '') return false;
            str = str.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, '');
            return (/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(str);
        },
        trim: function(str) {
            return str.replace(/(^\s+)|(\s+$)/g, "");
        }
    },

    fromFavourite: function(id) {
        $(".favoriteButton")
            .attr("class","unFavoriteButton typicalGrey floatright")
            .click(function(){
                Comm.toFavourite(id);
            });
            $.ajax({
                url: '/link/from_favourite/'+id+'/',
                type: 'POST'
            });
    },

    toFavourite: function(id) {
        $(".unFavoriteButton")
            .attr("class","favoriteButton typicalGrey floatright")
            .click(function(){
                Comm.fromFavourite(id);
            });
            $.ajax({
                url: '/link/to_favourite/'+id+'/',
                type: 'POST'
            });
    },

    plex: {
        init: function(linkId, userCrc) {
            this.crc = userCrc;
            this.id = linkId;
            this.connect();
        },

        connect: function() {
            jQuery.ajax({
                url: '/plex/'+this.crc+"-"+this.id+"/",
                type: 'POST',
                success: function(data,status,xhr) {
                    if(Comm.tool.isEmpty(data)) {
                        setTimeout("Comm.plex.connect()", 100);
                    } else if(Comm.tool.isJSON(data)) {
                        Comm.plex.runCommand(data);
                    } else {
                        setTimeout("Comm.plex.connect()", 100);
                    }
                },
                error: function(xhr,status) {
                    if(xhr.status > 499 && xhr.status != 504) {
                        alert("Sorry, can't connect to chat server due to server fault. Please try to update page or just wait few minutes");
                        setTimeout("Comm.plex.connect()", 1000000);
                    } else {
                        setTimeout("Comm.plex.connect()", 100);
                    }
                }
            });
        },

        runCommand: function(data) {
            data = jQuery.evalJSON(data);
            window.paramString = jQuery.toJSON(data);
            if(typeof data !== "undefined") {
                if(typeof data.command !== "undefined") {
                    eval(data.command+"()");
                }
            }
            Comm.plex.connect();
        }
    },

    login: function() {
        jQuery.fancybox();
    },

    addComment: function(id) {
        var nc = jQuery("#comment");
        var ncb = jQuery("#comment_button");
        var text = Comm.tool.trim(nc.val());
        if (text.length > 0)
        {
            nc.attr("readonly", "true");
            ncb.attr("readonly", "true");
            jQuery.ajax({
                url: '/postComment/'+id+'/',
                type: 'POST',
                data: {"text": text, "crc": Comm.plex.crc},
                success: function(data, status, xhr) {
                    jQuery("#comment").removeAttr("readonly").val("");
                    jQuery("#comment_button").removeAttr("readonly");
                    jQuery(".thanksForComment").toggle();
                    jQuery(".userPic").css('display','none');
                    jQuery(".commentOwner").css('display','none');
                    var count = jQuery("#commentCount").html();
                    jQuery("#commentCount").html(parseInt(count)+1);
                    jQuery("#comment_form").slideUp(100, function(){
                        setTimeout(function(){
                           if(jQuery(".versionCommentBox").css("display") != "none") {
                                jQuery(".versionCommentButton").toggleClass("active");
                                jQuery(".versionCommentBox").toggle();
                            }
                            jQuery(".thanksForComment").css("display","none");
                            jQuery(".userPic").css('display','');
                            jQuery(".commentOwner").css('display','');
                            jQuery("#comment_form").toggle();
                         }, 3000);
                    });
                },
                error: function() {
                    jQuery("#comment").removeAttr("readonly");
                    jQuery("#comment_button").removeAttr("readonly");
                    jQuery(".versionCommentButton").toggleClass("active");
                    jQuery(".versionCommentBox").toggle();
                }
            });
        }
    },
    updateComment: function() {
        if(Comm.tool.isJSON(window.paramString)) {
            data = jQuery.evalJSON(window.paramString);
            jQuery("#latest_comments").prepend(data.comment);
            jQuery("#comment_loading").css("display","none");
        }
    }
};

Comments = {
    rateUp: function(id) {
        if(parseInt(id) > 0) {
            Comments.ajax("/comments/rateup/", {id: id}, "Comments.processRateUp");
        }
    },

    rateDown: function(id) {
        if(parseInt(id) > 0) {
            Comments.ajax("/comments/ratedown/", {id: id}, "Comments.processRateDown");
        }
    },

    processRateUp: function() {
        if(typeof window.response.message != "undefined") {
            jQuery("#comment_rating_"+window.response.id).html("<div style='color:green'>"+window.response.count+"</div>");
        } else if(typeof window.response.type != "undefined") {
            document.location = "/login/";
        }
    },

    processRateDown: function() {
        if(typeof window.response.message != "undefined") {
            jQuery("#comment_rating_"+window.response.id).html("<div style='color:red'>"+window.response.count+"</div>");
        } else if(typeof window.response.type != "undefined") {
            document.location = "/login/";
        }
    },

    reportComment: function(obj) {
        jQuery(obj).parent().html("thanks");
        jQuery.ajax({
            url: "/comments/report/",
            type: "POST",
            data: {rep_id:jQuery(obj).attr("rep_id")},
            success: function(xhr, status, error) {
            return false;
            }
        });
    },

    isJson: function(xhr) {
       if(xhr.charAt(0) == "{" && xhr.charAt(xhr.length-1) == "}") {
           return true;
       }
       return false;
    },

    remove: function(id, cm_id, force) {
        post = {id:id, comment_id:cm_id, force_delete:force};
        Comments.ajax("/removecomment", post, "Comments.hide");
    },

    restore: function(cm_id) {
        post = {comment_id:cm_id};
        Comments.ajax("/restorecomment", post, "Comments.reload");
    },

    reload: function(){
        window.location.reload();
    },

    hide: function() {
        jQuery("a[cmid="+response.id+"]").fadeOut();
        jQuery("a[cmid="+response.id+"]").next().fadeOut();
    },

    bindElements: function() {
        jQuery(".votingUp").click(function(){
            Comments.rateUp(jQuery(this).attr("cm_id"));
        });

        jQuery(".votingDown").click(function(){
            Comments.rateDown(jQuery(this).attr("cm_id"));
        });

        jQuery(".removeCommentLink").click(function(){
            Comments.remove(
                jQuery(this).attr("oid"),
                jQuery(this).attr("cmid"),
                jQuery(this).attr("force")
            );
        });

        jQuery(".restoreCommentLink").click(function(){
            Comments.restore(
                jQuery(this).attr("cmid")
            );
        });
    },
    ajax: function(url, postdata, callback) {
        jQuery.ajax({
            url: url,
            type: "POST",
            data: postdata,
            success: function(xhr, status, error) {
               if (Comments.isJson(xhr)) {
                    var response = JSON.parse(xhr);
                    if(typeof response.status == "undefined") {
                        return false;
                    } else if(response.status == "fail" ) {
                        window.response = response;
                        if (typeof response.callback !== "undefined") {
                            setTimeout(response.callback+"(0)", 0);
                        }
                        return false;
                    } else {
                        window.response = response;
                        setTimeout(callback+"(0)", 0);
                    }
                } else {
                    return false;
                }
            },

            error: function(data) {
                return false;
            }
        });
    }
};

jQuery(document).ready(function () {

    SOLAR.onload();
    Comments.bindElements();
    SOLAR.fixMessages();

    jQuery('.searchInput, #session_login').click(function () {
        if (this.value == jQuery(this).attr('def')) {
            this.value = '';
        }
    });
    jQuery('.searchInput, #session_login').blur(function () {
        if (this.value == '') {
            this.value = jQuery(this).attr('def');
        }
    });

    jQuery('.information').each(function () {
        if (jQuery.browser.msie && jQuery.browser.version == 6) {
            var position = jQuery(this).children('.informationWrapper').children('h3').position();
            jQuery(this).children('.leftMiddle').height(jQuery(this).height()+2);
            jQuery(this).children('.informationWrapper').children('.rating').css("top",position.top+35);
        }
    });

    jQuery('#password-clear').show();
    jQuery('#session_password').hide();

    jQuery('#password-clear').focus(function() {
        jQuery('#password-clear').hide();
        jQuery('#session_password').show();
        jQuery('#session_password').focus();
    });

    jQuery('#session_password').blur(function() {
        if(jQuery('#session_password').val() == '') {
            jQuery('#password-clear').show();
            jQuery('#session_password').hide();
        }
    });
    /*
    solarGigya = {
        onLogin: function(ev) {
            if(typeof linkid === "undefined") {
                linkid = 0;
            }
            jQuery.ajax({
                type: "POST",
                url: '/login/gigya/',
                data: {"data": jQuery.toJSON(ev),link: linkid},
                success:function(data, result) {
                    data = jQuery.parseJSON(data);
                    if(data.result == "new") {
                        window.location.href="/profile/" + encodeURIComponent(data.login) + "/preferences/?message=changepass";
                        return false;
                    }

                    if(jQuery("#comment_form")) {
                        jQuery("#comment_form").parent().before('<a class="userPic">'+data.avatar+'</a><div class="commentOwner"><a href="/profile/'
                                                                + encodeURIComponent(data.login) + '/" class="">'+data.login+'</a></div>');
                        jQuery("#comment_form").submit(function(){
                            return false;
                        });
                        return false;
                    }

                    window.location.reload();
                }
            });
        }
    };
    */

    jQuery(".not-logged-in, #login").unbind("click").fancybox({
        type: 'ajax',
        href: '/login/',
        onComplete: function() {

            jQuery("#login_form").submit(function(){
                jQuery(".registrInfo").remove();
                jQuery(".formAlert").fadeOut("slow");
                var login = jQuery(this).find("#login_login").val();
                var password = jQuery(this).find("#login_password").val();

                jQuery.ajax({
                    url: '/ajaxed/login/',
                    type: 'POST',
                    data: {"login":login, "password":password},
                    success: function(data, status, xhr) {
                        data = jQuery.evalJSON(data);
                        if(data.status == "fail") {
                            jQuery("label[for=login_login]").parent().before('<span class="formAlert">'+data.message+'</span><div class="registrInfo"><br/><br/></div>');
                            jQuery.fancybox.resize();
                        } else {
                            if(typeof data.linkid === "undefined") {
                              window.location.reload(true);
                              return true;
                            }
                            jQuery("#utilMenu").html("<ul><li>Logged as</li><li><a href='/profile/'>"+data.login+"</a></li><li><a href='/logout/'>Logout</a></li></ul>");
                            jQuery("#comment_form").parent().before('<a class="userPic">'+data.avatar+'</a><div class="commentOwner"><a href="/profile/'
                                                                    + encodeURIComponent(data.login) + '/" class="">'+data.login+'</a></div>');
                            jQuery("#comment_form").submit(function(){
                                return false;
                            });
                            jQuery.fancybox.close();
                            jQuery(".not-logged-in").unbind('click.fb');

                            if(data.link == true) {
                                jQuery(".workOrNot").after('<a href="#" class="favoriteButton typicalGrey floatright" title="Remove from favorites"></a>');
                                jQuery(".favoriteButton").click(function(){Comm.fromFavourite(data.linkid);});
                            } else {
                                jQuery(".workOrNot").after('<a href="#" class="unFavoriteButton typicalGrey floatright" title="Add to favorites"></a>');
                                jQuery(".unFavoriteButton").click(function(){Comm.toFavourite(data.linkid);});
                            }
                        }
                    },
                    error: function(data, status, xhr) {

                    }
                });
                return false;
            });

            jQuery("#registration_form").submit(function(){
                jQuery(".registrInfo").remove();

                jQuery(".formAlert").fadeOut("slow");

                var login = jQuery(this).find("#user_login").val();
                var email = jQuery(this).find("#user_email").val();
                var password = jQuery(this).find("#user_password").val();
                var confirm_password = jQuery(this).find("#user_confirm_password").val();

                jQuery.ajax({
                    url: '/ajaxed/register/',
                    type: 'POST',
                    data: {
                        "login":login,
                        "password":password,
                        "confirm_password":confirm_password,
                        "email": email,
                        "recaptcha_challenge_field":$("#recaptcha_challenge_field").val(),
                        "recaptcha_response_field":$("#recaptcha_response_field").val()
                    },
                    success: function(data, status, xhr) {
                        data = jQuery.evalJSON(data);
                        if(data.status == "fail") {
                            var element;
                            for (var a in data.errors) {
                                element = '<span class="formAlert"><em></em>'+data.errors[a].message+'</span>';
                                if (data.errors[a].header == 'recaptcha') {
                                    element = '<span class="formAlert" style="margin-top:20px;"><em></em>'+data.errors[a].message+'</span>';
                                } else {
                                    data.errors[a].header = 'user_' + data.errors[a].header;
                                }
                                jQuery("label[for="+data.errors[a].header+"]").before(element);
                            }
                            jQuery.fancybox.resize();
                        } else {
                            $("#fancybox-content")
                                .html("<br/><br/><br/><center>Thank you for registering! Please follow instructions in letter sent to your e-mail address.</center><br/><br/><br/>");
                            /*if(typeof linkid === "undefined") {
                              window.location.reload();
                            }

                            jQuery("#utilMenu").html("<ul><li>Logged as</li><li><a href='/profile/'>"+data.login+"</a></li><li><a href='/logout/'>Sign Out</a></li></ul>");
                            jQuery("#comment_form").parent().before('<a class="userPic">'+data.avatar+'</a><div class="commentOwner"><a href="/profile/'+data.login+'/" class="">'+data.login+'</a></div>').fadeIn("slow");
                            jQuery("#comment_form").submit(function(){
                                return false;
                            });
                            jQuery.fancybox.close();
                            jQuery(".not-logged-in").unbind('click.fb');
                            if(data.link == true) {
                                jQuery(".workOrNot").after('<a href="#" class="unFavoriteButton" title="Remove from favorites"></a>');
                                jQuery(".unFavoriteButton").click(function(){Comm.fromFavourite(data.linkid);});
                            } else {
                                jQuery(".workOrNot").after('<a href="#" class="favoriteButton" title="Add to favorites"></a>');
                                jQuery(".favoriteButton").click(function(){Comm.toFavourite(data.linkid);});
                            }*/
                        }
                    },
                    error: function(data, status, xhr) {

                    }
                });
                return false;
            });

        }
    });

    $(function () {
        var tabContainers = jQuery('div.tabs > div');

        jQuery('div.tabs ul.tabNavigation a').click(function () {
            tabContainers.hide().filter(this.hash).show();

            jQuery('div.tabs ul.tabNavigation a').removeClass('selected');
            jQuery('div.tabs ul.tabNavigation a').parent().removeClass('selected');
            jQuery(this).addClass('selected');
            jQuery(this).parent().addClass("selected");
            return false;
        });

        jQuery(".favoriteButton").attr("href","#").unbind("click").click(function(){Comm.fromFavourite($(this).attr("linkid"));});
        jQuery(".unFavoriteButton").attr("href","#").unbind("click").click(function(){Comm.toFavourite($(this).attr("linkid"));});

        var tabContainers = jQuery('div.movieTabs > div');

        jQuery('div.movieTabs ul.tabNavigation a').click(function () {

            captcha = jQuery("div.movieTabs").find("#recaptcha");

            if (null !== SOLAR.movie.isTv)
            {
                var oDescr = $('.addlinkDescr'), bIsTv = $(this).hasClass('tv');
                if (SOLAR.movie.isTv !== Number(bIsTv))
                {
                    oDescr.hide();
                    $('.link_title' + (bIsTv ? '.tv' : ':not(.tv)')).val('');
                }
                else
                {
                    oDescr.show();
                }
            }
            if($(this).attr("id") == "trigger_tv") {
                $("#addlink_tv").find(".captcha_place").append(captcha);
            } else {
                $("#addlink_movie").find(".captcha_place").append(captcha);
            }
            tabContainers.hide().filter(this.hash).show();

            jQuery('div.movieTabs ul.tabNavigation a').removeClass('selected');
            jQuery('div.movieTabs ul.tabNavigation a').parent().removeClass('selected');
            jQuery(this).addClass('selected');
            jQuery(this).parent().addClass("selected");
            return false;
        });

        jQuery('div.movieTabs').find('a.sel').click();
    });
    /*
    if(document.getElementById("divGigyaLogin")) {
            gigya.services.socialize.showLoginUI(conf, {
                    "headerText":"",
                    "width":120,
                    "height":35,
                    "containerID":"divGigyaLogin",
                    "showTermsLink":0,
                    "UIConfig":"<config><body><controls><snbuttons buttonsize=\"20\"><\/snbuttons><\/controls><\/body><\/config>",
                    "requiredCapabilities":"login",
                    "useHTML":true,
                    "pendingRegistration":true,
                    "hideGigyaLink":true,
                    "enabledProviders":"facebook, twitter, google, yahoo, messenger"
                  }
            );
            gigya.services.socialize.addEventHandlers(conf, {
                onLogin: solarGigya.onLogin,
                onLogout: solarGigya.onLogout
            });
    }
    */
    if(document.getElementById("newQuestion")) {
        jQuery('#newQuestion').bbedit({highlight: true});
        jQuery('.newAnswer').each( function(){
            jQuery(this).bbedit({highlight: true});
        });
    };

    $('a.readMore').each(function(key, a) {
        a = $(a);
        var node = $('#' + a.attr('rel'));
        if (!node || 400 > node.html().length)
        {
            return;
        }

        var newNode = node.clone();
        newNode.html(newNode.html().substring(0, 350) + '...')
                .attr('id', null);
        node.after(newNode)
            .hide();
        a.bind('click', function () {
            node.show().next().remove();
            $(this).remove();
        });
    });

    $(".waitOrNot").each(function(i, node){
        jQuery(node).find("li").click(function(){
            jQuery.ajax({
                type:"POST",
                url:"/movie/voting/",
                data:{movie_id:jQuery(node).attr("movie_id"),type: jQuery(this).attr("type")},
                success:function(data) {
                    if (data == "auth") {
                        jQuery.fancybox(SOLAR.loginbox);
                    }
                }
            });
            jQuery(this).find("a").attr("href","javascript:void(0)");
            var parOfs = jQuery(this).parent().offset().left;
            var Ofs = jQuery(this).offset().left;
            jQuery(node).find(".back").animate({"left":(Ofs - parOfs)+"px"});
        });
    });

    if(document.getElementById("searchInput")) {
        $('#searchInput').autocomplete({
            source: '/suggest-movie/?tv=all',
            select: function (event, ui) {
                location.href = ui.item.url;
                return false;
            }
        })
        .data('autocomplete')._renderItem = function (ul, item) {
            var sHtml = SOLAR.template_search;

            $.each(item, function (k, v) {
                var oReg = new RegExp('##' + k + '##', 'gim');
                sHtml = sHtml.replace(oReg, v);
            });

            var li = $('<li>' + sHtml + '</li>');

            if (item.year)
            {
                $('<span>(' + item.year + ')</span>').appendTo($('.firstDropdownLine', li));
            }

            return li.data('item.autocomplete', item).appendTo(ul);
        };
    }
    var counter = $("<img src='//counter.yadro.ru/hit?t38.6;r"+escape(document.referrer)+((typeof screen === "undefined")?"":";s"+screen.width+"*"+screen.height+"*"+(screen.colorDepth?screen.colorDepth:screen.pixelDepth))+";u"+escape(document.URL)+";h"+escape(document.title.substring(0,80))+";"+Math.random()+"' alt='' title='LiveInternet' border='0' width='0' height='0' style='display:none;'>");
    jQuery("body").append(counter);
});

function MoveCommentForm(id) {
    jQuery("form[comm_id]").remove();
    commentWindow = jQuery(".sf_comment_form").clone().submit(function() {
        return checkComment(id);
    });
    previousId = commentWindow.find("#parent_id").val();
    commentWindow.attr("comm_id", id).find(".siteButton").html("Reply comment").
    before('<button type="button" onclick="jQuery(\'.registrInfo\').remove(); jQuery(\'#comment_form_'+id+'\').html(\'\')" class="typicalGrey siteButton">Cancel</button>');
    commentWindow.find("#sf_comment_text").val("");
    commentWindow.find("#sf_comment_parent").val(id);
    jQuery("#comment_form_"+id).append(commentWindow);
    jQuery(".registrInfo").remove();
    // jQuery("#comment_form_"+id).find("#sf_comment_parent").val(id);
}

function isUrl(s) {
    var regexp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;
    return regexp.test(s);
}

function checkComment(id) {
        jQuery(".registrInfo").remove();
        if(id == 0 || isNaN(id)) {
            if(jQuery("#sf_comment_form").find("textarea").val().length < 3) {
                jQuery("#sf_comment_form").before('<div class="registrInfo" style="margin-top:5px"><div class="errorMessage"><span class="err"><ul class="error_list"><li>The comment is too small.</li></ul></span></div></div>');
            return false;
            } else if(isUrl(jQuery("#sf_comment_form").find("textarea").val())) {
                jQuery("#sf_comment_form").before('<div class="registrInfo" style="margin-top:5px"><div class="errorMessage"><span class="err"><ul class="error_list"><li>Sorry, ain\'t no links in comments allowed.</li></ul></span></div></div>');
                    return false;
                }
        } else {
            if(jQuery("#comment_form_"+id).find("textarea").val().length < 3) {
                jQuery("#comment_form_"+id).before('<div class="registrInfo" style="margin-top:5px"><div class="errorMessage"><span class="err"><ul class="error_list"><li>The comment is too small.</li></ul></span></div></div>');
            return false;
            } else if(isUrl(jQuery("#comment_form_"+id).find("textarea").val())) {
                jQuery("#comment_form_"+id).before('<div class="registrInfo" style="margin-top:5px"><div class="errorMessage"><span class="err"><ul class="error_list"><li>Sorry, ain\'t no links in comments allowed.</li></ul></span></div></div>');
                        return false;
                    }

    }
    return true;
   }

    function date (format, timestamp) {
        var that = this,
            jsdate, f, formatChr = /\\?([a-z])/gi,
            formatChrCb,
            // Keep this here (works, but for code commented-out
            // below for file size reasons)
            //, tal= [],
            _pad = function (n, c) {
                if ((n = n + "").length < c) {
                    return new Array((++c) - n.length).join("0") + n;
                } else {
                    return n;
                }
            },
            txt_words = ["Sun", "Mon", "Tues", "Wednes", "Thurs", "Fri", "Satur", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
            txt_ordin = {
                1: "st",
                2: "nd",
                3: "rd",
                21: "st",
                22: "nd",
                23: "rd",
                31: "st"
            };
        formatChrCb = function (t, s) {
            return f[t] ? f[t]() : s;
        };
        f = {
            // Day
            d: function () { // Day of month w/leading 0; 01..31
                return _pad(f.j(), 2);
            },
            D: function () { // Shorthand day name; Mon...Sun
                return f.l().slice(0, 3);
            },
            j: function () { // Day of month; 1..31
                return jsdate.getDate();
            },
            l: function () { // Full day name; Monday...Sunday
                return txt_words[f.w()] + 'day';
            },
            N: function () { // ISO-8601 day of week; 1[Mon]..7[Sun]
                return f.w() || 7;
            },
            S: function () { // Ordinal suffix for day of month; st, nd, rd, th
                return txt_ordin[f.j()] || 'th';
            },
            w: function () { // Day of week; 0[Sun]..6[Sat]
                return jsdate.getDay();
            },
            z: function () { // Day of year; 0..365
                var a = new Date(f.Y(), f.n() - 1, f.j()),
                    b = new Date(f.Y(), 0, 1);
                return Math.round((a - b) / 864e5) + 1;
            },

            // Week
            W: function () { // ISO-8601 week number
                var a = new Date(f.Y(), f.n() - 1, f.j() - f.N() + 3),
                    b = new Date(a.getFullYear(), 0, 4);
                return 1 + Math.round((a - b) / 864e5 / 7);
            },

            // Month
            F: function () { // Full month name; January...December
                return txt_words[6 + f.n()];
            },
            m: function () { // Month w/leading 0; 01...12
                return _pad(f.n(), 2);
            },
            M: function () { // Shorthand month name; Jan...Dec
                return f.F().slice(0, 3);
            },
            n: function () { // Month; 1...12
                return jsdate.getMonth() + 1;
            },
            t: function () { // Days in month; 28...31
                return (new Date(f.Y(), f.n(), 0)).getDate();
            },

            // Year
            L: function () { // Is leap year?; 0 or 1
                return new Date(f.Y(), 1, 29).getMonth() === 1 | 0;
            },
            o: function () { // ISO-8601 year
                var n = f.n(),
                    W = f.W(),
                    Y = f.Y();
                return Y + (n === 12 && W < 9 ? -1 : n === 1 && W > 9);
            },
            Y: function () { // Full year; e.g. 1980...2010
                return jsdate.getFullYear();
            },
            y: function () { // Last two digits of year; 00...99
                return (f.Y() + "").slice(-2);
            },

            // Time
            a: function () { // am or pm
                return jsdate.getHours() > 11 ? "pm" : "am";
            },
            A: function () { // AM or PM
                return f.a().toUpperCase();
            },
            B: function () { // Swatch Internet time; 000..999
                var H = jsdate.getUTCHours() * 36e2,
                    // Hours
                    i = jsdate.getUTCMinutes() * 60,
                    // Minutes
                    s = jsdate.getUTCSeconds(); // Seconds
                return _pad(Math.floor((H + i + s + 36e2) / 86.4) % 1e3, 3);
            },
            g: function () { // 12-Hours; 1..12
                return f.G() % 12 || 12;
            },
            G: function () { // 24-Hours; 0..23
                return jsdate.getHours();
            },
            h: function () { // 12-Hours w/leading 0; 01..12
                return _pad(f.g(), 2);
            },
            H: function () { // 24-Hours w/leading 0; 00..23
                return _pad(f.G(), 2);
            },
            i: function () { // Minutes w/leading 0; 00..59
                return _pad(jsdate.getMinutes(), 2);
            },
            s: function () { // Seconds w/leading 0; 00..59
                return _pad(jsdate.getSeconds(), 2);
            },
            u: function () { // Microseconds; 000000-999000
                return _pad(jsdate.getMilliseconds() * 1000, 6);
            },

            // Timezone
            e: function () { // Timezone identifier; e.g. Atlantic/Azores, ...
                // The following works, but requires inclusion of the very large
                // timezone_abbreviations_list() function.
    /*              return this.date_default_timezone_get();
    */
                throw 'Not supported (see source code of date() for timezone on how to add support)';
            },
            I: function () { // DST observed?; 0 or 1
                // Compares Jan 1 minus Jan 1 UTC to Jul 1 minus Jul 1 UTC.
                // If they are not equal, then DST is observed.
                var a = new Date(f.Y(), 0),
                    // Jan 1
                    c = Date.UTC(f.Y(), 0),
                    // Jan 1 UTC
                    b = new Date(f.Y(), 6),
                    // Jul 1
                    d = Date.UTC(f.Y(), 6); // Jul 1 UTC
                return 0 + ((a - c) !== (b - d));
            },
            O: function () { // Difference to GMT in hour format; e.g. +0200
                var a = jsdate.getTimezoneOffset();
                return (a > 0 ? "-" : "+") + _pad(Math.abs(a / 60 * 100), 4);
            },
            P: function () { // Difference to GMT w/colon; e.g. +02:00
                var O = f.O();
                return (O.substr(0, 3) + ":" + O.substr(3, 2));
            },
            T: function () { // Timezone abbreviation; e.g. EST, MDT, ...
                // The following works, but requires inclusion of the very
                // large timezone_abbreviations_list() function.
    /*              var abbr = '', i = 0, os = 0, default = 0;
                if (!tal.length) {
                    tal = that.timezone_abbreviations_list();
                }
                if (that.php_js && that.php_js.default_timezone) {
                    default = that.php_js.default_timezone;
                    for (abbr in tal) {
                        for (i=0; i < tal[abbr].length; i++) {
                            if (tal[abbr][i].timezone_id === default) {
                                return abbr.toUpperCase();
                            }
                        }
                    }
                }
                for (abbr in tal) {
                    for (i = 0; i < tal[abbr].length; i++) {
                        os = -jsdate.getTimezoneOffset() * 60;
                        if (tal[abbr][i].offset === os) {
                            return abbr.toUpperCase();
                        }
                    }
                }
    */
                return 'UTC';
            },
            Z: function () { // Timezone offset in seconds (-43200...50400)
                return -jsdate.getTimezoneOffset() * 60;
            },

            // Full Date/Time
            c: function () { // ISO-8601 date.
                return 'Y-m-d\\Th:i:sP'.replace(formatChr, formatChrCb);
            },
            r: function () { // RFC 2822
                return 'D, d M Y H:i:s O'.replace(formatChr, formatChrCb);
            },
            U: function () { // Seconds since UNIX epoch
                return jsdate.getTime() / 1000 | 0;
            }
        };
        this.date = function (format, timestamp) {
            that = this;
            jsdate = ((typeof timestamp === 'undefined') ? new Date() : // Not provided
            (timestamp instanceof Date) ? new Date(timestamp) : // JS Date()
            new Date(timestamp * 1000) // UNIX timestamp (auto-convert to int)
            );
            return format.replace(formatChr, formatChrCb);
        };
        return this.date(format, timestamp);
    }

function str_pad (input, pad_length, pad_string, pad_type) {
    // Returns input string padded on the left or right to specified length with pad_string
    //
    // version: 1103.1210
    // discuss at: http://phpjs.org/functions/str_pad    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // + namespaced by: Michael White (http://getsprink.com)
    // +      input by: Marco van Oort
    // +   bugfixed by: Brett Zamir (http://brett-zamir.me)
    // *     example 1: str_pad('Kevin van Zonneveld', 30, '-=', 'STR_PAD_LEFT');    // *     returns 1: '-=-=-=-=-=-Kevin van Zonneveld'
    // *     example 2: str_pad('Kevin van Zonneveld', 30, '-', 'STR_PAD_BOTH');
    // *     returns 2: '------Kevin van Zonneveld-----'
    var half = '',
        pad_to_go;
    var str_pad_repeater = function (s, len) {
        var collect = '',
            i;
         while (collect.length < len) {
            collect += s;
        }
        collect = collect.substr(0, len);
         return collect;
    };

    input += '';
    pad_string = pad_string !== undefined ? pad_string : ' ';
    if (pad_type != 'STR_PAD_LEFT' && pad_type != 'STR_PAD_RIGHT' && pad_type != 'STR_PAD_BOTH') {
        pad_type = 'STR_PAD_RIGHT';
    }
    if ((pad_to_go = pad_length - input.length) > 0) {if (pad_type == 'STR_PAD_LEFT') {
            input = str_pad_repeater(pad_string, pad_to_go) + input;
        } else if (pad_type == 'STR_PAD_RIGHT') {
            input = input + str_pad_repeater(pad_string, pad_to_go);
        } else if (pad_type == 'STR_PAD_BOTH') {half = str_pad_repeater(pad_string, Math.ceil(pad_to_go / 2));
            input = half + input + half;
            input = input.substr(0, pad_length);
        }
    }
    return input;
}

function parseDate(str) {
    var v=str.split(' ');
    return new Date(Date.parse(v[1]+" "+v[2]+", "+v[5]+" "+v[3]+" UTC"));
}

var Checkboxes = function (checkboxes, trigger, label, txtSelect, txtDeselect)
{
    this.checkboxes = checkboxes;
    this.trigger = trigger;
    this.label = label;
    this.txtSelect = txtSelect;
    this.txtDeselect = txtDeselect;

    var that = this;
    if (arguments.length)
    {
        $(checkboxes).click(function () { that.check(); });
        $(trigger).click(function () { that.toggle(); });
        $(label).click(function () {
            var trigger = $(trigger);
            trigger.attr('checked', !trigger.attr()).click();
        });
    }
};
Checkboxes.prototype = {
    toggle : function ()
    {
        var status = Boolean($(this.trigger).attr('checked'));
        $(this.checkboxes).attr('checked', status);
        this.toggleLabel(status);
    },
    toggleLabel : function (status)
    {
        $(this.label).html(status ? this.txtDeselect : this.txtSelect);
    },
    getStatus : function ()
    {
        var status = true;
        $(this.checkboxes).each(function (k, v) {
            if (!$(v).attr('checked')) {
                status = false;
                return false;
            }
        });
        return status;
    },
    check : function ()
    {
        var status = this.getStatus();
        $(this.trigger).attr('checked', status);
        this.toggleLabel(status);
    }
};

updateLinkFormat = function (id, obj) {
    var value = $(obj).val();
    if (!value) {
        return;
    }
    $.ajax({
        url:"/link/format/",
        type:"POST",
        data:{
            id:id,
            value:value
        },
        success: function(data) {
            data = $.parseJSON(data);
            $("#formatSelector_"+id).parent().html(data.format);
        },
        error: function() {

        }
    })
};

