var client; 
if (!client) client = {};
client.ie = $.browser.msie;
client.ie7 = (window.ActiveXObject && (!document.documentMode || document.documentMode < 8));
client.ff4 = ($.browser.mozilla && $.browser.version.slice(0,3) == "2.0");
client.ff5 = ($.browser.mozilla && $.browser.version.slice(0,3) == "5.0");
client.ff6 = ($.browser.mozilla && $.browser.version.slice(0,3) == "6.0");
client.ff7 = ($.browser.mozilla && $.browser.version.slice(0,3) == "7.0");
client.ff8 = ($.browser.mozilla && $.browser.version.slice(0,3) == "8.0");
client.extendClass = function(subClass, baseClass) 
{
   function inheritance() {}
   inheritance.prototype = baseClass.prototype;
   subClass.prototype = new inheritance();
   subClass.prototype.constructor = subClass;
   subClass.baseConstructor = baseClass;
   subClass.superClass = baseClass.prototype;
}
client.getAnchor = function()
{
    if (client.ie7)
    {
        var index = location.href.indexOf('#');
        return (index == -1 ? '' : location.href.substr(index + 1));
    } else return document.location.hash;        
}
client.redirectToAnchor = function()
{
    var hash = client.getAnchor();   
    if (hash != null)
        if (hash.length > 1)        
        {
            if (!client.ie7) hash = hash.substr(1);
            window.location = hash;
        }
}
client.getUrlParam = function(name)
{
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if( results == null )
    return "";
  else
    return results[1];
}
client.Log = function(container)
{
    this.container = container;
};
client.Log.prototype.write = function(text)
{
    var now = new Date();
    var h = now.getHours();
    var m = now.getMinutes();
    var s = now.getSeconds();
    $(this.container).append('<p><span class="comment">' + h + ":" + m + ":" + s +"</span>" + text + '</p>');     
}
client.Preparator = function()
{
};
var colors; 
if (!colors) colors = {};
colors.background = "#FFF";
colors.backgroundLight = "#DDD";
colors.text = "#7A7A7A";
colors.hint = "#BCC6D1";
colors.action = "#ad234b";
colors.link = "#ad234b";
colors.hover = "#ad234b";
colors.hoverText = "#FFF";
colors.active = "#E5005C";
colors.activeText = "#FFF";
colors.radio = "#BCC6D1";
colors.radioText = "#FFF";
colors.multi = "#FFF";
colors.multiText = "#ad234b";
colors.border = "#e6ecf2";
colors.darkroundbtn = "#3b4550";
colors.greyroundbg = "#e7ebef";
colors.black = "#000";
colors.checkbox = "#B3C0CD"; 
client.Preparator.prototype.setAction = function(selector, handler)
{
	var link = $(selector);    
    var hrefs = [];
    link.each(function(index){
    	hrefs[index] = $(this).find("a:first").attr("href");        
    	$(this).find(".embeddedLink").each(function(i){hrefs[index] = $(this).html();});
    	$(this).click(function(e){
	    	if (!(e.ctrlKey)) 
    			handler.call(this);
    		else 
    			window.open(hrefs[index]);}); 
    });
}
client.Preparator.prototype.setBtnAction = function(selector, handler)
{
    var btn = $(selector);
    btn.click(handler);   
    var h = 30;
    if (btn.hasClass("bigBtn"))
    {
        h = 39;
        btn.children().addClass("bigBtn");
	}
    if (btn.hasClass("tag")) h = 13;
    if (btn.hasClass("specTag")) h = 20;
    btn.hover(function(){$(this).stop().animate({scrollTop: h}, 100);},
              function(){$(this).stop().animate({scrollTop: 0}, 100);}); 
   	btn.click(function(){$(this).stop().animate({scrollTop: h*2}, 100);});	                  
}
client.Preparator.prototype.setHintBtnAction = function(selector, handler)
{
    $(selector).click(handler);    
    $(selector).hover(function(){$(this).stop().animate({backgroundColor: colors.hover}, 300);
                                 $(this).children().stop().animate({borderBottomColor: colors.hover, color: colors.hoverText}, 300);},
	                  function(){$(this).stop().animate({backgroundColor: colors.background}, 300);
	                             $(this).children().stop().animate({borderBottomColor: colors.hint, color: colors.hint}, 300);}); 
}
client.Preparator.prototype.setRedHintBtnAction = function(selector, handler)
{
    $(selector).click(handler);    
    $(selector).hover(function(){$(this).stop().animate({backgroundColor: colors.hover}, 300);
                                 $(this).children().stop().animate({borderBottomColor: colors.hover, color: colors.hoverText}, 300);},
	                  function(){$(this).stop().animate({backgroundColor: colors.background}, 300);
	                             $(this).children().stop().animate({borderBottomColor: colors.action, color: colors.action}, 300);}); 
}
client.Preparator.prototype.setPagingButton = function(selector, handler)
{
    $(selector).click(handler);
    $(selector).each(function(index){    
        var c1 = colors.background;
        var c2 = colors.action;
        if ($(this).hasClass("pagingNumberSelected"))
        {
            c1 = colors.active;
            c2 = colors.hoverText;
        }
        $(this).hover(function(){$(this).stop().animate({backgroundColor: colors.hover}, 300);
                                 $(this).children().stop().animate({color: colors.hoverText}, 300);},
	                  function(){$(this).stop().animate({backgroundColor: c1}, 300);
	                            $(this).children().stop().animate({color: c2}, 300);}); 
	});
    $(selector).children("a").attr("href", 'javascript: void(0);');	    
}
client.Preparator.prototype.setRoundBtnAction = function(selector, handler)
{
    var back = $(selector).unbind();   
    var c1 = colors.darkroundbtn;
    var c2 = colors.active;
    var c1t = colors.background;
    var c2t = colors.background;
    if (back.hasClass("rose"))
    {
        c1 = colors.active;
        if (back.hasClass("selected")) c1 = colors.hover;
        c2 = colors.background;    
        c2t = colors.active;
    }
    if (back.hasClass("grey") || back.hasClass("white") || back.hasClass("bigwhite") || back.hasClass("eee"))
    {
        c1 = colors.active;
        c2 = colors.hover;    
    }
    if (back.hasClass("bigteal"))
    {
        c1 = "#556270";
        c2 = colors.hover;    
    }
    var mask = back.parent().children(".roundbtnmask").unbind();
    if (client.ie)
    {
        back.hover(function(){back.stop().animate({backgroundColor: c2, color: c2t}, 300); },
                function(){back.stop().animate({backgroundColor: c1, color: c1t}, 300); }); 
        back.click(handler);  
    }
    mask.hover(function(){back.stop().animate({backgroundColor: c2, color: c2t}, 300); },
               function(){back.stop().animate({backgroundColor: c1, color: c1t}, 300); }); 
    mask.click(handler);  
}
client.Preparator.prototype.setRoundBtn2Action = function(selector, handler)
{
	var back = $(selector).unbind();   
    var c1 = "#E6EDF5";
    var c2 = colors.active;
    var c1t = "#556270";
    var c2t = "#FFF";
    var c1i = "#556270";
    var c2i = colors.active;
    var caption = back.find("a").unbind();
    var icon = back.find(".btnIcon").unbind();
        back.hover(function(){
        				back.stop().animate({backgroundColor: c2}, 300); 
        				caption.stop().animate({color: c2t}, 300);
        				icon.stop().animate({backgroundColor: c2i}, 300);
        				},
                   function(){
                   		back.stop().animate({backgroundColor: c1}, 300); 
                   		caption.stop().animate({color: c1t}, 300);
                   		icon.stop().animate({backgroundColor: c1i}, 300);
                   		});        
        back.click(handler);  
    back.find("a").attr("href", 'javascript: void(0);');	   
}
client.Preparator.menustyle = '';
client.Preparator.prototype.setMainMenu = function(menustyle)
{		
	if (false)
	if (client.Preparator.menustyle	!= menustyle)
	{
		var light = (menustyle == "light");
		var promo = (menustyle == 'promo');
		if (promo) light = true;
		if (!promo)
		{
			$("#upperMenu .upperMenuLogo").show();
			$("#mainMenuBlog .menuitemText").html('Блог проекта');
			$("#mainMenuCreativity").show();
			$("#mainMenuGroups").hide();
		}
		if (promo) 
		{
			$("#upperMenu .upperMenuLogo").show();
			$("#mainMenuBlog .menuitemText").html('Главная');
			$("#mainMenuCreativity").show();
			$("#mainMenuGroups").hide();
		}
		var bgColor = (light ? colors.background : "#003671");
		var textColor = (light ? colors.active : colors.background);
		var opacity = (light ? 1 : 0.5)
		var bgs = $("#upperMenu .menuitemBg");
		var labels = $("#upperMenu .menuitemText");
		bgs.stop().removeClass("dark").removeClass("light").addClass(menustyle); 
		bgs.css({backgroundColor: bgColor, opacity: opacity});
		labels.stop().removeClass("dark").removeClass("light").addClass(menustyle).unbind().
		css({color: textColor}).
		hover(function(){$(this).stop().animate({color: colors.background}, 300).
		                 parent().parent().children(".menuitemBg").
		                 stop().animate({backgroundColor: colors.active, opacity: 1}, 300); },
		      function(){$(this).stop().animate({color: textColor}, 300).
		                 parent().parent().children(".menuitemBg").
		                 stop().animate({backgroundColor: bgColor, opacity: opacity}, 300); });
		var logomt = (light ? 13 : 20);
		var logomr = (light ? 10 : 1);
		var logow = (light ? 166 : 120);
		var logoh = (light ? 44 : 30);
		var logoname = (light ? "/images/logotype.png" : "/images/logotype-dark.png");
		$("#upperMenu .upperMenuLogo").css({marginTop: logomt, marginRight: logomr, width: logow, height : logoh})
		.children().children().attr("src",logoname); 
    }
   	client.Preparator.menustyle	= menustyle;
}
client.Preparator.prototype.setLink = function(selector, handler)
{
	var link = $(selector);    
    var hrefs = [];
    link.each(function(index){
    	hrefs[index] = $(this).find("a:first").attr("href");        
    	$(this).find(".embeddedLink").each(function(i){hrefs[index] = $(this).html();});
    	$(this).click(function(e){
	    	if (!(e.ctrlKey)) 
    			handler.call(this);
    		else 
    			window.open(hrefs[index]);}); 
    });
    link.click(function(e){e.preventDefault();});    
    link.find("a").click(function(e){e.preventDefault();});    
}
client.Preparator.prototype.setRedLink = function(selector, handler)
{
    var link = $(selector);    
    var hrefs = [];
    link.each(function(index){
    	hrefs[index] = $(this).find("a:first").attr("href");        
    	$(this).find(".embeddedLink").each(function(i){hrefs[index] = $(this).html();});
    	$(this).unbind('click').click(function(e){
	    	if (!(e.ctrlKey)) 
    			handler.call(this);
    		else 
    			window.open(hrefs[index]);}); 
    });
    link.click(function(e){e.preventDefault();});    	
    link.find("a").click(function(e){e.preventDefault();});    
}
client.Preparator.prototype.setHint = function(selector, hintSelector, useParent, handler)
{
	var target = $(selector);
	if (useParent === true)
		target = target.parent();
	var hint = $(hintSelector);
	target.mouseenter(function(){hint.show().stop().animate({opacity:1}, 300);})
	.mouseleave(function(){hint.stop().animate({opacity:0}, 500, function(){$(this).hide();});})
	.click(function(){hint.stop().animate({opacity:0}, 500, function(){$(this).hide();});});	
}
client.Preparator.prototype.setKeyAny = function(selector, handler)
{
	$(selector).keyup(function(event){handler();});
}
client.Preparator.prototype.setKeyEnter = function(form, selector, handler)
{
	var isCtrl = false;
	var isTextArea = ($(selector).attr("type") == "textarea");
    $(selector).keyup(function(event){
    	if (event.keyCode==13) 
    	{
			var value = $(this).attr("value");
    		if ((!isCtrl) || (!isTextArea))
	    	{	
    			if (isTextArea)
	    			if (value.length > 0)
    					$(this).attr("value", value.substring(0, value.length - 1));
    			handler.call(form);
    		}
    		else
    		{
  				$(this).attr("value", value + "\n");    			
    		}
    	}
    	if(event.which == 17) isCtrl=false; 
    }).keydown(function (event) { if(event.which == 17) isCtrl=true; });     
}
client.Preparator.prototype.prepareArray = function(obj, array, handler)
{
    if (array.length > 0)
        for (var i = 0; i < array.length; i++)
            handler.call(obj, array[i]);     
}
client.tooltipsCount = 0;
client.Preparator.prototype.setTooltip = function(selector, container, style)
{
    client.tooltipsCount++;
    var target = $(selector);   
    var tooltip = $(selector + "Tooltip"); 
    var html = tooltip.html();
    tooltip.html("<div class='tooltip-top'>" + html + "</div><div class='tooltip-bottom'>&nbsp;</div>");
    if (tooltip == null) return;
    var offset = $("#" + container).offset().top - $(document).scrollTop();
    var pp = target.parent().parent();
    if ((pp.hasClass('holder')) && (pp.hasClass('stackpanel')))
    {
        offset = pp.offset().top - $(document).scrollTop() - 5;
    }
    $(selector).removeAttr("title").mouseover(function(){
        tooltip.css({ left:-258, top: target.offset().top - 50 - $(document).scrollTop() - offset});
        tooltip.stop().show();
        }).mousemove(function(kmouse){
        }).mouseout(function(){
        tooltip.stop().hide();
        });    
}
client.Preparator.prototype.setRadiobox = function(selector, handler, color)
{
    var input = $(selector); 
    var box = $(selector + "Box"); 
    var boxII = box.children(".radioItem"); 
    var cText = colors.radioText;
    var cBack = colors.radio;
    var cSelectedText = colors.activeText;
    var cSelectedBack = colors.active;
    if (!(color == null))
    	if (color == 'white')
    	{
			cText = "#566270";
			cBack = "#F2F5FA";
			cSelectedText = "#566270";
		    cSelectedBack = colors.background;    		
    	}
    var speed = 300;   
    boxII.hover(function(){var c1 = ($(this).hasClass("selectedItem")) ? cSelectedBack : colors.hover;
                           var c2 = ($(this).hasClass("selectedItem")) ? cSelectedText : colors.hoverText;
                           $(this).stop().animate({backgroundColor: c1, color: c2}, speed);
                           },
                function(){var c1 = ($(this).hasClass("selectedItem")) ? cSelectedBack : cBack;
                           var c2 = ($(this).hasClass("selectedItem")) ? cSelectedText : cText;
                           $(this).stop().animate({backgroundColor: c1, color: c2}, speed);
                           }); 
    var setInput = function(index){
                                if ($(this).hasClass("selectedItem"))                                
                                    input.attr("value", index);
                            };
    var select = function(){
                            boxII.removeClass("selectedItem").
                            stop().animate({backgroundColor: cBack, color: cText}, speed);
                            $(this).stop().addClass("selectedItem").                                     
                            animate({backgroundColor: cSelectedBack, color: cSelectedText}, speed);
                            boxII.each(setInput);
    };
    boxII.click(select);
    if (!(handler==null)){
		boxII.click(handler);
	}
    var val = input.attr("value");
    boxII.each(function(index)
        {
            if (val == index)
                select.call($(this));
        });
}
client.Preparator.prototype.setMultiselect = function(selector, addHandler, removeHandler)
{
    var selectorbutton = selector + "Box .button";
    var input = $(selector); 
    var box = $(selector + "Box"); 
    var boxII = $(selector +"Box .selectTarget"); 
    var selection = $(selector + "Selected");     
    var speed = 300;   
    boxII.hover(function(){var c1 = ($(this).hasClass("selected")) ? colors.background : colors.hover;
                           var c2 = ($(this).hasClass("selected")) ? colors.border : colors.hoverText;
                           $(this).stop().animate({backgroundColor: c1, color: c2}, speed);
                           },
                function(){var c1 = ($(this).hasClass("selected")) ? colors.background : colors.multi;
                           var c2 = ($(this).hasClass("selected")) ? colors.border : colors.active;
                           $(this).stop().animate({backgroundColor: c1, color: c2}, speed);
                           }); 
    var val = input.attr("value");
    var vals = val.split(",");
	var setvalue = function(){
        var values = "";
        if (vals.length > 0)
	        for(var j = 0; j < vals.length; j++) 
    	        if (vals[j] != "")
    	            values += vals[j] + ",";  
        input.attr("value", values);
	}
	var remove = function(thisid){
		if (vals.length > 0)
	        for(var j = 0; j < vals.length; j++) 
    	        if (vals[j] == thisid)
    	            vals[j] = "";
        selection.children(".item" + thisid).remove();
        $(selectorbutton + thisid).stop().removeClass("selected").                                     
        animate({backgroundColor: colors.multi, color: colors.active}, speed);       
        setvalue();
        if (removeHandler) removeHandler(thisid);
	}
	var add = function(thisid, content, toarray){
	 	if (toarray)
	        vals[vals.length] = thisid;
        selection.children(".clear").remove();
        selection.append('<div class="item item' + thisid + '">' + content + '</div><div class="clear"></div>'); 
        var newbutton = selection.children(".item" + thisid);
        newbutton.hover(function(){$(this).stop().animate({backgroundColor: colors.hover}, 300); },
                        function(){$(this).stop().animate({backgroundColor: colors.active}, 300); });  
        newbutton.click(function(){remove(thisid);});                
        if (toarray) setvalue();
        if (addHandler) addHandler(thisid);
	}
    var select = function(){
        var thisid = $(this).children(".embeddedId").html();   
        if ($(this).hasClass("selected"))
        {
            remove(thisid);
        }
        else
        {
            $(selectorbutton + thisid).stop().addClass("selected").                                     
            animate({backgroundColor: colors.background, color: colors.border}, speed);
        	add(thisid, $(this).html(), true);     
        }
    };
    boxII.click(select);
	var contents = [];
    var init = function(index)
    {   
        var id = $(this).children(".embeddedId").html();   
        if (vals.length > 0)
	        for(var j = 0; j < vals.length; j++) 
    	        if (vals[j] == id)
    	        {        
    	            $(this).stop().addClass("selected").                                     
    	            animate({backgroundColor: colors.background, color: colors.border}, speed);
    	            contents[id] = $(this).html();
    	        }
    };
    boxII.each(init); 
    for(c in contents) 
		add(c, contents[c], false);
}
client.Preparator.prototype.setTabView = function(selector, color)
{
    var buttons = $(selector + " .tabButton");
    var tabs = $(selector + " .tab");
    var tabs2 = $(selector + " .tab2");
    var speed = 300; 
    var colorBgS = colors.background;
    var colorBgB = colors.border;
    if (color)
    {
        if (color == "white")
        {
            var colorBgS = colors.active;
            var colorBgB = colors.background;
        }
    }
    buttons.hover(function(){var c1 = ($(this).hasClass("selected")) ? colorBgS : colors.hover;
                           var c2 = ($(this).hasClass("selected")) ? colors.black : colors.hoverText;
                           $(this).stop().animate({backgroundColor: c1, color: c2}, speed);
                           },
                function(){var c1 = ($(this).hasClass("selected")) ? colorBgS : colorBgB;
                           var c2 = ($(this).hasClass("selected")) ? colors.black : colors.active;
                           $(this).stop().animate({backgroundColor: c1, color: c2}, speed);
                           }); 
    var show = function(){
        buttons.removeClass("selected").
        stop().animate({backgroundColor: colorBgB, color: colors.active}, speed);
        $(this).stop().addClass("selected").                                     
        animate({backgroundColor: colorBgS, color: colors.black}, speed);
        var tabId = "";
        buttons.each(function(index){if ($(this).hasClass("selected")) tabId = index;});
        tabs.hide();
        tabs.each(function(index){if (index == tabId) $(this).show();});                                 
        tabs2.hide();
        tabs2.each(function(index){if (index == tabId) $(this).show();});                                 
    };
    buttons.click(show);
}
client.Preparator.prototype.setSlidepanel = function(selector, isAnimated, hasFade)
{
    var box = $(selector + " .slidepanelBox");
    var tabs = $(selector + " .tab");
    var firstTab = $(selector + " .tab:first");
    var buttons = $(selector + " .tabButton");
    var hasButtons = (buttons.length == tabs.length);
    var count = tabs.length;
    if (count == 0) return;
    var currentItem = 0;
    var itemWidth = 50;
    var colorBgS = "#FFF";
    var colorBgB = colors.hover;
    var speed = 300;
    buttons.hover(function(){var c1 = ($(this).hasClass("selected")) ? colorBgS : colors.active;
                           var c2 = ($(this).hasClass("selected")) ? colors.black : colors.hoverText;
                           $(this).stop().animate({backgroundColor: c1, color: c2}, speed);
                           },
                  function(){var c1 = ($(this).hasClass("selected")) ? colorBgS : colorBgB;
                           var c2 = ($(this).hasClass("selected")) ? colors.black : colors.active;
                           $(this).stop().animate({backgroundColor: c1, color: c2}, speed);
                           });
    var right = $(selector + " .moveright");
    var left = $(selector + " .moveleft").removeClass("moveleft");
    var animationPaused = false;
	var fadeRight = null;
	var fadeLeft = null;
	if (hasFade)
		if (hasFade === true)
		{
			box.parent().addClass("holder");
			fadeRight = $("<div class='abs fadeWhiteRight'></div>").appendTo(box.parent()).height(box.height());
			fadeLeft = $("<div class='abs fadeWhiteLeft'></div>").appendTo(box.parent()).height(box.height()).hide();		
		}
    var scrollTo = function(index){    
        currentItem = index;
        itemWidth = firstTab.outerWidth(true);
        tabsInView = Math.floor((box.outerWidth() + itemWidth - firstTab.outerWidth(false))/ itemWidth);
        var pos = index * itemWidth;
        box.animate({scrollLeft: pos});
        if (currentItem == 0)
            left.removeClass("moveleft");
	    else
	    	left.addClass("moveleft");
		var canScrollToRight = ((index * itemWidth  + box.width() >= count * itemWidth) || (index == count - 1));
		if (canScrollToRight)
		{
	        right.removeClass("moveright");
	        if (fadeRight) fadeRight.hide();
	        if (fadeLeft) if (box.width() > itemWidth) fadeLeft.show();
	    }
	    else
	    {
	    	right.addClass("moveright");
	    	if (fadeRight) if (box.width() > itemWidth) fadeRight.show();
	    	if (fadeLeft) fadeLeft.hide();
	    }
    	if (box.width() <= itemWidth) 
    	{	
    		if (fadeLeft) fadeLeft.hide();
    		if (fadeRight) fadeRight.hide();
    	}
        if (hasButtons)
        {
            buttons.each(function(index){
                if (index == currentItem)
                    $(this).stop().addClass("selected").                                     
                    animate({backgroundColor: colorBgS, color: colors.black}, speed);
                else
                    $(this).removeClass("selected").
                    stop().animate({backgroundColor: colorBgB, color: colors.active}, speed);
            });
        }
    }
    buttons.each(function(index){$(this).click(function(){scrollTo(index)})});
    var next = function()
    {
	    if (currentItem < count - 1)
	    {
	        currentItem++;
        	scrollTo(currentItem);
        }
    }
    var prev = function()
    {
        if (currentItem != 0)
        {
	        currentItem--;
    	    scrollTo(currentItem);
    	}
    }
    right.click(next).hover(function(){animationPaused = true;},function(){animationPaused = false;});
    left.click(prev).hover(function(){animationPaused = true;},function(){animationPaused = false;});
    if (fadeRight) fadeRight.click(next);
    if (fadeLeft) fadeLeft.click(prev);
    tabs.each(function(index){
        itemWidth = $(this).outerWidth(true);
        $(this).click(function(){scrollTo(index)}).
        hover(function(){animationPaused = true;},function(){animationPaused = false;});
    });
    var showNextTimer = function()
    {
        if (box) 
        {
            if (!animationPaused)
            {
				currentItem++;
				if (currentItem == count) currentItem = 0;
				scrollTo(currentItem);
            }
            setTimeout(showNextTimer, 6000);
        }    
    }
    if (isAnimated) setTimeout(showNextTimer, 6000);
}
client.Preparator.prototype.addSection = function(selector, section, className, html)
{
	$(selector + " ." + section).remove();
	$(selector).append("<div class='" + className + " " + section + "'>" + html + "</div>");	
}
client.Preparator.prototype.removeSection = function(selector, section)
{
	$(selector + " ." + section).remove();
}
client.Preparator.prototype.setInputHint = function(selector, hint)
{
	$(selector).each(function(index){
		var box = $(this);   
		if (box.length == 0) return;
		var hasHint = (hint != "");
		if (hasHint)
		{
			var currentValue = box.attr('value');
			if ((currentValue == "") || (currentValue == hint))
			{
				box.attr('value', hint);
				box.addClass('hasHint');
			}
			box.focus(function(){	
				if (box.attr('value') == hint) box.attr('value', '');
				box.removeClass('hasHint');
			}); 
			box.blur(function(){	
				if (box.attr('value') == '')
				{
					box.attr('value', hint);
					box.addClass('hasHint');
				}
			}); 
	   	}
	});
}
client.iezIndexFix = 3000;
client.Preparator.prototype.setCombobox = function(selector, autoscroll, handler, hint)
{
	client.ComboBox.init(selector, autoscroll, handler, hint);
}
client.Preparator.prototype.setExpander = function(selector)
{
    var box = $(selector);     
    var boxS = $(selector + "Box"); 
    var button = $(selector + " .expand"); 
    var text = $(selector + " .hintBtnText");
    var isExpanded = false;
    var expand = function(){
        if (isExpanded)
        {
            boxS.hide("fast");
            text.html("раскрыть");
        }
        else
        {
            boxS.show("fast");
            text.html("свернуть");    
        }
        isExpanded = !isExpanded;
    };
    var hovIn = function(){box.stop().animate({borderTopColor: colors.hover, borderRightColor: colors.hover, borderLeftColor: colors.hover, borderBottomColor: colors.hover}, 300);
                           $(this).stop().animate({backgroundColor: colors.hover}, 300);
                           $(this).children().stop().animate({borderBottomColor: colors.hover, color: colors.hoverText}, 300);};
    var hovOut = function(){box.stop().animate({borderTopColor: colors.border, borderLeftColor: colors.border, borderRightColor: colors.border, borderBottomColor: colors.border}, 300);                            
                            $(this).stop().animate({backgroundColor: colors.background}, 300);
	                        $(this).children().stop().animate({borderBottomColor: colors.active, color: colors.active}, 300);};
    button.click(expand);    
    button.hover(hovIn, hovOut); 
}
client.Preparator.prototype.setLengthIndicator = function(selector, indicator, limit)
{
    var input = $(selector);
    var counter = $(indicator);
    var update = function(){
        var l = input.attr("value").length;
        counter.html(l);
        if (l > limit) 
            counter.parent().addClass("overflow");
        else
            counter.parent().removeClass("overflow");
    };
    update();
    $(input).keyup(function(event){update();});     
}
client.Preparator.prototype.setPanelSwitch = function(selector1, selector2, switch1, switch2)
{
	var p1 = $(selector1);
	var p2 = $(selector2);
	$(selector1 + " ." + switch1).click(function(){p1.hide();p2.show();});
	$(selector2 + " ." + switch2).click(function(){p2.hide();p1.show();});	
}
client.Preparator.prototype.setAjaxPanel = function(selector, collapsed, expanded, switch1, switch2, url, getdata, prepare)
{
	var items = $(selector);
	items.each(function(index){
		var p1 = $(this).find("." + collapsed);
		var p2 = $(this).find("." + expanded);
		var p2c = $(this).find("." + expanded + "Content");
		p1.find("." + switch1).click(function(){
			var sender = $(this);
			p1.hide();
			p2.show();
			$.ajax({type: "POST", 
				url: url, 
				data: getdata(sender),
		        success: function(html){ 
		        	p2c.html(html);  
    	    		prepare();
		        }
		   	});
		});
		p2.find("." + switch2).click(function(){ 
    	    p2.hide(); 
    	    p1.show();     	    			
    	});	
	});		
}
client.Preparator.prototype.getAjaxPanel = function(selector, url, getdata, prepare)
{
    var p = $(selector);
    var indicator = p.parent().find(".loadingBg");
	$.ajax({type: "POST", 
		url: url, 
		data: getdata(),
		beforeSend: function(){ 
			indicator.show();
    		client.Switcher.startLoadingAnimationRef(indicator);
	        }, 
	    complete: function(){ 
    	    client.Switcher.stopLoadingAnimationRef(indicator);
    	    indicator.hide();
    	    },
        success: function(html){ 
        	p.html(html);  
   	    	prepare();
   	    }
   	});
}
client.Preparator.prototype.setPanelSwitchRef = function(panel1, panel2, switch1, switch2)
{
	panel1.find("." + switch1).find("a").attr("href", 'javascript: void(0);');	
	panel2.find("." + switch2).find("a").attr("href", 'javascript: void(0);');	
	panel1.find("." + switch1).click(function(){panel1.hide();panel2.show();});
	panel2.find("." + switch2).click(function(){panel2.hide();panel1.show();});	
}
client.Preparator.prototype.setUpload = function(selector, buttonSelector, dir)
{
    var uploader = new client.Uploader();
    uploader.dir = dir;
    uploader.selector = selector;  
    uploader.buttonDiv = buttonSelector;
    uploader.loadingDiv = selector + "UploadLoading";
    uploader.errorDiv = selector + "UploadErrorBox";
    uploader.previewDiv = selector + "UploadPreview";
    uploader.hiddenDiv = selector + "UploadHidden";
    uploader.formDiv = selector + "UploadForm";
    uploader.inputFileId = selector + "FileId";
    uploader.inputFileCode = selector + "FileCode";
    uploader.create();
    uploaders.add(uploader);
    return uploader;
}
client.Preparator.prototype.setZoomRibbon = function(selector, isAnimated)
{
    var holder = $(selector);
    var allItems = holder.find(".zoomRibbonItem");
    var allHelpers = holder.find(".zoomRibbonItem .helper");    
    var allZoomed = holder.find(".zoomRibbonItem .zoomed");
    var allImages = holder.find(".zoomRibbonItem img");
    var animationPaused = false;
    var show = function(sender)
    {
        allHelpers.stop().animate({paddingTop:"50px"});
        allImages .stop().animate({height:"50px",width:"50px"});
        allZoomed .stop().animate({top:"50px", opacity: "0"}).hide();
        sender.find(".helper").stop().animate({paddingTop:"0px"});
        sender.find(".zoomed").stop().show().animate({top:"0px", opacity: "1"});
        sender.find("img").stop().animate({height:"150px",width:"150px"});
    }    
    var items = [];
    var maxIndex = 0;
    holder.find(".zoomRibbonItem").each(function(index){
        $(this).hover(
            function(){
                show($(this));  
                animationPaused = true;
            },function(){
                animationPaused = false;
            });        
        items[index] = $(this);
        maxIndex = index;
    });
    var currentIndex = 0;    
    var showNext = function()
    {
        if (items[currentIndex])
            if (items[currentIndex].length > 0)        
            {
                if (!animationPaused)
                    show(items[currentIndex]);
                setTimeout(showNext, 6000);
            }    
        currentIndex++;
        if (currentIndex > maxIndex) currentIndex = 0;
    }
    if (isAnimated)
    {
        showNext();
    }    
}
client.Preparator.prototype.setGallery = function(selector, isAnimated)
{
	var gallery = $(selector);
	var slides = gallery.find(".gallery-stages");
	var images = gallery.find(".gallery-image");
	var thumbsContainer = $(".gallery-thumb-container");
	var thumbs = thumbsContainer.find("a.gallery-thumb");
	var texts = gallery.find(".gallery-text");
	var cache = gallery.find(".gallery-cache");
	var btnNext = thumbsContainer.find('.gallery-btn-next');
	var btnPrev = thumbsContainer.find('.gallery-btn-prev');
	var thumbsUl = thumbsContainer.find('ul');
	var thumbsLi = thumbsContainer.find('ul li');	
	var maximum = thumbsLi.size(); 
	var step = 1;
	var visible = 13; 
	var speed = 300; 
	var liSize = 71;
	var ulSize = liSize * maximum;   
	var divSize = liSize * visible; 
	thumbsUl.css('width', liSize * maximum);		
	btnNext.click(function(){ showNext(); animationInProgress = false; });
	btnPrev.click(function() { showPrev(); animationInProgress = false; });
	var w = $(window).width();
	if (w < 1000) w = 1000;
	var scaledW = Math.round(w * 500.0 / 1920.0);
	gallery.css("height", scaledW + "px");
	slides.css("height", scaledW + "px").css("width", w);
	images.css("height", scaledW + "px").css("width", w);
	$(window).resize(function() {
		w = $(window).width();
		if (w < 1000) w = 1000;
		scaledW = Math.round(w * 500.0 / 1920.0);
		gallery.css("height", scaledW + "px");
		slides.css("height", scaledW + "px").css("width", w);
		images.css("height", scaledW + "px").css("width", w);		
	});
	var current = 0;	
	var curSlide = 0;
	var nextSlide = 1;
	var count = thumbs.length;
	var animationInProgress = false;
	$(slides[0]).removeClass("hide");	
	$(thumbs[0]).addClass('active');
	var fadeSlide = function(cur, next){
		cur.css('z-index','4');
		next.css('z-index','5');
		cur.stop().animate({opacity:0}, 300); 
		next.stop().animate({opacity:1}, 300);
		if (next.hasClass("hide")) next.removeClass("hide");
	};
	var path = "http://storage.yatalant.ru/mainpage/stars/header/";
	var show = function(index){
			$(thumbs[current]).removeClass('active');
			current = index;
			$(thumbs[current]).addClass('active');
			var next = $(slides[nextSlide]);
			next.find("img").attr('src',"/images/shadow.png");
			next.find("img").attr('src', path + index + '.jpg');
			next.find(".gallery-text-block").html($(texts[index]).html());
			var cacheImg = current + 1;
			if (cacheImg == count) cacheImg = 0;
			cache.find("img").attr('src', path + cacheImg + '.jpg');
			var p = pages.get("mainpage.mainPage");
			var c = controllers.get("ytProfile");
			p.prep.setRedLink(p.getSelector("openVideo"), function(){
				c.viewProfile(c.getEmbeddedParam($(this),"openVideo", "Id"));
			});			
			fadeSlide($(slides[curSlide]), $(slides[nextSlide]));
			if (curSlide == 0) 
				{curSlide = 1; nextSlide = 0;}
			else 
				{curSlide = 0; nextSlide = 1;};
			var offset = liSize * current - (liSize * (visible - 1))/2;
			if (offset < 0) offset = 0;		
			if (offset > (maximum - visible) * liSize) offset = (maximum - visible) * liSize;
			thumbsUl.animate({left: -offset}, speed, null);
		};
	var activateThumb = function(thumb, index){
			if (current != index)
				show(index);
			animationInProgress = false;
		};
	$.each(thumbs,function(index,element){
			$(element).click(function(){
				activateThumb($(element),index);
			});	
		});	
	var showNext = function(){
		if (current + 1 == count) {show(0);} else {show(current + 1);};
	}
	var showPrev = function(){
		if (current - 1 == -1) {show(count-1);} else {show(current - 1);};
	}
	var animation = function(){
		if (animationInProgress)
		{
			showNext();
			setTimeout(animation, 5000);
		}
	}
	if (isAnimated)
	{
		setTimeout(animation, 5000);
		animationInProgress = true;
	}
}
client.Preparator.prototype.setSlider = function(selector, isAnimated)
{
    var gallery = $(selector);
    var slides = gallery.find(".slide-div");  
    var thumbs = gallery.find("a.slider-item");
    var current = 0;	
	var curSlide = 0;
	var nextSlide = 1;
	var count = thumbs.length;
	var animationInProgress = false;
	var fadeSlide = function(cur, next){
    	cur.css('z-index','4');
		next.css('z-index','5');
		if ( $.browser.msie ) {
	    	cur.hide();
	    	next.show();
		}
		else
		{
	    	cur.stop().animate({opacity:0}, 500);
    		next.stop().animate({opacity:1}, 500);
		}
		if (next.hasClass("hide")) next.removeClass("hide");
	};	
	var show = function(index){
			$(thumbs[current]).removeClass('active');
			$(thumbs[index]).addClass('active');
			curSlide = current;
		    nextSlide = index;						
			current = index;
			fadeSlide($(slides[curSlide]), $(slides[nextSlide]));
		};
	var activateThumb = function(thumb, index){
			if (current != index)
				show(index);
			animationInProgress = false;
		};
	$.each(thumbs,function(index,element){
			$(element).click(function(){
				activateThumb($(element),index);
			});	
		});	
	var showNext = function(){
		if (current + 1 == count) {show(0);} else {show(current + 1);};
	}
	var showPrev = function(){
		if (current - 1 == -1) {show(count-1);} else {show(current - 1);};
	}
	var animation = function(){
		if (animationInProgress)
		{
			showNext();
			setTimeout(animation, 6000);
		}
	}
	if (isAnimated)
	{
		setTimeout(animation, 6000);
		animationInProgress = true;
	}
}
client.Switcher = function()
{
};
client.Switcher.scrollpanelCurrent = [];
client.Switcher.scrollpanelOld = [];
client.Switcher.scrollpanelList = [];
client.Switcher.initScrollPanels = function(container, panelsSelector)
{
    client.Switcher.scrollpanelList[container] = $("#" + container + " " + panelsSelector);
}
client.Switcher.switchScrollPanel = function(container, blockName, load)
{
    var newPanel = pages.get(blockName).getContainer();
    if (load)
    {
        pages.get(blockName).showContainer = false; 
        pages.get(blockName).show();
    }
    client.Switcher.scrollpanelList[container].
    each(function(index){if ($(this).attr("id") != newPanel.attr("id"))
                             $(this).hide();});
    newPanel.stop().show("blind", 300);
    client.Switcher.scrollpanelOld[container] = client.Switcher.scrollpanelCurrent[container];
    client.Switcher.scrollpanelCurrent[container] = blockName;
    if (client.Switcher.scrollpanelOld[container])
        pages.get(client.Switcher.scrollpanelOld[container]).isCurrent = false;
    pages.get(client.Switcher.scrollpanelCurrent[container]).isCurrent = true;
}
client.Switcher.switchScrollPanelBack = function(container, load)
{
    var blockName = client.Switcher.scrollpanelOld[container];
    client.Switcher.switchScrollPanel(container, blockName, load);
    client.Switcher.resizeYtSideBar();
}
client.Switcher.switchPanels = function(oldPanelId, newPanelId)
{
    $("#" + oldPanelId).hide();
    $("#" + newPanelId).show();
}
client.Switcher.showError = function(selector)
{
    $(selector).show("fast");
}
client.Switcher.showSuccess = function(selector)
{
    $(selector).show("fast");
}
client.Switcher.startLoadingAnimation = function(selector)
{
    $(selector).find(".loadingBg").stop()
    .css({backgroundPosition: "10px 10px"})
    .animate({backgroundPosition:"(+10000px 0)"}, {duration:600000});
}
client.Switcher.stopLoadingAnimation = function(selector)
{
    $(selector).find(".loadingBg").stop();
}
client.Switcher.startLoadingAnimationRef = function(indicator)
{
    indicator.stop()
    .css({backgroundPosition: "10px 10px"})
    .animate({backgroundPosition:"(+10000px 0)"}, {duration:600000});
}
client.Switcher.stopLoadingAnimationRef = function(indicator)
{
    indicator.stop();
}
client.Switcher.startAreaSendingAnimation = function(input)
{
	input.addClass("loadingBg").addClass("lightBg");
    client.Switcher.startLoadingAnimationRef(input);
}
client.Switcher.endAreaSendingAnimation = function(input)
{
	input.removeClass("loadingBg").removeClass("lightBg");
    client.Switcher.stopLoadingAnimationRef(input);
    input.css({backgroundPosition: "right bottom"});
}
client.Switcher.changeColorClass = function(selector, oldcolor, newcolor)
{
    $(selector + " ." + oldcolor).addClass(newcolor).removeClass(oldcolor);
}
client.Switcher.sidebarIsVisible = true;
client.Switcher.sidebarInit = false;
client.Switcher.autosizeItems = [];
client.Switcher.resizeYtSideBar = function()
{
    client.Switcher.sidebarInit = true;
    if (controllers.get("ytProfile").isLogged === true) 
		$('#rightCollapsedSidebar .maximizeSidebar').removeClass("entry");
	if (controllers.get("ytProfile").isLogged === false) 
		$('#rightCollapsedSidebar .maximizeSidebar').addClass("entry");
    var currentBlock = pages.get(client.Switcher.scrollpanelCurrent["rpmain"]);
    var sidebarWidth = 230;    
    var wide = false;
    if (currentBlock)
    {
        wide = false;
		if (currentBlock.name == "sidebarChatForm") wide = true;
		if (currentBlock.name == "sidebar.messagesList") wide = true;
		if (currentBlock.name == "sidebar.messagesArchive") wide = true;
        if (wide)
            sidebarWidth = 335;
        else    
            sidebarWidth = 230;
        $("#rightSidebar").css({width:sidebarWidth});
	}
	if (client.ie7)
        $(".rploginfiller").css({width:sidebarWidth - 10});
    var noMenu = ($('#usersLoginForm').css("display") != "none");
    var height = (noMenu ? 116 : 106);
    if (client.ie7) if (noMenu) height += 7;    
    if (wide) height -= 25;
    $(".rploginfiller").css({height:height}); 
    var winheight = $(window).height();
    var winwidth = $(window).width();
    if (winheight < 400) winheight = 400;
    if (winheight < 500) 
    {
        $("#rightSidebar").css({position:"absolute"});        
        winheight = 700;
    }
    else
	    $("#rightSidebar").css({position:"fixed"});        
    $(".rpmainfiller").css("height", winheight - height - 90);
    if (client.Switcher.sidebarIsVisible)
    {
        $('.wide').css({marginRight: '240px'});
        if (client.ie7)
        {
            $('.wide').css({zoom: '1'});
        }        
    }
    else
        $('.wide').css({marginRight: '0px'});
    var centerwideMargin = (winwidth > 1024) ? (winwidth - 1000)/2 : 0;
    if (client.Switcher.sidebarIsVisible)
    {
    	if (centerwideMargin < 240)
    	  	$('.widecenter').css({marginRight: '240px'}).css({marginLeft: '0px'});
    	else
	        $('.widecenter').css("margin-right", centerwideMargin).css("margin-left", centerwideMargin);
        if (client.ie7)
        {
            $('.widecenter').css({zoom: '1'});
        }        
    }
    else
        $('.widecenter').css("margin-right", centerwideMargin).css("margin-left", centerwideMargin);
	if (winwidth > 1600)
	{
		$('.spacer20').width(40).css({minWidth:"40px"});
		$('.hiresSpacer10').width("10%");
		$('.hiresSpacer5').width("5%");
	}
	else
	{
		$('.hiresSpacer5').width(0);
		$('.hiresSpacer10').width(0);
		if (winwidth > 1200)
			$('.spacer20').width(20).css({minWidth:"20px"});
		else
			$('.spacer20').width(0).css({minWidth:"0px"});
	}
    if (client.Switcher.autosizeItems.length > 0)
        for (var i = 0; i < client.Switcher.autosizeItems.length; i++)
        {
            var aitem = client.Switcher.autosizeItems[i];
            if (aitem.div)  
            {
                if (aitem.mode == "fill")
                {
                    var newWidth = winwidth;
                    if (aitem.options.units == "pixels")
	                    newWidth -= aitem.offset;
                    if (aitem.options.units == "percents")
 	                    newWidth -= Math.round(winwidth * aitem.offset / 100.0);
                    if (client.Switcher.sidebarIsVisible) newWidth -= 240;
					if (aitem.options.grid)
					{
						newWidth = aitem.options.grid * Math.floor(newWidth/aitem.options.grid);
					}
					if (aitem.options.minwidth)
		            {
			        	if (newWidth < aitem.options.minwidth)
				        	newWidth = aitem.options.minwidth;
		            }
                    aitem.div.width(newWidth);
                    if (aitem.options.setWidthOfInnerTabs)
                    {
                    	aitem.div.find(".tab").width(newWidth);
                    }
                }
                if (aitem.mode == "center")
                {
                    var newMargin = winwidth - aitem.offset - 40;
                    if (client.Switcher.sidebarIsVisible) newMargin -= 240;                    
                    newMargin = Math.round(newMargin/2);
                    aitem.div.css("marginLeft", newMargin + 'px');                
                }
            }
        }
    if (currentBlock)
    {
	    var headerHeight = 0;
	    var bottomHeight = 0;
	    $(currentBlock.getSelector("sidebarScrollHeader")).each(function(index){headerHeight += $(this).outerHeight(true);});
	    $(currentBlock.getSelector("sidebarScrollBottom")).each(function(index){bottomHeight += $(this).outerHeight(true);});
		$(currentBlock.getSelector("sidebarScroll"))
			.css("height", winheight - height - 90 - 15 - headerHeight - bottomHeight);
    }       
    if (client.ie7)
    {
    	$(".ie7hfix5").css("height", 5);
    	$(".ie7hfix10").css("height", 10);
    	$(".ie7hfix20").css("height", 20);
    	$(".ie7hfix40").css("height", 30);
    }
   	var promo = (client.Preparator.menustyle == 'promo');
	if(!promo)
		$(".mainmenu").css("marginLeft","0px");
	else
		$(".mainmenu").css("marginLeft", "auto");
	if (pages.currentBlockName == "mainpage.mainPage")
		if ($(".blogContent").length == 0)
		   $(".mainmenu").css("marginLeft", (($(window).width()-1174+40)/2)+"px");
}
client.Switcher.addAutosizeItem = function(div, offset, mode, options)
{
	var opts = {units: 'pixels', setWidthOfInnerTabs: false}; 
	if (options) opts = options;		
    var obj = {div: div, offset: offset, mode: mode, options:opts};
    client.Switcher.autosizeItems[client.Switcher.autosizeItems.length] = obj;
}
client.Switcher.scrollToBottom = function(selector)
{
    $(selector).animate({scrollTop: $(selector)[0].scrollHeight});
} 
client.Switcher.scrollToPageTop = function()
{
    $('html, body').animate({scrollTop:0}, 'fast');
}
client.Switcher.scrollToBlockTop = function(selector)
{
	var offset = $(window).scrollTop();
	var blockOffset = $(selector).offset().top - 100; 
	if (offset > blockOffset)
    	$('html, body').animate({scrollTop:blockOffset}, 'fast');
}
client.Switcher.upperBannerHeight = 0;
client.Switcher.hideUpperBanner = function(selector, absSelector)
{
    var h = $(selector).height();
    client.Switcher.upperBannerHeight = h;
    $(selector).animate({height:0});
    $(absSelector).each(function(index){
            var t = $(this).offset().top;
            $(this).animate({top:t-h});        
        });
}
client.Decor = function()
{
};
client.Decor.alignGridBlock = function(selector, panelsSelector)
{
    var container = $(selector);
    var blocks = $(selector + " ." + panelsSelector).not(".hide");    
    var currentTop = 0;
    var itemsInRow = 0;
    var currentParentPos = 0;
    var maxItemsInRow = 0;
    blocks.each(function(index){
        var b = $(this);
        var ppos = b.parent().position();
        if ((b.position().top != currentTop) || (currentParentPos != ppos.top + ppos.left)) 
        { 
            itemsInRow = 0; 
            currentTop = b.position().top; 
            currentParentPos = ppos.top + ppos.left;
        };
        itemsInRow++;
        if (maxItemsInRow < itemsInRow) maxItemsInRow = itemsInRow;       
    });
    var maxHeights = [];
    var indexInRaw = 0;
    var rawIndex = 0;
    currentParentPos = 0;
    blocks.each(function(index){
        var b = $(this);
        var ppos = b.parent().position();
        if ((currentParentPos != ppos.top + ppos.left) || (indexInRaw == maxItemsInRow))
        { 
            rawIndex++
            indexInRaw = 0;
            currentParentPos = ppos.top + ppos.left;
        };
        indexInRaw++;        
        if (!maxHeights[rawIndex]) maxHeights[rawIndex] = 0;
        if (maxHeights[rawIndex] < b.height()) maxHeights[rawIndex] = b.height();       
    });
    indexInRaw = 0;
    rawIndex = 0;
    currentParentPos = 0;
    blocks.each(function(index){
        var b = $(this);
        var ppos = b.parent().position();
        if ((currentParentPos != ppos.top + ppos.left) || (indexInRaw == maxItemsInRow))
        { 
            rawIndex++
            indexInRaw = 0;
            currentParentPos = ppos.top + ppos.left;
        };
        indexInRaw++;        
        b.height(maxHeights[rawIndex]);
    });
}
client.drag = function()
{
};
client.drag.dragHint = null;
client.drag.dragInProgess = false;
client.drag.setDraggable = function(selector)
{
    var targets = $(selector);
    if (client.drag.dragHint == null)
    {
        client.drag.dragHint = $('<div id="dragHint" class="dragHint abs"><div class="holder"><div class="dragHintBg">&nbsp;</div><div class="dragHintIcon abs">&nbsp;</div></div><div>');
        client.drag.dragHint.prependTo("body").hide(); 
    }
    targets.each(function(index){    	
        var target = $(this);
        if (target.hasClass("ui-draggable")) return;
        var hint = "";
        var offset = 150;
        if (target.hasClass("user")) 		 { hint = "талант"; 		   offset = 70;  }
        if (target.hasClass("favoriteItem")) { hint = "избранный элемент"; offset = 127; }
        if (target.hasClass("dragFolder"))   { hint = "избранная папка";   offset = 117; }
        if (target.hasClass("album")) 		 { hint = "альбом"; 		   offset = 70;  }
        if (target.hasClass("albumPhoto")) 	 { hint = "фото"; 			   offset = 70;  }
        if (target.hasClass("albumAudio")) 	 { hint = "аудио"; 			   offset = 70;  }
        if (target.hasClass("albumVideo")) 	 { hint = "видео"; 			   offset = 70;  }
        if (target.hasClass("albumTexts")) 	 { hint = "текст"; 			   offset = 70;  }
        if (target.hasClass("playlistItem")) { hint = "элемент плейлиста"; offset = 127; }
        if (target.hasClass("expert")) 		 { hint = "эксперт"; 		   offset = 70;  }
        target.css({cursor:'pointer'});
        var hasFrame = target.hasClass('framed');
        var hoverHint = client.drag.dragHint;
        target.draggable({ 
            helper: 'clone',  
            zIndex: 30000,
	        cursor: 'move',
	        appendTo: 'body',
	        cursorAt: { top: 5, left: offset },
	        start: function(event, ui) { 
	            client.drag.dragInProgess = true; 
	            if (hoverHint != null) 
	                if (hoverHint.css('display') != 'none') 
	                    hoverHint.hide();
                if (hasFrame)
                    target.removeClass("redBg"); 
	        },	        
	        drag: function(event, ui) {  
	            if (hoverHint != null) 
	                if (hoverHint.css('display') != 'none') 
	                    hoverHint.hide(); 
	            },	        
    	    stop: function(event, ui) { 
	            client.drag.dragInProgess = false; 
	            if (hoverHint != null) 
	                if (hoverHint.css('display') != 'none') 
	                    hoverHint.hide(); 
	        },	        
	        helper: function(event) {
		        return $('<div><div class="holder"><div class="tag dragTag left">' + hint + '</div>'
		            + '<div class="dragHintIconMove left">&nbsp;</div></div></div>');
	        }});	        
	   target.draggable( "option", "scroll", false );
  	    if (hoverHint != null)
        {
            target.mouseover(function(){
                hoverHint.css({ left:-200, top: target.offset().top - $(document).scrollTop() });
                if (client.drag.dragInProgess == false)
                {
                    if (hoverHint.css('display') == 'none') 
                        hoverHint.stop().show();  
                    if (hasFrame)
                        target.addClass("redBg");
                }
            }).mousemove(function(kmouse){
                hoverHint.css({left:kmouse.pageX - 27, top:kmouse.pageY - 5});
            	if (client.drag.dragInProgess == false)
            	{
                    if (hoverHint.css('display') == 'none') 
                        hoverHint.show();
                    if (hasFrame)
                        if (!target.hasClass("redBg"))
                            target.addClass("redBg");
                }
            }).mouseout(function(){
                hoverHint.stop().hide();
                if (hasFrame)
                    target.removeClass("redBg");               
            }).click(function(){
                hoverHint.stop().hide();
                if (hasFrame)
                    target.removeClass("redBg");               
            });  
        }
    });
}
client.drag.setDropabble = function(selector, action, accept, handler)
{
    var overIcon = "dragOver";
    if (action == 'add') overIcon = "dragOverAdd";
    if (action == 'delete') overIcon = "dragOverDelete";
    if (action == 'send') overIcon = "dragOverSend";
    $(selector).droppable({
        accept: accept,
        tolerance: 'pointer',
        hoverClass: 'dragActive',
        greedy: false,
        activate: function(event, ui) { 
        },
        over: function(event, ui) {
            ui.helper.addClass(overIcon).addClass("dragOver");
            },
        out: function(event, ui) {
            ui.helper.removeClass(overIcon).removeClass("dragOver");;
            },
        drop: handler
    });
}
client.drag.prepareTalantDragItems = function(p) 
{
	client.drag.setDraggable(p.getSelector("drag"));
 	var c = controllers.get('ytAlbums');
    p.prep.setRedLink(p.getSelector("albumTexts"), function(){c.openAlbumViewerTexts(c.getEmbeddedParam($(this),"albumTexts","Id"))});
    p.prep.setRedLink(p.getSelector("albumAudio"), function(){c.openAlbumViewerAudio(c.getEmbeddedParam($(this),"albumAudio","Id"))});
    p.prep.setRedLink(p.getSelector("albumVideo"), function(){c.openAlbumViewer(c.getEmbeddedParam($(this),"albumVideo","Id"))});
    p.prep.setRedLink(p.getSelector("albumPhoto"), function(){c.openAlbumViewer(c.getEmbeddedParam($(this),"albumPhoto","Id"))});
	p.prep.setRedLink(p.getSelector("album"), function(){c.openAlbum(c.getEmbeddedParam($(this),"album","Id"))});
	p.prep.setRedLink(p.getSelector("user"), function(){controllers.get("ytProfile").viewProfile(c.getEmbeddedParam($(this),"user","Id"))});
}
client.drag.hide = function()
{
    if (client.drag.dragHint != null)
        client.drag.dragHint.hide();
}
client.encode = function(data) 
{
    var s = String(data);
    s = s.replace(/[\r\n]/g, "%n;");
    s = s.replace(/&/g, "%and;");
    return s;
}
client.Audio = function(){
};
client.audio = function(){  
};
client.Audio.isReady = false;
client.Audio.player = null;
client.Audio.isPlaying = false;
client.Audio.currentId = "";
client.Audio.currentFile = "";
client.Audio.currentSongAuthor = "Трек не задан";
client.Audio.currentSongName = "&nbsp;";
client.Audio.playlist = [];
client.Audio.currentVolume = 0.66;
client.Audio.pPlayer = null; 
client.Audio.pMainSlider = null;
client.Audio.pLocalSlider = null;
client.Audio.pCurrentPosition = null;
client.Audio.pTotalDuration = null;
client.Audio.pPlay = null;
client.Audio.pPause = null;
client.Audio.pPlayList = null;
client.Audio.pSongName = null;
client.Audio.pSongAuthor = null;
client.Audio.pCurrentTrack = null;
client.Audio.pTotalTracks = null;
client.Audio.init = function()
{
	if (client.Audio.player == null)
	{
		var player = "/flash/audioPlayerJS.swf";
		$('<div id="mp3PlayerHolder"></div>').prependTo("body").addClass('abs').css({top:'0px',right:'0px'});
		client.Audio.player = $('#mp3PlayerHolder');
		client.Audio.player.flash({
			swf: player,
			width: 1,
			height: 1,
			allowScriptAccess: 'always',
			wmode: 'opaque'});
    }
};
client.Audio.onInitHadler = null;
client.Audio.onInit = function(sender)
{
	client.Audio.setVol(66);
	if (client.Audio.onInitHadler != null)
		client.Audio.player.flash(client.Audio.onInitHadler);
};
client.Audio.fullname = function(filename)
{
	return STORAGE + "albums/audio/" + filename;
};
client.Audio.run = function(handler)
{
	if (client.Audio.player == null) 
	{
		client.Audio.onInitHadler = handler;
		client.Audio.init();
	}
	else
		client.Audio.player.flash(handler);
};
client.Audio.playLocalMp3 = function(filename)
{
    client.Audio.playMp3(["temp", filename, "test", "test"]);
};
client.Audio.playMp3 = function(song, playOnStart)
{
    var id = song[0];
    var filename = song[1];
    var songauthor = song[2];
    var songname = song[3];
	var playBool = true;
	if (playOnStart === false)
		playBool = false;
    var fullname = client.Audio.fullname(filename);	
	var play = function() { 
    	if (client.Audio.currentId != id)
    	    this.pauseCurrentSound();
	    this.playNewSound(id, fullname, playBool);
	};
	client.Audio.run(play);		
	client.Audio.isPlaying = playBool;
	client.Audio.currentId = id;
	client.Audio.currentFile = filename;	
	client.Audio.currentSongName = songname;
	client.Audio.currentSongAuthor = songauthor;
	client.Audio.refreshPlayer();
	client.Audio.refreshPlaylist();
};
client.Audio.pause = function(filename)
{
	var pause = function() { this.pauseCurrentSound(); };
	client.Audio.run(pause);	
	client.Audio.isPlaying = false;	
	client.Audio.refreshPlayer();
};
client.Audio.refreshPlayer = function(filename)
{
	if (client.Audio.isPlaying)
		$('#sbUpperMenu .actionAudio .roundBtnInformer').removeClass("hide").addClass("play");
	else
		$('#sbUpperMenu .actionAudio .roundBtnInformer').addClass("hide");
    if (client.Audio.pPlayer != null) 	
	{
	    client.Audio.pSongName.html(client.Audio.currentSongName);
	    client.Audio.pSongAuthor.html(client.Audio.currentSongAuthor);
	    if (client.Audio.isPlaying)
	    {
         	client.Audio.pPause.show();
    	    client.Audio.pPlay.hide();
	    }
	    else
	    {
	    	client.Audio.pPause.hide();
    	    client.Audio.pPlay.show();
		}
	}
};
client.Audio.resume = function()
{
    if (client.Audio.currentId != "")
    {
	    var resume = function() { this.resumeCurrentSound(); };
	    client.Audio.run(resume);	
		client.Audio.isPlaying = true;	
		client.Audio.refreshPlayer();
	}
};
client.Audio.setVol = function(value)
{
	client.Audio.currentVolume = value / 100.0;
	var setVol = function() { this.setVolume(client.Audio.currentVolume); };
	client.Audio.run(setVol);		
};
client.audio.loaded = function(id)
{
    if (client.Audio.currentId == id)
    {
        var refresh = function() {
            if (client.Audio.pPlayer != null) 
                client.Audio.pTotalDuration.html(this.getTotalDuration()); 
        };    
      	client.Audio.run(refresh);	
    }
};
client.audio.loadProgress = function(id, src, percent)
{
};
client.Audio.currentDuration = 0;
client.audio.status = function(id, play, loaded, pos, posStr, total, totalStr) 
{
    client.Audio.currentDuration = total;
    if (client.Audio.pPlayer != null)
    {
	    client.Audio.pCurrentPosition.html(posStr);
	    client.Audio.pTotalDuration.html(totalStr);
	    if (total != 0)
	        if (!client.Audio.setPositionInProgress)
		        client.Audio.pMainSlider.slider("value", 100.0*pos/total);
	}
 	if (total != 0)
	    if (!client.Audio.setPositionInProgress)
		    if (client.Audio.pLocalSlider != null)
				client.Audio.pLocalSlider.slider("value", 100.0*pos/total);	
    if ( client.Audio.isPlaying != play) 
    	client.Audio.refreshPlayer();
    client.Audio.isPlaying = play;
};
client.audio.almostFinished = function()
{
};
client.audio.finished = function()
{
    client.Audio.isPlaying = false;	
	client.Audio.refreshPlayer();
    client.Audio.playNext();
};
client.audio.onID3 = function(id)
{
};
client.Audio.setPositionInProgress = false;
client.Audio.setPosition = function(value)
{
	var setPos = function() {
	    var total = client.Audio.currentDuration;
	    if (total != 0)
		    this.setPosition(total * value / 100.0);
	};
	client.Audio.run(setPos);			
};
client.Audio.refreshPlaylist = function()
{
    if (client.Audio.pPlayList != null)
    {
        var c = controllers.get("ytSidebar");
        client.Audio.playlist = [];
        var currentTrackNumber = 0;
		client.Audio.pPlayer = $('#sidebarPlayer');
        client.Audio.pPlayList.find(".playlistItem:visible").each(function(index){
            var curFile = c.getEmbeddedParam($(this), "playlistItem", "Filename");
            var songId = c.getEmbeddedParam($(this), "playlistItem", "SongId");
            var songAuthor = c.getEmbeddedParam($(this), "playlistItem", "SongAuthor");
            var songName = c.getEmbeddedParam($(this), "playlistItem", "SongName");
            client.Audio.playlist[index] = [songId, curFile, songAuthor, songName];
            if (client.Audio.currentFile == "")
            {
				client.Audio.playMp3([songId, curFile, songAuthor, songName], false);
            }
            if (curFile != client.Audio.currentFile)
                $(this).find(".albumAudioFrame").removeClass("selected").addClass("selectable");
            else
            {
                $(this).find(".albumAudioFrame").addClass("selected").removeClass("selectable");
                currentTrackNumber = index + 1;
            }
        });
        client.Audio.pTotalTracks.html(client.Audio.playlist.length);
        client.Audio.pCurrentTrack.html(currentTrackNumber);
    }
};
client.Audio.playNext = function()
{
    if (client.Audio.playlist.length > 1)
        for (var i = client.Audio.playlist.length - 2; i >= 0; i--)
            if (client.Audio.playlist[i][1] == client.Audio.currentFile)
                 client.Audio.playMp3(client.Audio.playlist[i+1]);
    client.Audio.refreshPlaylist();    
};
client.Audio.playPrev = function()
{
    if (client.Audio.playlist.length > 1)
        for (var i = 1; i < client.Audio.playlist.length; i++)
            if (client.Audio.playlist[i][1] == client.Audio.currentFile)
                client.Audio.playMp3(client.Audio.playlist[i-1]);
    client.Audio.refreshPlaylist();
};
client.Video = {};
client.Video.initAt = function(targetSelector, w, h)
{
	if ($(targetSelector).children().length == 0)
	{
		client.Video.__playerBlock = $(targetSelector);
		client.Video.__playerBlock.flash
		({
			swf: "/flash/videoPlayer.swf",
			allowScriptAccess: 'always',
			width: w ? w : 1,
			height: h ? h : 1,
			wmode: 'opaque',
			bgcolor: '#000000',
			allowfullscreen: true
		});
	}
};
client.Video.callMethod = function(method)
{
	client.Video.__playerBlock.flash(method);
}
client.Video.run = function(handler)
{
	var result = client.Video.__playerBlock == null;
	if (result) client.Video.initCallback = handler;
	else client.Video.callMethod(handler);	
	return result;
};
client.Video.play = function(playData)
{
	client.Video.playData = playData;
	var play = function() { try { this.playNewVideo(client.Video.playData); } catch (e) {} };
	return client.Video.run(play);
}
function onInit()
{
	if (client.Video.initCallback != null)
		client.Video.__playerBlock.flash(client.Video.initCallback);
}
if (!client.views) client.views = {};
client.views.View = function(container, indicator, section)
{
	this.name = null;
	this.container = container;
	this.loadingIndicator = indicator;	
	this.section = section;
	this.fields = [];
	this.defaults = [];
};
client.views.View.prototype.getParams = function()
{
	return {};
}
client.views.View.prototype.addParams = function(obj)
{
}
client.views.View.prototype.clone = function()
{
    return new client.views.View(this.container, this.loadingIndicator, this.section);
}
client.views.View.prototype.copy = function()
{
    var v = this.clone();
    if (this.fields.length > 0)
        for (var i = 0; i < this.fields.length; i++)
            v[this.fields[i]] = this[this.fields[i]];     
	return v;
}
client.views.View.prototype.setDefaults = function()
{
    if (this.fields.length > 0)
        for (var i = 0; i < this.fields.length; i++)
            this[this.fields[i]] = this.defaults[i];     
}
client.views.ViewPaged = function(container, indicator, section)
{
    client.views.ViewPaged.baseConstructor.call(this, container, indicator, section);
	this.fields = ["page", "itemsPerPage"];
	this.defaults = [0,10];
	this.setDefaults();
};
client.extendClass(client.views.ViewPaged, client.views.View);
client.views.ViewPaged.prototype.getParams = function()
{
    var obj = {};
    obj["section"] = this.section;
        obj.pagingPage = this.page;
        obj.pagingCount = this.itemsPerPage;
	this.addParams(obj);
	return obj;
}
client.views.ViewPaged.prototype.clone = function()
{
    return new client.views.ViewPaged(this.container, this.loadingIndicator, this.section);
}
client.views.ViewById = function(container, indicator, section)
{
    client.views.ViewById.baseConstructor.call(this, container, indicator, section);
	this.fields = ["id", "prefix"];
	this.defaults = [0,""];
	this.setDefaults();
};
client.extendClass(client.views.ViewById, client.views.View);
client.views.ViewById.prototype.getParams = function()
{
    var obj = {};
    obj["section"] = this.section;
        obj[this.prefix + "Id"] = this.id;   
	this.addParams(obj);
	return obj;
}
client.views.ViewById.prototype.clone = function()
{
    return new client.views.ViewById(this.container, this.loadingIndicator, this.section);
}
client.views.ViewByLike = function(container, indicator, section)
{
    client.views.ViewByLike.baseConstructor.call(this, container, indicator, section);
	this.fields = ["like"];
	this.defaults = [""];
	this.setDefaults();
};
client.extendClass(client.views.ViewByLike, client.views.View);
client.views.ViewByLike.prototype.getParams = function()
{
    var obj = {};
    obj["section"] = this.section;
        obj["like"] = this.like;   
	this.addParams(obj);
	return obj;
}
client.views.ViewByLike.prototype.clone = function()
{
    return new client.views.ViewByLike(this.container, this.loadingIndicator, this.section);
}
client.views.ViewByIdAndType = function(container, indicator, section)
{
    client.views.ViewByIdAndType.baseConstructor.call(this, container, indicator, section);
	this.fields = ["id", "type", "prefix"];
	this.defaults = [0,0,""];
	this.setDefaults();
};
client.extendClass(client.views.ViewByIdAndType, client.views.View);
client.views.ViewByIdAndType.prototype.getParams = function()
{
    var obj = {};
    obj["section"] = this.section;
        obj[this.prefix + "Id"] = this.id;   
        obj[this.prefix + "Type"] = this.type;   
	this.addParams(obj);
	return obj;
}
client.views.ViewByIdAndType.prototype.clone = function()
{
    return new client.views.ViewByIdAndType(this.container, this.loadingIndicator, this.section);
}
client.views.ViewByIdAndEditMode = function(container, indicator, section)
{
    client.views.ViewByIdAndEditMode.baseConstructor.call(this, container, indicator, section);
	this.fields = ["id", "editMode", "prefix"];
	this.defaults = [0,0,""];
	this.setDefaults();
};
client.extendClass(client.views.ViewByIdAndEditMode, client.views.View);
client.views.ViewByIdAndEditMode.prototype.getParams = function()
{
    var obj = {};
    obj["section"] = this.section;
        obj[this.prefix + "Id"] = this.id;   
        obj[this.prefix + "EditMode"] = this.editMode;   
	this.addParams(obj);
	return obj;
}
client.views.ViewByIdAndEditMode.prototype.clone = function()
{
    return new client.views.ViewByIdAndEditMode(this.container, this.loadingIndicator, this.section);
}
client.views.ViewByIdAndQuality = function(container, indicator, section)
{
    client.views.ViewByIdAndQuality.baseConstructor.call(this, container, indicator, section);
	this.fields = ["id", "quality", "prefix"];
	this.defaults = [0,0,""];
	this.setDefaults();
};
client.extendClass(client.views.ViewByIdAndQuality, client.views.View);
client.views.ViewByIdAndQuality.prototype.getParams = function()
{
    var obj = {};
    obj["section"] = this.section;
        obj[this.prefix + "Id"] = this.id;   
        obj[this.prefix + "Quality"] = this.quality;   
	this.addParams(obj);
	return obj;
}
client.views.ViewByIdAndQuality.prototype.clone = function()
{
    return new client.views.ViewByIdAndQuality(this.container, this.loadingIndicator, this.section);
}
client.views.ViewPagedById = function(container, indicator, section)
{
    client.views.ViewPagedById.baseConstructor.call(this, container, indicator, section);
	this.fields = ["page", "itemsPerPage", "id", "blockparam", "prefix"];
	this.defaults = [0,10,0,0,""];
	this.setDefaults();
};
client.extendClass(client.views.ViewPagedById, client.views.View);
client.views.ViewPagedById.prototype.getParams = function()
{
    var obj = {};
    obj["section"] = this.section;
        obj[this.prefix + "Id"] = this.id;   
        obj.pagingPage = this.page;
        obj.pagingCount = this.itemsPerPage;
        obj.blockparam = this.blockparam;
	this.addParams(obj);
	return obj;
}
client.views.ViewPagedById.prototype.clone = function()
{
    return new client.views.ViewPagedById(this.container, this.loadingIndicator, this.section);
}
client.views.ViewPagedByLike = function(container, indicator, section)
{
    client.views.ViewPagedByLike.baseConstructor.call(this, container, indicator, section);
	this.fields = ["page", "itemsPerPage","like", "prefix"];
	this.defaults = [0,10,"",""];
	this.setDefaults();
};
client.extendClass(client.views.ViewPagedByLike, client.views.View);
client.views.ViewPagedByLike.prototype.getParams = function()
{
    var obj = {};
    obj["section"] = this.section;
        obj[this.prefix + "like"] = this.like;   
        obj.pagingPage = this.page;
        obj.pagingCount = this.itemsPerPage;
	this.addParams(obj);
	return obj;
}
client.views.ViewPagedByLike.prototype.clone = function()
{
    return new client.views.ViewPagedByLike(this.container, this.loadingIndicator, this.section);
}
client.views.ViewPagedByIdAndType = function(container, indicator, section)
{
    client.views.ViewPagedByIdAndType.baseConstructor.call(this, container, indicator, section);
	this.fields = ["page", "itemsPerPage","id", "prefix","type"];
	this.defaults = [0,10,0,"",1];
	this.setDefaults();
};
client.extendClass(client.views.ViewPagedByIdAndType, client.views.View);
client.views.ViewPagedByIdAndType.prototype.getParams = function()
{
    var obj = {};
    obj["section"] = this.section;
        obj[this.prefix + "Id"] = this.id;   
        obj[this.prefix + "Type"] = this.type;   
        obj.pagingPage = this.page;
        obj.pagingCount = this.itemsPerPage;
	this.addParams(obj);
	return obj;
}
client.views.ViewPagedByIdAndType.prototype.clone = function()
{
    return new client.views.ViewPagedByIdAndType(this.container, this.loadingIndicator, this.section);
}
client.views.ViewPagedByIdAndLike = function(container, indicator, section)
{
    client.views.ViewPagedByIdAndLike.baseConstructor.call(this, container, indicator, section);
	this.fields = ["page", "itemsPerPage","id", "prefix","like"];
	this.defaults = [0,10,0,"",""];
	this.setDefaults();
};
client.extendClass(client.views.ViewPagedByIdAndLike, client.views.View);
client.views.ViewPagedByIdAndLike.prototype.getParams = function()
{
    var obj = {};
    obj["section"] = this.section;
        obj[this.prefix + "Id"] = this.id;   
        obj[this.prefix + "Like"] = this.like;   
        obj.pagingPage = this.page;
        obj.pagingCount = this.itemsPerPage;
	this.addParams(obj);
	return obj;
}
client.views.ViewPagedByIdAndLike.prototype.clone = function()
{
    return new client.views.ViewPagedByIdAndLike(this.container, this.loadingIndicator, this.section);
}
client.views.ViewPagedByIdAndLikeAndViewMode = function(container, indicator, section)
{
    client.views.ViewPagedByIdAndLikeAndViewMode.baseConstructor.call(this, container, indicator, section);
	this.fields = ["page", "itemsPerPage","id", "prefix","like","viewmode"];
	this.defaults = [0,10,0,"","",0];
	this.setDefaults();
};
client.extendClass(client.views.ViewPagedByIdAndLikeAndViewMode, client.views.View);
client.views.ViewPagedByIdAndLikeAndViewMode.prototype.getParams = function()
{
    var obj = {};
    obj["section"] = this.section;
        obj[this.prefix + "Id"] = this.id;   
        obj[this.prefix + "Like"] = this.like;   
        obj[this.prefix + "Viewmode"] = this.viewmode;   
        obj.pagingPage = this.page;
        obj.pagingCount = this.itemsPerPage;
	this.addParams(obj);
	return obj;
}
client.views.ViewPagedByIdAndLikeAndViewMode.prototype.clone = function()
{
    return new client.views.ViewPagedByIdAndLikeAndViewMode(this.container, this.loadingIndicator, this.section);
}
client.views.ViewByIdAndTypeAndViewMode = function(container, indicator, section)
{
    client.views.ViewByIdAndTypeAndViewMode.baseConstructor.call(this, container, indicator, section);
	this.fields = ["id", "type", "viewMode", "prefix"];
	this.defaults = [0,0,0,""];
	this.setDefaults();
};
client.extendClass(client.views.ViewByIdAndTypeAndViewMode, client.views.View);
client.views.ViewByIdAndTypeAndViewMode.prototype.getParams = function()
{
    var obj = {};
    obj["section"] = this.section;
        obj[this.prefix + "Id"] = this.id;   
        obj[this.prefix + "Type"] = this.type;   
        obj[this.prefix + "ViewMode"] = this.viewMode;   
	this.addParams(obj);
	return obj;
}
client.views.ViewByIdAndTypeAndViewMode.prototype.clone = function()
{
    return new client.views.ViewByIdAndTypeAndViewMode(this.container, this.loadingIndicator, this.section);
}
client.views.ViewPagedByFilter = function(container, indicator, section)
{
    client.views.ViewPagedByFilter.baseConstructor.call(this, container, indicator, section);
	this.fields = ["page", "itemsPerPage","id", "prefix","like","param1","param2","param3","param4"];
	this.defaults = [0,10,0,"","","","","",""];
	this.setDefaults();
};
client.extendClass(client.views.ViewPagedByFilter, client.views.View);
client.views.ViewPagedByFilter.prototype.getParams = function()
{
    var obj = {};
    obj["section"] = this.section;
        obj[this.prefix + "Id"] = this.id;   
        obj[this.prefix + "Like"] = this.like;   
        obj[this.prefix + "Param1"] = this.param1;   
        obj[this.prefix + "Param2"] = this.param2;   
        obj[this.prefix + "Param3"] = this.param3;   
        obj[this.prefix + "Param4"] = this.param4;   
        obj.pagingPage = this.page;
        obj.pagingCount = this.itemsPerPage;
	this.addParams(obj);
	return obj;
}
client.views.ViewPagedByFilter.prototype.clone = function()
{
    return new client.views.ViewPagedByFilter(this.container, this.loadingIndicator, this.section);
}
if (!client.blocks) client.blocks = {};
client.blocks.Block = function(view)
{
	this.name = null;
	this.view = view;
	this.prep = new client.Preparator();  
};
client.blocks.Block.prototype.init = function()
{
	return false;
}
client.blocks.Block.prototype.refresh = function()
{
	return false;
}
client.blocks.Block.prototype.prepare = function()
{
}
client.blocks.Block.prototype.freeMemory = function()
{
    delete this.view;
}
client.blocks.BlockAjax = function(view, controller, name)
{
    client.blocks.BlockAjax.baseConstructor.call(this, view);
    this.name = name;    
    this.controllerName = controller.name;
    this.section = controller.section;
	this.refreshUrl = "/";
	this.syncUrl = "/";
	this.isCurrent = false;
	this.syncInterval = 1000 * 60; 
	this.showContainer = true;
};
client.extendClass(client.blocks.BlockAjax, client.blocks.Block);
client.blocks.BlockAjax.prototype.refresh = function()
{
    var container = this.view.container;
    var indicator = this.view.loadingIndicator;
    var b = this;
    $.ajax({
	    type: "POST", url: this.refreshUrl,
	    data: this.view.getParams(),
	    beforeSend: function(){  
	                             $("#" + indicator).show(); }, 
	    complete: function(){ $("#" + indicator).fadeOut(200); }, 
	    success: function(html){ $("#" + container).html(html); 
                                 if (b.showContainer) $("#" + container).show();
                        	     b.prepare(); }
	});
	return false;
}
client.blocks.BlockAjax.prototype.getPermalink = function()
{
    return "/";
}
client.blocks.BlockAjax.prototype.getSelector = function(className)
{
    return "#" + this.view.container + " ." + className;
}
client.blocks.BlockAjax.prototype.getContainer = function()
{
    return $("#" + this.view.container);
}
client.blocks.BlockAjax.prototype.open = function(scrollToTop)
{
    pages.open(this, scrollToTop);
    yaCounter5028907.hit("http://yatalant.ru"+pages.currentPageLink);
    _gaq.push(['_link', "http://yatalant.ru"+pages.currentPageLink]);
}
client.blocks.BlockAjax.prototype.show = function(scrollToTop)
{
    pages.show(this, scrollToTop);
}
client.blocks.BlockAjax.prototype.hide = function()
{
    var container = this.view.container;
    $("#" + container).hide();
}
client.blocks.BlockAjax.prototype.sync = function()
{
    var b = this;
    var container = this.view.container;
    $.ajax({
	    type: "POST", url: this.refreshUrl + "/sync" ,
	    data: this.syncInput(),
	    beforeSend: function(){}, 
	    complete: function(){}, 
	    success: function(html){$("#" + container + " .syncResult").html(html);}
	});
}
client.blocks.BlockAjax.prototype.syncInput = function()
{
    return {};
}
client.blocks.BlockAjax.prototype.syncTimerStart = function()
{
    this.isCurrent = true;
    var c = this;
    setTimeout(function(){c.syncTimer(c.name)}, this.syncInterval);
}
client.blocks.BlockAjax.prototype.syncTimerStop = function()
{
    this.isCurrent = false;
}
client.blocks.BlockAjax.prototype.syncTimer = function(name)
{
    var c = pages.get(name);
    if (c.isCurrent)
    {
        c.sync();
        setTimeout(function(){c.syncTimer(c.name)}, c.syncInterval);
    }
}
client.blocks.BlockAjax.prototype.prepareSyncResult = function(result)
{
}
client.blocks.BlockPost = function(view, controller, name)
{
    client.blocks.BlockPost.baseConstructor.call(this, view, controller, name);
    this.refreshUrl = "/" + this.section + "/get";
};
client.extendClass(client.blocks.BlockPost, client.blocks.BlockAjax);
client.blocks.BlockPost.prototype.prepare = function()
{
    var prefix = "#" + this.view.container + " .full_post" + this.view.id;
    var c = this.controllerName;
    this.prep.setLink(prefix + "_back", function(){controllers.get(c).viewList()});
    controllers.get(c).viewPostComments(this.view.id);
}
client.blocks.BlockPost.prototype.viewPost = function(id)
{
    this.view.prefix = "post";
    this.view.id = id;
    this.open();
}
client.blocks.BlockPost.prototype.getPermalink = function()
{
    return "/" + this.section + "/" + this.view.id + ".html";
}
client.blocks.BlockPosts = function(view, controller, name)
{
    client.blocks.BlockPosts.baseConstructor.call(this, view, controller, name);
	this.refreshUrl = "/" + this.section + "s/list/";
	this.items = [];
	this.pages = [];
};
client.extendClass(client.blocks.BlockPosts, client.blocks.BlockAjax);
client.blocks.BlockPosts.prototype.prepareItem = function(id)
{
    var c = this.controllerName;
         var prefix = "#" + this.view.container + " .post" + id;
         this.prep.setLink(prefix + "_title", function(){controllers.get(c).viewPost(id)});
}
client.blocks.BlockPosts.prototype.preparePage = function(page)
{
    var c = this.controllerName;
    var prefix = "#" + this.view.container + " ." + this.name + "_paging_" + page;    
	this.prep.setLink(prefix, function(){controllers.get(c).viewPage(page)});
	$(prefix).hover(function(){$(this).stop().animate({backgroundColor: "black"}, 500);},
	                function(){$(this).stop().animate({backgroundColor: "white"}, 500);});
}
client.blocks.BlockPosts.prototype.prepare = function()
{      
    this.prep.prepareArray(this, this.items, this.prepareItem);
    this.prep.prepareArray(this, this.pages, this.preparePage);   
}
client.blocks.BlockPosts.prototype.viewPage = function(page)
{
    this.view.page = page;
    this.open();
}
client.blocks.BlockPosts.prototype.getPermalink = function()
{
    return "/" + this.section + "s/" + this.view.page + ".html";
}
client.blocks.BlockPostComments = function(view, controller, name)
{
    client.blocks.BlockPostComments.baseConstructor.call(this, view, controller, name);
	this.refreshUrl = "/" + this.section + "comments/list/";
	this.items = [];
	this.pages = [];
};
client.extendClass(client.blocks.BlockPostComments, client.blocks.BlockAjax);
client.blocks.BlockPostComments.prototype.prepareItem = function(id)
{
    var c = this.controllerName;
}
client.blocks.BlockPostComments.prototype.preparePage = function(page)
{
    var c = this.controllerName;
    var prefix = "#" + this.view.container + " ." + this.name + "_paging_" + page;    
	this.prep.setLink(prefix, function(){controllers.get(c).viewCommentPage(page)});
	$(prefix).hover(function(){$(this).stop().animate({backgroundColor: "black"}, 500);},
	                function(){$(this).stop().animate({backgroundColor: "white"}, 500);});
}
client.blocks.BlockPostComments.prototype.prepare = function()
{      
    this.prep.prepareArray(this, this.items, this.prepareItem);
    this.prep.prepareArray(this, this.pages, this.preparePage);   
         pages.get('postCommentForm').show();
}
client.blocks.BlockPostComments.prototype.viewPage = function(page)
{
    this.view.page = page;
    this.show();
}
client.blocks.BlockPostComments.prototype.getPermalink = function()
{
    return "/" + this.section + "s/" + this.view.page + ".html";
}
client.blocks.Form = function(view, controller, name)
{
    client.blocks.Form.baseConstructor.call(this, view, controller, name);
    this.refreshUrl = "/forms/" + this.section + "/";
    this.fields = new client.blocks.FormFieldHolder();
    this.setFieldsOnPrepare = true;
    this.data = {};
};
client.extendClass(client.blocks.Form, client.blocks.BlockAjax);
client.blocks.Form.prototype.prepare = function()
{
    if (this.setFieldsOnPrepare)
        this.setFields();
    else
        this.getFields();
    this.prepareFields();
}
client.blocks.Form.prototype.setFields = function()
{
    for (var i = 0; i < this.fields.list.length; i++)
        this.fields.list[i].set();
}
client.blocks.Form.prototype.getFields = function()
{
    for (var i = 0; i < this.fields.list.length; i++)
        this.fields.list[i].get();
}
client.blocks.Form.prototype.prepareFields = function()
{
    for (var i = 0; i < this.fields.list.length; i++)
        this.fields.list[i].prepare();
}
client.blocks.Form.prototype.getPermalink = function()
{
    return "/" + this.section + "/" + this.view.id + ".html";
}
client.blocks.Form.prototype.getData = function()
{
    var validated = true;
    for (var i = 0; i < this.fields.list.length; i++)
    {
        validated = this.fields.list[i].validate() & validated;
    }
    if (!validated) return null;
    var obj = {};
    for (var i = 0; i < this.fields.list.length; i++)
         this.data[this.fields.list[i].name] =  this.fields.list[i].get();
    return this.data;
}
client.blocks.Form.prototype.addField = function(name, defaultValue, valueType, inputName)
{
    var f = new client.blocks.FormField();
    f.name = name;
    f.value = defaultValue;
    f.defaultValue = defaultValue;
    f.valueType = valueType;
    f.inputName = inputName;
    f.formName = this.name;
    f.selector = "#" + this.view.container + " ." + inputName;
    this.fields.add(f);
}
client.blocks.Form.prototype.getField = function(name)
{
    for (var i = 0; i < this.fields.list.length; i++)
        if (this.fields.list[i].name == name)
            return this.fields.list[i];
}
client.blocks.Form.prototype.prepareTooltips = function(style, container)
{
    for (var i = 0; i < this.fields.list.length; i++)
        this.prep.setTooltip(this.getSelector(this.fields.list[i].inputName), container, style);
}
client.blocks.FormField = function()
{
};
client.blocks.FormField.prototype.set = function()
{
    var found = false;
    if (this.valueType.indexOf(" info") > 1)
    {
        $(this.selector).html(this.value);
        found = true;
    }
    if (!found)
    {
        $(this.selector).attr("value", this.value);
        $(this.selector).focus(function()
        {
            if (this.value == 'password') this.value = '';
            if (this.value == 'login@e-mail') this.value = '';
        });
    }
}
client.blocks.FormField.prototype.get = function()
{
    if (!(this.valueType.indexOf(" info") > 1))
        this.value = $(this.selector).attr("value");
    return this.value;
}
client.blocks.FormField.prototype.prepare = function()
{
    var field = this;
    $(this.selector).change(function() {field.get()});
    $('<div class="' + this.inputName + 'Error hide errorBox"><div><p class="' + this.inputName +
      'ErrorText validationError"></p></div></div>').insertAfter(this.selector);
}
client.blocks.FormField.prototype.validate = function()
{
    this.get();
    if (this.valueType.indexOf(" notEmpty") > 1)
        if (this.value == "")
        {           
            this.showError("Поле не может быть пустым.");
            return false;
        }
    if (this.valueType.indexOf(" email") > 1)
    {   
        var emailreg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
        if(emailreg.test(this.value) == false) 
        {
            this.showError("Неправильный формат адреса.");
            return false;        
        }
    }
    if (this.valueType.indexOf(" number") > 1)
        if (this.valueIsNumeric(this.value) == false)
        {
            this.showError("Неверный формат числа.");
            return false;
        }
    this.hideError();
    return true;
}
client.blocks.FormField.prototype.showError = function(message)
{
    $(this.selector + "ErrorText").html(message);
    $(this.selector).css("margin-bottom", "0px"); 
    $(this.selector + "Error").show("fast");
}
client.blocks.FormField.prototype.hideError = function(message)
{
    $(this.selector + "Error").hide();
    $(this.selector).css("margin-bottom", "5px"); 
}
client.blocks.FormField.prototype.valueIsNumeric = function(value)
{
   var ValidChars = "0123456789";
   var IsNumber=true;
   var Char;
   for (i = 0; i < value.length && IsNumber == true; i++) 
   { 
       Char = value.charAt(i); 
       if (ValidChars.indexOf(Char) == -1) 
       {
           IsNumber = false;
       }
   }
   return IsNumber;
}
client.blocks.FormFieldHolder = function()
{
	this.lastFieldId = 0;
	this.list = [];	
};
client.blocks.FormFieldHolder.prototype.add = function(field)
{
	this.list[this.lastFieldId++] = field;
}
client.blocks.FormFieldHolder.prototype.get = function(id)
{
    return this.list[id];
}
client.blocks.FormUserLogin = function(view, controller, name)
{
    client.blocks.FormUserLogin.baseConstructor.call(this, view, controller, name);
    this.refreshUrl = "/forms/" + this.section + "/login";
        this.addField('loginName', '', 'text', 'loginName');
        this.addField('loginPassword', '', 'text', 'loginPassword');
};
client.extendClass(client.blocks.FormUserLogin, client.blocks.Form);
client.blocks.FormUserLogin.prototype.prepare = function()
{
    var c = this.controllerName;   
    if (this.setFieldsOnPrepare)
        this.setFields();
    else
        this.getFields();
	    controllers.get("ytProfile").isLogged = false;
        this.prep.setRoundBtnAction(this.getSelector("actionLogin"), function(){controllers.get(c).login()});
        this.prep.setRoundBtnAction(this.getSelector("actionShowRegisterForm"), function(){controllers.get(c).showRegisterForm()});
        this.prep.setKeyEnter(this, this.getSelector("loginPassword"), function(){controllers.get(c).login()});
        client.Switcher.resizeYtSideBar();
        client.Switcher.changeColorClass("#rplogin", "rose", "dark");
        $(".maximizeSidebar").click(function(){controllers.get("ytSidebar").minimizeSidebar(true);});      
        $("#login .minimizeSidebar").click(function(){controllers.get("ytSidebar").minimizeSidebar(false);});
		controllers.get('ytSidebar').stopSync();
    this.prepareFields();
}
client.blocks.FormUserLogin.prototype.getPermalink = function()
{
    return "/forms/" + this.section + "/login";
}
client.blocks.FormUserRestore = function(view, controller, name)
{
    client.blocks.FormUserRestore.baseConstructor.call(this, view, controller, name);
    this.refreshUrl = "/forms/" + this.section + "/restorepassword";
        this.addField('restoreEmail', '', 'text notEmpty email', 'restoreEmail');
        this.addField('restoreCode', '', 'text notEmpty number', 'restoreCode');
};
client.extendClass(client.blocks.FormUserRestore, client.blocks.Form);
client.blocks.FormUserRestore.prototype.prepare = function()
{
    var c = this.controllerName;   
    if (this.setFieldsOnPrepare)
        this.setFields();
    else
        this.getFields();
        this.prep.setRoundBtnAction(this.getSelector("actionRestore"), function(){controllers.get(c).restorepassword()});
        this.prep.setAction(this.getSelector("actionRefresh"), function(){controllers.get(c).showRestorePasswordForm()});
        this.prepareTooltips("right" , "rpmain");        
    this.prepareFields();
}
client.blocks.FormUserRestore.prototype.getPermalink = function()
{
    return "/forms/" + this.section + "/restorepassword";
}
client.blocks.FormUserRegister = function(view, controller, name)
{
    client.blocks.FormUserRegister.baseConstructor.call(this, view, controller, name);
    this.refreshUrl = "/forms/" + this.section + "/register";
        this.addField('registerName', '', 'text notEmpty', 'registerName');
        this.addField('registerSurname', '', 'text notEmpty', 'registerSurname');
        this.addField('registerEmail', '', 'text notEmpty email', 'registerEmail');
        this.addField('registerPassword', '', 'text notEmpty', 'registerPassword');
        this.addField('registerCode', '', 'text notEmpty number', 'registerCode');
};
client.extendClass(client.blocks.FormUserRegister, client.blocks.Form);
client.blocks.FormUserRegister.prototype.prepare = function()
{
    var c = this.controllerName;   
    if (this.setFieldsOnPrepare)
        this.setFields();
    else
        this.getFields();
        this.prep.setRoundBtnAction(this.getSelector("actionRegister"), function(){controllers.get(c).register()});
        this.prep.setLink(this.getSelector("actionRefresh"), function(){controllers.get(c).showRegisterForm()});
        this.prep.setLink(this.getSelector("actionShowAgreement"), function(){controllers.get(c).showAgreement()});
        this.prepareTooltips("right", "rpmain");
    this.prepareFields();
}
client.blocks.FormUserRegister.prototype.getPermalink = function()
{
    return "/forms/" + this.section + "/register";
}
client.blocks.FormUserRegister2 = function(view, controller, name)
{
    client.blocks.FormUserRegister2.baseConstructor.call(this, view, controller, name);
    this.refreshUrl = "/forms/" + this.section + "/regconfirm";
        this.addField('registerEmail', '', 'text info', 'registerEmail');
};
client.extendClass(client.blocks.FormUserRegister2, client.blocks.Form);
client.blocks.FormUserRegister2.prototype.prepare = function()
{
    var c = this.controllerName;   
    if (this.setFieldsOnPrepare)
        this.setFields();
    else
        this.getFields();
        this.prep.setRoundBtnAction(this.getSelector("actionResendRegLetter"), function(){controllers.get(c).resendactivation()});
    this.prepareFields();
}
client.blocks.FormUserRegister2.prototype.getPermalink = function()
{
    return "/forms/" + this.section + "/regconfirm";
}
client.blocks.FormUserLogout = function(view, controller, name)
{
    client.blocks.FormUserLogout.baseConstructor.call(this, view, controller, name);
    this.refreshUrl = "/forms/" + this.section + "/logout";
};
client.extendClass(client.blocks.FormUserLogout, client.blocks.Form);
client.blocks.FormUserLogout.prototype.prepare = function()
{
    var c = this.controllerName;   
    if (this.setFieldsOnPrepare)
        this.setFields();
    else
        this.getFields();
	    controllers.get("ytProfile").isLogged = true;
        this.prep.setRoundBtnAction(this.getSelector("actionProfile"), function(){controllers.get("ytProfile").viewMyProfile()});
        this.prep.setRoundBtnAction(this.getSelector("actionAudio"), function(){controllers.get('ytSidebar').showPlayer()});
        this.prep.setRoundBtnAction(this.getSelector("actionFriends"), function(){controllers.get('ytSidebar').showFriendsList()});
        this.prep.setRoundBtnAction(this.getSelector("actionGroups"), function(){controllers.get('ytSidebar').showGroups()});
        this.prep.setRoundBtnAction(this.getSelector("actionContests"), function(){controllers.get('ytSidebar').showContests()});
        this.prep.setRoundBtnAction(this.getSelector("actionFavorites"), function(){controllers.get('ytSidebar').showFavorites()});
        this.prep.setRoundBtnAction(this.getSelector("actionNews"), function(){controllers.get('ytSidebar').showNews()});
        this.prep.setRoundBtnAction(this.getSelector("actionMessages"), function(){controllers.get('ytSidebar').showMessagesArchive()});
        this.prep.setRoundBtnAction(this.getSelector("actionLogout"), function(){controllers.get(c).logout()});
    	this.prep.setHint(this.getSelector("actionProfile"), this.getSelector("hintOpenProfile"), true);
    	this.prep.setHint(this.getSelector("minimizeSidebar"), this.getSelector("hintMinimize"));
		this.prep.setHint(this.getSelector("actionAudio"), this.getSelector("hintAudio"), true);
		this.prep.setHint(this.getSelector("actionFriends"), this.getSelector("hintFriends"), true);
		this.prep.setHint(this.getSelector("actionContests"), this.getSelector("hintContests"), true);
		this.prep.setHint(this.getSelector("actionFavorites"), this.getSelector("hintFavorites"), true);
		this.prep.setHint(this.getSelector("actionNews"), this.getSelector("hintNews"), true);
		this.prep.setHint(this.getSelector("actionMessages"), this.getSelector("hintMessages"), true);
		this.prep.setHint(this.getSelector("actionLogout"), this.getSelector("hintExit"), true);
        client.Switcher.changeColorClass("#rplogin", "dark", "rose");
        client.Switcher.resizeYtSideBar();
        $("#usersLogoutForm .minimizeSidebar").click(function(){controllers.get("ytSidebar").minimizeSidebar(false);});
        $(".maximizeSidebar").click(function(){controllers.get("ytSidebar").minimizeSidebar(true);});
		controllers.get('ytSidebar').startSync();		
    this.prepareFields();
}
client.blocks.FormUserLogout.prototype.getPermalink = function()
{
    return "/forms/" + this.section + "/logout";
}
client.blocks.FormPostComment = function(view, controller, name)
{
    client.blocks.FormPostComment.baseConstructor.call(this, view, controller, name);
    this.refreshUrl = "/forms/" + this.section + "/postComment";
        this.addField('postCommentText', '', 'text', 'postCommentText');
};
client.extendClass(client.blocks.FormPostComment, client.blocks.Form);
client.blocks.FormPostComment.prototype.prepare = function()
{
    var c = this.controllerName;   
    if (this.setFieldsOnPrepare)
        this.setFields();
    else
        this.getFields();
        this.prep.setAction(this.getSelector("actionPostComment"), function(){controllers.get(c).postComment()});
    this.prepareFields();
}
client.blocks.FormPostComment.prototype.getPermalink = function()
{
    return "/forms/" + this.section + "/postComment";
}
client.Command = function(name, applyUrl, waitUrl, updateUrl)
{
    this.name = name;
	this.applyUrl = applyUrl;
	this.waitUrl = waitUrl;
	this.updateUrl = updateUrl;
};
client.Command.prototype.execute = function(caller, data, indicatorDiv, resultDiv)
{
    if (data == null) return false;
    if (!tasks.checkDuplicates(this)) return false;
    data.taskId = tasks.add(this, caller, indicatorDiv, resultDiv);
    var result = resultDiv;
    var indicator = indicatorDiv;
    if (indicator.charAt(0) != '#')
        if (indicator.charAt(0) != '.')
            indicator = "#" + indicator;
    if (result.charAt(0) != '#')
        if (result.charAt(0) != '.')
            result = "#" + result;
    $.ajax({
	    type: "POST", url: this.applyUrl,
	    data: data,
	    beforeSend: function(){ $(indicator).show(); }, 
	    complete: function(){}, 
	    success: function(html){ $(result).html(html); }
	});    
	return true;
}
client.Command.prototype.wait = function(task, waitFor)
{
    var url = this.waitUrl; 
    if (waitFor == "update") url = this.updateUrl;
    if (url != "")
    {
        $.ajax({
	        type: "POST", url: url,
	        data: {sTId: task.stId, sLTId: task.sltId, taskId: task.id},
	        beforeSend: function(){}, 
	        complete: function(){}, 
	        success: function(html){ task.status = 1; $("#" + task.resultDiv).html(html); }
	    });
	}
}
client.Command.prototype.ok = function(task, result)
{
    $("#" + task.indicatorDiv).fadeOut(200);
    if (task.caller[this.name + "Ok"])
        task.caller[this.name + "Ok"].call(task.caller, result); 
    if (this.updateUrl != "")
        this.wait(task, "update");
}
client.Command.prototype.fail = function(task, error)
{
    $("#" + task.indicatorDiv).fadeOut(200);
    if (task.caller[this.name + "Fail"])
        task.caller[this.name + "Fail"].call(task.caller, error); 
}
client.Command.prototype.update = function(task, data)
{
    if (task.caller[this.name + "Update"])
        task.caller[this.name + "Update"].call(task.caller, data); 
}
client.Task = function(id, command, caller, indicatorDiv, resultDiv)
{
    this.id = id;                           
	this.cmdName = command.name;            
	this.caller = caller;                   
	this.resultDiv = resultDiv;             
    this.indicatorDiv = indicatorDiv;       
	this.waitTimer = 0;                     
	this.status = 0;                        
	this.stId = 0;                          
	this.sltId = 0;                         
	this.result = null;                     
	this.error = null;                      
	this.updateData = null;                 
	this.creationTime = new Date();         
};
client.CommandHolder = function()
{
	this.commands = [];	
};
client.CommandHolder.prototype.add = function(command)
{
	this.commands[command.name] = command;
}
client.CommandHolder.prototype.get = function(commandName)
{
    return this.commands[commandName];
}
client.TaskQueue = function()
{
	this.lastTaskId = 0;
	this.queue = [];	
};
client.TaskQueue.prototype.checkDuplicates = function(command)
{
    var ok = true;
    if (this.queue.length > 0)
    {
        var min = this.queue.length - 5;
        if (min < 0) min = 0;
        for (var i = min; i < this.queue.length; i++)
            if (this.queue[i].cmdName == command.name)
            {
                var now = new Date();
                var timeDiff = Math.ceil(now.getTime()-this.queue[i].creationTime.getTime()); 
                if (timeDiff < 500) ok = false;
                if (this.queue[i].status < 3) 
                    if (timeDiff < 1000) 
                        ok = false;                
            }
    }
    return ok;
}
client.TaskQueue.prototype.add = function(command, caller, indicatorDiv, resultDiv)
{   
    var id = this.lastTaskId++;     
    this.queue[id] = new client.Task(id, command, caller, indicatorDiv, resultDiv);
	return id;
}
client.TaskQueue.prototype.get = function(id)
{
    return this.queue[id];
}
client.TaskQueue.prototype.wait = function(id, stId, sltId, pause, waitFor)
{
    var t = this.queue[id];
    var w = waitFor;
    t.stId = stId;
    t.sltId = sltId;
    t.waitTimer++;
    t.status = 2;
    setTimeout(function(){commands.get(t.cmdName).wait(t, w)}, pause);
}
client.TaskQueue.prototype.check = function(id)
{
    var t = this.queue[id];  
    commands.get(task.cmdName).wait(t);
}
client.TaskQueue.prototype.ok = function(id, result)
{
    var t = this.queue[id];
    t.result = result;
    t.status = 3;
    commands.get(t.cmdName).ok(t, result);
}
client.TaskQueue.prototype.fail = function(id, error)
{
    var t = this.queue[id];
    t.error = error;
    t.status = 4;
    commands.get(t.cmdName).fail(t, error);
}
client.TaskQueue.prototype.update = function(id, data)
{
    var task = this.queue[id];
    task.updateData = data;
    commands.get(task.cmdName).update(task, data);
}
if (!client.controllers) client.controllers = {};
client.controllers.Controller = function(name, section)
{
	this.name = name;
	this.section = section;
};
client.controllers.Controller.prototype.addForm = function(prefix, container, indicator, formclass, setFields)
{
    this.addFormWithView(prefix, container, indicator, formclass, client.views.View, setFields);
}
client.controllers.Controller.prototype.addFormWithView = function(prefix, container, indicator, formclass, formview, setFields)
{
    var name = prefix.substr(0, 1).toUpperCase() + prefix.substr(1);
    this[prefix + 'FormName'] = this.section + name + "Form";
    this[prefix + 'FormView'] = new formview(container, indicator, this.section + name);
    this[prefix + 'FormBlock'] = new formclass(this[prefix + 'FormView'], this, this[prefix + 'FormName']);
    pages.add(this[prefix + 'FormBlock']);
    if (setFields === false)
    {
        this[prefix + 'FormBlock'].setFieldsOnPrepare = false;
    }
}
client.controllers.Controller.prototype.addStaticBlock = function(name, container, indicator, blockclass)
{
	this.addStaticBlockWithView(name, container, indicator, blockclass, client.views.View);
}
client.controllers.Controller.prototype.addStaticBlockWithView = function(name, container, indicator, blockclass, blockview)
{
    this[name + 'BlockName'] = this.section + "." + name;
    this[name + 'BlockView'] = new blockview(container, indicator, this.section + "." + name);
    this[name + 'Block'] = new blockclass(this[name + 'BlockView'], this, this[name + 'BlockName']);
    pages.add(this[name + 'Block']);
}
client.controllers.Controller.prototype.getAncestor = function(sender, holder)
{
    var depth = 10;
    var h = sender;
    while ((depth > 0) && (!h.hasClass(holder))) { h = h.parent(); depth--; }
	return h;
}
client.controllers.Controller.prototype.getAncestorControl = function(sender, holder, control)
{
    var depth = 10;
    var h = sender;
    while ((depth > 0) && (!h.hasClass(holder))) { h = h.parent(); depth--; }
	return h.find("." + control);
}
client.controllers.Controller.prototype.getHolder = function(sender, holder)
{
    var depth = 10;
    var h = sender;
    while ((depth > 0) && (!h.hasClass(holder))) { h = h.parent(); depth--; }
	return h;
}
client.controllers.Controller.prototype.getEmbeddedParam = function(sender, holder, param)
{
    var depth = 10;
    var h = sender;
    while ((depth > 0) && (!h.hasClass(holder))) { h = h.parent(); depth--; }
    return h.children(".embedded" + param).html();
}
client.controllers.ControllerPosts = function(name, section)
{
    client.controllers.ControllerPosts.baseConstructor.call(this, name, section);
    this.postsListName = this.section + "List";
    this.postsListView = new client.views.ViewPaged("", "", section);
    this.postsListBlock = new client.blocks.BlockPosts(this.postsListView, this, this.postsListName);
    pages.add(this.postsListBlock);
    this.postBlockName = this.section + "Single";
    this.postView = new client.views.ViewById("", "", section);
    this.postBlock = new client.blocks.BlockPost(this.postView, this, this.postBlockName);
    pages.add(this.postBlock);
    this.commentsBlockName = section + "comments";
    this.commentsView = new client.views.ViewPagedById("postcomments", "", section);
    this.commentsBlock = new client.blocks.BlockPostComments(this.commentsView, this, this.commentsBlockName);
    pages.add(this.commentsBlock);
    this.commentFormName = section + "CommentForm";
    this.commentFormView = new client.views.View("postCommentForm", "", section + "PostComment");
    this.commentFormBlock = new client.blocks.FormPostComment(this.commentFormView, this, this.commentFormName);
    pages.add(this.commentFormBlock);
    commands.add(new client.Command("postComment","/post/postComment","/wait","/waitupdate"));   
};
client.extendClass(client.controllers.ControllerPosts, client.controllers.Controller);
client.controllers.ControllerPosts.prototype.viewPage = function(page)
{
    pages.get(this.postsListName).viewPage(page);
}
client.controllers.ControllerPosts.prototype.viewList = function()
{
    pages.get(this.postsListName).open();
}
client.controllers.ControllerPosts.prototype.viewPost = function(postId)
{
    pages.get(this.postBlockName).viewPost(postId);
}
client.controllers.ControllerPosts.prototype.viewPostComments = function(id)
{
    pages.get(this.commentsBlockName).view.prefix = 'post';
    pages.get(this.commentsBlockName).view.id = id;
    pages.get(this.commentsBlockName).viewPage(1);
}
client.controllers.ControllerPosts.prototype.viewCommentPage = function(page)
{
    pages.get(this.commentsBlockName).viewPage(page);
}
client.controllers.ControllerPosts.prototype.postComment = function()
{
    var d = this.commentFormBlock.getData();
    d.postId = this.postView.id;
    commands.get("postComment").execute(this, d, "postCommentLoading", "postCommentResult");
}
client.controllers.ControllerPosts.prototype.postCommentOk = function(result)
{
}
client.controllers.ControllerPosts.prototype.postCommentFail = function(error)
{
}
client.controllers.ControllerPosts.prototype.postCommentUpdate = function(data)
{
    pages.get(this.commentsBlockName).show();
}
client.controllers.ControllerUsers = function(name, section)
{
    client.controllers.ControllerUsers.baseConstructor.call(this, name, section);
    this.addForm("login", "usersLoginForm", "", client.blocks.FormUserLogin);
    this.addForm("restore", "usersRestoreForm", "rpMainLoading", client.blocks.FormUserRestore);
    this.addStaticBlock("regInvitation", "usersRegInvitation", "rpMainLoading", client.blocks.BlockUsersRegInvitation);    
    this.addForm("register", "usersRegisterForm", "rpMainLoading", client.blocks.FormUserRegister);
    this.addForm("register2", "usersRegister2Form", "rpMainLoading", client.blocks.FormUserRegister2);
    this.addStaticBlock("agreement", "", "", client.blocks.BlockUsersAgreement);
    this.addForm("logout", "usersLogoutForm", "", client.blocks.FormUserLogout);
    commands.add(new client.Command("login","/users/login","",""));   
    commands.add(new client.Command("register","/users/register","/wait","/waitupdate"));  
    commands.add(new client.Command("resendactivation","/users/resendactivation","/wait",""));   
    commands.add(new client.Command("restorepassword","/users/restorepassword","/wait",""));   
    commands.add(new client.Command("logout","/users/logout","",""));   
};
client.extendClass(client.controllers.ControllerUsers, client.controllers.Controller);
client.controllers.ControllerUsers.prototype.login = function()
{
    commands.get("login").execute(this, this.loginFormBlock.getData(), "loginLoading", "loginResult");
    $(this.loginFormBlock.getSelector("loginError")).hide();
}
client.controllers.ControllerUsers.prototype.loginOk = function(result)
{
    client.Switcher.switchScrollPanel("rplogin", 'userLogoutForm', true);
    client.Switcher.switchScrollPanel("rpmain", "sidebar.userInfo", true);
    pages.refreshLastBlock();
}
client.controllers.ControllerUsers.prototype.loginFail = function(error)
{
    if (error.code == 0)
    {
        this.showRestorePasswordForm();
    }    
    if (error.code == 1)
    {
        this.showActivationForm('userLoginForm', pages.get('userLoginForm').getField("loginName").value);       
    }
}
client.controllers.ControllerUsers.prototype.showRestorePasswordForm = function()
{
    client.Switcher.switchScrollPanel("rpmain", 'userRestoreForm', true);
}
client.controllers.ControllerUsers.prototype.showRegisterForm = function()
{
	client.Switcher.switchScrollPanel("rpmain", 'userRegisterForm', ".sidebarForm", true);
}
client.controllers.ControllerUsers.prototype.showAgreement = function()
{
    pages.get('user.agreement').open();
}
client.controllers.ControllerUsers.prototype.register = function()
{
    commands.get("register").execute(this, this.registerFormBlock.getData(), "registerLoading", "registerResult");
}
client.controllers.ControllerUsers.prototype.registerOk = function(result)
{
    this.showActivationForm('userRegisterForm', pages.get('userRegisterForm').getField("registerEmail").value);   
}
client.controllers.ControllerUsers.prototype.showActivationForm = function(prevForm, email)
{
    var f1 = pages.get(prevForm);
    var f2 = pages.get('userRegister2Form');    
    f2.show();
    f2.prevForm = prevForm;
    f2.getField("registerEmail").value = email;    
    f2.getField("registerEmail").set();
    $(f2.getSelector("registerEmailInfo")).html(email);
    client.Switcher.switchScrollPanel("rpmain", "userRegister2Form", true);
}
client.controllers.ControllerUsers.prototype.registerFail = function(error)
{
    $(this.registerFormBlock.getSelector("registerErrorText")).html(error.message);
    client.Switcher.showError(this.registerFormBlock.getSelector("registerError"));
}
client.controllers.ControllerUsers.prototype.registerAbort = function(error)
{
    client.Switcher.switchScrollPanel("rpmain", 'user.regInvitation', false);
}
client.controllers.ControllerUsers.prototype.register2Abort = function(error)
{
    client.Switcher.switchScrollPanel("rpmain", this.register2FormBlock.prevForm, false);
}
client.controllers.ControllerUsers.prototype.resendactivation = function()
{
    commands.get("resendactivation").execute(this, this.register2FormBlock.getData(), "register2Loading", "register2Result");
}
client.controllers.ControllerUsers.prototype.resendactivationOk = function(result)
{
    client.Switcher.showSuccess(this.register2FormBlock.getSelector("regconfirmSucess"));    
}
client.controllers.ControllerUsers.prototype.resendactivationFail = function(error)
{
    $(this.register2FormBlock.getSelector("regconfirmErrorText")).html(error.message);
    client.Switcher.showSuccess(this.register2FormBlock.getSelector("regconfirmError"));
}
client.controllers.ControllerUsers.prototype.logout = function()
{
    commands.get("logout").execute(this, this.logoutFormBlock.getData(), "logoutLoading", "logoutResult");
}
client.controllers.ControllerUsers.prototype.logoutOk = function(result)
{
    client.Switcher.switchScrollPanel("rplogin", 'userLoginForm', true);
    client.Switcher.switchScrollPanel("rpmain", 'user.regInvitation', true);
    pages.refreshLastBlock();
}
client.controllers.ControllerUsers.prototype.logoutFail = function(error)
{
    alert("logout - Fail");
}
client.controllers.ControllerUsers.prototype.restorepassword = function()
{
    commands.get("restorepassword").execute(this, this.restoreFormBlock.getData(), "restoreLoading", "restoreResult");
}
client.controllers.ControllerUsers.prototype.restorepasswordOk = function(result)
{
    client.Switcher.showSuccess(this.restoreFormBlock.getSelector("restoreSucess"));    
}
client.controllers.ControllerUsers.prototype.restorepasswordFail = function(error)
{
    $(this.restoreFormBlock.getSelector("restoreErrorText")).html(error.message);
    client.Switcher.showSuccess(this.restoreFormBlock.getSelector("restoreError"));
}
client.PageHolder = function(content, indicator)
{
	this.mainContainer = content;
	this.mainLoadingIndicator = indicator;
	this.blocks = [];
	this.prepareListWasExecuted = false;
	this.prepareList = [];
	this.history = [];
	this.currentPageLink = "start";
	this.currentBlockName = "";
	this.historyStartPage = false;
};
client.PageHolder.prototype.add = function(block)
{
    if (block.view.container == "")
    	block.view.container = this.mainContainer;
	if (block.view.loadingIndicator == "")
    	block.view.loadingIndicator = this.mainLoadingIndicator;
	this.blocks[block.name] = block;
}
client.PageHolder.prototype.open = function(block, scrollToTop)
{
    this.show(block);
    this.currentBlockName = block.name;
    controllers.get("ytMainPage").hideBottomBanner((pages.currentBlockName != "mainpage.mainPage"));
    if (!(scrollToTop === false))
        client.Switcher.scrollToPageTop();
    this.setHistory(block);
}
client.PageHolder.prototype.setHistory = function(block)
{
    this.currentPageLink = block.getPermalink();
    this.setAnchor("#" + this.currentPageLink);
    this.setILikeItButtons(this.currentPageLink);
    this.addBlockToHistory(this.currentPageLink, block);
}
client.PageHolder.prototype.show = function(block, scrollToTop)
{
    block.refresh();
    if (scrollToTop === true)
        client.Switcher.scrollToPageTop();
}
client.PageHolder.prototype.refreshLastBlock = function()
{
    this.show(this.get(this.currentBlockName));
}
client.PageHolder.prototype.addBlockToHistory = function(hash, block)
{
    if (this.history[hash] != null)
        delete this.history[hash][1]; 
    this.history[hash] = [block, block.view.copy(), hash];
}
client.PageHolder.prototype.get = function(blockName)
{
    return this.blocks[blockName];
}
client.PageHolder.prototype.setBlockAttr = function(blockName, attrName, value)
{
    this.blocks[blockName][attrName] = value;
}
client.PageHolder.prototype.addPrepareHandler = function(handler)
{
    if (!this.prepareListWasExecuted)
        this.prepareList[this.prepareList.length] = handler;
}
client.PageHolder.prototype.runPrepareList = function()
{
    this.prepareListWasExecuted = true;
    if (this.prepareList.length > 0)
        for (var i = 0; i < this.prepareList.length; i++)
            this.prepareList[i]();
}
client.PageHolder.prototype.checkHistory = function()
{
    var anchor = this.getAnchor();
    var hash = anchor.substr(1);
    if (hash == "") hash = "start";
    if (this.currentPageLink != hash)
    {
        this.currentPageLink = hash;
        var point = this.history[this.currentPageLink];
        if (point != null)
        {           
            if (client.ie7) document.location.hash = anchor;
            if (point[0].view != null) delete point[0].view;
            point[0].view = point[1].copy();
            this.show(point[0]);
            controllers.get("ytMainPage").hideBottomBanner((point[0].name != "mainpage.mainPage"));
        }
    }    
}
client.PageHolder.prototype.initHistory = function()
{
    if (client.ie7)
    {
         var iframeId = 'historyFrame';
         jQuery('body').prepend(
                '<iframe id="' + iframeId + '" style="display:none;" ' +
                '></iframe>');
         this.iframe = $('#' + iframeId)[0];
         var doc = this.iframe.contentWindow.document;
         doc.open();
         doc.write('<html><body>#</body></html>');           
         doc.close();
    }
    setInterval("pages.checkHistory()", 300);
}
client.PageHolder.prototype.getAnchor = function()
{
    if (client.ie7)
        return this.iframe.contentWindow.document.body.innerText;
    else
        return client.getAnchor();
}
client.PageHolder.prototype.setAnchor = function(anchor)
{
    if (client.ie7)
    {
        try 
        {
            var doc = this.iframe.contentWindow.document;
            doc.open();
            doc.write('<html><body>' + anchor + '</body></html>');           
            doc.close();
        }
        catch (e) 
        {
        }
    }
    document.location.hash = anchor;           
}
client.PageHolder.prototype.initStartPage = function(blockName, params)
{
    if (!this.historyStartPage)
    {
        this.historyStartPage = true;
        if (params.length > 0)
            for (var i = 0; i < params.length; i++)
            {
                pages.get(blockName).view[params[i][0]] = params[i][1];
            }
        this.currentBlockName = blockName;    
        pages.addBlockToHistory('start', pages.get(blockName));
    }
}
client.PageHolder.prototype.setILikeItButtons = function(link)
{
	var fulllink = "http://yatalant.ru" + link;
	$("#iLikeItBottomDiv .iLikeVk").attr("href", "http://vkontakte.ru/share.php?url=" + fulllink);
	$("#iLikeItBottomDiv .iLikeOdno").attr("href", "http://www.odnoklassniki.ru/dk?st.cmd=addShare&st.s=1&st._surl=" + fulllink);
	$("#iLikeItBottomDiv .iLikeFace").attr("href", "http://www.facebook.com/sharer.php?u=" + fulllink);
	$("#iLikeItBottomDiv .iLikeMail").attr("href", "http://connect.mail.ru/share?share_url=" + fulllink);
	$("#iLikeItBottomDiv .iLikeLJ").attr("href", "http://www.livejournal.com/update.bml?event=" + fulllink + "&subject=yatalant.ru");
	$("#iLikeItBottomDiv .iLikeBuzz").attr("href", "http://www.google.com/buzz/post?message=yatalant.ru&url=" + fulllink);
}
client.ControllerHolder = function()
{
	this.controllers = [];	
};
client.ControllerHolder.prototype.add = function(controller)
{
	this.controllers[controller.name] = controller;
}
client.ControllerHolder.prototype.get = function(controllerName)
{
    return this.controllers[controllerName];
}
client.uploaderCount = 1;
var dirs;
if (!dirs) dirs = {};
dirs.avatars = 1;
dirs.covers = 2;
dirs.photos = 3;
dirs.audio = 4;
dirs.video = 5;
dirs.texts = 6;
dirs.backgrounds = 7;
var STORAGE = "http://storage.yatalant.ru/";
client.Uploader = function()
{
    this.dir = 0;               
    this.format = 0;            
    this.selector = "";  		
    this.hiddenDiv = "";        
    this.formDiv = "";          
    this.buttonDiv = "";        
    this.loadingDiv = "";       
    this.errorDiv = "";         
    this.resultOkDiv = "";      
    this.resultFailDiv = "";    
    this.previewDiv = "";       
    this.inputFileField = null;
    this.inputFileId = "";      
    this.inputFileCode = "";    
    this.id = client.uploaderCount++;
    this.fileId = 0;
    this.fileCode = '';
    this.confirmed = false;
    this.addPreviewIntoPanel = "";	
    this.newFileHandler = null;
	this.successUploadHandler = null;
    if (!commands.get("newUpload"))
        commands.add(new client.Command("newUpload","/files/newupload","/wait","/waitupdate"));
    if (!commands.get("confirmUpload"))
        commands.add(new client.Command("confirmUpload","/files/confirmupload","/wait","/waitupdate"));
};
client.Uploader.prototype.create = function()
{
    var id = this.id;
    $(this.formDiv).append('<form id="theuploadform' + id + '">' +
        '<input type="hidden" id="uploadId' + id + '" name="uploadId" value="" >' +
        '<input type="hidden" id="uploadCode' + id + '" name="uploadCode" value="" >' +   
        '<input type="hidden" id="uploadNumber' + id + '" name="uploadNumber" value="" >' +   
        '<input type="hidden" id="uploadDir' + id + '" name="uploadDir" value="" >' +   
        '<input id="userfile' + id + '" name="userfile" class="fileInput" size="5" type="file">' +
        '<input class="hide" id="formsubmit" type="submit" value="Send File" >' +
        '</form>');
    $(this.hiddenDiv).append('<div id="iframe' + id + '" style="width:0px; height:0px; visibility:none;"></div>');
    $(this.hiddenDiv).append('<div id="uploadResult' + id + '" class="hide"></div>');
    var input = $("#userfile" + id);
	input.css('relative', 'absolute');
	input.css('left', '0px');
	this.inputFileField = document.getElementById("userfile" + id);
    var btn = $(this.buttonDiv);
    input.hover(function(){btn.stop().animate({scrollTop: 30}, 100);},
                function(){btn.stop().animate({scrollTop: 0}, 100);});
	if ($.browser.msie || $.browser.opera)
	{
		var firstPosX = input.offset().left;
		input.mousemove
		(function(event){
				input.css('left', event.pageX - firstPosX - input.width() + 15);
		});
		input.mouseleave
		(function(event){
			input.css('left', 0);
		});
	}
    input.children().css("cursor", "pointer");    
    var dir = this.dir;
    input.change(function(){uploaders.get(id).newUpload(dir);});
}
client.Uploader.prototype.newUpload = function(dir)
{
	var ok = commands.get("newUpload").execute(this, {dir: dir}, "null", "uploadResult" + this.id);
    if (ok)
    {
		$(this.buttonDiv).hide();
		$(this.formDiv).hide();
		$(this.loadingDiv).show();
		$(this.errorDiv).hide();
		client.Switcher.startLoadingAnimation(this.loadingDiv);
		this.confirmed = false;
		if (this.addPreviewIntoPanel != "")
		{
			$(this.selector + "Upload").remove().prependTo($(this.addPreviewIntoPanel));
			$(this.addPreviewIntoPanel).children(".commentBlock").remove();
			if (this.newFileHandler != null)
				this.newFileHandler.call(this.motherForm);
		}
		$(this.previewDiv).show();
    }
}
client.Uploader.prototype.newUploadOk = function(result)
{
    this.fileId = result.id;
    this.fileCode = result.code;
    $("#uploadId" + this.id).attr("value", this.fileId);
    $("#uploadCode" + this.id).attr("value", this.fileCode);    
    $("#uploadNumber" + this.id).attr("value", this.id);
    $("#uploadDir" + this.id).attr("value", this.dir);        
}
client.Uploader.prototype.newUploadFail = function(error)
{
    this.showError(error.message);
}
client.Uploader.prototype.newUploadUpdate = function(data)
{
	if ((!client.ff4) && ((!client.ff5)) && (!client.ff6) && (!client.ff7) && (!client.ff8))
	{
		var iframeName = "postframe" + this.id;
		if (!($('#' + iframeName).val()))
		{
		    var iframe = $( '<iframe name="' + iframeName + '" id="' + iframeName + '" class="hidden hiddenIframe" src="about:none"/>' );
		    $('div#iframe' + this.id).append( iframe );
		}
		var form = $('#theuploadform' + this.id);
		form.attr( "action", STORAGE + "upload.php" );
		form.attr( "method", "post" );
		form.attr( "enctype", "multipart/form-data" );
		form.attr( "encoding", "multipart/form-data" );
		form.attr( "target", iframeName );
		form.submit();
		var id = this.id;
		$("#" + iframeName).load(function(){
		    uploaders.get(id).confirmUpload();
		});
	}
	else 
	{
	var reader = new FileReader();
	reader.onload = (function(uploadFile) {
		return function(e) {
		var xhr = new XMLHttpRequest();
		this.xhr = xhr;
		var self = this;
//		var file = this.inputFileField.files[0];
		var file = this.file;
		var fileName = file.name,
			fileSize = file.size,
//			fileData = file.getAsBinary(),
			fileData = e.target.result,
			boundary = "xxxxxxxxYTxBOUNDARYxxxxx",
			contentLength = 0,
			body = "";			
		var allowedLetters = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM.1234567890";		
		var fn = "";			
		for (var j = 0; j < fileName.length; j++)
		{
			var ok = false;
			for (var i = 0; i < allowedLetters.length; i++)
				if (fileName.charAt(j) == allowedLetters.charAt(i))
					ok = true;
			if (ok)
				fn += fileName.charAt(j);
		}
		fileName = fn;
		var id = this.old_id;
		xhr.onreadystatechange = function() {
			if (xhr.readyState == 4)
			{
				uploaders.get(id).confirmUpload();								
			}
		}
		var writeParam = function(pName, pValue)
		{
			var result = "--" + boundary + "\r\n";
			result += "Content-Disposition: form-data; name=\"" + pName + "\"\r\n\r\n";
			result += pValue;
			result += "\r\n";
			return result;
		}
		body += writeParam("uploadId", this.old_fileId);
		body += writeParam("uploadCode", this.old_fileCode);   
		body += writeParam("uploadNumber", this.old_id);
		body += writeParam("uploadDir", this.old_dir);        
		body += "--" + boundary + "\r\n";
		body += "Content-Disposition: form-data; name=\"userfile\"; filename=\"" + fileName + "\"\r\n";
		body += "Content-Type: application/octet-stream\r\n\r\n";
		var bodyEnd = "\r\n--" + boundary + "--\r\n";
		contentLength = body.length + fileSize + bodyEnd.length;
		var prefix = "Content-Type: multipart/form-data, boundary=" + boundary + "\r\n\r\n";
		prefix += "Content-Length: " + contentLength + "\r\n\r\n";
		xhr.open("POST", STORAGE + "upload.php", true);
		xhr.setRequestHeader("Content-Type", "multipart/form-data, boundary="+boundary);
		var postData = "";
			postData = prefix + body + fileData + bodyEnd; 
			xhr.sendAsBinary(postData);
			fileData = ""; 
			postData = "";
		}; 
	})(this.inputFileField.files[0]);
	reader.file = this.inputFileField.files[0];
	reader.old_id = this.id;
        reader.old_fileId = this.fileId;
	reader.old_fileCode = this.fileCode;
	reader.old_dir = this.dir;

	reader.readAsBinaryString(this.inputFileField.files[0]);
	}

	setTimeout(function(){uploaders.get(id).confirmUpload();}, 60 * 1000);
}
client.Uploader.prototype.confirmUpload = function()
{
	if (this.confirmed == false)
	    commands.get("confirmUpload").execute(this, {id: this.fileId, code: this.fileCode}, "null", "uploadResult" + this.id);
}
client.Uploader.prototype.confirmUploadOk = function(result)
{
}
client.Uploader.prototype.confirmUploadFail = function(error)
{
    this.showError(error.message);
    this.confirmed = true;
}
client.Uploader.prototype.confirmUploadUpdate = function(data)
{
	if (data.status == 0) 
	{
		var id = this.id;
		setTimeout(function(){uploaders.get(id).confirmUpload();}, 60 * 1000);
	}
    if (data.status == 1) 
    {
    	this.confirmed = true;
        if (this.previewDiv != "")
        {
            $(this.previewDiv).html("<img src='" + data.preview+"'/>");
            $(this.selector + "Upload").find(".UploadTitle").html(data.title + "<br/>" + data.author);
            if (this.dir == dirs.audio)
                $(this.selector + "Upload").find(".UploadDuration").html(data.duration);
        }
        if (this.inputFileId != "")
        {
            $(this.inputFileId).attr("value", this.fileId);
            $(this.inputFileCode).attr("value", this.fileCode);
        }
        this.showUploadButtonAgain();
        if (this.successUploadHandler)
        	this.successUploadHandler.call(this.motherForm);
    }
    if (data.status == 2)  
    {
	    this.confirmed = true;
        this.showError(data.error);
    }
}
client.Uploader.prototype.showError = function(msg)
{
    $(this.errorDiv).stop().show("fast");
    $(this.errorDiv + " .uploadErrorText").html(msg);
    this.showUploadButtonAgain();
    $(this.selector + "Upload .redTransparentBg").show();	
}
client.Uploader.prototype.showUploadButtonAgain = function()
{
	if (this.addPreviewIntoPanel == "")
	{
        $(this.buttonDiv).show();
    	$(this.formDiv).show();
    }
    $(this.loadingDiv).hide();
    client.Switcher.stopLoadingAnimation(this.loadingDiv);
}
client.UploaderHolder = function()
{
	this.uploaders = [];	
};
client.UploaderHolder.prototype.add = function(uploader)
{
	this.uploaders[uploader.id] = uploader;
}
client.UploaderHolder.prototype.get = function(id)
{
    return this.uploaders[id];
}
client.MiniUploader = function()
{
	this.dir = 0;
	this.accessCode = "";
	this.inputFile = null;
	this.statusDiv = null;		
}
client.MiniUploader.prototype.newUpload = function(dirName)
{
		var xhr = new XMLHttpRequest();
		this.xhr = xhr;
		var self = this;
		var file = this.inputFile.files[0];
        var fileName = file.name; 
        var fileSize = file.size;
        var fileData = file.getAsBinary();
        var boundary = "xxxxxxxxYTxBOUNDARYxxxxx";
        var	contentLength = 0;
		var	body = "";	
		var allowedLetters = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM._1234567890";		
		var fn = "";			
		for (var j = 0; j < fileName.length; j++)
		{
			var ok = false;
			for (var i = 0; i < allowedLetters.length; i++)
				if (fileName.charAt(j) == allowedLetters.charAt(i))
					ok = true;
			if (ok)
				fn += fileName.charAt(j);
		}
		fileName = fn;
		var statusBar = this.statusDiv;
		var STORAGE = "http://storage.yatalant.ru/";
		xhr.onreadystatechange = function() {
			if (xhr.readyState == 4)
			{
				if (statusBar != null)
                {
                    statusBar.html(""); 
                    if(dirName == "")
					   statusBar.append("<div>Загружен как: " + fileName + "</div>");
                    else 
                       statusBar.append("<div>Загружен как: " + STORAGE + dirName + fileName + "</div>");
                    statusBar.append("<div>" + xhr.responseText + "</div>");    
                }				
			}
		}
		var writeParam = function(pName, pValue)
		{
			var result = "--" + boundary + "\r\n";
			result += "Content-Disposition: form-data; name=\"" + pName + "\"\r\n\r\n";
			result += pValue;
			result += "\r\n";
			return result;
		}
		body += writeParam("accessCode", this.accessCode);
		body += writeParam("uploadDir", this.dir);        
		body += "--" + boundary + "\r\n";
		body += "Content-Disposition: form-data; name=\"userfile\"; filename=\"" + fileName + "\"\r\n";
		body += "Content-Type: application/octet-stream\r\n\r\n";
		var bodyEnd = "\r\n--" + boundary + "--\r\n";
		contentLength = body.length + fileSize + bodyEnd.length;
		var prefix = "Content-Type: multipart/form-data, boundary=" + boundary + "\r\n\r\n";
		prefix += "Content-Length: " + contentLength + "\r\n\r\n";
		xhr.open("POST", STORAGE + "mini.upload.php", true);
		xhr.setRequestHeader("Content-Type", "multipart/form-data, boundary="+boundary);
		var postData = "";
		postData = prefix + body + fileData + bodyEnd; 
		xhr.sendAsBinary(postData);
		fileData = ""; 
		postData = ""; 
}
client.blocks.BlockProfile = function(view, controller, name)
{
    client.blocks.BlockProfile.baseConstructor.call(this, view, controller, name);
    this.refreshUrl = "/" + this.section + "/get";
};
client.extendClass(client.blocks.BlockProfile, client.blocks.BlockAjax);
client.blocks.BlockProfile.prototype.prepare = function()
{
    var c = this.controllerName;
	var id = pages.get('profile').viewProfileId;
    this.prep.setHintBtnAction(this.getSelector("actionShowEditStatusForm"), function(){controllers.get(c).showEditStatusForm()});
    this.prep.setBtnAction(this.getSelector("actionShowProfileDetailsEnterForm"), function(){controllers.get(c).showEnterProfileDetailsForm(1)});    
    if (client.ie7)
        if (pages.get("profile").upperMenuStyle != "light")
            $(".profileStatusHolder").before("<div style='height:36px;'>&nbsp;</div>");
    this.prep.setBtnAction(this.getSelector("tag"),function(){});
    this.prep.setBtnAction(this.getSelector("specTag"),function(){
    	var searchPage = pages.get("mainpage.talantsSearchResults");
    	searchPage.lastSpec = $(this).find(".btnContent:first").html();
    	searchPage.lastCity = "";
		searchPage.lastViewmode = "";
		searchPage.lastLike = "";
		searchPage.lastOnline = false;
    	pages.get('mainpage.talants').open();
    });
    this.prep.setRoundBtn2Action(this.getSelector("actionEditProfile"), function(){controllers.get(c).showEnterProfileDetailsForm(1)});
    this.prep.setRoundBtn2Action(this.getSelector("actionUploadContent"), function(){controllers.get(c).viewAlbums(id)});
    this.prep.setRoundBtn2Action(this.getSelector("actionUploadText"), function(){controllers.get(c).viewAlbums(id)});
    this.prep.setRoundBtn2Action(this.getSelector("actionEditPrivacy"), function(){controllers.get(c).showPrivacyForm()});
    this.prep.setRoundBtn2Action(this.getSelector("actionChangeDesign"), function(){controllers.get(c).showCustomizationForm()});
    this.prep.setRoundBtn2Action(this.getSelector("actionEditSyncOptions"), function(){controllers.get(c).showSyncOptionsForm()});
    this.prep.setRoundBtn2Action(this.getSelector("actionAddToFriends"), function(){controllers.get(c).showAddFriendForm(id)});
    this.prep.setRoundBtn2Action(this.getSelector("actionAddToFavorites"), function(){});    
    this.prep.setPanelSwitchRef($(this.getSelector("profileActionsMenu")),
	    $(this.getSelector("profileAddToFavorites")), 
		'actionAddToFavorites', 'actionProfileFavoritesCancel');
	this.prep.setCombobox(this.getSelector("profileFavoriteFolder"));
	var folderInput = $(this.getSelector("profileFavoriteFolder"));
	this.prep.setInputHint(this.getSelector("profileFavoriteFolder"), "Выберите папку или введите название новой");
	this.prep.setRedLink(this.getSelector("actionProfileFavoritesAdd"), function(){controllers.get('ytSidebar').addFavoriteItemAndFolder(id, folderInput.attr('value'))});
    this.prep.setRoundBtn2Action(this.getSelector("actionSendMessage"), function(){controllers.get(c).showChatForm(id)});
    this.prep.setRoundBtn2Action(this.getSelector("actionRemoveFromFriends"), function(){controllers.get(c).showDeleteFriendForm(id)});
	this.prep.setBtnAction(this.getSelector("actionAddPhotoAlbum"), function(){controllers.get('ytAlbums').showEditAlbumForm(1, 0)});
    this.prep.setBtnAction(this.getSelector("actionAddAudioAlbum"), function(){controllers.get('ytAlbums').showEditAlbumForm(2, 0)});
    this.prep.setBtnAction(this.getSelector("actionAddVideoAlbum"), function(){controllers.get('ytAlbums').showEditAlbumForm(3, 0)});
    this.prep.setBtnAction(this.getSelector("actionAddTextsAlbum"), function(){controllers.get('ytAlbums').showEditAlbumForm(4, 0)});
	client.drag.prepareTalantDragItems(this); 	
    var ca = controllers.get('ytAlbums');
    this.prep.setAction(this.getSelector("albumItem"), function(){ca.openAlbumViewer(ca.getEmbeddedParam($(this),"albumItem","Id"))});
    this.prep.setLink(this.getSelector("actionOpenAlbum"), function(){
        var ca = controllers.get('ytAlbums');
        ca.openAlbum(ca.getEmbeddedParam($(this), "albumBox", "Id"))});  
  	this.prep.setRedLink(this.getSelector("actionOpenPost"),function(){controllers.get("ytBlog").openPost(ca.getEmbeddedParam($(this), "post", "Id"), 2)});       
	this.prep.setHint(this.getSelector("profileRating"), this.getSelector("hintRating"));
    this.prep.setHint(this.getSelector("profileActivity"), this.getSelector("hintActivity"));
    if (client.ie7)
    	$("#profileFix").css({marginTop:"40px"});
	client.Switcher.resizeYtSideBar();
    pages.get("profile.pageMenu").prepare(); 
    this.prep.setExpander(this.getSelector("contacts"));
}
client.blocks.BlockProfile.prototype.viewProfile = function(id)
{
    this.view.prefix = "profile";
    this.view.id = id;
    this.open();
}
client.blocks.BlockProfile.prototype.getPermalink = function()
{
    return "/" + this.section + "/" + this.view.id + ".html";
}
client.blocks.BlockUsersAgreement = function(view, controller, name)
{
    client.blocks.BlockUsersAgreement.baseConstructor.call(this, view, controller, name);
    this.refreshUrl = "/" + this.section + "/agreement/get";
};
client.extendClass(client.blocks.BlockUsersAgreement, client.blocks.BlockAjax);
client.blocks.BlockUsersAgreement.prototype.prepare = function()
{
    var c = this.controllerName;   
        this.prep.setMainMenu('light');            
        client.Switcher.resizeYtSideBar();
}
client.blocks.BlockUsersAgreement.prototype.viewBlock = function(id)
{
    this.open();
}
client.blocks.BlockUsersAgreement.prototype.getPermalink = function()
{
    return "/user/agreement/";   
}
client.blocks.BlockUsersRegInvitation = function(view, controller, name)
{
    client.blocks.BlockUsersRegInvitation.baseConstructor.call(this, view, controller, name);
    this.refreshUrl = "/" + this.section + "/regInvitation/get";
};
client.extendClass(client.blocks.BlockUsersRegInvitation, client.blocks.BlockAjax);
client.blocks.BlockUsersRegInvitation.prototype.prepare = function()
{
    var c = this.controllerName;   
       this.prep.setBtnAction(this.getSelector("actionShowRegisterForm"), function(){controllers.get(c).showRegisterForm()});
}
client.blocks.BlockUsersRegInvitation.prototype.viewBlock = function(id)
{
    this.open();
}
client.blocks.BlockUsersRegInvitation.prototype.getPermalink = function()
{
    return "/" + this.section + "/{url}/";   
}
client.blocks.BlockSidebarUserInfo = function(view, controller, name)
{
    client.blocks.BlockSidebarUserInfo.baseConstructor.call(this, view, controller, name);
    this.refreshUrl = "/" + this.section + "/userInfo/get";
};
client.extendClass(client.blocks.BlockSidebarUserInfo, client.blocks.BlockAjax);
client.blocks.BlockSidebarUserInfo.prototype.prepare = function()
{
    var c = this.controllerName;   
       controllers.get("ytProfile").currentUserId = this.user;  
       this.prep.setLink(this.getSelector("actionOpenProfile"), function(){controllers.get("ytProfile").viewMyProfile()});
       this.prep.setHint(this.getSelector("actionOpenProfile"), this.getSelector("hintOpenProfile"));
       this.prep.setHint(this.getSelector("profileUserRating"), this.getSelector("hintRating"));
       this.prep.setHint(this.getSelector("profileActivity"), this.getSelector("hintActivity"));
       client.Switcher.resizeYtSideBar();
}
client.blocks.BlockSidebarUserInfo.prototype.viewBlock = function(id)
{
    this.open();
}
client.blocks.BlockSidebarUserInfo.prototype.getPermalink = function()
{
    return "/" + this.section + "/{url}/";   
}
client.blocks.BlockSidebarFriendsInvites = function(view, controller, name)
{
    client.blocks.BlockSidebarFriendsInvites.baseConstructor.call(this, view, controller, name);
    this.refreshUrl = "/" + this.section + "/invites/get";
};
client.extendClass(client.blocks.BlockSidebarFriendsInvites, client.blocks.BlockAjax);
client.blocks.BlockSidebarFriendsInvites.prototype.prepare = function()
{
    var c = this.controllerName;   
       this.prep.setRedLink(this.getSelector("actionAcceptFriend"), function(){controllers.get(c).acceptFriend(1, $(this))});
       this.prep.setRedLink(this.getSelector("actionDeclineFriend"), function(){controllers.get(c).acceptFriend(2, $(this))});
       this.prep.setRedLink(this.getSelector("actionOpenProfile"), function(){controllers.get(c).openFriendProfile($(this), "friendInvitation")});
       this.prep.setRedLink(this.getSelector("actionAllfriends"), function(){controllers.get(c).showFriendsList()});
       client.Switcher.resizeYtSideBar();
}
client.blocks.BlockSidebarFriendsInvites.prototype.viewBlock = function(id)
{
    this.open();
}
client.blocks.BlockSidebarFriendsInvites.prototype.getPermalink = function()
{
    return "/" + this.section + "/{url}/";   
}
client.blocks.BlockSidebarFriendsList = function(view, controller, name)
{
    client.blocks.BlockSidebarFriendsList.baseConstructor.call(this, view, controller, name);
    this.refreshUrl = "/" + this.section + "/friendsList/get";
};
client.extendClass(client.blocks.BlockSidebarFriendsList, client.blocks.BlockAjax);
client.blocks.BlockSidebarFriendsList.prototype.prepare = function()
{
    var c = this.controllerName;   
       for (var i in this.friends) 
       {
            var id = this.friends[i].id;
            this.prep.setRedLink(this.getSelector("actionOpenChat" + id), 
                function(id){
                    return function(){controllers.get("ytProfile").showChatForm(id)}
                }(id));                   
       }      
       this.prep.setRedLink(this.getSelector("actionOpenTalansCatalog"),function(){pages.get("mainpage.talants").open();});       
         client.drag.setDropabble('#sidebarFriendsList',
		    "add",
   		    ".user",
   		    function(event, ui) {      
                var c = controllers.get("ytProfile");
                c.showAddFriendForm(c.getEmbeddedParam(ui.draggable, "user", "Id"));
			});
       client.Switcher.resizeYtSideBar();
       new SearchEngine("user-search");
       this.prep.setInputHint(this.getSelector("user-search.basicInput"), "Поиск по моим контактам");
}
client.blocks.BlockSidebarFriendsList.prototype.viewBlock = function(id)
{
    this.open();
}
client.blocks.BlockSidebarFriendsList.prototype.getPermalink = function()
{
    return "/" + this.section + "/{url}/";   
}
client.blocks.BlockSidebarFavorites = function(view, controller, name)
{
    client.blocks.BlockSidebarFavorites.baseConstructor.call(this, view, controller, name);
    this.refreshUrl = "/" + this.section + "/favorites/get";
};
client.extendClass(client.blocks.BlockSidebarFavorites, client.blocks.BlockAjax);
client.blocks.BlockSidebarFavorites.prototype.prepare = function()
{
    var c = this.controllerName;   
	    this.prep.setInputHint(this.getSelector("searchFavoriteItem"), "Поиск");
		$(this.getSelector("searchFavoriteItem")).keyup(function(){	
			var p = pages.get('sidebar.favorites');	
   			var like = $(p.getSelector("searchFavoriteItem")).attr("value");
   			if (like == "Поиск") like = "";
   			pages.get("sidebar.favoritesSearch").view.like = like;
   			pages.get("sidebar.favoritesSearch").show();   			
   		});
		this.initFolders();
        client.drag.setDropabble(this.getSelector("deleteFooter"),
		    "delete",
   		    ".user,.album,.albumPhoto,.albumAudio,.albumVideo,.albumTexts,.dragFolder",
   		    function(event, ui) {
            	var action = 1;
                if (ui.draggable.hasClass('favoriteItem')) action = 1;                	
                if (ui.draggable.hasClass('dragFolder')) action = 2;                	
                if (action == 1)
                {
                    var c = controllers.get("ytSidebar");
                    var id = c.getEmbeddedParam(ui.draggable, "favoriteItem", "Id");
                    if (id != null)
                    {
	                  	commands.get("deleteFavoriteItem").execute(c, {itemId:id}, "deleteFavoriteItemLoading", "deleteFavoriteItemResult");
    	           	    c.getHolder(ui.draggable, "m-t1").hide("fast");
    	           	}
				}
              	if (action == 2)
                {
                    var c = controllers.get("ytSidebar");
                    var id = c.getEmbeddedParam(ui.draggable, "favoriteFolder", "FolderId");
                    if (id != null)
                    {
                  		c.deleteFavoriteFolder(ui.draggable);
                  		c.getHolder(ui.draggable, "favoriteFolder").hide("fast");
                  	}
              	}
			});
        client.Switcher.resizeYtSideBar();
}
client.blocks.BlockSidebarFavorites.prototype.viewBlock = function(id)
{
    this.open();
}
client.blocks.BlockSidebarFavorites.prototype.getPermalink = function()
{
    return "/" + this.section + "/{url}/";   
}
client.blocks.BlockSidebarFavorites.prototype.initFolders = function()
{
		var c = controllers.get("ytSidebar");
		this.prep.setAction(this.getSelector("actionAddFavoriteFolder"), function(){c.addFavoriteFolder()});
        this.prep.setKeyEnter(pages.get('sidebar.favorites'), this.getSelector("newFolderName"), function(){c.addFavoriteFolder()});
		this.prep.setPanelSwitch(this.getSelector("addFolderFormCaller"),
						  		 this.getSelector("addFolderForm"), 'actionAddFolderShowForm', 'cancel');
        this.prep.setInputHint(this.getSelector("newFolderName"), "Название папки");
    	$(this.getSelector("favoriteFolder")).each(
    	    function(index){
    	            var p = pages.get('sidebar.favorites');
    	            var sender = $(this);
    	            p.prep.setPanelSwitchRef(sender.find(".collapsed"),
					    sender.find(".expanded"), 
						'expand', 'collapse');
    	            p.prep.setPanelSwitchRef(sender.find(".folderHeader"),
					    sender.find(".deleteFolderForm"), 
						'actionDeleteFavoriteFolderShowForm', 'cancel');
                    p.prep.setPanelSwitchRef(sender.find(".folderHeader"),
					    sender.find(".renameFolderForm"), 
						'actionRenameFavoriteFolderShowForm', 'cancel');
    	            sender.find(".expand").click(function(){
            	            p.viewFolder(controllers.get('ytSidebar').getEmbeddedParam($(this), "favoriteFolder", "FolderId"));
    	                });
    	            sender.find(".deleteFolderForm").find(" .actionDeleteFavoriteFolder").click(function(){
            	            controllers.get('ytSidebar').deleteFavoriteFolder($(this));
    	                });
    	            sender.find(".renameFolderForm").find(" .actionRenameFavoriteFolder").click(function(){
            	            controllers.get('ytSidebar').renameFavoriteFolder($(this));
    	                });
					sender.find("#renamedFolderName").keyup
					(function(e){
						if (e.keyCode == 13)
            	    		controllers.get('ytSidebar').renameFavoriteFolder($(this));
    	            });
                    client.drag.setDraggable(p.getSelector("drag.dragFolder"));
    	        });
    client.drag.setDropabble(this.getSelector("favoriteFolder"),
	    "add",
	    ".user,.album,.albumPhoto,.albumAudio,.albumVideo,.albumTexts",
	    function(event, ui) {
        	var itemType = 0;
        	var albumItemType = "";
            if (ui.draggable.hasClass('user')) itemType = 1;
            if (ui.draggable.hasClass('album')) itemType = 2;
            if (ui.draggable.hasClass('albumPhoto')) { itemType = 3; albumItemType = "albumPhoto"; }
            if (ui.draggable.hasClass('albumAudio')) { itemType = 3; albumItemType = "albumAudio"; }
            if (ui.draggable.hasClass('albumVideo')) { itemType = 3; albumItemType = "albumVideo"; }
            if (ui.draggable.hasClass('albumTexts')) { itemType = 3; albumItemType = "albumTexts"; }
            if (itemType != 0)
            {  	
                var c = controllers.get("ytSidebar");
                var id = 0;
                if (itemType == 1)
                    id = c.getEmbeddedParam(ui.draggable, "user", "Id");
                if (itemType == 2)
                    id = c.getEmbeddedParam(ui.draggable, "album", "Id");
                if (itemType == 3)
                    id = c.getEmbeddedParam(ui.draggable, albumItemType, "Id");
                var iid = c.getEmbeddedParam($(this), "favoriteFolder", "FolderId");
          	    commands.get("addFavoriteItem").execute(c, {itemId:id, folderId:iid, itemType: itemType}, "addFavoriteItemLoading", "addFavoriteItemResult");
          	}
		}
		);
}
client.blocks.BlockSidebarFavorites.prototype.viewFolder = function(id)
{   
    var p = pages.get('sidebar.favorites'); 
    var f = 'favoriteFolder' + id;
    p.prep.getAjaxPanel(p.getSelector(f),
	  		 "/sidebar/favoritesContent/get",
   	  		 function(){
	  		 	return {folderId:id};
	  		 },
	  		 function(){
	  		 	var favPage = pages.get('sidebar.favorites');
	  		 	client.drag.prepareTalantDragItems(favPage); 	
			  });
}    
client.blocks.BlockSidebarFavoritesSearch = function(view, controller, name)
{
    client.blocks.BlockSidebarFavoritesSearch.baseConstructor.call(this, view, controller, name);
    this.refreshUrl = "/" + this.section + "/favoritesSearch/get";
};
client.extendClass(client.blocks.BlockSidebarFavoritesSearch, client.blocks.BlockAjax);
client.blocks.BlockSidebarFavoritesSearch.prototype.prepare = function()
{
    var c = this.controllerName;   
    	pages.get('sidebar.favorites').initFolders();
	    client.drag.prepareTalantDragItems(this); 	
    	client.Switcher.resizeYtSideBar();
}
client.blocks.BlockSidebarFavoritesSearch.prototype.viewBlock = function(id)
{
    this.open();
}
client.blocks.BlockSidebarFavoritesSearch.prototype.getPermalink = function()
{
    return "/" + this.section + "/{url}/";   
}
client.blocks.BlockSidebarPlayer = function(view, controller, name)
{
    client.blocks.BlockSidebarPlayer.baseConstructor.call(this, view, controller, name);
    this.refreshUrl = "/" + this.section + "/player/get";
};
client.extendClass(client.blocks.BlockSidebarPlayer, client.blocks.BlockAjax);
client.blocks.BlockSidebarPlayer.prototype.prepare = function()
{
    var c = this.controllerName;   
        client.Audio.pMainSlider = $("#audioProgressSlider");
        client.Audio.pCurrentPosition = $(this.getSelector("currentPosition"));
        client.Audio.pTotalDuration = $(this.getSelector("totalDuration"));
        client.Audio.pPlay = $(this.getSelector("songBoxPlay"));
        client.Audio.pPause = $(this.getSelector("songBoxPause"));
        client.Audio.pSongAuthor = $(this.getSelector("trackAuthor"));
        client.Audio.pSongName = $(this.getSelector("trackName"));
        client.Audio.pCurrentTrack = $(this.getSelector("currentTrack"));
        client.Audio.pTotalTracks = $(this.getSelector("totalTracks"));
        client.Audio.pPlayer = $('#sidebarPlayer');
        this.prep.setAction(this.getSelector("songBoxPlay"), client.Audio.resume);
        this.prep.setAction(this.getSelector("songBoxPause"), client.Audio.pause);
        this.prep.setAction(this.getSelector("nextTrackBtn"), client.Audio.playNext);
        this.prep.setAction(this.getSelector("prevTrackBtn"), client.Audio.playPrev);
		$("#audioProgressSlider").slider({
			range: "min",
			value: 0,
			min: 0,			
			max: 100,
			start: function(event, ui) {
				client.Audio.setPositionInProgress = true;
			},
			stop: function(event, ui) {
				client.Audio.setPositionInProgress = false;
			},
			slide: function(event, ui) {
    			client.Audio.setPosition(ui.value);
			}
		});
		$("#audioVolumeSlider").slider({			
			value: client.Audio.currentVolume * 100,
			min: 0,
			max: 100,
			slide: function(event, ui) {
				client.Audio.setVol(ui.value);
			}
		});
		var p = this;
		client.Audio.pPlayList = $(this.getSelector("playlistDropZone"));
		p.fixSlider("#audioProgressSlider");
    	client.Audio.refreshPlaylist();
		client.Audio.refreshPlayer();
		this.prep.setAction(this.getSelector("playlistItem"),function(){
		    var c = controllers.get("ytSidebar");
            var songFile = c.getEmbeddedParam($(this), "playlistItem", "Filename");
            var songId = c.getEmbeddedParam($(this), "playlistItem", "SongId");
            var songAuthor = c.getEmbeddedParam($(this), "playlistItem", "SongAuthor");
            var songName = c.getEmbeddedParam($(this), "playlistItem", "SongName");
            client.Audio.playMp3([songId, songFile, songAuthor, songName])});       
        this.prep.setRedLink(this.getSelector("actionClearPlaylist"), 
            function(){controllers.get("ytSidebar").clearPlaylist();});
        client.drag.setDraggable(this.getSelector("drag.playlistItem"));
        client.drag.setDropabble(this.getSelector("playlistDropZone"),
		    "add",
   		    ".albumAudio,.album",
		    function(event, ui) {
                var c = controllers.get("ytSidebar");
                var action = 0;
                if (ui.draggable.hasClass('albumAudio')) action = 1;                	
                if (ui.draggable.hasClass('album')) action = 2;  
                if (action == 1)
                {
                    var id = c.getEmbeddedParam(ui.draggable, "albumAudio", "Id");
                    c.addPlaylistItem(id);
                }
                if (action == 2)
                {
                    var id = c.getEmbeddedParam(ui.draggable, "album", "Id");
                    c.addAlbumToPlaylist(id);
                }
			}
		);
        client.drag.setDropabble(this.getSelector("deleteFooter"),
		    "delete",
   		    ".playlistItem",
   		    function(event, ui) {
            	var c = controllers.get("ytSidebar");
                var id = c.getEmbeddedParam(ui.draggable, "playlistItem", "Id");
                c.deletePlaylistItem(id);
                c.getHolder(ui.draggable, "playlistItem").hide();		
			});
		client.Switcher.resizeYtSideBar();
}
client.blocks.BlockSidebarPlayer.prototype.viewBlock = function(id)
{
    this.open();
}
client.blocks.BlockSidebarPlayer.prototype.getPermalink = function()
{
    return "/" + this.section + "/{url}/";   
}
client.blocks.BlockSidebarPlayer.prototype.fixSlider = function(selector)
{
	if ($.browser.opera)
	{
		var bababa = 0;
		$(window).mousemove
		(function(event){
			$(selector + " a").hide(0, function() { $(this).show(0); });
			bababa++;
			if (bababa > 50)
				$(window).unbind(event);
		});
	}
	if ($.browser.webkit)
		$(selector + " .ui-slider-handle").css({marginTop:-7});
	if ($.browser.msie)
		$(selector + " .ui-slider-handle").css({marginTop:-7});
	if (client.ie7)
		$(selector + " .ui-slider-handle").css({marginTop:-19});
}
client.blocks.BlockSidebarNews = function(view, controller, name)
{
    client.blocks.BlockSidebarNews.baseConstructor.call(this, view, controller, name);
    this.refreshUrl = "/" + this.section + "/news/get";
};
client.extendClass(client.blocks.BlockSidebarNews, client.blocks.BlockAjax);
client.blocks.BlockSidebarNews.prototype.prepare = function()
{
    var c = this.controllerName;   
	   var c = controllers.get("ytBlog");
       this.prep.setRedLink(this.getSelector("actionOpenPost"),function(){c.openPost(c.getEmbeddedParam($(this), "post", "Id"), 1)});             
       controllers.get("ytBlog").preparePostItems("sidebar.news");
       client.Switcher.resizeYtSideBar();
}
client.blocks.BlockSidebarNews.prototype.viewBlock = function(id)
{
    this.open();
}
client.blocks.BlockSidebarNews.prototype.getPermalink = function()
{
    return "/" + this.section + "/{url}/";   
}
client.blocks.BlockSidebarGroups = function(view, controller, name)
{
    client.blocks.BlockSidebarGroups.baseConstructor.call(this, view, controller, name);
    this.refreshUrl = "/" + this.section + "/groups/get";
};
client.extendClass(client.blocks.BlockSidebarGroups, client.blocks.BlockAjax);
client.blocks.BlockSidebarGroups.prototype.prepare = function()
{
    var c = this.controllerName;   
       controllers.get("ytBlog").preparePostItems("sidebar.groups");
       client.Switcher.resizeYtSideBar();
}
client.blocks.BlockSidebarGroups.prototype.viewBlock = function(id)
{
    this.open();
}
client.blocks.BlockSidebarGroups.prototype.getPermalink = function()
{
    return "/" + this.section + "/{url}/";   
}
client.blocks.BlockSidebarContests = function(view, controller, name)
{
    client.blocks.BlockSidebarContests.baseConstructor.call(this, view, controller, name);
    this.refreshUrl = "/" + this.section + "/contests/get";
};
client.extendClass(client.blocks.BlockSidebarContests, client.blocks.BlockAjax);
client.blocks.BlockSidebarContests.prototype.prepare = function()
{
    var c = this.controllerName;   
       var p = this;
       p.prep.setRedLink(p.getSelector("actionOpenList"), function(){
		    	$(p.getSelector("sidebarContestsWorks")).hide();
		    	$(p.getSelector("sidebarContestsList")).show();	    	
	    	});
       p.prep.setRedLink(p.getSelector("actionOpenWorks"), function(){
		    	$(p.getSelector("sidebarContestsWorks")).show();
		    	$(p.getSelector("sidebarContestsList")).hide();	    	
	    	});
       var c = controllers.get("ytContests");
	   p.prep.setLink(p.getSelector("actionOpenStage"), function(){controllers.get("ytContests").openStage(c.getEmbeddedParam($(this),"stage","Id"))});    
	   p.prep.setLink(p.getSelector("actionOpenStanding"), function(){c.openStanding(c.getEmbeddedParam($(this),"standing","Id"))});    
       client.Switcher.resizeYtSideBar();
}
client.blocks.BlockSidebarContests.prototype.viewBlock = function(id)
{
    this.open();
}
client.blocks.BlockSidebarContests.prototype.getPermalink = function()
{
    return "/" + this.section + "/{url}/";   
}
client.blocks.BlockProfilePageMenu = function(view, controller, name)
{
    client.blocks.BlockProfilePageMenu.baseConstructor.call(this, view, controller, name);
    this.refreshUrl =  "//get";
};
client.extendClass(client.blocks.BlockProfilePageMenu, client.blocks.BlockAjax);
client.blocks.BlockProfilePageMenu.prototype.prepare = function()
{
    var c = this.controllerName;   
	    var id = pages.get('profile').viewProfileId;
	    this.prep.setLink(this.getSelector("actionOpenProfile"), function(){controllers.get('ytProfile').viewProfile(id)});    
	    this.prep.setLink(this.getSelector("actionShowBlog"), function(){controllers.get('ytProfile').viewBlog(id)});
		this.prep.setLink(this.getSelector("actionShowFriends"), function(){controllers.get('ytProfile').viewFriends(id)});
		this.prep.setLink(this.getSelector("actionShowFavourites"), function(){controllers.get('ytProfile').viewFavorites(id)});
	    this.prep.setLink(this.getSelector("actionShowAlbums"), function(){controllers.get('ytProfile').viewAlbums(id)});
	    this.prep.setLink(this.getSelector("actionShowUserContests"), function(){controllers.get('ytProfile').viewContests(id)});
		this.prep.setRedLink(this.getSelector("actionShowContests"), function(){pages.get('mainpage.contests').open();});
        client.drag.hide();
 		client.Switcher.resizeYtSideBar();
	    this.prep.setMainMenu(pages.get("profile").upperMenuStyle);    
}
client.blocks.BlockProfilePageMenu.prototype.viewBlock = function(id)
{
    this.open();
}
client.blocks.BlockProfilePageMenu.prototype.getPermalink = function()
{
    return ;   
}
client.blocks.BlockFriends = function(view, controller, name)
{
    client.blocks.BlockFriends.baseConstructor.call(this, view, controller, name);
    this.refreshUrl =  "/friends/get";
};
client.extendClass(client.blocks.BlockFriends, client.blocks.BlockAjax);
client.blocks.BlockFriends.prototype.prepare = function()
{
    var c = this.controllerName;   
        this.prep.setRedLink(this.getSelector("actionOpenUserProfile"), function(){controllers.get("ytProfile").viewEmbeddedProfile($(this), "friendInfoBox")});
        pages.get("profile.pageMenu").prepare();
        client.Decor.alignGridBlock(this.getSelector("grid"), "friendInfoBox");
        client.drag.setDraggable(this.getSelector("drag"));
        this.prep.setKeyAny(this.getSelector("friendName"),pages.get("profile.friends").LoadSearchResults);
        pages.get("profile.friendsSearchResults").view.id = pages.get("profile.friends").view.id;
        pages.get("profile.friendsSearchResults").view.page = 1;
        pages.get("profile.friendsSearchResults").view.like = "";
        pages.get("profile.friendsSearchResults").show();
}
client.blocks.BlockFriends.prototype.viewBlock = function(id)
{
    this.open();
}
client.blocks.BlockFriends.prototype.getPermalink = function()
{
    return "/friends/" + this.view.id + ".html";   
}
client.blocks.BlockFriendsSearchResults = function(view, controller, name)
{
    client.blocks.BlockFriendsSearchResults.baseConstructor.call(this, view, controller, name);
    this.refreshUrl =  "/friendsearch/get";
};
client.extendClass(client.blocks.BlockFriendsSearchResults, client.blocks.BlockAjax);
client.blocks.BlockFriendsSearchResults.prototype.prepare = function()
{
    var c = this.controllerName;   
        this.prep.setRedLink(this.getSelector("actionOpenUserProfile"), function(){controllers.get("ytProfile").viewEmbeddedProfile($(this), "friendInfoBox")});
        client.Switcher.resizeYtSideBar();
        client.Decor.alignGridBlock(this.getSelector("grid"), "friendInfoBox");
        client.drag.setDraggable(this.getSelector("drag"));
        this.prep.setRedLink(this.getSelector("actionNextPage"), function(){
	    	var p = pages.get("profile.friendsSearchResults");
	    	p.switchPageToNext();});
        this.prep.setPagingButton(this.getSelector("pagingNumber"), function(){
	    	var c = controllers.get("ytComments");
	    	var p = pages.get("profile.friendsSearchResults");
	    	p.switchPage(c.getEmbeddedParam($(this), "pagingNumber", "PageId"));});
}
client.blocks.BlockFriendsSearchResults.prototype.viewBlock = function(id)
{
    this.open();
}
client.blocks.BlockFriendsSearchResults.prototype.getPermalink = function()
{
    return "/" + this.section + "/{url}/";   
}
client.blocks.BlockFriends.prototype.LoadSearchResults = function()
{
	var p = pages.get("profile.friendsSearchResults");
    p.view.like = $(pages.get("profile.friends").getSelector("friendName")).attr("value");	            
    p.view.page = 1;
    p.view.id = pages.get("profile.friends").view.id;
    p.show();
}
client.blocks.BlockFriendsSearchResults.prototype.switchPage = function(pageNumber)
{
	var p = pages.get("profile.friendsSearchResults");
    p.view.page = pageNumber;
    p.view.id = pages.get("profile.friends").view.id;
    p.show();
}
client.blocks.BlockFriendsSearchResults.prototype.switchPageToNext = function(sender)
{
	var p = pages.get("profile.friendsSearchResults");
	if (p.view.page == 0) p.view.page = 1;
    p.view.id = pages.get("profile.friends").view.id;
    p.view.page++;
    p.show();
}
client.blocks.BlockFavorites = function(view, controller, name)
{
    client.blocks.BlockFavorites.baseConstructor.call(this, view, controller, name);
    this.refreshUrl =  "/favorites/get";
};
client.extendClass(client.blocks.BlockFavorites, client.blocks.BlockAjax);
client.blocks.BlockFavorites.prototype.prepare = function()
{
    var c = this.controllerName;   
        var p = pages.get('profile.favorites');
        $(this.getSelector("favoriteFolder")).each(
    	    function(index){
    	            var sender = $(this);
    	            p.prep.setPanelSwitchRef(sender.find(".collapsed"),
					    sender.find(".expanded"), 
						'expand', 'collapse');
					sender.find(".expand").click(function(){
            	            p.viewFolder(controllers.get('ytProfile').getEmbeddedParam($(this), "favoriteFolder", "FolderId"));
    	                });    	                
   	        });
        var c = controllers.get('ytAlbums');
	    controllers.get("ytBlog").preparePostItems("profile.favorites");
		p.prep.setAction(p.getSelector("actionOpenProfileBox"), function(){
	    	controllers.get("ytProfile").viewProfile(c.getEmbeddedParam($(this), "user", "Id"))});
   	    p.prep.setAction(p.getSelector("actionOpenAlbum"), function(){
	    	c.openAlbum(c.getEmbeddedParam($(this), "album", "Id"))}); 
        pages.get("profile.pageMenu").prepare();
}
client.blocks.BlockFavorites.prototype.viewBlock = function(id)
{
    this.open();
}
client.blocks.BlockFavorites.prototype.getPermalink = function()
{
    return "/favorites/" + this.view.id + ".html";   
}
client.blocks.BlockFavorites.prototype.viewFolder = function(id)
{   
    var p = pages.get('profile.favorites'); 
    var f = 'favoriteFolder' + id;
    p.prep.getAjaxPanel(p.getSelector(f),
	  		 "/favorites/folder/get",
   	  		 function(){
	  		 	return {folderId:id, profileId: p.view.id};
	  		 },
	  		 function(){
	  		 	var favPage = pages.get('profile.favorites');
				favPage.prep.setAction(favPage.getSelector(f + " .actionOpenProfileBox"), function(){
			    	var c = controllers.get("ytProfile");
			    	c.viewProfile(c.getEmbeddedParam($(this), "user", "Id"))});
		    	favPage.prep.setRedLink(favPage.getSelector(f + " .actionOpenProfileLink"), function(){
			    	var c = controllers.get("ytProfile");
			    	c.viewProfile(c.getEmbeddedParam($(this), "user", "Id"))});
    	    	favPage.prep.setRedLink(favPage.getSelector(f + " .actionOpenAlbum"), function(){
			    	var c = controllers.get("ytAlbums");
			    	c.openAlbum(c.getEmbeddedParam($(this), "album", "Id"))});
			    var c = controllers.get('ytAlbums');
		      controllers.get("ytBlog").preparePostItems("profile.favorites");
                client.drag.setDraggable(favPage.getSelector(f + " .drag"));
		        client.Switcher.resizeYtSideBar(); 	
                client.Decor.alignGridBlock(favPage.getSelector("grid"), "favoriteItem");
			  });
}
client.blocks.BlockAlbums = function(view, controller, name)
{
    client.blocks.BlockAlbums.baseConstructor.call(this, view, controller, name);
    this.refreshUrl =  "/albums/get";
};
client.extendClass(client.blocks.BlockAlbums, client.blocks.BlockAjax);
client.blocks.BlockAlbums.prototype.prepare = function()
{
    var c = this.controllerName;   
        var ac = controllers.get('ytAlbums');
        this.prep.setRoundBtnAction(this.getSelector("actionAddPhotoAlbum"), function(){ac.showEditAlbumForm(1, 0)});
        this.prep.setRoundBtnAction(this.getSelector("actionAddAudioAlbum"), function(){ac.showEditAlbumForm(2, 0)});
        this.prep.setRoundBtnAction(this.getSelector("actionAddVideoAlbum"), function(){ac.showEditAlbumForm(3, 0)});
        this.prep.setRoundBtnAction(this.getSelector("actionAddTextsAlbum"), function(){ac.showEditAlbumForm(4, 0)});
        this.prep.setAction(this.getSelector("actionExpandPhotoAlbum"), function(){ac.expandAlbums("Photo", true)});
        this.prep.setAction(this.getSelector("actionExpandAudioAlbum"), function(){ac.expandAlbums("Audio", true)});
        this.prep.setAction(this.getSelector("actionExpandVideoAlbum"), function(){ac.expandAlbums("Video", true)});
        this.prep.setAction(this.getSelector("actionExpandTextsAlbum"), function(){ac.expandAlbums("Texts", true)});
        client.CheckBox.initAll(this.getSelector("onlyCopyrightedPhotoAlbum"), function(){ac.expandAlbums("Photo")});
        client.CheckBox.initAll(this.getSelector("onlyPersonalPhotoAlbum"), function(){ac.expandAlbums("Photo")});        
        client.CheckBox.initAll(this.getSelector("onlyCopyrightedAudioAlbum"), function(){ac.expandAlbums("Audio")});
        client.CheckBox.initAll(this.getSelector("onlyPersonalAudioAlbum"), function(){ac.expandAlbums("Audio")});        
        client.CheckBox.initAll(this.getSelector("onlyCopyrightedVideoAlbum"), function(){ac.expandAlbums("Video")});
        client.CheckBox.initAll(this.getSelector("onlyPersonalVideoAlbum"), function(){ac.expandAlbums("Video")});        
        client.CheckBox.initAll(this.getSelector("onlyCopyrightedTextsAlbum"), function(){ac.expandAlbums("Texts")});
        client.CheckBox.initAll(this.getSelector("onlyPersonalTextsAlbum"), function(){ac.expandAlbums("Texts")});        
	this.prep.setBtnAction(this.getSelector("actionUploadContent"), function(){ac.showUploadAlbumForm(ac.getEmbeddedParam($(this), "emptyAlbumLabel", "Id"))});
	this.prep.setBtnAction(this.getSelector("actionImportPhotos"), function(){ac.importOldAlbums(1);});
	this.prep.setBtnAction(this.getSelector("actionImportAudio"), function(){ac.importOldAlbums(2);});
	this.prep.setBtnAction(this.getSelector("actionImportVideo"), function(){ac.importOldAlbums(3);});
        this.prep.setLink(this.getSelector("actionOpenAlbum"), function(){
            var c = controllers.get('ytAlbums');
            c.openAlbum(c.getEmbeddedParam($(this), "albumBox", "Id"))});
        client.drag.setDraggable(this.getSelector("album.drag"));
        pages.get("profile.pageMenu").prepare();
		ac.expandAlbums("Photo");
		ac.expandAlbums("Audio");
		ac.expandAlbums("Video");
		ac.expandAlbums("Texts");
}
client.blocks.BlockAlbums.prototype.viewBlock = function(id)
{
    this.open();
}
client.blocks.BlockAlbums.prototype.getPermalink = function()
{
    return "/albums/" + this.view.id + ".html";   
}
client.blocks.BlockBlog = function(view, controller, name)
{
    client.blocks.BlockBlog.baseConstructor.call(this, view, controller, name);
    this.refreshUrl =  "/blogs/get";
};
client.extendClass(client.blocks.BlockBlog, client.blocks.BlockAjax);
client.blocks.BlockBlog.prototype.prepare = function()
{
    var c = this.controllerName;   
		var c = controllers.get('ytBlog');
        this.prep.setRoundBtn2Action(this.getSelector("actionAddPost"),function(){
        	c.showEditPostForm(0, pages.get("profile.blog").view.id)});       
        this.prep.setRoundBtn2Action(this.getSelector("actionEditBlog"),function(){
        	c.showBlogOptions()});       
        this.prep.setRoundBtn2Action(this.getSelector("actionShowUnpublishedItems"),function(){
        	pages.get("blog.blogUnconfirmedPosts").open();});       
	  	this.prep.setRedLink(this.getSelector("actionOpenPost"),function(){c.openPost(c.getEmbeddedParam($(this), "post", "Id"), 2)});       
		if (this.view.page == 0) this.view.page = 1;
		this.prep.setRedLink(this.getSelector("actionNextPage"), function(){
	    	var p = pages.get("profile.blog");	    	
	    	p.view.page++;
	    	p.open();});
    	this.prep.setPagingButton(this.getSelector("pagingNumber"), function(){
	    	var c = controllers.get("ytBlog");
	    	var p = pages.get("profile.blog");
	    	p.view.page = c.getEmbeddedParam($(this), "pagingNumber", "PageId");
	    	p.open();
	    	});
	    c.preparePostItems("profile.blog");
        pages.get("profile.pageMenu").prepare();
}
client.blocks.BlockBlog.prototype.viewBlock = function(id)
{
    this.open();
}
client.blocks.BlockBlog.prototype.getPermalink = function()
{
    return "/blogs/" + this.view.id + ".html?page=" + this.view.page;   
}
client.blocks.BlockBlogUnconfirmedPosts = function(view, controller, name)
{
    client.blocks.BlockBlogUnconfirmedPosts.baseConstructor.call(this, view, controller, name);
    this.refreshUrl =  "/blog/unconfirmedPosts/get";
};
client.extendClass(client.blocks.BlockBlogUnconfirmedPosts, client.blocks.BlockAjax);
client.blocks.BlockBlogUnconfirmedPosts.prototype.prepare = function()
{
    var c = this.controllerName;   
		var c = controllers.get('ytBlog');		
	  	this.prep.setRedLink(this.getSelector("actionOpenPost"),function(){c.openPost(c.getEmbeddedParam($(this), "post", "Id"))});       
        if (this.view.page == 0) this.view.page = 1;
        this.prep.setRedLink(this.getSelector("actionNextPage"), function(){
	    	var p = pages.get("blog.blogUnconfirmedPosts");	    	
	    	p.view.page++;
	    	p.open();});
    	this.prep.setPagingButton(this.getSelector("pagingNumber"), function(){
	    	var c = controllers.get("ytBlog");
	    	var p = pages.get("blog.blogUnconfirmedPosts");
	    	p.view.page = c.getEmbeddedParam($(this), "pagingNumber", "PageId");
	    	p.open();
	    	});
        pages.get("profile.pageMenu").prepare();             
}
client.blocks.BlockBlogUnconfirmedPosts.prototype.viewBlock = function(id)
{
    this.open();
}
client.blocks.BlockBlogUnconfirmedPosts.prototype.getPermalink = function()
{
    return "/blog/unconfirmedPosts?page=" + this.view.page;   
}
client.blocks.BlockUserContests = function(view, controller, name)
{
    client.blocks.BlockUserContests.baseConstructor.call(this, view, controller, name);
    this.refreshUrl =  "/userContests/get";
};
client.extendClass(client.blocks.BlockUserContests, client.blocks.BlockAjax);
client.blocks.BlockUserContests.prototype.prepare = function()
{
    var c = this.controllerName;   
        var p = pages.get('profile.userContests');
	    var c = controllers.get('ytContests');
	    controllers.get("ytBlog").preparePostItems("profile.userContests");
		this.prep.setLink(this.getSelector("actionOpenStage"), function(){
        	controllers.get("ytContests").openStage(c.getEmbeddedParam($(this), "stage", "Id"))});    
        this.prep.setLink(this.getSelector("actionOpenStanding"), function(){
        	controllers.get("ytContests").openStanding(c.getEmbeddedParam($(this), "standing", "Id"))});    
        pages.get("profile.pageMenu").prepare();             
}
client.blocks.BlockUserContests.prototype.viewBlock = function(id)
{
    this.open();
}
client.blocks.BlockUserContests.prototype.getPermalink = function()
{
    return "/userContests/" + this.view.id + ".html";   
}
client.blocks.BlockAlbum = function(view, controller, name)
{
    client.blocks.BlockAlbum.baseConstructor.call(this, view, controller, name);
    this.refreshUrl =  "/album/get";
};
client.extendClass(client.blocks.BlockAlbum, client.blocks.BlockAjax);
client.blocks.BlockAlbum.prototype.prepare = function()
{
    var c = this.controllerName;   
        this.prep.setBtnAction(this.getSelector("specTag"),function(){});
        var c = controllers.get('ytAlbums');
        this.prep.setRoundBtn2Action(this.getSelector("actionEditAlbum"),function(){c.showEditAlbumForm(1, pages.get("albums.album").view.id)});       
        this.prep.setRoundBtn2Action(this.getSelector("actionAddText"),function(){c.showAddTextForm(pages.get("albums.album").view.id)});
        this.prep.setRoundBtn2Action(this.getSelector("actionUploadContent"),function(){c.showUploadAlbumForm(pages.get("albums.album").view.id)});
        this.prep.setRoundBtn2Action(this.getSelector("actionEditAlbumItems"),function(){c.showEditAlbumItemsForm(1, pages.get("albums.album").view.id)});       
        this.prep.setRoundBtn2Action(this.getSelector("actionEditUnconfirmedAlbumItems"),function(){c.showEditAlbumItemsForm(0, pages.get("albums.album").view.id)});       
        this.prep.setRoundBtn2Action(this.getSelector("actionDeleteAlbum"),function(){c.showDeleteAlbumForm(pages.get("albums.album").view.id)});       
        this.prep.setAction(this.getSelector("albumItem"), function(){c.openAlbumViewer(c.getEmbeddedParam($(this),"albumItem","Id"))});
        this.prep.setAction(this.getSelector("albumAudio"), function(){c.openAlbumViewerAudio(c.getEmbeddedParam($(this),"albumSongItem","Id"))});
        this.prep.setRedLink(this.getSelector("actionOpenText"), function(){c.openAlbumViewerTexts(c.getEmbeddedParam($(this),"albumTextItem","Id"))});
        this.prep.setAction(this.getSelector("albumVideo"), function(){c.openAlbumViewer(c.getEmbeddedParam($(this),"albumVideo","Id"))});
        this.prep.setRedLink(this.getSelector("actionOpenAlbumVideo"), function(){c.openAlbumViewer(c.getEmbeddedParam($(this),"albumVideoItem","Id"))});
        client.drag.setDraggable(this.getSelector("album.drag"));     
        client.drag.setDraggable(this.getSelector("albumPhoto.drag"));
        client.drag.setDraggable(this.getSelector("albumVideo.drag"));
        client.drag.setDraggable(this.getSelector("albumAudio.drag"));
        client.drag.setDraggable(this.getSelector("albumTexts.drag"));
        var p = this;
        this.prep.setAction(this.getSelector("songRoundPlay"), function(){c.playLocalMp3(p, $(this))});
        this.prep.setAction(this.getSelector("songRoundStop"), function(){c.stopLocalMp3(p, $(this))});
        this.prep.setRedLink(this.getSelector("actionAddToPlayList"),function(){
                var c = controllers.get("ytSidebar");
                c.addPlaylistItem(c.getEmbeddedParam($(this),"albumSongItem","Id"));
        });    
        this.prep.setRedLink(this.getSelector("actionReturnToAlbumList"),function(){controllers.get("ytProfile").viewAlbums(c.getEmbeddedParam($(this),"user","UserId"))});       
        this.prep.setRedLink(this.getSelector("actionAddAlbumToPlaylist"),function(){
             var c = controllers.get("ytSidebar");             
             var id = c.getEmbeddedParam($(this), "albumDescription", "Id");
             c.addAlbumToPlaylist(id); });
        pages.get("profile.pageMenu").prepare();
}
client.blocks.BlockAlbum.prototype.viewBlock = function(id)
{
    this.open();
}
client.blocks.BlockAlbum.prototype.getPermalink = function()
{
    return "/album/" + this.view.id + ".html";   
}
client.blocks.BlockAlbumViewer = function(view, controller, name)
{
    client.blocks.BlockAlbumViewer.baseConstructor.call(this, view, controller, name);
    this.refreshUrl =  "/view/get";
};
client.extendClass(client.blocks.BlockAlbumViewer, client.blocks.BlockAjax);
client.blocks.BlockAlbumViewer.prototype.prepare = function()
{
    var c = this.controllerName;   
		var albumController = controllers.get('ytAlbums');
		var self = this;
		this.prep.setAction
		(
			this.getSelector("actionSetQualityLow"), 
			function(){ albumController.reopenAlbumViewer(0); }
		);
		this.prep.setAction
		(
			this.getSelector("actionSetQualityMed"), 
			function(){ albumController.reopenAlbumViewer(1); }
		);
		this.prep.setAction
		(
			this.getSelector("actionSetQualityMed"), 
			function(){ albumController.reopenAlbumViewer(1); }
		);
		this.prep.setAction
		(
			this.getSelector("actionSetQualityHigh"), 
			function(){ albumController.reopenAlbumViewer(2) }
		);
		this.prep.setAction
		(
			this.getSelector("actionSetQualitySrc"), 
			function(){ albumController.reopenAlbumViewer(3) }
		);
		this.prep.setAction
		(
			this.getSelector("actionShowComments"), 
			function(){ self.scrollToComments(); }
		);
		this.prep.setAction
		(
			this.getSelector("viewerBackToAlbum"), 
			function(){ albumController.openAlbum(self.album); }
		);
        $(this.getSelector("albumItem")).each
		(function(index){
        	$(this).click(function(){ self.hideTile(); self.viewItem(index); })
		});
		this.prep.setAction
		(
			this.getSelector("actionSetStretchedView"), 
			function()
			{ 
				self.isStretched = true;
				self.loadCompleted();
			}
		);
		this.prep.setAction
		(
			this.getSelector("actionSetFixedView"), 
			function()
			{ 
				self.isStretched = false;
				self.loadCompleted();
			}
		);
		$(this.getSelector("viewerBackToAlbum")).hover
		(
			function() { $(".viewerBackToAlbumBox").animate({opacity: 1}); },
			function() { $(".viewerBackToAlbumBox").animate({opacity: 0.5}); }
		)
        client.drag.setDraggable(this.getSelector("albumPhoto.drag"));
        client.drag.setDraggable(this.getSelector("albumVideo.drag"));
        client.drag.setDraggable(this.getSelector("albumAudio.drag"));
        client.drag.setDraggable(this.getSelector("albumTexts.drag"));
        this.photoDiv1 = $(this.getSelector("albumViewerPhoto1")).show().css({opacity: '0'});
        this.photoDiv2 = $(this.getSelector("albumViewerPhoto2")).show().css({opacity: '0'});
        this.photo1 = this.photoDiv1.find("img");
        this.photo2 = this.photoDiv2.find("img");
        this.photo1.bind('load', this.loadCompleted);
        this.photo2.bind('load', this.loadCompleted);
        this.photo1Index = -1;
        this.photo2Index = -1;
        this.currentPhoto = 1;
        this.firstLoad = true;
        this.photoNext = $(this.getSelector("albumViewerNextImage"));
        $(this.getSelector("ribbonItem")).each
		(function(index){
            $(this).css({ opacity: 0.7, marginRight: 20 })
				   .mouseenter(function(){$(this).animate({opacity:1})})
				   .mouseleave(function(){$(this).animate({opacity:0.7})});
        });
        this.ribbon = $(this.getSelector("viewerRibbon"));
        this.isTileExpanded = false;
        this.tileButton = $(this.getSelector("actionTile"));
        this.tileButton.click(this.expandTile);
        this.dragging = false;
        this.dragTotal = 0;
        this.dragPos = { x: 0, y: 0 };
        this.clicker = $("#albumViewerOverlayClicker");
        this.clicker.click(this.viewNextItem)
					.mousedown(this.dragStart)
					.mousemove(this.drag)
					.mouseup(this.dragEnd)
					.mouseleave(this.dragEnd).width('100%');
		this.modalBg = $('#albumViewerBackground');
		this.modalBg.hide();
		this.resizeBg();       
		this.viewItem(this.currentIndex);    
        client.Switcher.hideUpperBanner("#upperBanner", "#upperMenu");
        setTimeout(function(){controllers.get("ytSidebar").minimizeSidebar(false);}, 1);
        client.Switcher.scrollToPageTop();
		if (this.elementsType != "photo") 
		{
			this.videoContainer = $("#albumViewerVideoHolder");
			this.videoContainer.height($(window).height());
			client.Video.initAt(this.videoContainer, $(window).width(), $(window).height());
			this.clicker.hide();
			$(this.getSelector('viewerQualityButtons')).hide();
			$(this.getSelector('viewerHideUI.comment')).hide();
		}
		else
		{
			this.qualityButtons = $(this.getSelector('viewerQualityButtons'));
			this.qualityButtons.width(480);
			$(this.getSelector('actionHideUI')).click
			(function(){
				setInterfaceVisibility(self.qualityButtons.css('display') == 'none');
			});
			$("#albumViewerVideoHolder").hide();
			this.clicker.css("user-select", "none");
		}
		client.drag.hide();
        this.prep.setMainMenu("dark");    
		client.Switcher.resizeYtSideBar();
}
client.blocks.BlockAlbumViewer.prototype.viewBlock = function(id)
{
    this.open();
}
client.blocks.BlockAlbumViewer.prototype.getPermalink = function()
{
    return "/view/" + this.view.id + ".html?itemQuality="+this.view.quality;   
}
client.blocks.BlockAlbumViewer.prototype.viewNextItem = function()
{
    var p = pages.get("albums.albumViewer");
    if (p.dragTotal == 0)
        if (p.currentIndex < p.elements.length - 1)
            p.viewItem(p.currentIndex + 1);
    p.dragTotal = 0;
}
client.blocks.BlockAlbumViewer.prototype.viewItem = function(index)
{ 
    var p = pages.get("albums.albumViewer");
    if (!(p.firstLoad)) if (p.currentIndex == index) return;
    p.prevIndex = p.currentIndex;
    p.currentIndex = index;
    var prevElem = p.elements[p.prevIndex];
    var elem = p.elements[index];
	if (elem.quality == 0)
	{
		$('.actionSetQualityLow').removeClass('off');
		$('.actionSetQualityMed').addClass('off');
		$('.actionSetQualityHigh').addClass('off');
		$('.actionSetQualitySrc').addClass('off');
	}
	else if (elem.quality == 1)
	{
		$('.actionSetQualityLow').addClass('off');
		$('.actionSetQualityMed').removeClass('off');
		$('.actionSetQualityHigh').addClass('off');
		$('.actionSetQualitySrc').addClass('off');		
	}
	else if (elem.quality == 2)
	{
		$('.actionSetQualityLow').addClass('off');
		$('.actionSetQualityMed').addClass('off');
		$('.actionSetQualityHigh').removeClass('off');
		$('.actionSetQualitySrc').addClass('off');		
	}
	else
	{
		$('.actionSetQualityLow').addClass('off');
		$('.actionSetQualityMed').addClass('off');
		$('.actionSetQualityHigh').addClass('off');
		$('.actionSetQualitySrc').removeClass('off');		
	}
    p.scrollRibbon(index);
    $(p.getSelector("itemName")).html(elem.name);
    $(p.getSelector("itemCommentsCount")).html(elem.comments);
    $(p.getSelector("itemRating")).html(elem.rating + "%").
    	removeClass("ratingBest").removeClass("ratingHigh").removeClass("ratingAverage").
    	removeClass("ratingLow").removeClass("ratingZero").addClass(elem.ratingClass);    
    $(p.getSelector("currentItem")).html(index + 1);
	if (p.elementsType == "photo")
	{
		$("#loader_image").remove();
		$(p.getSelector("viewItem" + elem.id)).append("<img id=\"loader_image\" src=\"/images/albums/loader-black.gif\" style=\"position: relative; top: -42px; left: 24px\"></img>");
		if (p.currentPhoto == 1)
		{
		    p.photo1Index = index;
		    p.photo1.attr("src", elem.filename);
		}
		else    
		{
		    p.photo2Index = index;
		    p.photo2.attr("src","").attr("src", elem.filename);
		}
		if (!elem.hasHd) $(p.getSelector("actionSetQualityMed")).hide();
		else $(p.getSelector("actionSetQualityMed")).show();
		if (!elem.hasTrueHd) $(p.getSelector("actionSetQualityHigh")).hide();
		else $(p.getSelector("actionSetQualityHigh")).show();
		var autoSizeWidth = 400;
		if (!elem.hasHd) autoSizeWidth -= 40;
		if (!elem.hasTrueHd) autoSizeWidth -= 40;
		client.Switcher.addAutosizeItem($(p.getSelector('viewerQualityButtons')), ''+autoSizeWidth, "center");
	}
	else
	{
		if (!client.Video.play(elem.videos))
			client.Video.initAt("#albumViewerVideoHolder", $(window).width(), $(window).height());
	}
    $(p.getSelector("viewItem" + prevElem.id)).animate({opacity:0.7, marginLeft: 0, marginRight: 20}).removeClass("selected");
    $(p.getSelector("viewItem" + elem.id)).animate({opacity:1, marginLeft: 20, marginRight: 0}).addClass("selected");
    var details = pages.get("albums.albumViewerDetails");
    details.view.prefix = "item";
    details.view.id = elem.id;
    details.show();  
    controllers.get("ytComments").showComments(elem.id, 1, 1);  
    p.view.id = elem.id;
    pages.setHistory(p);
    p.firstLoad = false;
}    
client.blocks.BlockAlbumViewer.prototype.scrollRibbon = function(index)
{
    var p = pages.get("albums.albumViewer");
    var selector = p.getSelector("viewerRibbon");
    var total = $(selector)[0].scrollHeight;
    var pos = total * (index - 3) / p.elements.length;
    if (pos < 0) pos = 0; 
    $(selector).animate({scrollTop: pos});
}
client.blocks.BlockAlbumViewer.prototype.resizeBg = function()
{
    var p = pages.get("albums.albumViewer");
    var totalHeight = $(window).height();
    var topMargin = 70;
    $("#albumViewerBg").height(totalHeight);
    $(p.getSelector("albumViewerPhoto")).height(totalHeight);
    $("#albumViewerOverlayClicker").height(totalHeight);
    $(p.getSelector("albumViewerPhoto.secondLayer")).height(totalHeight).css({marginTop:(0-totalHeight)+"px"});
    $("#albumViewerOverlay").height(totalHeight).css({marginTop:(0-totalHeight) + "px"});    
    $(p.getSelector("viewerRibbon")).height(totalHeight - topMargin - 135);
	this.modalBg.height(totalHeight);
	this.modalBg.width('100%');
}
client.blocks.BlockAlbumViewer.prototype.loadCompleted = function()
{
    var wh = $(window).height();
    var ww = $(window).width();
    var p = pages.get("albums.albumViewer");    
 	var elem = p.elements[p.currentIndex];
    var d1 = null;
    var d2;
    var photo;
    if (p.photo1Index == p.currentIndex)
    {
        d1 = p.photoDiv1;
        d2 = p.photoDiv2;
        photo = p.photo1;
    }
    if (p.photo2Index == p.currentIndex)
    {
        d1 = p.photoDiv2;
        d2 = p.photoDiv1;
        photo = p.photo2;    
    }
    if (d1 == null) return;
    d1.show().animate({opacity: '1'}, 'slow');
    d2.stop().animate({opacity: '0'}, 'slow');
	var img = $('.albumViewerImage', d1);
	if (p.isStretched)
	{
		var w = elem.width;
		var h = elem.height;
		if (ww > wh) img.width(w/h * wh).height(wh);
		else img.width(ww).height(h/w * ww);
		$(p.getSelector("actionSetFixedView")).addClass('off');
		$(p.getSelector("actionSetStretchedView")).removeClass('off');
	}
	else 
	{
		img.width('').height('');
		$(p.getSelector("actionSetStretchedView")).addClass('off');
		$(p.getSelector("actionSetFixedView")).removeClass('off');
	}
    var h = photo.attr('height'); 
    var w = photo.attr('width');
    var mt = (wh - h)/2;
    var ml = (ww - w)/2;
    if (mt < 0) mt = 0;
    if (ml < 0) ml = 0;
    d1.css('margin-top', mt).css('margin-left', ml);    
    var sho = (h - wh) / 2;
    if (sho < 0) sho = 0;
    var swo = (w - wh) / 2;
    if (swo < 0) swo = 0;   
    d1.parent().scrollTop(sho).scrollLeft(swo);
    p.currentPhoto++;
    if (p.currentPhoto == 3) p.currentPhoto = 1;   
    if (p.currentIndex < p.elements.length - 1)
        p.photoNext.attr("src", p.elements[p.currentIndex + 1].filename);
	if (p.elementsType == 'photo')
		$("#loader_image").remove();
}
client.blocks.BlockAlbumViewer.prototype.dragStart = function(e)
{
    var p = pages.get("albums.albumViewer");
    p.dragging = true;
    p.dragPos.x = e.screenX; 
    p.dragPos.y = e.screenY; 
    p.clicker.css("cursor", "move");
}
client.blocks.BlockAlbumViewer.prototype.drag = function(e)
{
    var p = pages.get("albums.albumViewer");
    if (p.dragging)
    {
        var container = null;
        if (p.photo1Index == p.currentIndex)
            container = p.photoDiv1.parent();
        if (p.photo2Index == p.currentIndex)
            container = p.photoDiv2.parent();
        if (container != null)
        if (p.dragPos.x != 0)
        {
            var xVector = p.dragPos.x - e.screenX;
	    	var yVector = p.dragPos.y - e.screenY;
    		var newX = container.scrollLeft() + xVector;
		    var newY = container.scrollTop() + yVector;
		    container.scrollLeft(newX).scrollTop(newY);
		    p.dragTotal += xVector + yVector;
		}
		p.dragPos.x = e.screenX; 
        p.dragPos.y = e.screenY; 
    }
}
client.blocks.BlockAlbumViewer.prototype.dragEnd = function(e)
{
    var p = pages.get("albums.albumViewer");
    p.dragging = false; 
    p.clicker.css("cursor", "default")
}
client.blocks.BlockAlbumViewer.prototype.expandTile = function()
{
    var p = pages.get("albums.albumViewer");    
    if (!p.isTileExpanded)
    {
        p.isTileExpanded = true;
        p.ribbon.css("width",($(window).width() - 240) + "px").scrollTop(0);
		p.modalBg.show();
        p.tileButton.addClass("selected");
        p.ribbon.find(".albumName").show();
        p.ribbon.find(".ribbonItem").css({margin:"7px", opacity: 1});
		p.ribbon.css({ paddingLeft: '90px', marginTop: '0px' });
    }
    else 
    {
        p.hideTile();
        p.scrollRibbon(p.currentIndex);
    }
};
client.blocks.BlockAlbumViewer.prototype.hideTile = function()
{
    var p = pages.get("albums.albumViewer");    
    if (p.isTileExpanded)
    {
        p.isTileExpanded = false;
        p.ribbon.width(120);
		p.modalBg.hide();
        p.tileButton.removeClass("selected");
        p.ribbon.find(".albumName").hide();
        p.ribbon.find(".ribbonItem").css({margin:"0px", opacity: 0.7});
		p.ribbon.css({ paddingLeft: '0px', marginTop: '105px' });
    }
};
client.blocks.BlockAlbumViewer.prototype.scrollToComments = function()
{
	$('html, body').animate({ scrollTop: $('#commentsList').offset().top }, 'fast');
}
function setInterfaceVisibility(value)
{
	var p = pages.get("albums.albumViewer");
	if (value)
	{
		if (p.qualityButtons)
			p.qualityButtons.show();
		$(".viewerRibbon").show();
		$(".actionTile").show();
		$('.viewerBackToAlbum').show();
		$('.viewerBackToAlbumBox').show();
		$('.viewerMainBottomLine').show(); 
		$('#upperMenu').show();
		$('#rightSidebar').show(); 
		$('#rightCollapsedSidebar').show();
		$('.actionHideUI .hintBtnText').html("скрыть<br/>интерфейс");
	}
	else
	{
		if (p.qualityButtons)
			p.qualityButtons.hide();
		$(".viewerRibbon").hide();
		$(".actionTile").hide();
		$('.viewerBackToAlbum').hide();
		$('.viewerBackToAlbumBox').hide();
		$('.viewerMainBottomLine').hide(); 
		$('#upperMenu').hide();
		$('#rightSidebar').hide(); 
		$('#rightCollapsedSidebar').hide(); 
		$('.actionHideUI .hintBtnText').html("показать<br/>интерфейс"); 
	}
}
client.blocks.BlockAlbumViewerAudio = function(view, controller, name)
{
    client.blocks.BlockAlbumViewerAudio.baseConstructor.call(this, view, controller, name);
    this.refreshUrl =  "/audio/get";
};
client.extendClass(client.blocks.BlockAlbumViewerAudio, client.blocks.BlockAjax);
client.blocks.BlockAlbumViewerAudio.prototype.prepare = function()
{
    var c = this.controllerName;   
        var c = controllers.get('ytAlbums');       
        var p = this;
        this.prep.setExpander(this.getSelector("albumSongs"));
        this.prep.setRedLink(this.getSelector("actionReturnToAlbum"),function(){c.openAlbum(c.getEmbeddedParam($(this),"album","AlbumId"))});       
        client.drag.setDraggable(this.getSelector("drag"));      
        pages.get("profile.pageMenu").prepare();
        this.prep.setAction(this.getSelector("albumAudio"),function(){
            $(p.getSelector("albumAudioFrame")).removeClass("selected").addClass("selectable");
            $(this).find(".albumAudioFrame").addClass("selected").removeClass("selectable");
            p.viewNeighbour(c.getEmbeddedParam($(this),"albumAudio","Id"))});       
        this.prep.setRedLink(this.getSelector("actionAddAlbumToPlaylist"),function(){
             var c = controllers.get("ytSidebar");             
             var id = c.getEmbeddedParam($(this), "albumDescription", "Id");
             c.addAlbumToPlaylist(id); });
	    var details = pages.get("albums.albumViewerDetails");
    	details.view.prefix = "item";
    	details.view.id = this.view.id;
    	details.show(); 
	    controllers.get("ytComments").showComments(this.view.id, 1, 1);  
}
client.blocks.BlockAlbumViewerAudio.prototype.viewBlock = function(id)
{
    this.open();
}
client.blocks.BlockAlbumViewerAudio.prototype.getPermalink = function()
{
    return "/audio/" + this.view.id + ".html";   
}
client.blocks.BlockAlbumViewerAudio.prototype.viewNeighbour = function(id)
{
    var details = pages.get("albums.albumViewerDetails");
   	details.view.id = id;
   	details.show(); 
   	var p = pages.get("albums.albumViewerAudio");
   	p.view.id = id;
   	pages.setHistory(p);
   	controllers.get("ytComments").showComments(p.view.id, 1, 1);    
}
client.blocks.BlockAlbumViewerTexts = function(view, controller, name)
{
    client.blocks.BlockAlbumViewerTexts.baseConstructor.call(this, view, controller, name);
    this.refreshUrl =  "/text/get";
};
client.extendClass(client.blocks.BlockAlbumViewerTexts, client.blocks.BlockAjax);
client.blocks.BlockAlbumViewerTexts.prototype.prepare = function()
{
    var c = this.controllerName;   
        var c = controllers.get('ytAlbums');       
        var p = this;
        this.prep.setExpander(this.getSelector("albumItems"));
        this.prep.setRedLink(this.getSelector("actionReturnToAlbum"),function(){c.openAlbum(c.getEmbeddedParam($(this),"album","AlbumId"))});       
        client.drag.setDraggable(this.getSelector("drag"));
        pages.get("profile.pageMenu").prepare();
        this.prep.setAction
		(
			this.getSelector("albumTexts"),
			function()
			{
				var p = pages.get("albums.albumViewerTexts");
				var c = controllers.get('ytAlbums'); 
				$(p.getSelector("albumTextsFrame")).removeClass("selected")
												   .addClass("selectable");
				$(this).find(".albumTextsFrame")
					  .addClass("selected")
					  .removeClass("selectable");
				p.viewNeighbour(c.getEmbeddedParam($(this),"albumTexts","Id"))
			}
		);       
	    var details = pages.get("albums.albumViewerDetails");
    	details.view.prefix = "item";
    	details.view.id = this.view.id;
    	details.show(); 
	    controllers.get("ytComments").showComments(this.view.id, 1, 1);  
}
client.blocks.BlockAlbumViewerTexts.prototype.viewBlock = function(id)
{
    this.open();
}
client.blocks.BlockAlbumViewerTexts.prototype.getPermalink = function()
{
    return "/text/" + this.view.id + ".html";   
}
client.blocks.BlockAlbumViewerTexts.prototype.viewNeighbour = function(id)
{
    var details = pages.get("albums.albumViewerDetails");
   	details.view.id = id;
   	details.show(); 
   	var p = pages.get("albums.albumViewerTexts");
   	p.view.id = id;
   	pages.setHistory(p);
   	controllers.get("ytComments").showComments(p.view.id, 1, 1);     	
}
client.blocks.BlockAlbumViewerDetails = function(view, controller, name)
{
    client.blocks.BlockAlbumViewerDetails.baseConstructor.call(this, view, controller, name);
    this.refreshUrl =  "/view/details/get";
};
client.extendClass(client.blocks.BlockAlbumViewerDetails, client.blocks.BlockAjax);
client.blocks.BlockAlbumViewerDetails.prototype.prepare = function()
{
    var c = this.controllerName;   
        var c = controllers.get('ytAlbums');       
        var p = this;
        this.prep.setRedLink(this.getSelector("actionShowAuthorProfile"), function(){
	    	var c = controllers.get("ytProfile");
	    	c.viewProfile(c.getEmbeddedParam($(this), "user", "Id"))});
	  	this.prep.setAction(this.getSelector("albumItemVotePanel .voteUp"), function(){
	    	var c = controllers.get("ytVotes");
	    	c.voteUp(1, c.getEmbeddedParam($(this), "albumItemVotePanel", "Id"))});
	  	this.prep.setAction(this.getSelector("albumItemVotePanel .voteDown"), function(){
	    	var c = controllers.get("ytVotes");
	    	c.voteDown(1, c.getEmbeddedParam($(this), "albumItemVotePanel", "Id"))});
	    this.prep.setAction(this.getSelector("songRoundPlay"), function(){c.playLocalMp3(p, $(this))});
        this.prep.setAction(this.getSelector("songRoundStop"), function(){c.stopLocalMp3(p, $(this))});
	    this.prep.setRedLink(this.getSelector("actionAddToPlayList"),function(){
                var c = controllers.get("ytSidebar");
                var p = pages.get("albums.albumViewerDetails");
                c.addPlaylistItem(p.view.id);
        });   
        this.prep.setLink(this.getSelector("actionOpenStage"), function(){
        	controllers.get("ytContests").openStage(c.getEmbeddedParam($(this), "stage", "Id"))});    
        this.prep.setLink(this.getSelector("actionOpenStanding"), function(){
        	controllers.get("ytContests").openStanding(c.getEmbeddedParam($(this), "standing", "Id"))});    
	    client.Switcher.resizeYtSideBar();
}
client.blocks.BlockAlbumViewerDetails.prototype.viewBlock = function(id)
{
    this.open();
}
client.blocks.BlockAlbumViewerDetails.prototype.getPermalink = function()
{
    return "/view/" + this.view.id + ".html?itemQuality="+this.view.quality;   
}
client.blocks.BlockAlbumSelector = function(view, controller, name)
{
    client.blocks.BlockAlbumSelector.baseConstructor.call(this, view, controller, name);
    this.refreshUrl =  "/users/albumsList/get";
};
client.extendClass(client.blocks.BlockAlbumSelector, client.blocks.BlockAjax);
client.blocks.BlockAlbumSelector.prototype.prepare = function()
{
    var c = this.controllerName;   
        pages.get("albums.albumSelector").albumType = 0;
        pages.get("albums.albumSelector").albumId = 0;
        var p = this;
        $(this.getSelector("selectedAlbum")).addClass("selectable").removeClass("selectedItem");
        this.prep.setLink(this.getSelector("selectedAlbum"),function(){
            $(p.getSelector("selectedAlbum")).addClass("selectable").removeClass("selectedItem");
            $(this).removeClass("selectable").addClass("selectedItem");
            var c = controllers.get('ytAlbums');
            var albumId = c.getEmbeddedParam($(this), "selectedAlbum", "Id"); 
            p.albumId=albumId;
            var newp = pages.get("albums.albumItemSelector");
            if(p.view.viewMode==2) 
            {
                newp.view.id = albumId;
                newp.view.page = 1;
                newp.show();
            }  
            if(p.view.viewMode==1) 
            {
                p.albumType=c.getEmbeddedParam($(this), "selectedAlbum", "AlbumType"); 
            }              
        }); 
        if (p.view.viewMode == 2)
        {
        	pages.get("albums.selectItemsResults").view.like="works;";
            pages.get("albums.selectItemsResults").show();
        }
        if (p.view.viewMode == 1)
        {
        	pages.get("albums.selectItemsResults").view.like="albums;";
            pages.get("albums.selectItemsResults").show();
        }
       this.prep.setBtnAction(this.getSelector("actionAddOneAlbum"),function(){	
                var newp = pages.get("albums.selectItemsResults");    
	            var idList=$(newp.getSelector("selectedItemsId")).html();
                var typeList=$(newp.getSelector("selectedItemsTypes")).html(); 
                var viewMode=pages.get("albums.albumSelector").view.viewMode;
                var itemId=0;
                var itemType=0;
                if(viewMode==1) 
                {
                    itemId=pages.get("albums.albumSelector").albumId; 
                    itemType=pages.get("albums.albumSelector").albumType; 
                    if(idList=="")
                    {
                        if(viewMode==1)
                          idList="albums;";
                        else 
                          idList="none;";
                    }
                    if(itemId>0)
                    {
                        idList=idList+itemId+":";
                        typeList=typeList+itemType+":";    
                        $(newp.getSelector("selectedItemsId")).html(idList);
                        newp.view.like = idList+";"+typeList;
                        newp.show();
                    }
                    if(!(pages.get("albums.albumSelector").isMultiSelect))
                    {
                        pages.get('contestsAddWorkForm').targetId=itemId;
                        $(pages.get('contestsAddWorkForm').getSelector("targetId")).attr("value",itemId);
                    }
                    if(itemId>0){$("#AddOneAlbum").addClass("hide");}
                }
       });
        var newp = pages.get("albums.albumItemSelector");
        newp.view.id = 0;
        newp.view.page = 0;
        newp.show();
}
client.blocks.BlockAlbumSelector.prototype.viewBlock = function(id)
{
    this.open();
}
client.blocks.BlockAlbumSelector.prototype.getPermalink = function()
{
    return "/albumsList/" + this.view.id + ".html?postType="+this.view.type;   
}
client.blocks.BlockAlbumItemSelector = function(view, controller, name)
{
    client.blocks.BlockAlbumItemSelector.baseConstructor.call(this, view, controller, name);
    this.refreshUrl =  "/users/albumsItemsList/get";
};
client.extendClass(client.blocks.BlockAlbumItemSelector, client.blocks.BlockAjax);
client.blocks.BlockAlbumItemSelector.prototype.prepare = function()
{
    var c = this.controllerName;   
	   pages.get("albums.albumItemSelector").itemId = 0;
       pages.get("albums.albumItemSelector").itemType = 0;
       var p = this;
       $(this.getSelector("selectedAlbumItem")).addClass("selectable").removeClass("selectedItem");
       if(p.view.blockparam !=2)
       {
            this.prep.setLink(this.getSelector("selectedAlbumItem"),function(){
            $(p.getSelector("selectedAlbumItem")).addClass("selectable").removeClass("selectedItem");
            $(this).removeClass("selectable").addClass("selectedItem");
            var c = controllers.get('ytAlbums');
            var itemId = c.getEmbeddedParam($(this), "selectedAlbumItem", "Id"); 
            var itemType = c.getEmbeddedParam($(this), "selectedAlbumItem", "ItemType");
			pages.get("albums.albumItemSelector").itemId = itemId; 
            pages.get("albums.albumItemSelector").itemType = itemType;  
         }); 
       } 
       else
       {
            this.prep.setLink(this.getSelector("selectedAlbumItem"),function(){
                $(p.getSelector("selectedAlbumItem")).addClass("selectable").removeClass("selectedItem");
                $(this).removeClass("selectable").addClass("selectedItem");
                var c = controllers.get('ytAlbums');
                var itemId = c.getEmbeddedParam($(this), "selectedAlbumItem", "Id"); 
                var itemType = c.getEmbeddedParam($(this), "selectedAlbumItem", "ItemType");
                var albumId = p.view.id;
                var addWorkForm = pages.get("contestsAddWorkForm");
                addWorkForm.selectItemsForm.remove();
                pages.get("albums.selectItemsResults").view.like = "custom;" + itemId + ":;" + itemType + ":;" + albumId + ":";  
			    $(pages.get('contestsAddWorkForm').getSelector(p.currentScheme)).attr("value",itemId);   
                pages.get("albums.selectItemsResults").show(); 
            }); 
       } 
       this.prep.setRedLink(this.getSelector("actionNextPage"), function(){
	    	var newp = pages.get("albums.albumItemSelector");
	    	newp.switchPageToNext();});
	   this.prep.setPagingButton(this.getSelector("pagingNumber"), function(){
	    	var c = controllers.get('ytAlbums');
	    	var newp = pages.get("albums.albumItemSelector");
	    	newp.switchPage(c.getEmbeddedParam($(this), "pagingNumber", "PageId"));}); 	 
       if(p.view.blockparam !=2)
       {
           this.prep.setBtnAction(this.getSelector("actionAddOneWork"),function(){	
                var newp = pages.get("albums.selectItemsResults");   
	            var idList=$(newp.getSelector("selectedItemsId")).html();
                var typeList=$(newp.getSelector("selectedItemsTypes")).html(); 
                var viewMode=pages.get("albums.albumSelector").view.viewMode;
                var itemId=0;
                var itemType=0;
                if(viewMode==2) 
                {   
                    itemId=pages.get("albums.albumItemSelector").itemId; 
                    itemType=pages.get("albums.albumItemSelector").itemType; 
                    if(idList=="")
                    {
                        if(viewMode==2)
                          idList=idList+"works;";
                        else 
                          idList=idList+"none;";
                    }
                    if(itemId>0)
                    {
                        idList=idList+itemId+":";
                        typeList=typeList+itemType+":";    
                        $(newp.getSelector("selectedItemsId")).html(idList);
                        newp.view.like = idList+";"+typeList;
                        newp.show();
                    }
                    if(!(pages.get("albums.albumSelector").isMultiSelect))
                    {
                        pages.get('contestsAddWorkForm').targetId=itemId;
                        $(pages.get('contestsAddWorkForm').getSelector("targetId")).attr("value",itemId);
                    }
                }    
                if(itemId>0)
                    $("#addOneWork").addClass("hide");
        	});
        }
}
client.blocks.BlockAlbumItemSelector.prototype.viewBlock = function(id)
{
    this.open();
}
client.blocks.BlockAlbumItemSelector.prototype.getPermalink = function()
{
    return "/albumsItemsList/" + this.view.id + ".html?page=" + this.view.page;   
}
client.blocks.BlockAlbumItemSelector.prototype.switchPage = function(pageNumber)
{
	var newp = pages.get("albums.albumItemSelector");
    newp.view.page = pageNumber;
    newp.show();
    client.Switcher.scrollToBlockTop("#albumItemList");
}
client.blocks.BlockAlbumItemSelector.prototype.switchPageToNext = function(sender)
{
	var newp = pages.get("albums.albumItemSelector");
	if (newp.view.page == 0) newp.view.page = 1;
    newp.view.page++;
    newp.show();
    client.Switcher.scrollToBlockTop("#albumItemList");
}             
client.blocks.BlockSelectItemsResults = function(view, controller, name)
{
    client.blocks.BlockSelectItemsResults.baseConstructor.call(this, view, controller, name);
    this.refreshUrl =  "/users/albumSelectResults/get";
};
client.extendClass(client.blocks.BlockSelectItemsResults, client.blocks.BlockAjax);
client.blocks.BlockSelectItemsResults.prototype.prepare = function()
{
    var c = this.controllerName;   
        var addWorkForm = pages.get("contestsAddWorkForm");
        addWorkForm.currentResults.html(addWorkForm.selectResults.html());  
        addWorkForm.selectResults.html("");
}
client.blocks.BlockSelectItemsResults.prototype.viewBlock = function(id)
{
    this.open();
}
client.blocks.BlockSelectItemsResults.prototype.getPermalink = function()
{
    return ;   
}
client.blocks.BlockComments = function(view, controller, name)
{
    client.blocks.BlockComments.baseConstructor.call(this, view, controller, name);
    this.refreshUrl =  "/comments/get";
};
client.extendClass(client.blocks.BlockComments, client.blocks.BlockAjax);
client.blocks.BlockComments.prototype.prepare = function()
{
    var c = this.controllerName;   
        this.sendFormMarker = $(this.getSelector("addCommentFormMarker"));
        this.sendForm = $(this.getSelector("addCommentForm"));
        this.delForm = $(this.getSelector("delCommentForm"));
        var p = this;
        this.prep.setRedLink(this.getSelector("actionShowAddCommentForm"),function(){
            p.openSendForm($(this), 1, p.target); 
        });
        this.prep.setRedLink(this.getSelector("actionAnswer"), function(){
	    	var c = controllers.get("ytProfile");
	    	p.openSendForm($(this), 2, c.getEmbeddedParam($(this), "rootComment", "Id"))});
        this.prep.setAction(this.getSelector("actionEditComment"),function(){
	    	var c = controllers.get("ytProfile");            
            p.openSendForm($(this), 3, c.getEmbeddedParam($(this), "rootComment", "Id"), c.getEmbeddedParam($(this), "rootComment", "Text")); 
        });
        this.prep.setAction(this.getSelector("actionEditAnswer"),function(){
	    	var c = controllers.get("ytProfile");            
            p.openSendForm($(this), 4, c.getEmbeddedParam($(this), "comment answer", "Id"), c.getEmbeddedParam($(this), "comment", "Text")); 
        });
        this.prep.setAction(this.getSelector("actionDeleteComment"),function(){
	    	var c = controllers.get("ytProfile");            
            p.openSendForm($(this), 3, c.getEmbeddedParam($(this), "rootComment", "Id"), ""); 
        });
        this.prep.setAction(this.getSelector("actionDeleteAnswer"),function(){
	    	var c = controllers.get("ytProfile");      
            p.openSendForm($(this), 4, c.getEmbeddedParam($(this), "comment answer", "Id"), ""); 
        });
        this.prep.setRedLink(this.getSelector("actionOpenProfileFromComments"), function(){
	    	var c = controllers.get("ytProfile");
	    	c.viewProfile(c.getEmbeddedParam($(this), "authorInfo", "Id"))});
        this.prep.setRedLink(this.getSelector("actionNextPage"), function(){
	    	var p = pages.get("comments.commentsList");
	    	p.switchPageToNext();});
    	this.prep.setPagingButton(this.getSelector("pagingNumber"), function(){
	    	var c = controllers.get("ytComments");
	    	var p = pages.get("comments.commentsList");
	    	p.switchPage(c.getEmbeddedParam($(this), "pagingNumber", "PageId"));});
        client.drag.setDraggable(this.getSelector("commentAuthor.drag"));
        client.Switcher.resizeYtSideBar();
}
client.blocks.BlockComments.prototype.viewBlock = function(id)
{
    this.open();
}
client.blocks.BlockComments.prototype.getPermalink = function()
{
    return "/comments/" + this.view.id + ".html?type=" + this.view.type;   
}
client.blocks.BlockComments.prototype.openSendForm = function(sender, action, target, src)
{
    var p = pages.get("comments.commentsList");
    var c = controllers.get("ytComments");	    	
    p.sendForm.hide();
    p.delForm.hide();
    $(p.getSelector("ErrorBox")).hide();
    if (action == 1)
        p.sendForm.remove().insertAfter(p.sendFormMarker);
    if (action == 2)
        p.sendForm.remove().insertAfter(c.getHolder(sender, "rootComment"));
    if (action == 3)
    {
        if(src!="")
        {
            p.sendForm.remove().insertAfter(c.getHolder(sender, "rootComment"));
            $("#commentTextInput").attr("value", src);
        }
        else p.delForm.remove().insertAfter(c.getHolder(sender, "rootComment"));
    }
    if (action == 4)
    {
        if(src!="")
        {
            p.sendForm.remove().insertAfter(c.getHolder(sender, "comment answer"));
            $("#commentTextInput").attr("value", src);
        }
        else p.delForm.remove().insertAfter(c.getHolder(sender, "comment answer"));
    }
    if (src != "")
    {
        p.sendForm.show("fast");
        p.prep.setInputHint(p.getSelector("commentTextInput"), "Введите текст сообщения");   
    }
    else
        p.delForm.show("fast");
    p.selectedCommentId = 0;
    if (action == 1) 
    {   
        p.commentSection = p.targetSection; 
        p.commentTarget = p.target;
    }
    if (action == 2) 
    {   
        p.commentSection = 2; 
        p.commentTarget = c.getEmbeddedParam(sender, "rootComment", "Id");
    }
    if (action == 3) 
    {   
        p.commentSection = 0; 
        p.selectedCommentId = c.getEmbeddedParam(sender, "rootComment", "Id");
        p.commentTarget = c.getEmbeddedParam(sender, "rootComment", "Id");
    }
    if (action == 4) 
    {   
        p.commentSection = 0; 
        p.selectedCommentId = c.getEmbeddedParam(sender, "comment answer", "Id");
        p.commentTarget = c.getEmbeddedParam(sender, "comment answer", "Id");
    }
    if (action != 3 && action != 4) p.prep.setBtnAction(p.getSelector("actionSendComment"), function(){c.addComment()});
    else 
    { 
       if(src!="")p.prep.setBtnAction(p.getSelector("actionSendComment"), function(){c.editComment(0)});
       else
       {
           p.prep.setBtnAction(p.getSelector("actionDelComment"), function(){c.editComment(1)});
       }
    }
}    
client.blocks.BlockComments.prototype.switchPage = function(pageNumber)
{
	var p = pages.get("comments.commentsList");
    p.view.page = pageNumber;
    p.show();
    client.Switcher.scrollToBlockTop("#commentsList");
}
client.blocks.BlockComments.prototype.switchPageToNext = function(sender)
{
	var p = pages.get("comments.commentsList");
	if (p.view.page == 0) p.view.page = 1;
    p.view.page++;
    p.show();
    client.Switcher.scrollToBlockTop("#commentsList");
}
client.blocks.BlockMainPage = function(view, controller, name)
{
    client.blocks.BlockMainPage.baseConstructor.call(this, view, controller, name);
    this.refreshUrl =  "/mainpage/get";
};
client.extendClass(client.blocks.BlockMainPage, client.blocks.BlockAjax);
client.blocks.BlockMainPage.prototype.prepare = function()
{
    var c = this.controllerName;   
        var p = this;
        this.prep.setRedLink(p.getSelector("actionOpenSidebar"),
        	function(){controllers.get("ytSidebar").minimizeSidebar(true);});
        var c = controllers.get('ytMainPage');
        this.prep.setRedLink(this.getSelector("actionOpenPost"),function(){controllers.get("ytBlog").openPost(c.getEmbeddedParam($(this), "post", "Id"), 1)});       
        this.prep.setRedLink(this.getSelector("actionOpenAllWorks"),function(){pages.get("mainpage.works").open();});       
		this.prep.setRedLink(this.getSelector("actionOpenAllTalants"),function(){pages.get("mainpage.talants").open();});       
		this.prep.setRedLink(this.getSelector("actionOpenAllContests"),function(){pages.get("mainpage.contests").open();});       
		this.prep.setRedLink(this.getSelector("actionOpenIntro"), function(){controllers.get('ytAlbums').openAlbumViewer(182052)});
    	$(this.getSelector("actionOpenIntro")).flash({
			swf: "http://storage.yatalant.ru/mainpage/flash/circles_main.swf",
			width: 214,
			height: 157,
			allowScriptAccess: 'always',
			wmode: 'opaque'});
		this.prep.setRedLink(this.getSelector("actionOpenBlog"), function(){ p.view.like = "blog"; p.open(); });
        this.prep.setRoundBtnAction(this.getSelector("actionOpenRegistration"),
            function(){controllers.get("ytSidebar").minimizeSidebar(true);
            controllers.get("mainUsers").showRegisterForm();});       
        this.prep.setRoundBtnAction(this.getSelector("actionOpenOfferContestForm"),
            function(){pages.get('mainpageOfferContestForm').open();});       
        this.prep.setRedLink(this.getSelector("actionOpenOfferForm"),
            function(){pages.get('mainpageOfferContestForm').open();});       
        this.prep.setRedLink(this.getSelector("actionOpenContests"),
            function(){pages.get('mainpage.contests').open()});       
        p.prep.setLink(p.getSelector("actionOpenStage"), function(){controllers.get("ytContests").openStage(c.getEmbeddedParam($(this),"stage","Id"))});    
        p.prep.setLink(p.getSelector("actionOpenStanding"), function(){controllers.get("ytContests").openStanding(c.getEmbeddedParam($(this),"standing","Id"))});    
       	p.prep.setLink(p.getSelector("actionOpenCustomPage"), function(){controllers.get("ytContests").openCustomPage(c.getEmbeddedParam($(this),"contestCustomPage","Id"))});    
        var idols = $(this.getSelector("idol-item"));
        var idolDescriptions = $(this.getSelector("idol-description"));
        var historyContent = $(this.getSelector("idols-container"));
		var showIdolInfo = function(number)
		{
	  	    idols.hide();
            $(idols[number]).show();
            $(idolDescriptions[number]).removeClass("hide");
  		    historyContent.animate({left: 0}, 500, null);
            $(".btn-history-left").hide();
            $(".btn-history-right").hide();        
		}
        this.prep.setLink(this.getSelector("link-idol-old"),function(){
            var number = c.getEmbeddedParam($(this), "idol-item", "Id") - 1; 
            showIdolInfo(number);
        }); 
        this.prep.setRedLink(this.getSelector("showContestInfo"),function(){
            var number = c.getEmbeddedParam($(this), "idol-item", "Id") - 1;            
            showIdolInfo(number);
        });
        this.prep.setRedLink(this.getSelector("hideContestInfo"),function(){
            idols.show();
            idolDescriptions.addClass("hide");
            $(".btn-history-left").show();
            $(".btn-history-right").show();
        });
        client.drag.setDraggable(this.getSelector("album.drag"));     
        client.drag.setDraggable(this.getSelector("albumPhoto.drag"));
        client.drag.setDraggable(this.getSelector("albumVideo.drag"));
        client.drag.setDraggable(this.getSelector("albumAudio.drag"));
        client.drag.setDraggable(this.getSelector("albumTexts.drag"));
        var slide1 = new Slider("best_works_selection", "best_works", null, null, true, 5);
		this.prep.setSlider("#mainStarsHeader", true);			
        var curSliderPos = 0;
        var idolsCount = $(".idols-container .idol-item").length - 6;
		$(".btn-history-left").click(function(){curSliderPos--; if (curSliderPos == -1) curSliderPos = 0; historyContent.animate({left: -180*curSliderPos}, 500, null);});
		$(".btn-history-right").click(function(){curSliderPos++; if (curSliderPos > idolsCount) curSliderPos = idolsCount; historyContent.animate({left: -180*curSliderPos}, 500, null);});
     	if (this.view.page == 0) this.view.page = 1;
		this.prep.setRedLink(this.getSelector("actionNextPage"), function(){
	    	p.view.page++;
	    	p.open();});
    	this.prep.setPagingButton(this.getSelector("pagingNumber"), function(){
	    	p.view.page = c.getEmbeddedParam($(this), "pagingNumber", "PageId");
	    	p.open();
	    	});
		controllers.get("ytBlog").preparePostItems("mainpage.mainPage");
        var showRegForm = client.getUrlParam("reg");
        if (showRegForm == "")
	        if (pages.get("profile").upperMenuStyle == 'promo')
    	        controllers.get("ytSidebar").minimizeSidebarAtStart();
        if (showRegForm == "true")
        	setTimeout(controllers.get("mainUsers").showRegisterForm, 2000);
       	client.Preparator.menustyle = 'promo';
        pages.get("profile.pageMenu").prepare();       
        client.Decor.alignGridBlock(this.getSelector("news-block"), "news-preview");
}
client.blocks.BlockMainPage.prototype.viewBlock = function(id)
{
    this.open();
}
client.blocks.BlockMainPage.prototype.getPermalink = function()
{
    return "/?page="+this.view.page+"&like="+this.view.like;   
}
client.blocks.BlockWorks = function(view, controller, name)
{
    client.blocks.BlockWorks.baseConstructor.call(this, view, controller, name);
    this.refreshUrl =  "/works/get";
};
client.extendClass(client.blocks.BlockWorks, client.blocks.BlockAjax);
client.blocks.BlockWorks.prototype.prepare = function()
{
    var c = this.controllerName;   
        var p = this;
        this.prep.setRedLink(p.getSelector("actionOpenSidebar"),
        	function(){controllers.get("ytSidebar").minimizeSidebar(true);});
		this.prep.setRadiobox(this.getSelector("workType"), p.updateSearchWorks, 'white');
		this.prep.setCombobox(this.getSelector("sort"), false, p.updateSearchWorks);
		this.prep.setBtnAction(this.getSelector("actionSearch"), function(){
			p.updateSearchWorks();
		});
		this.prep.setInputHint(this.getSelector("workName"), "Начните вводить название");
        this.prep.setKeyAny(this.getSelector("workName"),function(){
			p.updateSearchWorks();
		});
		var showOptions = false;
		this.prep.setAction(this.getSelector("actionShowMoreOptions"), function(){
			if (!showOptions) 
				$(".moreOptions").show("fast");
			else 
				$(".moreOptions").hide("fast");
			showOptions = !showOptions;
		});
	 	client.CheckBox.initAll(this.getSelector("onlyCopyrighted"), p.updateSearchWorks);
		client.CheckBox.initAll(this.getSelector("onlyPersonal"), p.updateSearchWorks);
        client.CheckBox.initAll(this.getSelector("groupByAuthor"), p.updateSearchWorks);
        client.CheckBox.initAll(this.getSelector("groupByAlbum"), p.updateSearchWorks);
        pages.get("profile.pageMenu").prepare();   
        this.updateSearchWorks(true);
}
client.blocks.BlockWorks.prototype.viewBlock = function(id)
{
    this.open();
}
client.blocks.BlockWorks.prototype.getPermalink = function()
{
    return "/works";   
}
client.blocks.BlockWorks.prototype.updateSearchWorks = function(newSearch)
{
	var p =	pages.get("mainpage.worksSearchResults");
	var worksPage = pages.get("mainpage.works");
	p.view.page = 1;
	if (newSearch === true)
	{
		if (p.lastWorkType != null)
		{
			$(worksPage.getSelector("workType")).attr("value", p.lastWorkType);
			$(worksPage.getSelector("workType")).parent().find(".radioItem").each(function(index){
				if (index == p.lastWorkType) 
					$(this).addClass("selectedItem");
				else 
					$(this).removeClass("selectedItem");				
			});
			$(worksPage.getSelector("sort")).attr("value", p.lastSort);				
			$(worksPage.getSelector("workName")).attr("value", p.lastLike);	
			client.CheckBox.setChecked(worksPage.getSelector("onlyCopyrighted"), p.lastCopyrighted);
			client.CheckBox.setChecked(worksPage.getSelector("onlyPersonal"), p.lastPersonal);			
			client.CheckBox.setChecked(worksPage.getSelector("groupByAuthor"), p.lastGroupByAuthor);
			client.CheckBox.setChecked(worksPage.getSelector("groupByAlbum"), p.lastGroupByAlbum);			
		}
	}
	p.view.addParams = function(obj)
	{
		obj["workType"] = $(worksPage.getSelector("workType")).attr("value");	
		obj["sort"] = $(worksPage.getSelector("sort")).attr("value");	
		obj["like"] = $(worksPage.getSelector("workName")).attr("value");	
		if (obj.like == 'Начните вводить название') obj.like = '';
		obj["copyrighted"] = $(worksPage.getSelector("onlyCopyrighted")).attr("checked");
		obj["personal"] = $(worksPage.getSelector("onlyPersonal")).attr("checked");
		obj["groupByAuthor"] = $(worksPage.getSelector("groupByAuthor")).attr("checked");
		obj["groupByAlbum"] = $(worksPage.getSelector("groupByAlbum")).attr("checked");
		p.lastWorkType = obj["workType"];
		p.lastSort = obj["sort"];
		p.lastLike = obj["like"];
		p.lastCopyrighted = obj["copyrighted"];
		p.lastPersonal = obj["personal"];
		p.lastGroupByAuthor = obj["groupByAuthor"];
		p.lastGroupByAlbum = obj["groupByAlbum"];
		p.lastPage = p.view.page;		
	}
	p.show();
}
client.blocks.BlockWorksSearchResults = function(view, controller, name)
{
    client.blocks.BlockWorksSearchResults.baseConstructor.call(this, view, controller, name);
    this.refreshUrl =  "/worksSearch/get";
};
client.extendClass(client.blocks.BlockWorksSearchResults, client.blocks.BlockAjax);
client.blocks.BlockWorksSearchResults.prototype.prepare = function()
{
    var c = this.controllerName;   
		client.drag.setDraggable(this.getSelector("user.drag"));     
		client.drag.setDraggable(this.getSelector("album.drag"));     
		client.drag.setDraggable(this.getSelector("albumPhoto.drag"));
		client.drag.setDraggable(this.getSelector("albumVideo.drag"));
		client.drag.setDraggable(this.getSelector("albumAudio.drag"));
		client.drag.setDraggable(this.getSelector("albumTexts.drag"));
	    this.prep.setRedLink(this.getSelector("actionOpenProfileLink"), function(){
		   	var c = controllers.get("ytProfile");	
		   	c.viewProfile(c.getEmbeddedParam($(this), "itemOwner", "Id"))});
	   	this.prep.setRedLink(this.getSelector("actionNextPage"), function(){
	    	var p = pages.get("mainpage.worksSearchResults");
	    	p.switchPageToNext();});
    	this.prep.setPagingButton(this.getSelector("pagingNumber"), function(){
	    	var c = controllers.get("ytComments");
	    	var p = pages.get("mainpage.worksSearchResults");
	    	p.switchPage(c.getEmbeddedParam($(this), "pagingNumber", "PageId"));});
  	    var c = controllers.get('ytAlbums');
        this.prep.setRedLink(this.getSelector("albumPhoto"), function(){c.openAlbumViewer(c.getEmbeddedParam($(this),"albumItem","Id"))});
        this.prep.setRedLink(this.getSelector("albumAudio"), function(){c.openAlbumViewerAudio(c.getEmbeddedParam($(this),"albumItem","Id"))});
        this.prep.setRedLink(this.getSelector("albumTexts"), function(){c.openAlbumViewerTexts(c.getEmbeddedParam($(this),"albumItem","Id"))});
        this.prep.setRedLink(this.getSelector("albumVideo"), function(){c.openAlbumViewer(c.getEmbeddedParam($(this),"albumItem","Id"))});
		client.Switcher.resizeYtSideBar();
}
client.blocks.BlockWorksSearchResults.prototype.viewBlock = function(id)
{
    this.open();
}
client.blocks.BlockWorksSearchResults.prototype.getPermalink = function()
{
    return "/works";   
}
client.blocks.BlockWorksSearchResults.prototype.switchPageToNext = function()
{
	var p = pages.get("mainpage.worksSearchResults");
	if (p.view.page == 0) p.view.page = 1;
    p.view.page++;
    p.show();
    client.Switcher.scrollToBlockTop("#worksSearchResults");
    p.lastPage = p.view.page;
}
client.blocks.BlockWorksSearchResults.prototype.switchPage = function(pageNumber)
{
	var p = pages.get("mainpage.worksSearchResults");
    p.view.page = pageNumber;
    p.show();
    client.Switcher.scrollToBlockTop("#worksSearchResults");
    p.lastPage = p.view.page;
}
client.blocks.BlockTalants = function(view, controller, name)
{
    client.blocks.BlockTalants.baseConstructor.call(this, view, controller, name);
    this.refreshUrl =  "/talants/get";
};
client.extendClass(client.blocks.BlockTalants, client.blocks.BlockAjax);
client.blocks.BlockTalants.prototype.prepare = function()
{
    var c = this.controllerName;   
        var p = this;
        this.prep.setRedLink(p.getSelector("actionOpenSidebar"),
        	function(){controllers.get("ytSidebar").minimizeSidebar(true);});
        this.prep.setRoundBtnAction(this.getSelector("actionOpenRegistration"),
            function(){controllers.get("ytSidebar").minimizeSidebar(true);
            controllers.get("mainUsers").showRegisterForm();});       
        this.prep.setRoundBtnAction(this.getSelector("actionOpenOfferContestForm"),
            function(){pages.get('mainpageOfferContestForm').open();});  
        client.Switcher.addAutosizeItem($("#mainPageCentralCaption"), 760, "center");
        client.Switcher.addAutosizeItem($("#promoTalantsHolder"), 900, "center");
		this.updateSearchTalants(true);
		this.prepareInProgress = true;
		this.prep.setCombobox(this.getSelector("spec"), true, p.updateSearchTalants, "Выберите профессию");
		this.prep.setCombobox(this.getSelector("city"), true, p.updateSearchTalants, "Выберите город");
		this.prep.setCombobox(this.getSelector("viewmode"));
		this.prep.setInputHint(this.getSelector("talantName"), "Начните вводить имя");
        this.prep.setKeyAny(this.getSelector("talantName"),function(){
			p.updateSearchTalants();
		});
        client.CheckBox.initAll(this.getSelector("onlyOnline"), p.updateSearchTalants);
        if (pages.get("profile").upperMenuStyle == 'promo')
            controllers.get("ytSidebar").minimizeSidebarAtStart();
        pages.get("profile.pageMenu").prepare();        
        this.prepareInProgress = false;
}
client.blocks.BlockTalants.prototype.viewBlock = function(id)
{
    this.open();
}
client.blocks.BlockTalants.prototype.getPermalink = function()
{
    return "/talants";   
}
client.blocks.BlockTalants.prototype.updateSearchTalants = function(newSearch)
{
	var p =	pages.get("mainpage.talantsSearchResults");
	var talantsPage = pages.get("mainpage.talants");
	if (!talantsPage.prepareInProgress)
	{
		p.view.page = 1;
		if (newSearch === true)
		{
			if (p.lastLike != null)
			{
				$(talantsPage.getSelector("spec")).attr("value", p.lastSpec);			
				$(talantsPage.getSelector("city")).attr("value", p.lastCity);	
				$(talantsPage.getSelector("viewmode")).attr("value", p.lastViewmode);	
				$(talantsPage.getSelector("talantName")).attr("value", p.lastLike);	
				client.CheckBox.setChecked(talantsPage.getSelector("onlyOnline"), p.lastOnline);			
			}
		}
		p.view.addParams = function(obj)
		{
			obj["spec"] = $(talantsPage.getSelector("spec")).attr("value");			
			if (obj["spec"] == 'Выберите профессию') obj["spec"] = '';
			obj["city"] = $(talantsPage.getSelector("city")).attr("value");	
			if (obj["city"] == 'Выберите город') obj["city"] = '';
			obj["viewmode"] = $(talantsPage.getSelector("viewmode")).attr("value");	
			obj["like"] = $(talantsPage.getSelector("talantName")).attr("value");	
			obj["online"] = $(talantsPage.getSelector("onlyOnline")).attr("checked");
			if (obj.like == 'Начните вводить имя') obj.like = '';
			p.lastSpec = obj["spec"];
			p.lastCity = obj["city"];
			p.lastViewmode = obj["viewmode"];
			p.lastLike = obj["like"];
			p.lastOnline = obj["online"];
			p.lastPage = p.view.page;
		}
		p.show();
	}
}
client.blocks.BlockTalantsSearchResults = function(view, controller, name)
{
    client.blocks.BlockTalantsSearchResults.baseConstructor.call(this, view, controller, name);
    this.refreshUrl =  "/talantsSearch/get";
};
client.extendClass(client.blocks.BlockTalantsSearchResults, client.blocks.BlockAjax);
client.blocks.BlockTalantsSearchResults.prototype.prepare = function()
{
    var c = this.controllerName;   
		client.drag.setDraggable(this.getSelector("user.drag"));     
		client.drag.setDraggable(this.getSelector("album.drag"));     
		client.drag.setDraggable(this.getSelector("albumPhoto.drag"));
		client.drag.setDraggable(this.getSelector("albumVideo.drag"));
		client.drag.setDraggable(this.getSelector("albumAudio.drag"));
		client.drag.setDraggable(this.getSelector("albumTexts.drag"));
	    this.prep.setRedLink(this.getSelector("actionOpenProfileLink"), function(){
		   	var c = controllers.get("ytProfile");	
		   	c.viewProfile(c.getEmbeddedParam($(this), "foundUser", "Id"))});
	    this.prep.setAction(this.getSelector("actionOpenProfile"), function(){
		   	var c = controllers.get("ytProfile");	
		   	c.viewProfile(c.getEmbeddedParam($(this), "foundUser", "Id"))});
	   	this.prep.setRedLink(this.getSelector("actionNextPage"), function(){
	    	var p = pages.get("mainpage.talantsSearchResults");
	    	p.switchPageToNext();});
    	this.prep.setPagingButton(this.getSelector("pagingNumber"), function(){
	    	var c = controllers.get("ytComments");
	    	var p = pages.get("mainpage.talantsSearchResults");
	    	p.switchPage(c.getEmbeddedParam($(this), "pagingNumber", "PageId"));});
		client.Switcher.resizeYtSideBar();
}
client.blocks.BlockTalantsSearchResults.prototype.viewBlock = function(id)
{
    this.open();
}
client.blocks.BlockTalantsSearchResults.prototype.getPermalink = function()
{
    return "/talants";   
}
client.blocks.BlockTalantsSearchResults.prototype.switchPageToNext = function()
{
	var p = pages.get("mainpage.talantsSearchResults");
	if (p.view.page == 0) p.view.page = 1;
    p.view.page++;
    p.show();
    client.Switcher.scrollToBlockTop("#talantsSearchResults");
    p.lastPage = p.view.page;
}
client.blocks.BlockTalantsSearchResults.prototype.switchPage = function(pageNumber)
{
	var p = pages.get("mainpage.talantsSearchResults");
    p.view.page = pageNumber;
    p.show();
    client.Switcher.scrollToBlockTop("#talantsSearchResults");
    p.lastPage = p.view.page;
}
client.blocks.BlockExperts = function(view, controller, name)
{
    client.blocks.BlockExperts.baseConstructor.call(this, view, controller, name);
    this.refreshUrl =  "/experts/get";
};
client.extendClass(client.blocks.BlockExperts, client.blocks.BlockAjax);
client.blocks.BlockExperts.prototype.prepare = function()
{
    var c = this.controllerName;   
        var p = this;
        this.prep.setRedLink(p.getSelector("actionOpenSidebar"),
        	function(){controllers.get("ytSidebar").minimizeSidebar(true);});
        this.prep.setRoundBtnAction(this.getSelector("actionOpenRegistration"),
            function(){controllers.get("ytSidebar").minimizeSidebar(true);
            controllers.get("mainUsers").showRegisterForm();});       
        this.prep.setRoundBtnAction(this.getSelector("actionOpenOfferContestForm"),
            function(){pages.get('mainpageOfferContestForm').open();});  
       controllers.get("ytBlog").preparePostItems("mainpage.experts");
        if (pages.get("profile").upperMenuStyle == 'promo')
            controllers.get("ytSidebar").minimizeSidebarAtStart();
        pages.get("profile.pageMenu").prepare();        
}
client.blocks.BlockExperts.prototype.viewBlock = function(id)
{
    this.open();
}
client.blocks.BlockExperts.prototype.getPermalink = function()
{
    return "/experts";   
}
client.blocks.BlockContests = function(view, controller, name)
{
    client.blocks.BlockContests.baseConstructor.call(this, view, controller, name);
    this.refreshUrl =  "/contests/get";
};
client.extendClass(client.blocks.BlockContests, client.blocks.BlockAjax);
client.blocks.BlockContests.prototype.prepare = function()
{
    var c = this.controllerName;   
        var p = this;
        this.prep.setRedLink(p.getSelector("actionOpenSidebar"),
        	function(){controllers.get("ytSidebar").minimizeSidebar(true);});
        this.prep.setRoundBtnAction(this.getSelector("actionOpenRegistration"),
            function(){controllers.get("ytSidebar").minimizeSidebar(true);
            controllers.get("mainUsers").showRegisterForm();});       
        this.prep.setRoundBtnAction(this.getSelector("actionOpenOfferContestForm"),
            function(){pages.get('mainpageOfferContestForm').open();});   
        var searchHint = "Начните вводить название";
        this.prep.setInputHint(this.getSelector("like"), searchHint);
        this.prep.setKeyEnter(p, this.getSelector("like"),function(){
			var like = $(p.getSelector("like")).attr("value");
  			if (like == searchHint) like = "";
  			p.view.like = like;
  			p.view.page = 1;
  			p.open(false);	
		});
  		this.prep.setCombobox(this.getSelector("category"), false, function(){
  			p.view.viewmode = $(p.getSelector("category")).attr("value");
  			p.open(false);
  		});
  		this.prep.setRedLink(this.getSelector("actionNextPage"), function(){
	    	p.switchPageToNext();});
    	this.prep.setPagingButton(this.getSelector("pagingNumber"), function(){
	    	p.switchPage(c.getEmbeddedParam($(this), "pagingNumber", "PageId"));});
        controllers.get("ytBlog").preparePostItems("mainpage.contests");
        var c = controllers.get("ytBlog");
        this.prep.setRedLink(this.getSelector("actionOpenPost"),function(){c.openPost(c.getEmbeddedParam($(this), "post", "Id"), 1)});             
    	p.prep.setLink(p.getSelector("actionOpenStage"), function(){controllers.get("ytContests").openStage(c.getEmbeddedParam($(this),"stage","Id"))});    
		p.prep.setLink(p.getSelector("actionOpenContest"), function(){controllers.get("ytContests").openContest(c.getEmbeddedParam($(this),"stage","Link"))});    
		p.prep.setLink(p.getSelector("actionShowArchive"), function(){
			$('#contestsList').hide();
			$('#contestsArchive').show();			
			});
        this.prep.setRedLink(p.getSelector("actionOpenNews"),function(){
        	pages.get("mainpage.mainPage").view.like = "blog"; 
        	pages.get("mainpage.mainPage").open();});
        client.Preparator.menustyle = 'promo';
        if (pages.get("profile").upperMenuStyle == 'promo')
            controllers.get("ytSidebar").minimizeSidebarAtStart();
        pages.get("profile.pageMenu").prepare();        
}
client.blocks.BlockContests.prototype.viewBlock = function(id)
{
    this.open();
}
client.blocks.BlockContests.prototype.getPermalink = function()
{
    return "/contests?Viewmode="+this.view.viewmode+"&pagingPage="+this.view.page+"&Like="+this.view.like;   
}
client.blocks.BlockContests.prototype.switchPage = function(pageNumber)
{
	var p = pages.get("mainpage.contests");
    p.view.page = pageNumber;
    p.open();
}
client.blocks.BlockContests.prototype.switchPageToNext = function(sender)
{
	var p = pages.get("mainpage.contests");
	if (p.view.page == 0) p.view.page = 1;
    p.view.page++;
    p.open();
}
client.blocks.BlockBlogPost = function(view, controller, name)
{
    client.blocks.BlockBlogPost.baseConstructor.call(this, view, controller, name);
    this.refreshUrl =  "/post/get";
};
client.extendClass(client.blocks.BlockBlogPost, client.blocks.BlockAjax);
client.blocks.BlockBlogPost.prototype.prepare = function()
{
    var c = this.controllerName;   
        var p = this;
        this.prep.setRedLink(p.getSelector("actionOpenSidebar"),
        	function(){controllers.get("ytSidebar").minimizeSidebar(true);});
        controllers.get("ytComments").showComments(this.view.id, 3, 1);  
        var c = controllers.get('ytBlog');
        this.prep.setRoundBtn2Action(this.getSelector("actionEditPost"),function(){
        	c.showEditPostForm(p.view.id)}); 
        this.prep.setRoundBtn2Action(this.getSelector("actionDeletePost"),function(){
        	c.showDeletePostForm(p.view.id)}); 
        this.prep.setRedLink(this.getSelector("actionOpenPost"),function(){controllers.get("ytBlog").openPost(c.getEmbeddedParam($(this), "post", "Id"), p.view.type)});       
		pages.get("contests.contest").prepareStageMenu(p);
		controllers.get("ytBlog").preparePostItems("mainpage.blogPost");
        pages.get("profile.pageMenu").prepare();  
}
client.blocks.BlockBlogPost.prototype.viewBlock = function(id)
{
    this.open();
}
client.blocks.BlockBlogPost.prototype.getPermalink = function()
{
    return "/post/"+this.view.id+".html?postType="+this.view.type;   
}
client.blocks.BlockContest = function(view, controller, name)
{
    client.blocks.BlockContest.baseConstructor.call(this, view, controller, name);
    this.refreshUrl =  "/contest/get";
};
client.extendClass(client.blocks.BlockContest, client.blocks.BlockAjax);
client.blocks.BlockContest.prototype.prepare = function()
{
    var c = this.controllerName;   
    	this.prep.setMainMenu("dark");
    	var p = this;
    	this.view.id = this.stageId;
    	this.view.type = this.contestName;
    	var c = controllers.get('ytContests');
    	this.prepareStageMenu(p);
    	this.prep.setBtnAction(this.getSelector("actionParticipate"), function(){			
			pages.get("contestsAddParticipantForm").view.id = c.getEmbeddedParam($(this),"stageInfo","Id");
			pages.get("contestsAddParticipantForm").open();
		});
		this.prep.setBtnAction(this.getSelector("actionAddWork"), function(){
			pages.get("contestsAddWorkForm").view.id = c.getEmbeddedParam($(this),"stageInfo","Id");
			pages.get("contestsAddWorkForm").open(); 	
		});
	  	this.prep.setRedLink(this.getSelector("actionOpenPost"),function(){controllers.get("ytBlog").openPost(c.getEmbeddedParam($(this), "post", "Id"), 0)});       
        this.prep.setRedLink(this.getSelector("openStandingLink"), function(){
            if (pages.get("contestsVotePopupForm").view.container == "mainContent")
            {
                pages.get("contestsVotePopupForm").view.id = c.getEmbeddedParam($(this),"standing","Id");
                pages.get("contestsVotePopupForm").view.container = "popupContent"+pages.get("contestsVotePopupForm").view.id;
                pages.get("contestsVotePopupForm").popupBlock = "popupContent"+pages.get("contestsVotePopupForm").view.id;
                pages.get("contestsVotePopupForm").popupDest = 1;
	    	    pages.get("contestsVotePopupForm").show();
            }
        });  
		client.Switcher.resizeYtSideBar();
	    client.Decor.alignGridBlock(this.getSelector("lastWorks"), "contestWork");
	    client.Decor.alignGridBlock(this.getSelector("allWorks"), "contestWork");
        client.Decor.alignGridBlock(this.getSelector("topWorks"), "contestWork");
		controllers.get("ytBlog").preparePostItems("contests.contest");
}
client.blocks.BlockContest.prototype.viewBlock = function(id)
{
    this.open();
}
client.blocks.BlockContest.prototype.getPermalink = function()
{
    return "/contest/"+this.contestName + "?Id=" + this.view.id;   
}
client.blocks.BlockContest.prototype.prepareStageMenu = function(p)
{
	var c = controllers.get('ytContests');
	p.prep.setLink(p.getSelector("actionOpenProfile"), function(){controllers.get('ytProfile').viewProfile(c.getEmbeddedParam($(this),"user","Id"))});    
    p.prep.setLink(p.getSelector("actionOpenStanding"), function(){c.openStanding(c.getEmbeddedParam($(this),"standing","Id"))});    
	p.prep.setLink(p.getSelector("actionOpenStageWorkList"), function(){c.openWorkList(c.getEmbeddedParam($(this),"stage","Id"))});    
	p.prep.setLink(p.getSelector("actionOpenContest"), function(){c.openContest(c.getEmbeddedParam($(this),"contest","Link"))});    
	p.prep.setLink(p.getSelector("actionOpenStage"), function(){c.openStage(c.getEmbeddedParam($(this),"stage","Id"))});    
	p.prep.setLink(p.getSelector("actionOpenStageBlog"), function(){c.openStageBlog(c.getEmbeddedParam($(this),"stage","Id"))});    
	p.prep.setLink(p.getSelector("actionOpenCustomPage"), function(){c.openCustomPage(c.getEmbeddedParam($(this),"contestCustomPage","Id"))});    
	if ($("#contestCaptionTitle").length > 0)
	{
		var h = $("#contestCaptionTitle").height();
		$("#contestCaptionShadow").height(h).css("marginTop","-" + h + "px");
	}
}
client.blocks.BlockContestWorkList = function(view, controller, name)
{
    client.blocks.BlockContestWorkList.baseConstructor.call(this, view, controller, name);
    this.refreshUrl =  "/contestWorks/get";
};
client.extendClass(client.blocks.BlockContestWorkList, client.blocks.BlockAjax);
client.blocks.BlockContestWorkList.prototype.prepare = function()
{
    var c = this.controllerName;   
    	this.prep.setMainMenu("dark");
    	var p = this;
    	this.view.id = this.stageId;
  		var c = controllers.get('ytContests');
  		pages.get("contests.contest").prepareStageMenu(p);
  		var searchHint = "Начните вводить название";
  		this.prep.setInputHint(this.getSelector("workName"), searchHint);
        this.prep.setKeyEnter(p, this.getSelector("workName"),function(){
			var like = $(p.getSelector("workName")).attr("value");
  			if (like == searchHint) like = "";
  			p.view.like = like;
  			p.view.page = 1;
  			p.open(false);	
		});
  		this.prep.setCombobox(this.getSelector("sort"), false, function(){
  			p.view.viewmode = ($(p.getSelector("sort")).attr("value") == "по рейтингу") ? 0 : 1;
  			p.open(false);
  		});
  		this.prep.setBtnAction(this.getSelector("actionSearch"), function(){
  			var like = $(p.getSelector("workName")).attr("value");
  			if (like == searchHint) like = "";
  			p.view.like = like;
  			p.view.page = 1;
  			p.open(false);			
		});
    	this.prep.setRedLink(this.getSelector("actionNextPage"), function(){
	    	p.switchPageToNext();});
    	this.prep.setPagingButton(this.getSelector("pagingNumber"), function(){
	    	p.switchPage(c.getEmbeddedParam($(this), "pagingNumber", "PageId"));});
		controllers.get("ytAlbums").checkLocalMp3(p);
		this.prep.setAction(this.getSelector("songRoundPlay"), function(){controllers.get("ytAlbums").playLocalMp3(p, $(this))});
        this.prep.setAction(this.getSelector("songRoundStop"), function(){controllers.get("ytAlbums").stopLocalMp3(p, $(this))});	  
	    this.prep.setRedLink(this.getSelector("actionAddToPlayList"),function(){
            controllers.get("ytSidebar").addPlaylistItem(c.getEmbeddedParam($(this),"fullLocalMp3Player","SongId"));
        }); 
        this.prep.setRedLink(this.getSelector("OpenStandingAlbumLink"), function(){
            if (pages.get("contestsVotePopupForm").view.container == "mainContent")
            {
                pages.get("contestsVotePopupForm").view.id = c.getEmbeddedParam($(this),"standing","Id");
                pages.get("contestsVotePopupForm").view.container = "popupContent"+pages.get("contestsVotePopupForm").view.id;
                pages.get("contestsVotePopupForm").popupBlock = "popupContent"+pages.get("contestsVotePopupForm").view.id;
                pages.get("contestsVotePopupForm").popupDest = 2;
	    	    pages.get("contestsVotePopupForm").show();
            }
        });  
		client.Switcher.resizeYtSideBar();
		controllers.get("ytBlog").preparePostItems("contests.contestWorkList");
}
client.blocks.BlockContestWorkList.prototype.viewBlock = function(id)
{
    this.open();
}
client.blocks.BlockContestWorkList.prototype.getPermalink = function()
{
    return "/contestWorks?Id=" + this.view.id +"&Viewmode="+this.view.viewmode+"&pagingPage="+this.view.page+"&Like="+this.view.like;   
}
client.blocks.BlockContestWorkList.prototype.switchPage = function(pageNumber)
{
	var p = pages.get("contests.contestWorkList");
    p.view.page = pageNumber;
    p.open();
}
client.blocks.BlockContestWorkList.prototype.switchPageToNext = function(sender)
{
	var p = pages.get("contests.contestWorkList");
	if (p.view.page == 0) p.view.page = 1;
    p.view.page++;
    p.open();
}
client.blocks.BlockContestSingleWork = function(view, controller, name)
{
    client.blocks.BlockContestSingleWork.baseConstructor.call(this, view, controller, name);
    this.refreshUrl =  "/contestWork/get";
};
client.extendClass(client.blocks.BlockContestSingleWork, client.blocks.BlockAjax);
client.blocks.BlockContestSingleWork.prototype.prepare = function()
{
    var c = this.controllerName;   
    	this.prep.setMainMenu("dark");
    	var p = this;
    	this.view.id = this.standingId;	
        pages.get('contestsVotePopupForm').isPopup = 0;
		controllers.get("ytComments").showComments(p.commentTarget, 4, 1);
		var c = controllers.get('ytContests');
		pages.get("contests.contest").prepareStageMenu(p);
		this.prep.setBtnAction(this.getSelector("actionContestVote"), function(){
			c.voteForWork(0);
		});
		this.prep.setAction(this.getSelector("songRoundPlay"), function(){controllers.get("ytAlbums").playLocalMp3(p, $(this))});
        this.prep.setAction(this.getSelector("songRoundStop"), function(){controllers.get("ytAlbums").stopLocalMp3(p, $(this))});	  
	    this.prep.setRedLink(this.getSelector("actionAddToPlayList"),function(){
            controllers.get("ytSidebar").addPlaylistItem(c.getEmbeddedParam($(this),"fullLocalMp3Player","SongId"));
        }); 
		client.Switcher.resizeYtSideBar();
		client.Decor.alignGridBlock(this.getSelector("otherWorks"), "contestWork");
		controllers.get("ytBlog").preparePostItems("contests.contestSingleWork");
}
client.blocks.BlockContestSingleWork.prototype.viewBlock = function(id)
{
    this.open();
}
client.blocks.BlockContestSingleWork.prototype.getPermalink = function()
{
    return "/contestWork?Id=" + this.view.id;   
}
client.blocks.BlockContestCustomPage = function(view, controller, name)
{
    client.blocks.BlockContestCustomPage.baseConstructor.call(this, view, controller, name);
    this.refreshUrl =  "/contestPage/get";
};
client.extendClass(client.blocks.BlockContestCustomPage, client.blocks.BlockAjax);
client.blocks.BlockContestCustomPage.prototype.prepare = function()
{
    var c = this.controllerName;   
    	this.prep.setMainMenu("dark");
    	var p = this;
    	this.view.id = this.pageId;	
		var c = controllers.get('ytContests');
		pages.get("contests.contest").prepareStageMenu(p);
		controllers.get("ytComments").showComments(p.commentTarget, 5, 1);
		client.Switcher.resizeYtSideBar();
		controllers.get("ytBlog").preparePostItems("contests.contestCustomPage");
}
client.blocks.BlockContestCustomPage.prototype.viewBlock = function(id)
{
    this.open();
}
client.blocks.BlockContestCustomPage.prototype.getPermalink = function()
{
    return "/contestPage?Id=" + this.view.id;   
}
client.blocks.BlockContestBlog = function(view, controller, name)
{
    client.blocks.BlockContestBlog.baseConstructor.call(this, view, controller, name);
    this.refreshUrl =  "/contestBlog/get";
};
client.extendClass(client.blocks.BlockContestBlog, client.blocks.BlockAjax);
client.blocks.BlockContestBlog.prototype.prepare = function()
{
    var c = this.controllerName;   
    	this.prep.setMainMenu("dark");
    	var p = this;
    	this.view.id = this.pageId;	
		var c = controllers.get('ytContests');
		pages.get("contests.contest").prepareStageMenu(p);
		this.prep.setRedLink(this.getSelector("actionNextPage"), function(){
	    	p.switchPageToNext();});
    	this.prep.setPagingButton(this.getSelector("pagingNumber"), function(){
	    	p.switchPage(c.getEmbeddedParam($(this), "pagingNumber", "PageId"));});
	  	this.prep.setRedLink(this.getSelector("actionOpenPost"),function(){controllers.get("ytBlog").openPost(c.getEmbeddedParam($(this), "post", "Id"), 0)});       
		client.Switcher.resizeYtSideBar();
		controllers.get("ytBlog").preparePostItems("contests.contestBlog");
}
client.blocks.BlockContestBlog.prototype.viewBlock = function(id)
{
    this.open();
}
client.blocks.BlockContestBlog.prototype.getPermalink = function()
{
    return "/contestBlog/?Id=" + this.view.id;   
}
client.blocks.BlockContestBlog.prototype.switchPage = function(pageNumber)
{
	var p = pages.get("contests.contestBlog");
    p.view.page = pageNumber;
    p.open();
}
client.blocks.BlockContestBlog.prototype.switchPageToNext = function(sender)
{
	var p = pages.get("contests.contestBlog");
	if (p.view.page == 0) p.view.page = 1;
    p.view.page++;
    p.open();
}
client.blocks.FormUserChangeStatus = function(view, controller, name)
{
    client.blocks.FormUserChangeStatus.baseConstructor.call(this, view, controller, name);
    this.refreshUrl = "/forms/" + this.section + "/changeStatus";
        this.addField('statusText', '', 'text', 'statusText');
};
client.extendClass(client.blocks.FormUserChangeStatus, client.blocks.Form);
client.blocks.FormUserChangeStatus.prototype.prepare = function()
{
    var c = this.controllerName;   
    if (this.setFieldsOnPrepare)
        this.setFields();
    else
        this.getFields();
        this.prep.setKeyEnter(this, this.getSelector("statusText"), function(){controllers.get(c).changeStatus()});
        this.prep.setRedHintBtnAction(this.getSelector("actionClearStatus"), function(){controllers.get(c).clearStatus()});
        this.prep.setRedHintBtnAction(this.getSelector("actionCancelStatusChange"), function(){controllers.get(c).cancelEditStatusForm()});
    this.prepareFields();
}
client.blocks.FormUserChangeStatus.prototype.getPermalink = function()
{
    return "/forms/" + this.section + "/changeStatus";
}
client.blocks.FormUserInfoPersonal = function(view, controller, name)
{
    client.blocks.FormUserInfoPersonal.baseConstructor.call(this, view, controller, name);
    this.refreshUrl = "/forms/" + this.section + "/editUserInfoPersonal/get";
        this.addField('fname', '', 'text notEmpty', 'fname');
        this.addField('lname', '', 'text notEmpty', 'lname');
        this.addField('login', '', 'text', 'login');
        this.addField('sex', '', 'text notEmpty', 'sex');
        this.addField('birthday', '', 'text notEmpty', 'birthday');
        this.addField('birthmonth', '', 'text notEmpty', 'birthmonth');
        this.addField('birthyear', '', 'text notEmpty', 'birthyear');
        this.addField('country', '', 'text notEmpty', 'country');
        this.addField('city', '', 'text', 'city');
        this.addField('lnameVisibility', '', 'number radio', 'lnameVisibility');
        this.addField('loginVisibility', '', 'number radio', 'loginVisibility');
        this.addField('birthdayVisibility', '', 'number radio', 'birthdayVisibility');
        this.addField('avatarFileId', '', 'text', 'avatarFileId');
        this.addField('avatarFileCode', '', 'text', 'avatarFileCode');
};
client.extendClass(client.blocks.FormUserInfoPersonal, client.blocks.Form);
client.blocks.FormUserInfoPersonal.prototype.prepare = function()
{
    var c = this.controllerName;   
    if (this.setFieldsOnPrepare)
        this.setFields();
    else
        this.getFields();
        var self = this;
        this.prep.setCombobox(this.getSelector("sex"));
        this.prep.setCombobox(this.getSelector("birthday"));
        this.prep.setCombobox(this.getSelector("birthmonth"));
        this.prep.setCombobox(this.getSelector("birthyear"));
        this.prep.setCombobox
		(
			this.getSelector("country"), null,
			function()
			{
				if ($(this.__input).attr('value') == 'Россия')
					$(self.getSelector("citySelectionBlock")).show();
				else $(self.getSelector("citySelectionBlock")).hide();
			},
			null
		);
        this.prep.setCombobox(this.getSelector("city"), true);
        this.prep.setRadiobox(this.getSelector("lnameVisibility"));
        this.prep.setRadiobox(this.getSelector("loginVisibility"));
        this.prep.setRadiobox(this.getSelector("birthdayVisibility"));
        this.prep.setUpload(this.getSelector("avatar"), this.getSelector("actionavatarUpload"), dirs.avatars);
        controllers.get(c).editProfileMode = this.mode;               
        controllers.get(c).currentUserId = this.user;        
        this.prep.setBtnAction(this.getSelector("actionUpdateProfile"), function(){controllers.get(c).enterProfileDetailsPersonal()});
        this.prep.setBtnAction(this.getSelector("actionCancel"), function(){controllers.get(c).viewMyProfile()});
		this.prep.setRedLink(this.getSelector("actionShowEditProfilePersonal"), function(){controllers.get(c).showEnterProfileDetailsForm(1)});
		this.prep.setRedLink(this.getSelector("actionShowEditProfileSpec"), function(){controllers.get(c).showEnterProfileDetailsForm(2)});
	    this.prep.setRedLink(this.getSelector("actionShowEditProfileContacts"), function(){controllers.get(c).showEnterProfileDetailsForm(3)});
	    client.Switcher.resizeYtSideBar();
        pages.get("profile.pageMenu").prepare(); 
    this.prepareFields();
}
client.blocks.FormUserInfoPersonal.prototype.getPermalink = function()
{
    return "/forms/" + this.section + "/editUserInfoPersonal";
}
client.blocks.FormUserInfoSpec = function(view, controller, name)
{
    client.blocks.FormUserInfoSpec.baseConstructor.call(this, view, controller, name);
    this.refreshUrl = "/forms/" + this.section + "/editUserInfoSpec/get";
        this.addField('mainspec', '', 'text', 'mainspec');
        this.addField('spectags', '', 'text', 'spectags');
        this.addField('specInfo', '', 'text', 'specInfo');
        this.addField('specExp', '', 'text', 'specExp');
};
client.extendClass(client.blocks.FormUserInfoSpec, client.blocks.Form);
client.blocks.FormUserInfoSpec.prototype.prepare = function()
{
    var c = this.controllerName;   
    if (this.setFieldsOnPrepare)
        this.setFields();
    else
        this.getFields();
        var spectags = $(this.getSelector("spectags"));
        var b = this; 
        this.prep.setTabView(this.getSelector("selectMainSpec"));
        this.prep.setMultiselect(this.getSelector("mainspec"), function(id){
	        	$.ajax({type: "POST", url: "/forms/profile/editUserInfoSpecTags", data: {spec: id},
	        			success: function(html){ b.prep.addSection(b.getSelector("spectagsSelectors"), "specTagsFor" + id, "", html);
	        				b.prep.setMultiselect(b.getSelector("tagsForSpec" + id),function(id2){
	        						var vals = spectags.attr("value").split(",");
		    					    vals[vals.length] = id2;
			    					var values = "";
									if (vals.length > 0)
										for(var j = 0; j < vals.length; j++) 
											if (vals[j] != "")
												values += vals[j] + ",";  
									spectags.attr("value", values);		
	        					},function(id2){
	        						var vals = spectags.attr("value").split(",");
									if (vals.length > 0)
										for(var j = 0; j < vals.length; j++) 
											if (vals[j] == id2)
												vals[j] = "";	        
									var values = "";
									if (vals.length > 0)
										for(var j = 0; j < vals.length; j++) 
											if (vals[j] != "")
												values += vals[j] + ",";  
									spectags.attr("value", values);					
	        					});
	        		   		}
	        		   	});
        	},function(id){
        		b.prep.removeSection(b.getSelector("spectagsSelectors"), "specTagsFor" + id);
        	});
        controllers.get(c).editProfileMode = this.mode;               
        controllers.get(c).currentUserId = this.user;        
        this.prep.setBtnAction(this.getSelector("actionUpdateProfile"), function(){controllers.get(c).enterProfileDetailsSpec()});
        if (this.mode == 'edit')
            this.prep.setBtnAction(this.getSelector("actionCancel"), function(){controllers.get(c).viewMyProfile()});    
        else
            this.prep.setBtnAction(this.getSelector("actionCancel"), function(){controllers.get(c).showEnterProfileDetailsForm(1)});
		this.prep.setRedLink(this.getSelector("actionShowEditProfilePersonal"), function(){controllers.get(c).showEnterProfileDetailsForm(1)});
		this.prep.setRedLink(this.getSelector("actionShowEditProfileSpec"), function(){controllers.get(c).showEnterProfileDetailsForm(2)});
	    this.prep.setRedLink(this.getSelector("actionShowEditProfileContacts"), function(){controllers.get(c).showEnterProfileDetailsForm(3)});
        this.prep.setLengthIndicator(this.getSelector("specInfo"), this.getSelector("specInfoLength"), 300);
		client.Switcher.resizeYtSideBar();
        pages.get("profile.pageMenu").prepare(); 
    this.prepareFields();
}
client.blocks.FormUserInfoSpec.prototype.getPermalink = function()
{
    return "/forms/" + this.section + "/editUserInfoSpec";
}
client.blocks.FormUserInfoContacts = function(view, controller, name)
{
    client.blocks.FormUserInfoContacts.baseConstructor.call(this, view, controller, name);
    this.refreshUrl = "/forms/" + this.section + "/editUserInfoContacts/get";
        this.addField('email', '', 'text', 'email');
        this.addField('site', '', 'text', 'site');
        this.addField('phone', '', 'text', 'phone');
        this.addField('linkOdnoklasniki', '', 'text', 'linkOdnoklasniki');
        this.addField('linkVkontakte', '', 'text', 'linkVkontakte');
        this.addField('linkMyspace', '', 'text', 'linkMyspace');
        this.addField('linkLastfm', '', 'text', 'linkLastfm');
        this.addField('linkLivejournal', '', 'text', 'linkLivejournal');
        this.addField('linkFacebook', '', 'text', 'linkFacebook');
        this.addField('linkTwitter', '', 'text', 'linkTwitter');
        this.addField('linkSkype', '', 'text', 'linkSkype');
        this.addField('linkIcq', '', 'text', 'linkIcq');
        this.addField('linkYahoo', '', 'text', 'linkYahoo');
        this.addField('linkMsn', '', 'text', 'linkMsn');
        this.addField('linkCustom1Name', '', 'text', 'linkCustom1Name');
        this.addField('linkCustom1Value', '', 'text', 'linkCustom1Value');
        this.addField('linkCustom2Name', '', 'text', 'linkCustom2Name');
        this.addField('linkCustom2Value', '', 'text', 'linkCustom2Value');
        this.addField('linkCustom3Name', '', 'text', 'linkCustom3Name');
        this.addField('linkCustom3Value', '', 'text', 'linkCustom3Value');
        this.addField('emailVisibility', '', 'number radio', 'emailVisibility');
        this.addField('phoneVisibility', '', 'number radio', 'phoneVisibility');
};
client.extendClass(client.blocks.FormUserInfoContacts, client.blocks.Form);
client.blocks.FormUserInfoContacts.prototype.prepare = function()
{
    var c = this.controllerName;   
    if (this.setFieldsOnPrepare)
        this.setFields();
    else
        this.getFields();
        this.prep.setRadiobox(this.getSelector("emailVisibility"));
        this.prep.setRadiobox(this.getSelector("phoneVisibility"));
        this.prep.setBtnAction(this.getSelector("actionAddField"), function(){controllers.get(c).addContactField()});
        controllers.get(c).editProfileMode = this.mode;               
        controllers.get(c).currentUserId = this.user;        
        this.prep.setBtnAction(this.getSelector("actionUpdateProfile"), function(){controllers.get(c).enterProfileDetailsContacts()});
        if (this.mode == 'edit')
            this.prep.setBtnAction(this.getSelector("actionCancel"), function(){controllers.get(c).viewMyProfile()});    
        else
            this.prep.setBtnAction(this.getSelector("actionCancel"), function(){controllers.get(c).showEnterProfileDetailsForm(2)});
        this.prep.setRedLink(this.getSelector("actionShowEditProfilePersonal"), function(){controllers.get(c).showEnterProfileDetailsForm(1)});
		this.prep.setRedLink(this.getSelector("actionShowEditProfileSpec"), function(){controllers.get(c).showEnterProfileDetailsForm(2)});
	    this.prep.setRedLink(this.getSelector("actionShowEditProfileContacts"), function(){controllers.get(c).showEnterProfileDetailsForm(3)});
        client.Switcher.resizeYtSideBar();
        pages.get("profile.pageMenu").prepare(); 
    this.prepareFields();
}
client.blocks.FormUserInfoContacts.prototype.getPermalink = function()
{
    return "/forms/" + this.section + "/editUserInfoContacts";
}
client.blocks.FormSidebarAddFriend = function(view, controller, name)
{
    client.blocks.FormSidebarAddFriend.baseConstructor.call(this, view, controller, name);
    this.refreshUrl = "/forms/" + this.section + "/addFriend";
        this.addField('friendId', '', 'text', 'friendId');    
        this.addField('invitation', '', 'text', 'invitation');
};
client.extendClass(client.blocks.FormSidebarAddFriend, client.blocks.Form);
client.blocks.FormSidebarAddFriend.prototype.prepare = function()
{
    var c = this.controllerName;   
    if (this.setFieldsOnPrepare)
        this.setFields();
    else
        this.getFields();
        this.prep.setRedLink(this.getSelector("actionAddFriend"), function(){controllers.get(c).addFriend()});
        this.prep.setRedLink(this.getSelector("actionCancel"), function(){client.Switcher.switchScrollPanelBack('rpmain', false)});
        this.prep.setRedLink(this.getSelector("actionOpenProfile"), function(){controllers.get(c).openFriendProfile($(this), "addFriendForm")});  
        client.Switcher.resizeYtSideBar();
    this.prepareFields();
}
client.blocks.FormSidebarAddFriend.prototype.getPermalink = function()
{
    return "/forms/" + this.section + "/addFriend";
}
client.blocks.FormSidebarChat = function(view, controller, name)
{
    client.blocks.FormSidebarChat.baseConstructor.call(this, view, controller, name);
    this.refreshUrl = "/forms/" + this.section + "/chat";
        this.addField('interlocutorId', '', 'text', 'interlocutorId');    
        this.addField('message', '', 'text', 'message');
};
client.extendClass(client.blocks.FormSidebarChat, client.blocks.Form);
client.blocks.FormSidebarChat.prototype.prepare = function()
{
    var c = this.controllerName;   
    if (this.setFieldsOnPrepare)
        this.setFields();
    else
        this.getFields();
        this.prep.setKeyEnter(this, this.getSelector("message"), function(){controllers.get(c).sendMessage()});
        var p = pages.get("sidebarChatForm");
    	client.drag.prepareTalantDragItems(p);
    	this.prep.setInputHint(this.getSelector("searchMessage"), "Поиск по сообщениям");
	    this.prep.setRedLink(this.getSelector("actionOpenInterlocutorProfile"), function(){
	    	var c = controllers.get("ytProfile");
	    	c.viewProfile(c.getEmbeddedParam($(this), "chatForm", "InterlocutorId"))});
        this.prep.setInputHint(this.getSelector("message"), "Начните вводить сообщение или перетащите сюда контент");
        this.prep.setRedLink(this.getSelector("actionShowOldMessages"), function(){
	        var c = controllers.get("ytProfile");
   			pages.get("sidebar.chatHistory").view.id = c.getEmbeddedParam($(this), "chatForm", "InterlocutorId");
			pages.get("sidebar.chatHistory").show();   			
        });
        client.Switcher.scrollToBottom(this.getSelector("chatMessages"));
        client.Switcher.resizeYtSideBar();
        this.syncTimerStart();
		client.drag.setDraggable(p.getSelector("drag"));
        client.drag.setDropabble('#sidebarChat #message',
		    "send",
   		    ".user,.album,.albumPhoto,.albumAudio,.albumVideo,.albumTexts",
   		    function(event, ui) {
                var c = controllers.get("ytSidebar");
                var iid = c.getEmbeddedParam($('#sidebarChat').children(".chatForm"), "chatForm", "InterlocutorId");                
                var id = 0;
                var messageText = '';
                if (ui.draggable.hasClass('user'))
                {
                    id = c.getEmbeddedParam(ui.draggable, "user", "Id");
                    messageText = '/user ' + id;
                }
                if (ui.draggable.hasClass('album'))
                {
                    id = c.getEmbeddedParam(ui.draggable, "album", "Id");
                    messageText = '/album ' + id;
                }
                if (ui.draggable.hasClass('albumPhoto'))
                {
                    id = c.getEmbeddedParam(ui.draggable, "albumPhoto", "Id");
                    messageText = '/photo ' + id;
                }
                if (ui.draggable.hasClass('albumVideo'))
                {
                    id = c.getEmbeddedParam(ui.draggable, "albumVideo", "Id");
                    messageText = '/video ' + id;
                }
                if (ui.draggable.hasClass('albumAudio'))
                {
                    id = c.getEmbeddedParam(ui.draggable, "albumAudio", "Id");
                    messageText = '/audio ' + id;
                }
                if (ui.draggable.hasClass('albumTexts'))
                {
                    id = c.getEmbeddedParam(ui.draggable, "albumTexts", "Id");
                    messageText = '/texts ' + id;
                }
                commands.get("sendMessage").execute(c, {interlocutorId:iid, message:messageText}, "sendMessageLoading", "sendMessageResult");
			});
    this.prepareFields();
}
client.blocks.FormSidebarChat.prototype.getPermalink = function()
{
    return "/forms/" + this.section + "/chat";
}
client.blocks.FormSidebarChat.prototype.syncInput = function()
{
    return {id:this.view.id, chatLength: this.chatLength};    
}
client.blocks.FormSidebarChat.prototype.prepareSyncResult = function(result)
{
    var newMessages = 0;
    for (var i = 0; i < result.length; i++)
    {
        if (result[i].content == "message")
        {
		    var p = pages.get('sidebarChatForm');
        	if ($(p.getSelector(result[i].container)).length == 0)
	        {
				$(p.getSelector("chatMessages")).append(result[i].html);
    	        this.chatLength = result[i].id;
    	        newMessages++;
            }
        }
    }
    if (newMessages > 0)
        client.Switcher.scrollToBottom(this.getSelector("chatMessages"));
    client.drag.prepareTalantDragItems(pages.get("sidebarChatForm")); 	
}
client.blocks.BlockSidebarChatHistory = function(view, controller, name)
{
    client.blocks.BlockSidebarChatHistory.baseConstructor.call(this, view, controller, name);
    this.refreshUrl = "/" + this.section + "/chatHistory/get";
};
client.extendClass(client.blocks.BlockSidebarChatHistory, client.blocks.BlockAjax);
client.blocks.BlockSidebarChatHistory.prototype.prepare = function()
{
    var c = this.controllerName;   
	    client.drag.prepareTalantDragItems(this); 	
    	client.Switcher.resizeYtSideBar();
}
client.blocks.BlockSidebarChatHistory.prototype.viewBlock = function(id)
{
    this.open();
}
client.blocks.BlockSidebarChatHistory.prototype.getPermalink = function()
{
    return "/" + this.section + "/{url}/";   
}
client.blocks.BlockSidebarMessagesList = function(view, controller, name)
{
    client.blocks.BlockSidebarMessagesList.baseConstructor.call(this, view, controller, name);
    this.refreshUrl = "/" + this.section + "/messagesList/get";
};
client.extendClass(client.blocks.BlockSidebarMessagesList, client.blocks.BlockAjax);
client.blocks.BlockSidebarMessagesList.prototype.prepare = function()
{
    var c = this.controllerName;   
	    pages.get('sidebar.messagesList').initSearch(this);   	 
        this.prep.setRedLink(this.getSelector("actionOpenChat"), function(){controllers.get("ytProfile").showChatFormExt($(this), "senderInfo")});
        this.prep.setRedLink(this.getSelector("actionAnswerMessage"), function(){controllers.get("ytProfile").showChatFormExt($(this), "sidebarMessage")});
	    this.prep.setRedLink(this.getSelector("actionDeleteMessage"), function(){controllers.get("ytSidebar").deleteMessage($(this))});
        this.prep.setRedLink(this.getSelector("actionShowArchive"), function(){controllers.get("ytSidebar").showMessagesArchive()});
	    client.drag.prepareTalantDragItems(this); 	
    	client.Switcher.resizeYtSideBar();
}
client.blocks.BlockSidebarMessagesList.prototype.viewBlock = function(id)
{
    this.open();
}
client.blocks.BlockSidebarMessagesList.prototype.getPermalink = function()
{
    return "/" + this.section + "/{url}/";   
}
client.blocks.BlockSidebarMessagesList.prototype.initSearch = function(page)
{
	var p = page;
	p.prep.setInputHint(p.getSelector("searchMessage"), "Поиск по сообщениям");   
	$(p.getSelector("searchMessage")).keyup(function(){
		var like = $(p.getSelector("searchMessage")).attr("value");
		if (like == "Поиск по сообщениям") like = "";
		pages.get("sidebar.messagesSearch").view.like = like;
		pages.get("sidebar.messagesSearch").show();   			
	});
    p.prep.setRedLink(p.getSelector("actionShowOldMessages"), function(){
		pages.get("sidebar.messagesSearch").view.like = "";
		pages.get("sidebar.messagesSearch").show();   			
    });
}
client.blocks.BlockSidebarMessagesArchive = function(view, controller, name)
{
    client.blocks.BlockSidebarMessagesArchive.baseConstructor.call(this, view, controller, name);
    this.refreshUrl = "/" + this.section + "/messagesArchive/get";
};
client.extendClass(client.blocks.BlockSidebarMessagesArchive, client.blocks.BlockAjax);
client.blocks.BlockSidebarMessagesArchive.prototype.prepare = function()
{
    var c = this.controllerName;   
		pages.get('sidebar.messagesList').initSearch(this);   	   		
        this.prep.setRedLink(this.getSelector("actionOpenChat"), function(){controllers.get("ytProfile").showChatFormExt($(this), "senderInfo")});
        this.prep.setRedLink(this.getSelector("actionAnswerMessage"), function(){controllers.get("ytProfile").showChatFormExt($(this), "sidebarMessage")});
	    this.prep.setRedLink(this.getSelector("actionDeleteMessage"), function(){controllers.get("ytSidebar").deleteMessage($(this))});
	    client.drag.prepareTalantDragItems(this); 	
    	client.Switcher.resizeYtSideBar();
}
client.blocks.BlockSidebarMessagesArchive.prototype.viewBlock = function(id)
{
    this.open();
}
client.blocks.BlockSidebarMessagesArchive.prototype.getPermalink = function()
{
    return "/" + this.section + "/{url}/";   
}
client.blocks.BlockSidebarMessagesSearch = function(view, controller, name)
{
    client.blocks.BlockSidebarMessagesSearch.baseConstructor.call(this, view, controller, name);
    this.refreshUrl = "/" + this.section + "/messagesSearch/get";
};
client.extendClass(client.blocks.BlockSidebarMessagesSearch, client.blocks.BlockAjax);
client.blocks.BlockSidebarMessagesSearch.prototype.prepare = function()
{
    var c = this.controllerName;   
        this.prep.setRedLink(this.getSelector("actionOpenChat"), function(){controllers.get("ytProfile").showChatFormExt($(this), "senderInfo")});
        this.prep.setRedLink(this.getSelector("actionAnswerMessage"), function(){controllers.get("ytProfile").showChatFormExt($(this), "sidebarMessage")});
	    this.prep.setRedLink(this.getSelector("actionDeleteMessage"), function(){controllers.get("ytSidebar").deleteMessage($(this))});
	    client.drag.prepareTalantDragItems(this); 	
    	client.Switcher.resizeYtSideBar();
}
client.blocks.BlockSidebarMessagesSearch.prototype.viewBlock = function(id)
{
    this.open();
}
client.blocks.BlockSidebarMessagesSearch.prototype.getPermalink = function()
{
    return "/" + this.section + "/{url}/";   
}
client.blocks.FormSidebarDeleteFriend = function(view, controller, name)
{
    client.blocks.FormSidebarDeleteFriend.baseConstructor.call(this, view, controller, name);
    this.refreshUrl = "/forms/" + this.section + "/deleteFriend";
        this.addField('friendId', '', 'text', 'friendId');    
};
client.extendClass(client.blocks.FormSidebarDeleteFriend, client.blocks.Form);
client.blocks.FormSidebarDeleteFriend.prototype.prepare = function()
{
    var c = this.controllerName;   
    if (this.setFieldsOnPrepare)
        this.setFields();
    else
        this.getFields();
        this.prep.setRedLink(this.getSelector("actionDeleteFriend"), function(){controllers.get(c).deleteFriend()});
        this.prep.setRedLink(this.getSelector("actionCancel"), function(){client.Switcher.switchScrollPanelBack('rpmain', false)});
        this.prep.setRedLink(this.getSelector("actionOpenProfile"), function(){controllers.get(c).openFriendProfile($(this), "deleteFriendForm")});  
        client.Switcher.resizeYtSideBar();
    this.prepareFields();
}
client.blocks.FormSidebarDeleteFriend.prototype.getPermalink = function()
{
    return "/forms/" + this.section + "/deleteFriend";
}
client.blocks.FormSetPassword = function(view, controller, name)
{
    client.blocks.FormSetPassword.baseConstructor.call(this, view, controller, name);
    this.refreshUrl = "/forms/" + this.section + "/setPassword";
        this.addField('password', '', 'text notEmpty', 'password');    
        this.addField('passwordCheck', '', 'text notEmpty', 'passwordCheck');    
};
client.extendClass(client.blocks.FormSetPassword, client.blocks.Form);
client.blocks.FormSetPassword.prototype.prepare = function()
{
    var c = this.controllerName;   
    if (this.setFieldsOnPrepare)
        this.setFields();
    else
        this.getFields();
        this.prep.setBtnAction(this.getSelector("actionSetPassword"), function(){controllers.get(c).setPassword()});
        pages.get("profile.pageMenu").prepare();
        client.Switcher.resizeYtSideBar();
    this.prepareFields();
}
client.blocks.FormSetPassword.prototype.getPermalink = function()
{
    return "/forms/" + this.section + "/setPassword";
}
client.blocks.FormPrivacy = function(view, controller, name)
{
    client.blocks.FormPrivacy.baseConstructor.call(this, view, controller, name);
    this.refreshUrl = "/forms/" + this.section + "/setPrivacy/get";
		this.addField('onlineStatusVisibility', '', 'number radio', 'onlineStatusVisibility');
	    this.addField('contactsVisibility', '', 'number radio', 'contactsVisibility');    
	    this.addField('favVisibility', '', 'number radio', 'favVisibility');
	    this.addField('albumsVisibility', '', 'number radio', 'albumsVisibility');
	    this.addField('groupsVisibility', '', 'number radio', 'groupsVisibility');
	    this.addField('contestsVisibility', '', 'number radio', 'contestsVisibility');
        this.addField('catalogVisibility', '', 'number radio', 'catalogVisibility');
};
client.extendClass(client.blocks.FormPrivacy, client.blocks.Form);
client.blocks.FormPrivacy.prototype.prepare = function()
{
    var c = this.controllerName;   
    if (this.setFieldsOnPrepare)
        this.setFields();
    else
        this.getFields();
	    this.prep.setRadiobox(this.getSelector("onlineStatusVisibility"));    
	    this.prep.setRadiobox(this.getSelector("contactsVisibility"));
	    this.prep.setRadiobox(this.getSelector("favVisibility"));
	    this.prep.setRadiobox(this.getSelector("albumsVisibility"));
	    this.prep.setRadiobox(this.getSelector("groupsVisibility"));
	    this.prep.setRadiobox(this.getSelector("contestsVisibility"));
	    this.prep.setRadiobox(this.getSelector("catalogVisibility"));
        this.prep.setBtnAction(this.getSelector("actionUpdateProfile"), function(){controllers.get(c).setPrivacy()});
        this.prep.setBtnAction(this.getSelector("actionCancel"), function(){controllers.get(c).viewMyProfile()});
        this.prep.setRedLink(this.getSelector("actionChange"), function(){controllers.get(c).changePassword()});
        pages.get("profile.pageMenu").prepare();
        client.Switcher.resizeYtSideBar();
    this.prepareFields();
}
client.blocks.FormPrivacy.prototype.getPermalink = function()
{
    return "/forms/" + this.section + "/setPrivacy";
}
client.blocks.FormSyncOptions = function(view, controller, name)
{
    client.blocks.FormSyncOptions.baseConstructor.call(this, view, controller, name);
    this.refreshUrl = "/forms/" + this.section + "/setSyncOptions/get";
		this.addField('syncTwitter', '', 'number radio', 'syncTwitter');
};
client.extendClass(client.blocks.FormSyncOptions, client.blocks.Form);
client.blocks.FormSyncOptions.prototype.prepare = function()
{
    var c = this.controllerName;   
    if (this.setFieldsOnPrepare)
        this.setFields();
    else
        this.getFields();
	    this.prep.setRadiobox(this.getSelector("syncTwitter"));    
     	this.prep.setBtnAction(this.getSelector("actionGetTwitterToken"), function(){pages.get("profileActivateTwitterForm").open()});
        this.prep.setBtnAction(this.getSelector("actionUpdateProfile"), function(){controllers.get(c).setSyncOptions()});
        this.prep.setBtnAction(this.getSelector("actionCancel"), function(){controllers.get(c).viewMyProfile()});
        pages.get("profile.pageMenu").prepare();
        client.Switcher.resizeYtSideBar();
    this.prepareFields();
}
client.blocks.FormSyncOptions.prototype.getPermalink = function()
{
    return "/forms/" + this.section + "/setSyncOptions";
}
client.blocks.FormActivateTwitter = function(view, controller, name)
{
    client.blocks.FormActivateTwitter.baseConstructor.call(this, view, controller, name);
    this.refreshUrl = "/forms/" + this.section + "/activateTwitter/get";
		this.addField('twitterPin', '', 'number radio', 'twitterPin');
};
client.extendClass(client.blocks.FormActivateTwitter, client.blocks.Form);
client.blocks.FormActivateTwitter.prototype.prepare = function()
{
    var c = this.controllerName;   
    if (this.setFieldsOnPrepare)
        this.setFields();
    else
        this.getFields();
        this.prep.setBtnAction(this.getSelector("actionUpdateProfile"), function(){controllers.get(c).activateTwitter()});
        this.prep.setBtnAction(this.getSelector("actionCancel"), function(){controllers.get(c).viewMyProfile()});
        pages.get("profile.pageMenu").prepare();
        client.Switcher.resizeYtSideBar();
    this.prepareFields();
}
client.blocks.FormActivateTwitter.prototype.getPermalink = function()
{
    return "/forms/" + this.section + "/activateTwitter";
}
client.blocks.BlockProfileAddTwitter = function(view, controller, name)
{
    client.blocks.BlockProfileAddTwitter.baseConstructor.call(this, view, controller, name);
    this.refreshUrl = "/" + this.section + "/addTwitter/get";
};
client.extendClass(client.blocks.BlockProfileAddTwitter, client.blocks.BlockAjax);
client.blocks.BlockProfileAddTwitter.prototype.prepare = function()
{
    var c = this.controllerName;   
}
client.blocks.BlockProfileAddTwitter.prototype.viewBlock = function(id)
{
    this.open();
}
client.blocks.BlockProfileAddTwitter.prototype.getPermalink = function()
{
    return "/" + this.section + "/{url}/";   
}
client.blocks.FormCustomization = function(view, controller, name)
{
    client.blocks.FormCustomization.baseConstructor.call(this, view, controller, name);
    this.refreshUrl = "/forms/" + this.section + "/setCustomization/get";
		this.addField('backgroundFileId', '', 'text', 'backgroundFileId');
        this.addField('backgroundFileCode', '', 'text', 'backgroundFileCode');
		this.addField('orderOfBlocks', '', 'text', 'orderOfBlocks');
};
client.extendClass(client.blocks.FormCustomization, client.blocks.Form);
client.blocks.FormCustomization.prototype.prepare = function()
{
    var c = this.controllerName;   
    if (this.setFieldsOnPrepare)
        this.setFields();
    else
        this.getFields();
    	$(this.getSelector("orderOfBlocksSelection")).sortable();
		$(this.getSelector("orderOfBlocksSelection")).disableSelection();
        this.prep.setUpload(this.getSelector("background"), this.getSelector("actionbackgroundUpload"), dirs.backgrounds);
        this.prep.setBtnAction(this.getSelector("actionUpdateProfile"), function(){controllers.get(c).setProfileCustomization()});
        this.prep.setBtnAction(this.getSelector("actionCancel"), function(){controllers.get(c).viewMyProfile()});
        pages.get("profile.pageMenu").prepare();
        client.Switcher.resizeYtSideBar();
    this.prepareFields();
}
client.blocks.FormCustomization.prototype.getPermalink = function()
{
    return "/forms/" + this.section + "/setCustomization";
}
client.blocks.FormDisableSpam = function(view, controller, name)
{
    client.blocks.FormDisableSpam.baseConstructor.call(this, view, controller, name);
    this.refreshUrl = "/forms/" + this.section + "/disableSpam/get";
};
client.extendClass(client.blocks.FormDisableSpam, client.blocks.Form);
client.blocks.FormDisableSpam.prototype.prepare = function()
{
    var c = this.controllerName;   
    if (this.setFieldsOnPrepare)
        this.setFields();
    else
        this.getFields();
       this.prep.setBtnAction(this.getSelector("actionDisableSpam"),
         function(){
	        var cc = controllers.get(c);
            var userId = cc.getEmbeddedParam($(this), "stopmailing", "Id");
            cc.stopMailing(userId);
         }); 
    client.Switcher.resizeYtSideBar();  
    this.prepareFields();
}
client.blocks.FormDisableSpam.prototype.getPermalink = function()
{
    return "/forms/" + this.section + "/disableSpam";
}
client.blocks.FormAlbumsEditAlbum = function(view, controller, name)
{
    client.blocks.FormAlbumsEditAlbum.baseConstructor.call(this, view, controller, name);
    this.refreshUrl = "/forms/" + this.section + "/editAlbum/get";
        this.addField('albumId', '', 'text', 'albumId');
        this.addField('albumType', '', 'text', 'albumType');
        this.addField('albumName', '', 'text notEmpty', 'albumName');
        this.addField('albumDescription', '', 'text', 'albumDescription');
        this.addField('albumVisibility', '', 'number radio', 'albumVisibility');
        this.addField('albumCommentsAccess', '', 'number radio', 'albumCommentsAccess');
        this.addField('albumIsCopyrighted', '', 'number radio', 'albumIsCopyrighted');
        this.addField('albumIsMyShowcase', '', 'number radio', 'albumIsMyShowcase');
        this.addField('albumIsNotRated', '', 'number radio', 'albumIsNotRated');
        this.addField('coverFileId', '', 'text', 'coverFileId');
        this.addField('coverFileCode', '', 'text', 'coverFileCode');
};
client.extendClass(client.blocks.FormAlbumsEditAlbum, client.blocks.Form);
client.blocks.FormAlbumsEditAlbum.prototype.prepare = function()
{
    var c = this.controllerName;   
    if (this.setFieldsOnPrepare)
        this.setFields();
    else
        this.getFields();
        var userId = this.user;
        var albumId = this.album;
        controllers.get("ytProfile").currentUserId = this.user;               
        this.prep.setBtnAction(this.getSelector("actionUpdateAlbum"), function(){controllers.get(c).editAlbum()});
        this.prep.setBtnAction(this.getSelector("actionCancel"), function(){
	        if (albumId == 0) controllers.get('ytProfile').viewAlbums(userId); 
	        else controllers.get('ytAlbums').openAlbum(albumId);});
        this.prep.setRadiobox(this.getSelector("albumVisibility"));
        this.prep.setRadiobox(this.getSelector("albumCommentsAccess"));
        this.prep.setRadiobox(this.getSelector("albumIsCopyrighted"));
        this.prep.setRadiobox(this.getSelector("albumIsMyShowcase"));
        this.prep.setRadiobox(this.getSelector("albumIsNotRated"));
        this.prep.setUpload(this.getSelector("cover"), this.getSelector("actioncoverUpload"), dirs.covers);
        pages.get("profile.pageMenu").prepare(); 
    this.prepareFields();
}
client.blocks.FormAlbumsEditAlbum.prototype.getPermalink = function()
{
    return "/forms/" + this.section + "/editAlbum"+"?albumId="+this.view.id + "&albumType=" + this.view.type;
}
client.blocks.FormAlbumsUploadAlbum = function(view, controller, name)
{
    client.blocks.FormAlbumsUploadAlbum.baseConstructor.call(this, view, controller, name);
    this.refreshUrl = "/forms/" + this.section + "/uploadAlbum/get";
        this.addField('albumNewFilesCount', '', 'text', 'albumNewFilesCount');
        this.fileNumber = 0;
		this.fileNumberSucess = 0;
};
client.extendClass(client.blocks.FormAlbumsUploadAlbum, client.blocks.Form);
client.blocks.FormAlbumsUploadAlbum.prototype.prepare = function()
{
    var c = this.controllerName;   
    if (this.setFieldsOnPrepare)
        this.setFields();
    else
        this.getFields();
		this.fileNumber = 0;            
		this.fileNumberSucess = 0;
        var userId = this.user;
        var albumId = this.album; 
        var albumType = this.albumType; 
        controllers.get("ytProfile").currentUserId = this.user;               
        this.prep.setBtnAction(this.getSelector("actionUpdateAlbum"), function(){controllers.get(c).uploadAlbumItems()});
        this.prep.setBtnAction(this.getSelector("actionCancel"), function(){controllers.get('ytAlbums').openAlbum(albumId)});
       	this.uploadFormHtml = $(this.getSelector("newFile0") + "Upload").html();
        this.uploadDir = dirs.photos;
        if (albumType == 1) this.uploadDir = dirs.photos;
   		if (albumType == 2) this.uploadDir = dirs.audio;
	    if (albumType == 3) this.uploadDir = dirs.video;
	    if (albumType == 4) this.uploadDir = dirs.texts;
        var uploader = this.prep.setUpload(this.getSelector("newFile0"), this.getSelector("actionnewFile0Upload"), this.uploadDir);
		uploader.addPreviewIntoPanel = this.getSelector("newFilesList");
		uploader.newFileHandler = this.addNewUploadForm;
		uploader.successUploadHandler = this.successUpload;		
		uploader.motherForm = this;
		$(this.getSelector("albumNewFilesCount")).attr("value", this.fileNumber);		
        pages.get("profile.pageMenu").prepare(); 
    this.prepareFields();
}
client.blocks.FormAlbumsUploadAlbum.prototype.getPermalink = function()
{
    return "/forms/" + this.section + "/uploadAlbum"+"?albumId="+this.view.id;
}
client.blocks.FormAlbumsUploadAlbum.prototype.addNewUploadForm = function()
{
	this.fileNumber++;
	$(this.getSelector("albumNewFilesCount")).attr("value", this.fileNumber);
	var base = "newFile" + this.fileNumber;
	var newFormHtml = "<div class='" + base + "Upload left'>" + this.uploadFormHtml.replace(/newFile0/g, base).replace(/Добавить/g, "Добавить еще") + "</div>";
	$(this.getSelector("newFilesUploadButton")).prepend(newFormHtml);
    var uploader = this.prep.setUpload(this.getSelector(base), this.getSelector("action" + base + "Upload"), this.uploadDir);
    uploader.addPreviewIntoPanel = this.getSelector("newFilesList");
	uploader.newFileHandler = this.addNewUploadForm;
	uploader.successUploadHandler = this.successUpload;		
	uploader.motherForm = this;
	this.updateCounter();	
}
client.blocks.FormAlbumsUploadAlbum.prototype.successUpload = function()
{
	this.fileNumberSucess++;
	this.updateCounter();
}    
client.blocks.FormAlbumsUploadAlbum.prototype.updateCounter = function()
{
	$(this.getSelector('newFilesCounter')).html("Загружено " + this.fileNumberSucess + " из " + this.fileNumber);
}
client.blocks.FormAlbumsEditAlbumItems = function(view, controller, name)
{
    client.blocks.FormAlbumsEditAlbumItems.baseConstructor.call(this, view, controller, name);
    this.refreshUrl = "/forms/" + this.section + "/editAlbumItems/get";
        this.addField('albumId', '', 'text', 'albumId');
};
client.extendClass(client.blocks.FormAlbumsEditAlbumItems, client.blocks.Form);
client.blocks.FormAlbumsEditAlbumItems.prototype.prepare = function()
{
    var c = this.controllerName;   
    if (this.setFieldsOnPrepare)
        this.setFields();
    else
        this.getFields();
        var userId = this.user;
        var albumId = this.album;       
        controllers.get("ytProfile").currentUserId = this.user;               
        this.prep.setBtnAction(this.getSelector("actionUpdateAlbum"), function(){controllers.get('ytAlbums').editAlbumItems()});
        this.prep.setBtnAction(this.getSelector("actionCancel"), function(){controllers.get('ytAlbums').openAlbum(albumId);});
        this.prep.setInputHint(this.getSelector("itemAuthor"), "Введите автора");   
        this.prep.setInputHint(this.getSelector("itemName"), "Введите название");
        this.prep.setInputHint(this.getSelector("itemDescription"), "Введите описание");
        this.prep.setInputHint(this.getSelector("itemText"), "Введите текст");
		var c = controllers.get("ytAlbums");   
		var p = this;
     	this.prep.setRedLink(this.getSelector("actionDeleteItem"), function(){pages.get("albumsEditAlbumItemsForm").deleteItem(c.getEmbeddedParam($(this),"albumItem","Id"))});
     	this.prep.setRedLink(this.getSelector("actionEditText"), function(){
         	var base = "item" + c.getEmbeddedParam($(this),"albumItem","Id");
     	    $(p.getSelector(base + "TextEditor")).show("fast");
     	});
        pages.get("profile.pageMenu").prepare(); 
    this.prepareFields();
}
client.blocks.FormAlbumsEditAlbumItems.prototype.getPermalink = function()
{
    return "/forms/" + this.section + "/editAlbumItems"+"?albumId="+this.view.id + "&albumEditMode=" + this.view.editMode;
}
client.blocks.FormAlbumsEditAlbumItems.prototype.deleteItem = function(id)
{
	var base = "item" + id;
	var p = pages.get("albumsEditAlbumItemsForm");
	$(p.getSelector(base + "Deleted")).attr("value", "1");  
	$(p.getSelector(base + "Panel")).hide("fast");
}
client.blocks.FormAlbumsAddText = function(view, controller, name)
{
    client.blocks.FormAlbumsAddText.baseConstructor.call(this, view, controller, name);
    this.refreshUrl = "/forms/" + this.section + "/addTextIntoAlbum/get";
        this.addField('itemName', '', 'text', 'itemName');
        this.addField('itemDescription', '', 'text', 'itemDescription');        
        this.addField('itemText', '', 'text', 'itemText');
};
client.extendClass(client.blocks.FormAlbumsAddText, client.blocks.Form);
client.blocks.FormAlbumsAddText.prototype.prepare = function()
{
    var c = this.controllerName;   
    if (this.setFieldsOnPrepare)
        this.setFields();
    else
        this.getFields();
        var userId = this.user;
        var albumId = this.album;
        controllers.get("ytProfile").currentUserId = this.user;               
        this.prep.setBtnAction(this.getSelector("actionUpdateAlbum"), function(){
            controllers.get(c).addTextIntoAlbum(albumId)});
        this.prep.setBtnAction(this.getSelector("actionCancel"), function(){
	        if (albumId == 0) controllers.get('ytProfile').viewAlbums(userId); 
	        else controllers.get('ytAlbums').openAlbum(albumId);});
        pages.get("profile.pageMenu").prepare(); 
    this.prepareFields();
}
client.blocks.FormAlbumsAddText.prototype.getPermalink = function()
{
    return "/forms/" + this.section + "/addTextIntoAlbum"+"?albumId="+this.view.id;
}
client.blocks.FormAlbumsDeleteAlbum = function(view, controller, name)
{
    client.blocks.FormAlbumsDeleteAlbum.baseConstructor.call(this, view, controller, name);
    this.refreshUrl = "/forms/" + this.section + "/deleteAlbum/get";
};
client.extendClass(client.blocks.FormAlbumsDeleteAlbum, client.blocks.Form);
client.blocks.FormAlbumsDeleteAlbum.prototype.prepare = function()
{
    var c = this.controllerName;   
    if (this.setFieldsOnPrepare)
        this.setFields();
    else
        this.getFields();
        var userId = this.user;
        var albumId = this.album;
        controllers.get("ytProfile").currentUserId = this.user;               
        this.prep.setBtnAction(this.getSelector("actionDeleteAlbum"), function(){controllers.get(c).deleteAlbum(albumId)});
        this.prep.setBtnAction(this.getSelector("actionCancel"), function(){controllers.get('ytAlbums').openAlbum(albumId);});
        pages.get("profile.pageMenu").prepare(); 
    this.prepareFields();
}
client.blocks.FormAlbumsDeleteAlbum.prototype.getPermalink = function()
{
    return "/forms/" + this.section + "/deleteAlbum"+"?albumId="+this.view.id;
}
client.blocks.FormBlogEditPost = function(view, controller, name)
{
    client.blocks.FormBlogEditPost.baseConstructor.call(this, view, controller, name);
    this.refreshUrl = "/forms/" + this.section + "/editPost/get";
        this.addField('postId', '', 'text', 'postId');
        this.addField('blogId', '', 'text', 'blogId');
        this.addField('sectionId', '', 'text', 'sectionId');
        this.addField('postTitle', '', 'text notEmpty', 'postTitle');
        this.addField('postMainText', '', 'text', 'postMainText');
};
client.extendClass(client.blocks.FormBlogEditPost, client.blocks.Form);
client.blocks.FormBlogEditPost.prototype.prepare = function()
{
    var c = this.controllerName;   
    if (this.setFieldsOnPrepare)
        this.setFields();
    else
        this.getFields();
		this.prep.setBtnAction(this.getSelector("actionEditPost"), function(){controllers.get('ytBlog').createPostDraft()});
        this.prep.setBtnAction(this.getSelector("actionCancel"), function(){controllers.get('ytProfile').viewMyBlog()});    
 		client.drag.setDropabble(this.getSelector("postMainText"),
		    "add",
   		    ".album,.user,.albumPhoto,.albumAudio,.albumVideo,.albumTexts",
   		    function(event, ui) {
                var c = controllers.get("ytBlog");
                var id = c.getEmbeddedParam(ui.draggable, "drag", "Id");
                var objectType = c.getEmbeddedParam(ui.draggable, "drag", "Type");
                var p = pages.get('blogEditPostForm');
                $(p.getSelector("postMainText")).insertAtCaret("/" + objectType + " " + id + " ");               
			});
        var p = pages.get('blogEditPostForm');
        var input = $(p.getSelector("postMainText"));
        this.prep.setRedLink(this.getSelector("actionInsertBold"), function(){
                input.insertAtCaret("", "[b]", "[/b]", true);                   
        });    
        this.prep.setRedLink(this.getSelector("actionInsertItalic"), function(){
                input.insertAtCaret("", "[i]", "[/i]", true);                   
        });    
        this.prep.setRedLink(this.getSelector("actionInsertImg"), function(){
                input.insertAtCaret("", "[img]", "[/img]", true);                   
        });    
        this.prep.setRedLink(this.getSelector("actionInsertYoutube"), function(){
                input.insertAtCaret("", "[youtube]", "[/youtube]", true);                   
        });
        this.prep.setRedLink(this.getSelector("actionInsertLink"), function(){
                input.insertAtCaret("", '[a href=""]', "[/a]", true);                   
        });    
        pages.get("profile.pageMenu").prepare(); 
    this.prepareFields();
}
client.blocks.FormBlogEditPost.prototype.getPermalink = function()
{
    return "/forms/" + this.section + "/editPost"+"?postId="+this.view.id;
}
client.blocks.FormBlogEditPostPreview = function(view, controller, name)
{
    client.blocks.FormBlogEditPostPreview.baseConstructor.call(this, view, controller, name);
    this.refreshUrl = "/forms/" + this.section + "/editPostPreview/get";
        this.addField('postId', '', 'text', 'postId');
};
client.extendClass(client.blocks.FormBlogEditPostPreview, client.blocks.Form);
client.blocks.FormBlogEditPostPreview.prototype.prepare = function()
{
    var c = this.controllerName;   
    if (this.setFieldsOnPrepare)
        this.setFields();
    else
        this.getFields();
		this.prep.setBtnAction(this.getSelector("actionPublishPost"), function(){controllers.get('ytBlog').editPost(1)});
		this.prep.setBtnAction(this.getSelector("actionSavePost"), function(){controllers.get('ytBlog').editPost(0)});
        this.prep.setBtnAction(this.getSelector("actionEditAgain"), function(){
        	var p = pages.get('blogEditPostPreviewForm');
        	controllers.get('ytBlog').showEditPostForm(p.post, p.user)});    
	    controllers.get("ytBlog").preparePostItems("blogEditPostPreviewForm");
        pages.get("profile.pageMenu").prepare(); 
    this.prepareFields();
}
client.blocks.FormBlogEditPostPreview.prototype.getPermalink = function()
{
    return "/forms/" + this.section + "/editPostPreview"+"?postId="+this.view.id;
}
client.blocks.FormBlogDeletePost = function(view, controller, name)
{
    client.blocks.FormBlogDeletePost.baseConstructor.call(this, view, controller, name);
    this.refreshUrl = "/forms/" + this.section + "/deletePost/get";
};
client.extendClass(client.blocks.FormBlogDeletePost, client.blocks.Form);
client.blocks.FormBlogDeletePost.prototype.prepare = function()
{
    var c = this.controllerName;   
    if (this.setFieldsOnPrepare)
        this.setFields();
    else
        this.getFields();
		var p = pages.get('blogDeletePostForm');	
		this.prep.setBtnAction(this.getSelector("actionDeletePost"), function(){controllers.get('ytBlog').deletePost(p.post)});
        this.prep.setBtnAction(this.getSelector("actionCancel"), function(){controllers.get('ytProfile').viewMyBlog()});         
        pages.get("profile.pageMenu").prepare(); 
    this.prepareFields();
}
client.blocks.FormBlogDeletePost.prototype.getPermalink = function()
{
    return "/forms/" + this.section + "/deletePost"+"?postId="+this.view.id;
}
client.blocks.FormBlogOptions = function(view, controller, name)
{
    client.blocks.FormBlogOptions.baseConstructor.call(this, view, controller, name);
    this.refreshUrl = "/forms/" + this.section + "/blogOptions/get";
        this.addField('blogTitle', '', 'text', 'blogTitle');
        this.addField('blogDescription', '', 'text', 'blogDescription');
};
client.extendClass(client.blocks.FormBlogOptions, client.blocks.Form);
client.blocks.FormBlogOptions.prototype.prepare = function()
{
    var c = this.controllerName;   
    if (this.setFieldsOnPrepare)
        this.setFields();
    else
        this.getFields();
		this.prep.setBtnAction(this.getSelector("actionEditBlog"), function(){controllers.get('ytBlog').setBlogOptions()});
        this.prep.setBtnAction(this.getSelector("actionCancel"), function(){controllers.get('ytProfile').viewMyBlog()});    
        pages.get("profile.pageMenu").prepare(); 
    this.prepareFields();
}
client.blocks.FormBlogOptions.prototype.getPermalink = function()
{
    return "/forms/" + this.section + "/blogOptions";
}
client.blocks.FormOfferContest = function(view, controller, name)
{
    client.blocks.FormOfferContest.baseConstructor.call(this, view, controller, name);
    this.refreshUrl = "/forms/" + this.section + "/offerContest/get";
        this.addField('offerName', '', 'text', 'offerName');
        this.addField('offerDescription', '', 'text', 'offerDescription');
        this.addField('offerContact', '', 'text', 'offerContact');
        this.addField('offerCode', '', 'text', 'offerCode');
};
client.extendClass(client.blocks.FormOfferContest, client.blocks.Form);
client.blocks.FormOfferContest.prototype.prepare = function()
{
    var c = this.controllerName;   
    if (this.setFieldsOnPrepare)
        this.setFields();
    else
        this.getFields();
    	var p = this;
        this.prep.setRedLink(p.getSelector("actionOpenSidebar"),
        	function(){controllers.get("ytSidebar").minimizeSidebar(true);});
		this.prep.setRoundBtnAction(p.getSelector("actionOfferContest"),
        	function(){controllers.get("ytMainPage").offerContest();});        	
        pages.get("profile.pageMenu").prepare();  
    this.prepareFields();
}
client.blocks.FormOfferContest.prototype.getPermalink = function()
{
    return "/forms/" + this.section + "/offerContest";
}
client.blocks.FormReportBug = function(view, controller, name)
{
    client.blocks.FormReportBug.baseConstructor.call(this, view, controller, name);
    this.refreshUrl = "/forms/" + this.section + "/reportBug/get";
        this.addField('bugTitle', '', 'text', 'bugTitle');
        this.addField('bugText', '', 'text', 'bugText');
};
client.extendClass(client.blocks.FormReportBug, client.blocks.Form);
client.blocks.FormReportBug.prototype.prepare = function()
{
    var c = this.controllerName;   
    if (this.setFieldsOnPrepare)
        this.setFields();
    else
        this.getFields();
    	var p = this;
        this.prep.setRedLink(p.getSelector("actionOpenSidebar"),
        	function(){controllers.get("ytSidebar").minimizeSidebar(true);});
    	this.prep.setRoundBtnAction(p.getSelector("actionReportBug"),
        	function(){controllers.get("ytMainPage").reportBug();});        	
        pages.get("profile.pageMenu").prepare();  
    this.prepareFields();
}
client.blocks.FormReportBug.prototype.getPermalink = function()
{
    return "/forms/" + this.section + "/reportBug";
}
client.blocks.FormAddWork = function(view, controller, name)
{
    client.blocks.FormAddWork.baseConstructor.call(this, view, controller, name);
    this.refreshUrl = "/forms/" + this.section + "/addWork/get";
        this.addField('stageId', '', 'text', 'stageId');
        this.addField('targetId', '', 'text', 'targetId');
        this.addField('workName', '', 'text', 'workName');
        this.addField('workDescrip', '', 'text', 'workDescrip');
        this.addField('field1', '', 'text', 'field1');
        this.addField('field2', '', 'text', 'field2');
        this.addField('field3', '', 'text', 'field3');
        this.addField('field4', '', 'text', 'field4');
        this.addField('field5', '', 'text', 'field5');
        this.addField('field6', '', 'text', 'field6');
        this.addField('field7', '', 'text', 'field7');
        this.addField('field8', '', 'text', 'field8');
        this.addField('field9', '', 'text', 'field9');
        this.addField('field10', '', 'text', 'field10');
		for (var i = 0; i <10; i++)
	        this.addField('scheme' + i, '', 'text', 'scheme' + i);
        this.addField('greeting', '', 'text', 'greeting');
};
client.extendClass(client.blocks.FormAddWork, client.blocks.Form);
client.blocks.FormAddWork.prototype.prepare = function()
{
    var c = this.controllerName;   
    if (this.setFieldsOnPrepare)
        this.setFields();
    else
        this.getFields();
    	var p = this;
        p.selectItemsForm = $("#albumItemSelector");
        p.selectResults = $("#selectItemsResults");
        p.currentBox = "";
        p.currentResults = "";
        p.currentScheme = ""
        this.prep.setRedLink(p.getSelector("actionOpenSidebar"),
        	function(){controllers.get("ytSidebar").minimizeSidebar(true);});
        if(!($("#targetId").hasClass("selectFromSpecAlbum")))
        {
            this.prep.setBtnAction(this.getSelector("actiontargetIdOpenDialog"), function(){
			    p.showSelectionDialog("targetId", false,-1,-1); 
                $("#btnOpenDialog").addClass("hide");		
		    });
		}
		var c = controllers.get("ytContests");
		this.prep.setBtnAction(this.getSelector("actionAddWork"), function(){
			c.addWork();
		});
		this.prep.setBtnAction(this.getSelector("actionCancel"), function(){
			pages.get("contests.contest").view.id = p.stageId;
			pages.get("contests.contest").open(); 	
		});
        if(($("#targetId").hasClass("selectFromSpecAlbum")))
        {
            var countSchemes = p.getField("targetId").value; 
            for (var i = 0; i<countSchemes*2; i+=2)
            {   
                p.setDialogActions(p, i);        
            }
        }
       if(!($("#targetId").hasClass("selectFromSpecAlbum")))
            pages.get("albums.selectItemsResults").show();		
        pages.get("profile.pageMenu").prepare();  
    this.prepareFields();
}
client.blocks.FormAddWork.prototype.getPermalink = function()
{
    return "/forms/" + this.section + "/addWork";
}
client.blocks.FormAddWork.prototype.showSelectionDialog = function(inputField, isMultiSelect, destId, albumId)
{
	var input = $("#" + inputField); 
    if(!(input.hasClass("selectFromSpecAlbum")))
    {
	    var dialog = $("#albumSelectorDialog");
 	    dialog.show();
 	}	
    if(!(input.hasClass("selectFromSpecAlbum")))
    {
        var albumSelector = pages.get("albums.albumSelector");
        if (input.hasClass("selectPhoto")) albumSelector.view.type = 1;
        if (input.hasClass("selectAudio")) albumSelector.view.type = 2;
        if (input.hasClass("selectVideo")) albumSelector.view.type = 3;
        if (input.hasClass("selectTexts")) albumSelector.view.type = 4;
        albumSelector.view.viewMode = (input.hasClass("selectAlbumItemField") ? 2 : 1); 
        pages.get("albums.albumItemSelector").view.blockparam = 1;      
        albumSelector.show();	
        pages.get("albums.selectItemsResults").show();	        
    }
    else
    {
        var addWorkForm = pages.get("contestsAddWorkForm");
        addWorkForm.currentBox=$(addWorkForm.getSelector("scheme" + destId + "Box"));
        addWorkForm.currentResults=$(addWorkForm.getSelector("scheme" + destId + "SelectionResults"));
        pages.get("albums.selectItemsResults").view.like="custom;";
        addWorkForm.selectResults.remove().insertAfter(addWorkForm.currentResults);
        pages.get("albums.selectItemsResults").show();
        var newp = pages.get("albums.albumItemSelector");
        newp.view.id = albumId;
        newp.view.page = 1;
        newp.view.blockparam = 2;  
        newp.currentScheme="scheme" + destId;
        addWorkForm.selectItemsForm.remove().insertAfter(addWorkForm.currentBox);        
        newp.show();      
    }
    albumSelector.input = input;    
    albumSelector.isMultiSelect = isMultiSelect;
}
client.blocks.FormAddWork.prototype.setDialogActions = function(curp, destId)
{
     curp.prep.setBtnAction(curp.getSelector("actionscheme" + destId + "OpenDialog"), function(){
                var c = controllers.get("ytContests");
                var albumId = c.getEmbeddedParam($(this), "scheme" + destId + "Box", "TargetId"); 
                pages.get('contestsAddWorkForm').showSelectionDialog("targetId", false, destId, albumId); 
     });  
}
client.blocks.FormAddParticipant = function(view, controller, name)
{
    client.blocks.FormAddParticipant.baseConstructor.call(this, view, controller, name);
    this.refreshUrl = "/forms/" + this.section + "/addParticipant/get";
        this.addField('stageId', '', 'text', 'stageId');
};
client.extendClass(client.blocks.FormAddParticipant, client.blocks.Form);
client.blocks.FormAddParticipant.prototype.prepare = function()
{
    var c = this.controllerName;   
    if (this.setFieldsOnPrepare)
        this.setFields();
    else
        this.getFields();
    	var p = this;
        this.prep.setRedLink(p.getSelector("actionOpenSidebar"),
        	function(){controllers.get("ytSidebar").minimizeSidebar(true);});
		var c = controllers.get("ytContests");
		this.prep.setBtnAction(this.getSelector("actionAcceptRules"), function(){
			c.addParticipant();
		});
		this.prep.setBtnAction(this.getSelector("actionCancel"), function(){
			pages.get("contests.contest").view.id = p.stageId;
			pages.get("contests.contest").open(); 	
		});
        pages.get("profile.pageMenu").prepare();  
    this.prepareFields();
}
client.blocks.FormAddParticipant.prototype.getPermalink = function()
{
    return "/forms/" + this.section + "/addParticipant";
}
client.blocks.FormVotePopup = function(view, controller, name)
{
    client.blocks.FormVotePopup.baseConstructor.call(this, view, controller, name);
    this.refreshUrl = "/forms/" + this.section + "/votePopup/get";
};
client.extendClass(client.blocks.FormVotePopup, client.blocks.Form);
client.blocks.FormVotePopup.prototype.prepare = function()
{
    var c = this.controllerName;   
    if (this.setFieldsOnPrepare)
        this.setFields();
    else
        this.getFields();
    	var p = this;
        var c = controllers.get("ytContests");
		this.prep.setBtnAction(this.getSelector("actionContestVote"), function(){
			c.voteForWork(p.popupDest);
		});
        $("#closePopupBtn"+p.view.id).click(function() {
            $("#"+p.popupBlock).html("");
            p.view.container = "mainContent";
        });
    this.prepareFields();
}
client.blocks.FormVotePopup.prototype.getPermalink = function()
{
    return "/forms/" + this.section + "/votePopup";
}
client.controllers.ControllerProfile = function(name, section)
{
    client.controllers.ControllerProfile.baseConstructor.call(this, name, section);
    this.profileBlockName = this.section;
    this.profileView = new client.views.ViewById("", "", section);
    this.profileBlock = new client.blocks.BlockProfile(this.profileView, this, this.profileBlockName);
    pages.add(this.profileBlock);
	this.addStaticBlock("pageMenu", "", "", client.blocks.BlockProfilePageMenu);
    this.addForm("changeStatus", "profileChangeStatusForm", "", client.blocks.FormUserChangeStatus);
    this.addForm("infoPersonal", "mainContent", "", client.blocks.FormUserInfoPersonal, false);
    this.addForm("infoSpec", "mainContent", "", client.blocks.FormUserInfoSpec, false);
    this.addForm("infoContacts", "mainContent", "", client.blocks.FormUserInfoContacts, false);
    this.addStaticBlockWithView("friends", "", "", client.blocks.BlockFriends, client.views.ViewById);
    this.addStaticBlockWithView("friendsSearchResults", "profileFriendsSearchResults", "", client.blocks.BlockFriendsSearchResults, client.views.ViewPagedByIdAndLike);
    this.addForm("setPassword", "mainContent", "", client.blocks.FormSetPassword);
    this.addForm("privacy", "mainContent", "", client.blocks.FormPrivacy, false);
    this.addForm("syncOptions", "mainContent", "", client.blocks.FormSyncOptions, false);
    this.addForm("activateTwitter", "mainContent", "", client.blocks.FormActivateTwitter, false);
    this.addForm("customization", "mainContent", "", client.blocks.FormCustomization, false);
    this.addStaticBlockWithView("addTwitter", "twitterInvitation", "", client.blocks.BlockProfileAddTwitter, client.views.View);
    this.addStaticBlockWithView("favorites", "", "", client.blocks.BlockFavorites, client.views.ViewById);
    this.addStaticBlockWithView("albums", "", "", client.blocks.BlockAlbums, client.views.ViewById);
    this.addStaticBlockWithView("blog", "", "", client.blocks.BlockBlog, client.views.ViewPagedById);
    this.addStaticBlockWithView("userContests", "", "", client.blocks.BlockUserContests, client.views.ViewById);
    this.addForm("disableSpam", "mainContent", "", client.blocks.FormDisableSpam);
    commands.add(new client.Command("changeStatus","/profile/changeStatus","/wait","/waitupdate"));
    commands.add(new client.Command("enterProfileDetailsPersonal","/profile/enterProfileDetailsPersonal","/wait","/waitupdate"));
    commands.add(new client.Command("enterProfileDetailsSpec","/profile/enterProfileDetailsSpec","/wait","/waitupdate"));
    commands.add(new client.Command("enterProfileDetailsContacts","/profile/enterProfileDetailsContacts","/wait","/waitupdate"));
    commands.add(new client.Command("setPassword","/users/setPassword","/wait","/waitupdate"));
    commands.add(new client.Command("setPrivacy","/users/setPrivacy","/wait","/waitupdate"));
    commands.add(new client.Command("setProfileCustomization","/users/setProfileCustomization","/wait","/waitupdate"));
    commands.add(new client.Command("changePassword","/users/changePassword","/wait",""));
	commands.add(new client.Command("setSyncOptions","/users/setSyncOptions","/wait","/waitupdate"));
	commands.add(new client.Command("activateTwitter","/users/activateTwitter","/wait","/waitupdate"));
    commands.add(new client.Command("stopMailing","/users/stopMailing","/wait","/waitupdate"));  
};
client.extendClass(client.controllers.ControllerProfile, client.controllers.Controller);
client.controllers.ControllerProfile.prototype.viewProfile = function(id)
{
    pages.get(this.profileBlockName).viewProfile(id);
}
client.controllers.ControllerProfile.prototype.viewMyProfile = function()
{
    pages.get(this.profileBlockName).viewProfile(this.currentUserId);
}
client.controllers.ControllerProfile.prototype.viewEmbeddedProfile = function(sender, blockClass)
{
	var id = this.getEmbeddedParam(sender, blockClass, "Id");
    this.viewProfile(id);
}
client.controllers.ControllerProfile.prototype.showEditStatusForm = function()
{
    pages.get("profileChangeStatusForm").show();
    client.Switcher.switchPanels("profileStatus" , "profileChangeStatus");
}
client.controllers.ControllerProfile.prototype.cancelEditStatusForm = function()
{
    client.Switcher.switchPanels("profileChangeStatus", "profileStatus");
}
client.controllers.ControllerProfile.prototype.clearStatus = function()
{
    this.changeStatusFormBlock.getField("statusText").value = "";    
    this.changeStatusFormBlock.getField("statusText").set();
    this.changeStatus();
}
client.controllers.ControllerProfile.prototype.changeStatus = function()
{
    commands.get("changeStatus").execute(this, this.changeStatusFormBlock.getData(), "editStatusError", "editStatusResult");
}
client.controllers.ControllerProfile.prototype.changeStatusOk = function(result)
{
    var status = this.changeStatusFormBlock.getField("statusText").value;
    if (status == "") status = "...&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
    if (status.length > 80) status = status.substring(0, 80) + "...";
    $(".profileTextStatusText").html(status);
    this.cancelEditStatusForm();
}
client.controllers.ControllerProfile.prototype.changeStatusFail = function(error)
{
    $(this.changeStatusFormBlock.getSelector("editStatusErrorText")).html(error.message);
    client.Switcher.showError(this.changeStatusFormBlock.getSelector("editStatusError"));
}
client.controllers.ControllerProfile.prototype.showEnterProfileDetailsForm = function(step)
{
    if (step == 1) pages.get("profileInfoPersonalForm").open();
    if (step == 2) pages.get("profileInfoSpecForm").open();
    if (step == 3) pages.get("profileInfoContactsForm").open();
}
client.controllers.ControllerProfile.prototype.enterProfileDetailsPersonal = function()
{
	var data = pages.get("profileInfoPersonalForm").getData();
    commands.get("enterProfileDetailsPersonal").execute(this, data, "infoPersonalFormBlockLoading", "infoPersonalFormBlockResult");
}
client.controllers.ControllerProfile.prototype.enterProfileDetailsPersonalUpdate = function(result)
{
    if (this.editProfileMode == 'edit') 
        this.viewMyProfile();
    else
        this.showEnterProfileDetailsForm(2);
    pages.get("sidebar.userInfo").show();
}
client.controllers.ControllerProfile.prototype.enterProfileDetailsPersonalFail = function(error)
{
    $(this.infoPersonalFormBlock.getSelector("ErrorText")).html(error.message);
    client.Switcher.showError(this.infoPersonalFormBlock.getSelector("ErrorBox"));
}
client.controllers.ControllerProfile.prototype.addContactField = function()
{
    var custom1 = $(this.infoContactsFormBlock.getSelector("custom1"));
    var custom2 = $(this.infoContactsFormBlock.getSelector("custom2"));
    var custom3 = $(this.infoContactsFormBlock.getSelector("custom3"));
    if (custom1.hasClass("hide"))
    {
        custom1.removeClass("hide");   
        return;   
    }
    if (custom2.hasClass("hide")) 
    {
        custom2.removeClass("hide");   
        return;
    }     
    if (custom3.hasClass("hide")) 
    {
        custom3.removeClass("hide");   
        $(this.infoContactsFormBlock.getSelector("actionAddField")).hide();
        return;
    }
}
client.controllers.ControllerProfile.prototype.enterProfileDetailsSpec = function()
{
    commands.get("enterProfileDetailsSpec").execute(this, pages.get("profileInfoSpecForm").getData(), "infoSpecFormBlockLoading", "infoSpecFormBlockResult");
}
client.controllers.ControllerProfile.prototype.enterProfileDetailsSpecUpdate = function(result)
{
   if (this.editProfileMode == 'edit') 
       this.viewMyProfile();
   else
       this.showEnterProfileDetailsForm(3);
   pages.get("sidebar.userInfo").show();
}
client.controllers.ControllerProfile.prototype.enterProfileDetailsSpecFail = function(error)
{
    $(this.infoSpecFormBlock.getSelector("ErrorText")).html(error.message);
    client.Switcher.showError(this.infoSpecFormBlock.getSelector("ErrorBox"));
}
client.controllers.ControllerProfile.prototype.enterProfileDetailsContacts = function()
{
    commands.get("enterProfileDetailsContacts").execute(this, pages.get("profileInfoContactsForm").getData(), "infoContactsFormBlockLoading", "infoContactsFormBlockResult");
}
client.controllers.ControllerProfile.prototype.enterProfileDetailsContactsUpdate = function(result)
{    
    this.viewMyProfile();
}
client.controllers.ControllerProfile.prototype.enterProfileDetailsContactsFail = function(error)
{
    $(this.infoContactsFormBlock.getSelector("ErrorText")).html(error.message);
    client.Switcher.showError(this.infoContactsFormBlock.getSelector("ErrorBox"));
}
client.controllers.ControllerProfile.prototype.showAddFriendForm = function(id)
{
    pages.get('sidebarAddFriendForm').view.id = id;
    client.Switcher.switchScrollPanel("rpmain", 'sidebarAddFriendForm', true);
}
client.controllers.ControllerProfile.prototype.showDeleteFriendForm = function(id)
{
    pages.get('sidebarDeleteFriendForm').view.id = id;
    client.Switcher.switchScrollPanel("rpmain", 'sidebarDeleteFriendForm', true);
}
client.controllers.ControllerProfile.prototype.showChatForm = function(id)
{
    pages.get('sidebarChatForm').view.id = id;
    client.Switcher.switchScrollPanel("rpmain", 'sidebarChatForm', true);
}
client.controllers.ControllerProfile.prototype.showChatFormExt = function(sender, holder)
{
	this.showChatForm(this.getEmbeddedParam(sender, holder, "SenderId"));
}
client.controllers.ControllerProfile.prototype.viewFriends = function(id)
{
	var b = pages.get('profile.friends');
	b.view.prefix = "profile";
	b.view.id = id;
	b.open();
}
client.controllers.ControllerProfile.prototype.setPassword = function()
{    
	    $(pages.get('profileSetPasswordForm').getSelector("ErrorBox")).hide();       
        commands.get("setPassword").execute(this, pages.get('profileSetPasswordForm').getData(), "setPasswordLoading", "setPasswordResult");
}
client.controllers.ControllerProfile.prototype.setPasswordOk = function(result)
{    
	    $(pages.get('profileSetPasswordForm').getSelector("successMessageText")).html('Пароль изменен');
        client.Switcher.showError(pages.get('profileSetPasswordForm').getSelector("successBox"));
}
client.controllers.ControllerProfile.prototype.setPasswordFail = function(error)
{    
        $(pages.get('profileSetPasswordForm').getSelector("ErrorText")).html(error.message);
        client.Switcher.showError(pages.get('profileSetPasswordForm').getSelector("ErrorBox"));
}
client.controllers.ControllerProfile.prototype.setPasswordUpdate = function(result)
{    
	    setTimeout(function(){controller.get('ytProfile').viewEmbeddedProfile($('#resetPasswordForm'), 'resetPasswordForm')}, 3000);    
}
client.controllers.ControllerProfile.prototype.viewFavorites = function(id)
{
	var b = pages.get('profile.favorites');
	b.view.prefix = "profile";
	b.view.id = id;
	b.open();
}
client.controllers.ControllerProfile.prototype.viewAlbums = function(id)
{
	var b = pages.get('profile.albums');
	b.view.prefix = "profile";
	b.view.id = id;
	b.open();
}
client.controllers.ControllerProfile.prototype.showPrivacyForm = function()
{
	pages.get("profilePrivacyForm").open();
}
client.controllers.ControllerProfile.prototype.showSyncOptionsForm = function()
{
	pages.get("profileSyncOptionsForm").open();
}
client.controllers.ControllerProfile.prototype.showCustomizationForm = function()
{
	pages.get("profileCustomizationForm").open();
}
client.controllers.ControllerProfile.prototype.setPrivacy = function()
{    
	    $(pages.get('profilePrivacyForm').getSelector("ErrorBox")).hide();       
        commands.get("setPrivacy").execute(this, pages.get('profilePrivacyForm').getData(), "setPrivacyLoading", "setPrivacyResult");
}
client.controllers.ControllerProfile.prototype.setPrivacyOk = function(result)
{    
}
client.controllers.ControllerProfile.prototype.setPrivacyFail = function(error)
{    
        $(pages.get('profilePrivacyForm').getSelector("ErrorText")).html(error.message);
        client.Switcher.showError(pages.get('profilePrivacyForm').getSelector("ErrorBox"));
}
client.controllers.ControllerProfile.prototype.setPrivacyUpdate = function(result)
{    
	    this.viewMyProfile();
}
client.controllers.ControllerProfile.prototype.changePassword = function()
{    
	    $(pages.get('profilePrivacyForm').getSelector("changeError")).hide();   
        commands.get("changePassword").execute(this, {}, "changePasswordLoading", "changePasswordResult");
}
client.controllers.ControllerProfile.prototype.changePasswordOk = function(result)
{    
        $(pages.get('profilePrivacyForm').getSelector("changeSuccessText")).html("Сообщение с ссылкой для изменения пароля отправлено на Ваш email.");
        client.Switcher.showSuccess(pages.get('profilePrivacyForm').getSelector("changeSuccess")); 
}
client.controllers.ControllerProfile.prototype.changePasswordFail = function(error)
{    
        $(pages.get('profilePrivacyForm').getSelector("changeErrorText")).html(error.message);
        client.Switcher.showError(pages.get('profilePrivacyForm').getSelector("changeError"));
}
client.controllers.ControllerProfile.prototype.changePasswordUpdate = function(result)
{    
}
client.controllers.ControllerProfile.prototype.setProfileCustomization = function()
{    
	    $(pages.get('profileCustomizationForm').getSelector("ErrorBox")).hide();       
	    var data = pages.get('profileCustomizationForm').getData();
	    data["orderOfBlocks"] = "";
	    $(pages.get('profileCustomizationForm').getSelector("orderOfBlocksSelection .sortItem")).each(function(index){
	    	data["orderOfBlocks"] += $(this).children(".embeddedId").html();
	    });
        commands.get("setProfileCustomization").execute(this, data, "setPrivacyLoading", "setPrivacyResult");
}
client.controllers.ControllerProfile.prototype.setProfileCustomizationOk = function(result)
{    
}
client.controllers.ControllerProfile.prototype.setProfileCustomizationFail = function(error)
{    
        $(pages.get('profileCustomizationForm').getSelector("ErrorText")).html(error.message);
        client.Switcher.showError(pages.get('profileCustomizationForm').getSelector("ErrorBox"));
}
client.controllers.ControllerProfile.prototype.setProfileCustomizationUpdate = function(result)
{    
	    this.viewMyProfile();
}
client.controllers.ControllerProfile.prototype.viewMyBlog = function()
{
	this.viewBlog(this.currentUserId);
}
client.controllers.ControllerProfile.prototype.viewBlog = function(id)
{
	var b = pages.get('profile.blog');
	b.view.prefix = "profile";
	b.view.id = id;
	b.view.page = 1;
	b.open();
}
client.controllers.ControllerProfile.prototype.viewContests = function(id)
{
	var b = pages.get('profile.userContests');
	b.view.prefix = "profile";
	b.view.id = id;
	b.open();
}
client.controllers.ControllerProfile.prototype.setSyncOptions = function()
{    
	    $(pages.get('profileSyncOptionsForm').getSelector("ErrorBox")).hide();       
	    var data = pages.get('profileSyncOptionsForm').getData();
	    commands.get("setSyncOptions").execute(this, data, "setSyncOptionsLoading", "setsetSyncOptionsResult");
}
client.controllers.ControllerProfile.prototype.setSyncOptionsOk = function(result)
{    
}
client.controllers.ControllerProfile.prototype.setSyncOptionsFail = function(error)
{    
        $(pages.get('profileSyncOptionsForm').getSelector("ErrorText")).html(error.message);
        client.Switcher.showError(pages.get('profileSyncOptionsForm').getSelector("ErrorBox"));
}
client.controllers.ControllerProfile.prototype.setSyncOptionsUpdate = function(result)
{    
	    this.viewMyProfile();
}
client.controllers.ControllerProfile.prototype.activateTwitter = function()
{    
	    $(pages.get('profileActivateTwitterForm').getSelector("ErrorBox")).hide();       
	    var data = pages.get('profileActivateTwitterForm').getData();
	    commands.get("activateTwitter").execute(this, data, "activateTwitterLoading", "activateTwitterResult");
}
client.controllers.ControllerProfile.prototype.activateTwitterOk = function(result)
{    
}
client.controllers.ControllerProfile.prototype.activateTwitterFail = function(error)
{    
        $(pages.get('profileActivateTwitterForm').getSelector("ErrorText")).html(error.message);
        client.Switcher.showError(pages.get('profileActivateTwitterForm').getSelector("ErrorBox"));
}
client.controllers.ControllerProfile.prototype.activateTwitterUpdate = function(result)
{    
	    this.viewMyProfile();
}
client.controllers.ControllerProfile.prototype.stopMailing = function(userId)
{    
    	var data = {};
        data["Id"] = userId;
        commands.get("stopMailing").execute(this, data, "disableSpamLoading", "disableSpamResult");  
}
client.controllers.ControllerProfile.prototype.stopMailingOk = function(result)
{    
}
client.controllers.ControllerProfile.prototype.stopMailingFail = function(error)
{    
}
client.controllers.ControllerProfile.prototype.stopMailingUpdate = function(result)
{    
		this.viewMyProfile();
}
client.controllers.ControllerSidebar = function(name, section)
{
    client.controllers.ControllerSidebar.baseConstructor.call(this, name, section);
    this.addStaticBlock("userInfo", "sidebarUserInfo", "rpMainLoading", client.blocks.BlockSidebarUserInfo);
    this.addStaticBlock("friendsInvites", "sidebarFriendsInvites", "rpMainLoading", client.blocks.BlockSidebarFriendsInvites);
    this.addStaticBlock("friendsList", "sidebarFriendsList", "rpMainLoading", client.blocks.BlockSidebarFriendsList);
    this.addStaticBlock("messagesList", "sidebarMessagesList", "rpMainLoading", client.blocks.BlockSidebarMessagesList);
    this.addStaticBlock("messagesArchive", "sidebarMessagesArchive", "rpMainLoading", client.blocks.BlockSidebarMessagesArchive);
    this.addStaticBlockWithView("messagesSearch", "messagesList", "rpMainLoading", client.blocks.BlockSidebarMessagesSearch, client.views.ViewByLike);
    this.addStaticBlockWithView("chatHistory", "chatMessages", "rpMainLoading", client.blocks.BlockSidebarChatHistory, client.views.ViewById);
    this.addStaticBlock("favorites", "sidebarFavorites", "rpMainLoading", client.blocks.BlockSidebarFavorites);
    this.addStaticBlockWithView("favoritesSearch", "favoriteItems", "rpMainLoading", client.blocks.BlockSidebarFavoritesSearch, client.views.ViewByLike);
    this.addStaticBlock("player", "sidebarPlayer", "rpMainLoading", client.blocks.BlockSidebarPlayer);
    this.addStaticBlock("contests", "sidebarContests", "rpMainLoading", client.blocks.BlockSidebarContests);
    this.addStaticBlock("news", "sidebarNews", "rpMainLoading", client.blocks.BlockSidebarNews);
    this.addStaticBlock("groups", "sidebarGroups", "rpMainLoading", client.blocks.BlockSidebarGroups);
    this.addFormWithView("addFriend", "sidebarAddFriend", "rpMainLoading", client.blocks.FormSidebarAddFriend, client.views.ViewById, false);
    this.addFormWithView("deleteFriend", "sidebarDeleteFriend", "rpMainLoading", client.blocks.FormSidebarDeleteFriend, client.views.ViewById, false);
    this.addFormWithView("chat", "sidebarChat", "rpMainLoading", client.blocks.FormSidebarChat, client.views.ViewById, false);
    this.chatFormBlock.syncInterval = 10000; 
    commands.add(new client.Command("addFriend","/users/addFriend","/wait","/waitupdate"));  
    commands.add(new client.Command("acceptFriend","/users/acceptFriend","/wait","/waitupdate"));
    commands.add(new client.Command("syncMenu","/users/syncMenu","",""));
    commands.add(new client.Command("sendMessage","/users/sendMessage","/wait","/waitupdate"));
    commands.add(new client.Command("deleteMessage","/users/deleteMessage","/wait","/waitupdate"));
    commands.add(new client.Command("deleteFriend","/users/deleteFriend","/wait","/waitupdate"));  
    commands.add(new client.Command("addFavoriteFolder","/users/addFavoriteFolder","/wait","/waitupdate"));  
    commands.add(new client.Command("renameFavoriteFolder","/users/renameFavoriteFolder","/wait","/waitupdate"));  
    commands.add(new client.Command("deleteFavoriteFolder","/users/deleteFavoriteFolder","/wait","/waitupdate"));  
    commands.add(new client.Command("addFavoriteItem","/users/addFavoriteItem","/wait","/waitupdate"));  
    commands.add(new client.Command("deleteFavoriteItem","/users/deleteFavoriteItem","/wait","/waitupdate"));  
    commands.add(new client.Command("addFavoriteItemAndFolder","/users/addFavoriteItem","/wait","/waitupdate"));  
    commands.add(new client.Command("addPlaylistItem","/users/addPlaylistItem","/wait",""));  
    commands.add(new client.Command("deletePlaylistItem","/users/deletePlaylistItem","/wait",""));  
    commands.add(new client.Command("addAlbumToPlaylist","/users/addAlbumToPlaylist","/wait",""));  
    commands.add(new client.Command("clearPlaylist","/users/clearPlaylist","/wait",""));  
    this.sync = false;
    this.syncLastInvites = 0;
    this.syncLastMessages = 0;
}
client.extendClass(client.controllers.ControllerSidebar, client.controllers.Controller);
client.controllers.ControllerSidebar.prototype.minimizeSidebarAtStart = function()
{
    if (!(client.Switcher.sidebarInit))
        setTimeout(function(){controllers.get("ytSidebar").minimizeSidebar(false);}, 1);
}
client.controllers.ControllerSidebar.prototype.minimizeSidebar = function(show)
{
    if (show)
    {
        $(".expandedSidebar").show();
        $(".collapsedSidebar").hide();  
    }
    else
    {
        $(".expandedSidebar").hide();
        $(".collapsedSidebar").show();
    }
    client.Switcher.sidebarIsVisible = show;
    client.Switcher.resizeYtSideBar();
}
client.controllers.ControllerSidebar.prototype.showUserInfo = function()
{
    client.Switcher.switchScrollPanel("rpmain", "sidebar.userInfo", true);
}
client.controllers.ControllerSidebar.prototype.addFriend = function()
{    
        commands.get("addFriend").execute(this, pages.get('sidebarAddFriendForm').getData(), "addFriendLoading", "addFriendResult");
}
client.controllers.ControllerSidebar.prototype.addFriendOk = function(result)
{    
        $('.addFriendInvitaionForm').hide();
        $(pages.get('sidebarAddFriendForm').getSelector("successMessageText")).html('Приглашение выслано');
        client.Switcher.showError(pages.get('sidebarAddFriendForm').getSelector("successBox"));
}
client.controllers.ControllerSidebar.prototype.addFriendFail = function(error)
{    
        $(pages.get('sidebarAddFriendForm').getSelector("ErrorText")).html(error.message);
        client.Switcher.showError(pages.get('sidebarAddFriendForm').getSelector("ErrorBox"));
}
client.controllers.ControllerSidebar.prototype.addFriendUpdate = function(result)
{    
        setTimeout(function(){client.Switcher.switchScrollPanelBack('rpmain', false)}, 3000);    
}
client.controllers.ControllerSidebar.prototype.showFriendsInvites = function()
{
    client.Switcher.switchScrollPanel("rpmain", "sidebar.friendsInvites", true);
}
client.controllers.ControllerSidebar.prototype.openFriendProfile = function(sender, holder)
{
    controllers.get("ytProfile").viewProfile(this.getEmbeddedParam(sender, holder, "FriendId"));
}
client.controllers.ControllerSidebar.prototype.acceptFriend = function(resolution, sender)
{    
        var params = {action:resolution,
                      friendId: this.getEmbeddedParam(sender, "friendInvitation", "FriendId")
                      };
        commands.get("acceptFriend").execute(this, params, "addFriendLoading", "addFriendResult");
}
client.controllers.ControllerSidebar.prototype.acceptFriendOk = function(result)
{    
}
client.controllers.ControllerSidebar.prototype.acceptFriendFail = function(error)
{    
}
client.controllers.ControllerSidebar.prototype.acceptFriendUpdate = function(result)
{    
        $('.friendInvitation' + result.friend).hide('fast');
        if (result.invites == 0)
            controllers.get('ytSidebar').showFriendsList();
        controllers.get('ytSidebar').syncMenu();
}
client.controllers.ControllerSidebar.prototype.showFriendsList = function()
{
    client.Switcher.switchScrollPanel("rpmain", "sidebar.friendsList", true);
}
client.controllers.ControllerSidebar.prototype.startSync = function()
{
	this.sync = true;
	this.syncMenu();
	setTimeout(function(){controllers.get('ytSidebar').syncMenuTimer()}, 60000); 
}
client.controllers.ControllerSidebar.prototype.stopSync = function()
{
	this.sync = false;
}
client.controllers.ControllerSidebar.prototype.syncMenuTimer = function()
{
	var c = controllers.get('ytSidebar');
	if (c.sync)
	{
		c.syncMenu();
		setTimeout(function(){controllers.get('ytSidebar').syncMenuTimer()}, 60000); 
	}
}
client.controllers.ControllerSidebar.prototype.syncMenu = function()
{    
    	commands.get("syncMenu").execute(this, {}, "syncMenuLoading", "syncMenuResult");
}
client.controllers.ControllerSidebar.prototype.syncMenuOk = function(result)
{    
		var invites = result.invites; if (invites > 99) invites = 99;
		var messages = result.messages; if (messages > 99) messages = 99;
		var menu = pages.get('userLogoutForm');
		if (this.syncLastInvites != invites)
		{
    		var invitesInformer = $('#sbUpperMenu .actionFriends .roundBtnInformer');
	    	if (invites == 0) 
    		{
		    	invitesInformer.addClass('hide');
	            menu.prep.setRoundBtnAction(menu.getSelector("actionFriends"), function(){controllers.get('ytSidebar').showFriendsList()});
            }
	    	else 
    		{
		        invitesInformer.removeClass('hide').html(invites);
		        menu.prep.setRoundBtnAction(menu.getSelector("actionFriends"), function(){controllers.get('ytSidebar').showFriendsInvites()});
		    }
		}
		if (this.syncLastMessages != messages)
		{
			var messsagesInformer = $('#sbUpperMenu .actionMessages .roundBtnInformer');
	        if (messages == 0) 
	        {
        		messsagesInformer.addClass('hide');
  		        menu.prep.setRoundBtnAction(menu.getSelector("actionMessages"), function(){controllers.get('ytSidebar').showMessagesArchive()});
        	}
            else
            {
                messsagesInformer.removeClass('hide').html(messages);		    
                menu.prep.setRoundBtnAction(menu.getSelector("actionMessages"), function(){controllers.get('ytSidebar').showMessagesList()});
            }
		}
		this.syncLastInvites = invites;    
		this.syncLastMessages = messages;    
}
client.controllers.ControllerSidebar.prototype.syncMenuFail = function(error)
{    
}
client.controllers.ControllerSidebar.prototype.syncMenuUpdate = function(result)
{    
}
client.controllers.ControllerSidebar.prototype.sendMessage = function()
{    
        var p = pages.get('sidebarChatForm');
        var data = p.getData();
    	var ok = commands.get("sendMessage").execute(this, data, "sendMessageLoading", "sendMessageResult");
    	if (ok)
    	{
        	var input = $(p.getSelector("message"));
        	input.addClass("loadingBg").addClass("lightBg");
        	client.Switcher.startLoadingAnimationRef(input);
        }
}
client.controllers.ControllerSidebar.prototype.sendMessageOk = function(result)
{    
        $(pages.get('sidebarChatForm').getSelector('message')).attr('value', '');
}
client.controllers.ControllerSidebar.prototype.sendMessageFail = function(error)
{    
	    var p = pages.get('sidebarChatForm');
        var input = $(p.getSelector("message"));
    	input.removeClass("loadingBg").removeClass("lightBg");
    	client.Switcher.stopLoadingAnimationRef(input);
    	input.css({backgroundPosition: "right bottom"});
        $(p.getSelector("ErrorText")).html(error.message);
        client.Switcher.showError(p.getSelector("ErrorBox"));
}
client.controllers.ControllerSidebar.prototype.sendMessageUpdate = function(result)
{    
	    var p = pages.get('sidebarChatForm');
	    var input = $(p.getSelector("message"));
    	input.removeClass("loadingBg").removeClass("lightBg");
    	client.Switcher.stopLoadingAnimationRef(input);
    	input.css({backgroundPosition: "right bottom"});
	    p.sync.call(p);	    
	    $(p.getSelector("ErrorBox")).hide();
}
client.controllers.ControllerSidebar.prototype.showMessagesList = function()
{
	client.Switcher.switchScrollPanel("rpmain", "sidebar.messagesList", true);
}
client.controllers.ControllerSidebar.prototype.showMessagesArchive = function()
{
	client.Switcher.switchScrollPanel("rpmain", "sidebar.messagesArchive", true);
}
client.controllers.ControllerSidebar.prototype.deleteMessage = function(sender)
{    
        var params = {messageId: this.getEmbeddedParam(sender, "sidebarMessage", "MessageId")};
        commands.get("deleteMessage").execute(this, params, "deleteMessageLoading", "deleteMessageResult");
}
client.controllers.ControllerSidebar.prototype.deleteMessageOk = function(result)
{    
}
client.controllers.ControllerSidebar.prototype.deleteMessageFail = function(error)
{    
}
client.controllers.ControllerSidebar.prototype.deleteMessageUpdate = function(result)
{    
        $('.sidebarMessage' + result.messageId).hide('fast');
        controllers.get('ytSidebar').syncMenu();
}
client.controllers.ControllerSidebar.prototype.deleteFriend = function()
{    
        commands.get("deleteFriend").execute(this, pages.get('sidebarDeleteFriendForm').getData(), "deleteFriendLoading", "deleteFriendResult");
}
client.controllers.ControllerSidebar.prototype.deleteFriendOk = function(result)
{    
        $(pages.get('sidebarDeleteFriendForm').getSelector("successMessageText")).html('Контакт удален');
        client.Switcher.showError(pages.get('sidebarDeleteFriendForm').getSelector("successBox"));
}
client.controllers.ControllerSidebar.prototype.deleteFriendFail = function(error)
{    
        $(pages.get('sidebarDeleteFriendForm').getSelector("ErrorText")).html(error.message);
        client.Switcher.showError(pages.get('sidebarDeleteFriendForm').getSelector("ErrorBox"));
}
client.controllers.ControllerSidebar.prototype.deleteFriendUpdate = function(result)
{    
	    pages.refreshLastBlock();
        setTimeout(function(){client.Switcher.switchScrollPanelBack('rpmain', false)}, 3000);    
}
client.controllers.ControllerSidebar.prototype.showFavorites = function()
{
	client.Switcher.switchScrollPanel("rpmain", "sidebar.favorites", true);
}
client.controllers.ControllerSidebar.prototype.addFavoriteFolder = function()
{    
        commands.get("addFavoriteFolder").execute(this, {folderName:$(pages.get('sidebar.favorites').getSelector("newFolderName")).attr('value')}, "addFavoriteFolderLoading", "addFavoriteFolderResult");
}
client.controllers.ControllerSidebar.prototype.addFavoriteFolderOk = function(result)
{    
        $(pages.get('sidebar.favorites').getSelector("ErrorBox")).hide();
}
client.controllers.ControllerSidebar.prototype.addFavoriteFolderFail = function(error)
{    
        $(pages.get('sidebar.favorites').getSelector("ErrorText")).html(error.message);
        client.Switcher.showError(pages.get('sidebar.favorites').getSelector("ErrorBox"));
}
client.controllers.ControllerSidebar.prototype.addFavoriteFolderUpdate = function(result)
{    
        pages.get('sidebar.favorites').show();
}
client.controllers.ControllerSidebar.prototype.deleteFavoriteFolder = function(sender)
{    
	    var c = controllers.get("ytSidebar");
        var folderId = c.getEmbeddedParam(sender, "favoriteFolder", "FolderId");
        commands.get("deleteFavoriteFolder").execute(this, {folderId: folderId}, "deleteFavoriteFolderLoading", "deleteFavoriteFolderResult");
        c.getAncestor(sender, "favoriteFolder").hide("fast");
}
client.controllers.ControllerSidebar.prototype.deleteFavoriteFolderOk = function(result)
{    
    	$(pages.get('sidebar.favorites').getSelector("deleteFooter")).addClass("successDelete");
}
client.controllers.ControllerSidebar.prototype.deleteFavoriteFolderFail = function(error)
{    
}
client.controllers.ControllerSidebar.prototype.deleteFavoriteFolderUpdate = function(result)
{    
    	setTimeout(function(){$(pages.get('sidebar.favorites').getSelector("deleteFooter")).removeClass("successDelete");}, 3000);    
}
client.controllers.ControllerSidebar.prototype.renameFavoriteFolder = function(sender)
{    
	    var c = controllers.get("ytSidebar");
        var folderId = c.getEmbeddedParam(sender, "favoriteFolder", "FolderId");
        var folderName = c.getAncestorControl(sender, "favoriteFolder", "renamedFolderName").attr('value');
        commands.get("renameFavoriteFolder").execute(this, {folderName: folderName, folderId: folderId}, "renameFavoriteFolderLoading", "renameFavoriteFolderResult");
}
client.controllers.ControllerSidebar.prototype.renameFavoriteFolderOk = function(result)
{    
}
client.controllers.ControllerSidebar.prototype.renameFavoriteFolderFail = function(error)
{    
}
client.controllers.ControllerSidebar.prototype.renameFavoriteFolderUpdate = function(result)
{    
  	    pages.get('sidebar.favorites').show();
}
client.controllers.ControllerSidebar.prototype.addFavoriteItem = function()
{    
}
client.controllers.ControllerSidebar.prototype.addFavoriteItemOk = function(result)
{    
}
client.controllers.ControllerSidebar.prototype.addFavoriteItemFail = function(error)
{    
        $(pages.get('sidebar.favorites').getSelector("ErrorText")).html(error.message);
        client.Switcher.showError(pages.get('sidebar.favorites').getSelector("ErrorBox"));
}
client.controllers.ControllerSidebar.prototype.addFavoriteItemUpdate = function(result)
{    
        pages.get('sidebar.favorites').viewFolder(result.folderId);
}
client.controllers.ControllerSidebar.prototype.deleteFavoriteItem = function()
{    
}
client.controllers.ControllerSidebar.prototype.deleteFavoriteItemOk = function(result)
{    
       	$(pages.get('sidebar.favorites').getSelector("deleteFooter")).addClass("successDelete");
}
client.controllers.ControllerSidebar.prototype.deleteFavoriteItemFail = function(error)
{    
        $(pages.get('sidebar.favorites').getSelector("ErrorText")).html(error.message);
        client.Switcher.showError(pages.get('sidebar.favorites').getSelector("ErrorBox"));
}
client.controllers.ControllerSidebar.prototype.deleteFavoriteItemUpdate = function(result)
{    
	    setTimeout(function(){$(pages.get('sidebar.favorites').getSelector("deleteFooter")).removeClass("successDelete");}, 3000);    
}
client.controllers.ControllerSidebar.prototype.addFavoriteItemAndFolder = function(id,folder)
{    
	    var c = controllers.get("ytSidebar");
   	    commands.get("addFavoriteItemAndFolder").execute(c, {itemId:id, folderName: folder, itemType: 1}, "addFavoriteItemAndFolderLoading", "addFavoriteItemAndFolderResult");   	       	  
}
client.controllers.ControllerSidebar.prototype.addFavoriteItemAndFolderOk = function(result)
{    
        $(pages.get("profile").getSelector("ErrorBox")).hide();
        $(pages.get("profile").getSelector("profileActionsMenu")).show();
	    $(pages.get("profile").getSelector("profileAddToFavorites")).hide();
}
client.controllers.ControllerSidebar.prototype.addFavoriteItemAndFolderFail = function(error)
{    
        $(pages.get("profile").getSelector("ErrorText")).html(error.message);
        client.Switcher.showError(pages.get("profile").getSelector("ErrorBox"));
}
client.controllers.ControllerSidebar.prototype.addFavoriteItemAndFolderUpdate = function(result)
{    
        this.showFavorites();
}
client.controllers.ControllerSidebar.prototype.showPlayer = function()
{
	client.Switcher.switchScrollPanel("rpmain", "sidebar.player", true);
}
client.controllers.ControllerSidebar.prototype.addPlaylistItem = function(id)
{    
        commands.get("addPlaylistItem").execute(this, {Id:id}, "addPlaylistItemLoading", "addPlaylistItemResult");              	
}
client.controllers.ControllerSidebar.prototype.addPlaylistItemOk = function(result)
{    
        var currentBlock = pages.get(client.Switcher.scrollpanelCurrent["rpmain"]);
        if (currentBlock == "sidebar.player")
            pages.get('sidebar.player').show();
        else
            controllers.get("ytSidebar").showPlayer();
}
client.controllers.ControllerSidebar.prototype.addPlaylistItemFail = function(error)
{    
        $(pages.get('sidebar.player').getSelector("ErrorText")).html(error.message);
        client.Switcher.showError(pages.get('sidebar.player').getSelector("ErrorBox"));
}
client.controllers.ControllerSidebar.prototype.addPlaylistItemUpdate = function(result)
{    
}
client.controllers.ControllerSidebar.prototype.addAlbumToPlaylist = function(id)
{    
        commands.get("addAlbumToPlaylist").execute(this, {Id:id}, "addPlaylistItemLoading", "addPlaylistItemResult");              	
}
client.controllers.ControllerSidebar.prototype.addAlbumToPlaylistOk = function(result)
{    
        var currentBlock = pages.get(client.Switcher.scrollpanelCurrent["rpmain"]);
        if (currentBlock == "sidebar.player")
            pages.get('sidebar.player').show();
        else
            controllers.get("ytSidebar").showPlayer();
}
client.controllers.ControllerSidebar.prototype.addAlbumToPlaylistFail = function(error)
{    
        $(pages.get('sidebar.player').getSelector("ErrorText")).html(error.message);
        client.Switcher.showError(pages.get('sidebar.player').getSelector("ErrorBox"));
}
client.controllers.ControllerSidebar.prototype.addAlbumToPlaylistUpdate = function(result)
{    
}
client.controllers.ControllerSidebar.prototype.deletePlaylistItem = function(id)
{    
        commands.get("deletePlaylistItem").execute(this, {Id:id}, "deletePlaylistItemLoading", "deletePlaylistItemResult");
}
client.controllers.ControllerSidebar.prototype.deletePlaylistItemOk = function(result)
{    
       	$(pages.get('sidebar.player').getSelector("deleteFooter")).addClass("successDelete");
      	setTimeout(function(){$(pages.get('sidebar.player').getSelector("deleteFooter")).removeClass("successDelete");}, 3000);
		client.Audio.refreshPlaylist();
}
client.controllers.ControllerSidebar.prototype.deletePlaylistItemFail = function(error)
{    
        $(pages.get('sidebar.player').getSelector("ErrorText")).html(error.message);
        client.Switcher.showError(pages.get('sidebar.player').getSelector("ErrorBox"));
}
client.controllers.ControllerSidebar.prototype.deletePlaylistItemUpdate = function(result)
{    
}
client.controllers.ControllerSidebar.prototype.clearPlaylist = function()
{    
        commands.get("clearPlaylist").execute(this, {}, "deletePlaylistItemLoading", "deletePlaylistItemResult");              	
}
client.controllers.ControllerSidebar.prototype.clearPlaylistOk = function(result)
{    
        pages.get('sidebar.player').show();
}
client.controllers.ControllerSidebar.prototype.clearPlaylistFail = function(error)
{    
}
client.controllers.ControllerSidebar.prototype.clearPlaylistUpdate = function(result)
{    
}
client.controllers.ControllerSidebar.prototype.showNews = function()
{
	client.Switcher.switchScrollPanel("rpmain", "sidebar.news", true);
}
client.controllers.ControllerSidebar.prototype.showGroups = function()
{
	client.Switcher.switchScrollPanel("rpmain", "sidebar.groups", true);
}
client.controllers.ControllerSidebar.prototype.showContests = function()
{
	client.Switcher.switchScrollPanel("rpmain", "sidebar.contests", true);
}
client.controllers.ControllerAlbums = function(name, section)
{
    client.controllers.ControllerAlbums.baseConstructor.call(this, name, section);
    this.addFormWithView("editAlbum", "mainContent", "", client.blocks.FormAlbumsEditAlbum, client.views.ViewByIdAndType, false);    
 	this.addFormWithView("deleteAlbum", "mainContent", "", client.blocks.FormAlbumsDeleteAlbum, client.views.ViewById, false);    
    this.addStaticBlockWithView("album", "mainContent", "", client.blocks.BlockAlbum, client.views.ViewById);
  	this.addFormWithView("uploadAlbum", "mainContent", "", client.blocks.FormAlbumsUploadAlbum, client.views.ViewById);    
    this.addFormWithView("editAlbumItems", "mainContent", "", client.blocks.FormAlbumsEditAlbumItems, client.views.ViewByIdAndEditMode, false);    
    this.addStaticBlockWithView("albumViewer", "mainContent", "", client.blocks.BlockAlbumViewer, client.views.ViewByIdAndQuality, false);
    this.addStaticBlockWithView("albumViewerDetails", "albumViewerDetails", "", client.blocks.BlockAlbumViewerDetails, client.views.ViewById);
    this.addStaticBlockWithView("albumViewerAudio", "mainContent", "", client.blocks.BlockAlbumViewerAudio, client.views.ViewById);
    this.addStaticBlockWithView("albumViewerTexts", "mainContent", "", client.blocks.BlockAlbumViewerTexts, client.views.ViewById);
    this.addFormWithView("addText", "mainContent", "", client.blocks.FormAlbumsAddText, client.views.ViewById, false);    
    this.addStaticBlockWithView("albumSelector", "albumSelector", "", client.blocks.BlockAlbumSelector, client.views.ViewByIdAndTypeAndViewMode);
    this.addStaticBlockWithView("albumItemSelector", "albumItemSelector", "", client.blocks.BlockAlbumItemSelector, client.views.ViewPagedById);
    this.addStaticBlockWithView("selectItemsResults", "selectItemsResults", "", client.blocks.BlockSelectItemsResults, client.views.ViewByLike);
    commands.add(new client.Command("editAlbum","/users/editAlbum","/wait","/waitupdate"));  
    commands.add(new client.Command("uploadAlbumItems","/users/uploadAlbumItems","/wait","/waitupdate"));  
    commands.add(new client.Command("editAlbumItems","/users/editAlbumItems","/wait","/waitupdate"));  
    commands.add(new client.Command("deleteAlbum","/users/deleteAlbum","/wait","/waitupdate"));  
    commands.add(new client.Command("addTextIntoAlbum","/users/addTextIntoAlbum","/wait","/waitupdate"));  
    commands.add(new client.Command("importOldAlbums","/users/importOldAlbums","/wait","/waitupdate"));
}
client.extendClass(client.controllers.ControllerAlbums, client.controllers.Controller);
client.controllers.ControllerAlbums.prototype.showEditAlbumForm = function(albumType, id)
{
    var p = pages.get("albumsEditAlbumForm");
    p.view.prefix = 'album';
    p.view.id = id; 
    p.view.type = albumType;
    p.open();
}
client.controllers.ControllerAlbums.prototype.editAlbum = function()
{    
        var c = controllers.get("ytAlbums");
        commands.get("editAlbum").execute(c, pages.get('albumsEditAlbumForm').getData(), "addFriendLoading", "addFriendResult");
}
client.controllers.ControllerAlbums.prototype.editAlbumOk = function(result)
{    
}
client.controllers.ControllerAlbums.prototype.editAlbumFail = function(error)
{    
        $(pages.get('albumsEditAlbumForm').getSelector("ErrorText")).html(error.message);
        client.Switcher.showError(pages.get('albumsEditAlbumForm').getSelector("ErrorBox"));
}
client.controllers.ControllerAlbums.prototype.editAlbumUpdate = function(result)
{    
        var c = controllers.get("ytProfile");
        c.viewAlbums(c.currentUserId);
}
client.controllers.ControllerAlbums.prototype.expandAlbums = function(albumTypeName, expand)
{
    var p = pages.get("albumsEditAlbumForm");
    var filter = "";
	if($(p.getSelector('onlyCopyrighted' + albumTypeName + "Album")).attr("checked"))
		filter += ".copyrighted";
	if($(p.getSelector('onlyPersonal' + albumTypeName + "Album")).attr("checked"))
		filter += ".showcase";
    if (expand === true) 
       	$(p.getSelector('expand' + albumTypeName + "Album")).addClass("hide");
    var expanded = $(p.getSelector('expand' + albumTypeName + "Album")).hasClass("hide");
  	$(p.getSelector('mainBlock' + albumTypeName + "Album")).find('.albumSearchResult').addClass("hide");
  	if ($(p.getSelector('mainBlock' + albumTypeName + "Album")).find('.albumSearchResult' + filter).removeClass("hide").size() > 0)
		$(p.getSelector('mainBlock' + albumTypeName + "Album")).find(".albumsNotFound").hide();
	else	
		$(p.getSelector('mainBlock' + albumTypeName + "Album")).find(".albumsNotFound").show();
  	if (!expanded)
  	{
		$(p.getSelector('mainBlock' + albumTypeName + "Album")).find('.albumSearchResult' + filter).each(function(index){
			if (index >= 3) $(this).addClass("hide");			
		});
		$(p.getSelector('expand' + albumTypeName + "Album")).find('.albumTinySearchResult').addClass("hide");		
		var hasTinyPanel = false;
		$(p.getSelector('expand' + albumTypeName + "Album")).find('.albumTinySearchResult' + filter).each(function(index){
			if (index >= 3) 
			{
				$(this).removeClass("hide");			
				hasTinyPanel = true;
			}
			else
				$(this).addClass("hide");			
		});		
		if (hasTinyPanel)
			$(p.getSelector('expand' + albumTypeName + "Album")).removeClass("hide");
		else
			$(p.getSelector('expand' + albumTypeName + "Album")).addClass("hide");
	}
    client.Decor.alignGridBlock(p.getSelector("all" + albumTypeName + "Album"), "albumSearchResult");
}
client.controllers.ControllerAlbums.prototype.openAlbum = function(id)
{
    var p = pages.get("albums.album");
    p.view.prefix = 'album';
    p.view.id = id; 
    p.open();
}
client.controllers.ControllerAlbums.prototype.showDeleteAlbumForm = function(id)
{
    var p = pages.get("albumsDeleteAlbumForm");
    p.view.prefix = 'album';
    p.view.id = id;
    p.open();
}
client.controllers.ControllerAlbums.prototype.deleteAlbum = function(id)
{    
        var c = controllers.get("ytAlbums");
        var data = pages.get('albumsDeleteAlbumForm').getData();
        data['albumId'] = id;
        commands.get("deleteAlbum").execute(c, data, "addFriendLoading", "addFriendResult");
}
client.controllers.ControllerAlbums.prototype.deleteAlbumOk = function(result)
{    
}
client.controllers.ControllerAlbums.prototype.deleteAlbumFail = function(error)
{    
        $(pages.get('albumsDeleteAlbumForm').getSelector("ErrorText")).html(error.message);
        client.Switcher.showError(pages.get('albumsDeleteAlbumForm').getSelector("ErrorBox"));
}
client.controllers.ControllerAlbums.prototype.deleteAlbumUpdate = function(result)
{    
        var c = controllers.get("ytProfile");
        c.viewAlbums(c.currentUserId);
}
client.controllers.ControllerAlbums.prototype.showUploadAlbumForm = function(id)
{
    var p = pages.get("albumsUploadAlbumForm");
    p.view.prefix = 'album';
    p.view.id = id; 
    p.open();
}
client.controllers.ControllerAlbums.prototype.uploadAlbumItems = function()
{    
        var c = controllers.get("ytAlbums");
        var p = pages.get('albumsUploadAlbumForm');
        var data = p.getData();
        data['albumId'] = p.album;
        var count = p.fileNumber; 
        data['albumNewFilesCount'] = count;
        if (count != 0)
        	for (var i = 0; i < count; i++)
        	{
        		var base = "newFile" + i;
        		data[base + "FileId"] = $(p.getSelector(base + "FileId")).attr("value");
        		data[base + "FileCode"] = $(p.getSelector(base + "FileCode")).attr("value");
        	}
        commands.get("uploadAlbumItems").execute(c, data, "addFriendLoading", "addFriendResult");
}
client.controllers.ControllerAlbums.prototype.uploadAlbumItemsOk = function(result)
{    
}
client.controllers.ControllerAlbums.prototype.uploadAlbumItemsFail = function(error)
{    
        $(pages.get('albumsUploadAlbumForm').getSelector("ErrorText")).html(error.message);
        client.Switcher.showError(pages.get('albumsUploadAlbumForm').getSelector("ErrorBox"));
}
client.controllers.ControllerAlbums.prototype.uploadAlbumItemsUpdate = function(result)
{    
        var c = controllers.get("ytAlbums");
        c.showEditAlbumItemsForm(0, pages.get("albumsUploadAlbumForm").album); 
}
client.controllers.ControllerAlbums.prototype.showAddTextForm = function(id)
{
    var p = pages.get("albumsAddTextForm");
    p.view.prefix = 'album';
    p.view.id = id; 
    p.open();
}
client.controllers.ControllerAlbums.prototype.addTextIntoAlbum = function(id)
{    
        var c = controllers.get("ytAlbums");
        var data = pages.get('albumsAddTextForm').getData();
        data['albumId'] = id;
        commands.get("addTextIntoAlbum").execute(c, data, "addTextIntoAlbumLoading", "addTextIntoAlbumResult");
}
client.controllers.ControllerAlbums.prototype.addTextIntoAlbumOk = function(result)
{    
}
client.controllers.ControllerAlbums.prototype.addTextIntoAlbumFail = function(error)
{    
        $(pages.get('albumsAddTextForm').getSelector("ErrorText")).html(error.message);
        client.Switcher.showError(pages.get('albumsAddTextForm').getSelector("ErrorBox"));
}
client.controllers.ControllerAlbums.prototype.addTextIntoAlbumUpdate = function(result)
{    
        var c = controllers.get("ytAlbums");
        c.openAlbum(pages.get("albumsAddTextForm").album); 
}
client.controllers.ControllerAlbums.prototype.showEditAlbumItemsForm = function(editMode, id)
{
    var p = pages.get("albumsEditAlbumItemsForm");
    p.view.prefix = 'album';
    p.view.id = id; 
    p.view.editMode = editMode;
    p.open();
}
client.controllers.ControllerAlbums.prototype.editAlbumItems = function()
{    
    	var c = controllers.get("ytAlbums");
        var p = pages.get('albumsEditAlbumItemsForm');
        var data = p.getData();
        data['albumId'] = p.album;
        data['elements'] = p.elements;
        var elems = p.elements.split(",");        
       	for (var i = 0; i < elems.length; i++)
    	{
    		var base = "item" + elems[i];
    		data[base + "Name"] = $(p.getSelector(base + "Name")).attr("value");
    		if (data[base + "Name"] == "Введите название") data[base + "Name"] = '';
    		data[base + "Author"] = $(p.getSelector(base + "Author")).attr("value");
    		if (data[base + "Author"] == "Введите автора") data[base + "Author"] = '';
    		data[base + "Description"] = $(p.getSelector(base + "Description")).attr("value");
    		if (data[base + "Description"] == "Введите описание") data[base + "Description"] = '';
    		data[base + "Text"] = $(p.getSelector(base + "Text")).attr("value");    		
    		if (data[base + "Text"] == "Введите текст") data[base + "Text"] = '';
    		data[base + "Deleted"] = $(p.getSelector(base + "Deleted")).attr("value");    		
    	}
        commands.get("editAlbumItems").execute(c, data, "addFriendLoading", "addFriendResult");
}
client.controllers.ControllerAlbums.prototype.editAlbumItemsOk = function(result)
{    
}
client.controllers.ControllerAlbums.prototype.editAlbumItemsFail = function(error)
{    
        $(pages.get('albumsEditAlbumItemsForm').getSelector("ErrorText")).html(error.message);
        client.Switcher.showError(pages.get('albumsEditAlbumItemsForm').getSelector("ErrorBox"));
}
client.controllers.ControllerAlbums.prototype.editAlbumItemsUpdate = function(result)
{    
        var c = controllers.get("ytAlbums");
        c.openAlbum(pages.get("albumsEditAlbumItemsForm").album); 
}
client.controllers.ControllerAlbums.prototype.openAlbumViewer = function(id)
{
    var p = pages.get("albums.albumViewer");
    p.view.prefix = 'item';
    p.view.id = id; 
    p.open();
}
client.controllers.ControllerAlbums.prototype.reopenAlbumViewer = function(quality)
{
    var p = pages.get("albums.albumViewer");
    p.view.quality = quality; 
    p.open();
}
client.controllers.ControllerAlbums.prototype.playLocalMp3 = function(page, sender)
{
	$(page.getSelector("songRoundPlay")).show();
	$(page.getSelector("songRoundStop")).hide();
	var localPlayButton = sender.hide().parent().find(".songRoundStop");
	localPlayButton.show();	
	$("#localAudioSliderHolder").remove();	
	var isLeft = sender.parent().hasClass("left");
	var styleOfHolder = (isLeft ? "left" : "rightShifted" );
	$('<div id="localAudioSliderHolder" class="' + styleOfHolder +
	  ' holder"><div class="holder" style="width:140px;margin-top:3px;"><div class="holder" style="width:140px;"><div id="localAudioSlider"></div></div></div></div>').insertAfter(localPlayButton.parent());
	var localAudioSlider = $("#localAudioSlider");
	client.Audio.pLocalSlider = localAudioSlider.slider({
		range: "min",
		value: 0,
		min: 0,			
		max: 100,
		start: function(event, ui) {
			client.Audio.setPositionInProgress = true;
		},
		stop: function(event, ui) {
			client.Audio.setPositionInProgress = false;
		},
		slide: function(event, ui) {
    		client.Audio.setPosition(ui.value);
		}		
	});
	pages.get("sidebar.player").fixSlider("#localAudioSlider");
	client.Audio.playMp3([this.getEmbeddedParam(sender,"localMp3Player","SongId"),
		this.getEmbeddedParam(sender,"localMp3Player","Filename"),
		this.getEmbeddedParam(sender,"localMp3Player","SongAuthor"),
		this.getEmbeddedParam(sender,"localMp3Player","SongName")]);
}
client.controllers.ControllerAlbums.prototype.stopLocalMp3 = function(page, sender)
{
	$(page.getSelector("songRoundPlay")).show();
	$(page.getSelector("songRoundStop")).hide();
	$("#localAudioSliderHolder").hide();
	client.Audio.pause();
}
client.controllers.ControllerAlbums.prototype.checkLocalMp3 = function(page)
{
	$(".localMp3Player").each(function(index){
		var id = $(this).children(".embeddedSongId").html();
		if (client.Audio.isPlaying)
			if (id == client.Audio.currentId)
				controllers.get("ytAlbums").playLocalMp3(page, $(this).find(".songRoundPlay"));
	});
}
client.controllers.ControllerAlbums.prototype.openAlbumViewerAudio = function(id)
{
    var p = pages.get("albums.albumViewerAudio");
    p.view.prefix = 'item';
    p.view.id = id; 
    p.open();
}
client.controllers.ControllerAlbums.prototype.openAlbumViewerTexts = function(id)
{
    var p = pages.get("albums.albumViewerTexts");
    p.view.prefix = 'item';
    p.view.id = id; 
    p.open();
}
client.controllers.ControllerAlbums.prototype.importOldAlbums = function(special)
{    
        var c = controllers.get("ytAlbums");
        var data = {};
        data['special'] = special;
        commands.get("importOldAlbums").execute(c, data, "importOldAlbumsLoading", "importOldAlbumsResult");
}
client.controllers.ControllerAlbums.prototype.importOldAlbumsOk = function(result)
{    
}
client.controllers.ControllerAlbums.prototype.importOldAlbumsFail = function(error)
{    
}
client.controllers.ControllerAlbums.prototype.importOldAlbumsUpdate = function(result)
{    
	pages.get("profile.albums").show();
}
client.controllers.ControllerBlog = function(name, section)
{
    client.controllers.ControllerBlog.baseConstructor.call(this, name, section);
	this.addFormWithView("options", "mainContent", "", client.blocks.FormBlogOptions, client.views.ViewById, false);     	
    this.addFormWithView("editPost", "mainContent", "", client.blocks.FormBlogEditPost, client.views.ViewById, false);    
 	this.addFormWithView("editPostPreview", "mainContent", "", client.blocks.FormBlogEditPostPreview, client.views.ViewById, false);    
 	this.addFormWithView("deletePost", "mainContent", "", client.blocks.FormBlogDeletePost, client.views.ViewById, false);    
 	this.addStaticBlockWithView("blogUnconfirmedPosts", "", "", client.blocks.BlockBlogUnconfirmedPosts, client.views.ViewPaged);
    commands.add(new client.Command("setBlogOptions","/users/setBlogOptions","/wait","/waitupdate"));    
    commands.add(new client.Command("createPostDraft","/users/createPostDraft","/wait","")); 
    commands.add(new client.Command("editPost","/users/editPost","/wait","/waitupdate"));  
    commands.add(new client.Command("deletePost","/users/deletePost","/wait","/waitupdate"));  
}
client.extendClass(client.controllers.ControllerBlog, client.controllers.Controller);
client.controllers.ControllerBlog.prototype.showBlogOptions = function()
{
	var p = pages.get("blogOptionsForm");
    p.view.prefix = 'blog';
    p.open();
}
client.controllers.ControllerBlog.prototype.setBlogOptions = function()
{    
    	var data = pages.get('blogOptionsForm').getData();
        commands.get("setBlogOptions").execute(this, data, "setBlogOptionsLoading", "setBlogOptionsResult");   
}
client.controllers.ControllerBlog.prototype.setBlogOptionsOk = function(result)
{    
}
client.controllers.ControllerBlog.prototype.setBlogOptionsFail = function(error)
{    
	    var p = pages.get('blogOptionsForm');
        $(p.getSelector("ErrorText")).html(error.message);
        client.Switcher.showError(p.getSelector("ErrorBox"));
}
client.controllers.ControllerBlog.prototype.setBlogOptionsUpdate = function(result)
{    
	    controllers.get('ytProfile').viewMyBlog();
}
client.controllers.ControllerBlog.prototype.showEditPostForm = function(id)
{
	var p = pages.get("blogEditPostForm");
    p.view.prefix = 'post';
    p.view.id = id; 
    p.open();
}
client.controllers.ControllerBlog.prototype.showEditPostPreviewForm = function(id)
{
	var p = pages.get("blogEditPostPreviewForm");
    p.view.prefix = 'post';
    p.view.id = id; 
    p.open();
}
client.controllers.ControllerBlog.prototype.createPostDraft = function()
{    
        commands.get("createPostDraft").execute(this, pages.get('blogEditPostForm').getData(), "setBlogPostLoading", "setBlogPostResult");   
}
client.controllers.ControllerBlog.prototype.createPostDraftOk = function(result)
{    
	    var p = pages.get('blogEditPostForm');
        this.showEditPostPreviewForm(p.view.id);
}
client.controllers.ControllerBlog.prototype.createPostDraftFail = function(error)
{    
	    var p = pages.get('blogEditPostForm');
        $(p.getSelector("ErrorText")).html(error.message);
        client.Switcher.showError(p.getSelector("ErrorBox"));
}
client.controllers.ControllerBlog.prototype.createPostDraftUpdate = function(result)
{    
}
client.controllers.ControllerBlog.prototype.editPost = function(publish)
{    
    	var data = pages.get('blogEditPostPreviewForm').getData();
        data['publish'] = publish;
        commands.get("editPost").execute(this, data, "setBlogPostLoading", "setBlogPostResult");   
}
client.controllers.ControllerBlog.prototype.editPostOk = function(result)
{    
}
client.controllers.ControllerBlog.prototype.editPostFail = function(error)
{    
	    var p = pages.get('blogEditPostPreviewForm');
        $(p.getSelector("ErrorText")).html(error.message);
        client.Switcher.showError(p.getSelector("ErrorBox"));
}
client.controllers.ControllerBlog.prototype.editPostUpdate = function(result)
{    
	    controllers.get('ytProfile').viewMyBlog();
}
client.controllers.ControllerBlog.prototype.openPost = function(id, type)
{
    var p = pages.get("mainpage.blogPost");
    p.view.id = id;
    p.view.prefix = "post";
    p.view.type = type;
    p.open();
}
client.controllers.ControllerBlog.prototype.showDeletePostForm = function(id)
{
	var p = pages.get("blogDeletePostForm");
    p.view.prefix = 'post';
    p.view.id = id; 
    p.open();
}
client.controllers.ControllerBlog.prototype.deletePost = function(postId)
{    
    	var data = pages.get('blogDeletePostForm').getData();
        data['postId'] = postId;
        commands.get("deletePost").execute(this, data, "setBlogPostLoading", "setBlogPostResult");   
}
client.controllers.ControllerBlog.prototype.deletePostOk = function(result)
{    
}
client.controllers.ControllerBlog.prototype.deletePostFail = function(error)
{    
	    var p = pages.get('blogEditPostDeleteForm');
        $(p.getSelector("ErrorText")).html(error.message);
        client.Switcher.showError(p.getSelector("ErrorBox"));
}
client.controllers.ControllerBlog.prototype.deletePostUpdate = function(result)
{    
	    controllers.get('ytProfile').viewMyBlog();
}
client.controllers.ControllerBlog.prototype.preparePostItems = function(pageName)
{	
	var p = pages.get(pageName);
	client.drag.prepareTalantDragItems(p);
}
client.controllers.ControllerComments = function(name, section)
{
    client.controllers.ControllerComments.baseConstructor.call(this, name, section);
    this.addStaticBlockWithView("commentsList", "commentsList", "", client.blocks.BlockComments, client.views.ViewPagedByIdAndType);
    commands.add(new client.Command("addComment","/users/addComment","/wait","/waitupdate"));  
    commands.add(new client.Command("editComment","/users/editComment","/wait","/waitupdate")); 
}
client.extendClass(client.controllers.ControllerComments, client.controllers.Controller);
client.controllers.ControllerComments.prototype.showComments = function(targetId, targetType, page)
{
    var p = pages.get("comments.commentsList");
    p.view.prefix = '';
    p.view.id = targetId;
    p.view.type = targetType;
    p.show();
}
client.controllers.ControllerComments.prototype.addComment = function()
{    
        var p = pages.get("comments.commentsList");
       	var input = $(p.getSelector("commentTextInput"));
       	if ("Введите текст сообщения" == input.attr('value')) return;
        var data = {commentText: input.attr('value'), commentSection:p.commentSection, commentTarget:p.commentTarget, selectedCommentId: p.selectedCommentId};
	    var ok = commands.get("addComment").execute(this, data, "addCommentLoading", "addCommentResult");
    	if (ok)
    	   	client.Switcher.startAreaSendingAnimation(input);        
}
client.controllers.ControllerComments.prototype.addCommentOk = function(result)
{    
        $(pages.get('comments.commentsList').getSelector('commentTextInput')).attr('value', '');
}
client.controllers.ControllerComments.prototype.addCommentFail = function(error)
{    
	    var p = pages.get('comments.commentsList');
        $(p.getSelector("ErrorText")).html(error.message);
        client.Switcher.showError(p.getSelector("ErrorBox"));
    	var input = $(p.getSelector("commentTextInput"));
    	client.Switcher.endAreaSendingAnimation(input);
}
client.controllers.ControllerComments.prototype.addCommentUpdate = function(result)
{    
        var p = pages.get('comments.commentsList');
	    var input = $(p.getSelector("commentTextInput"));
    	client.Switcher.endAreaSendingAnimation(input);
    	if (p.commentSection == 1)
    		p.view.page = 1;
	    p.show(); 
}
client.controllers.ControllerComments.prototype.editComment = function(delcom)
{    
        var p = pages.get("comments.commentsList");
       	var input = $(p.getSelector("commentTextInput"));
       	if ("Введите текст сообщения" == input.attr('value')) return;
        var data = {commentText: input.attr('value'), commentSection:p.commentSection, commentTarget:p.commentTarget, selectedCommentId: p.selectedCommentId};
        if (delcom == 1)
            data.commentText = "";        
        var ok = commands.get("editComment").execute(this, data, "addCommentLoading", "addCommentResult");
    	if (ok)
    	   	client.Switcher.startAreaSendingAnimation(input);        
}
client.controllers.ControllerComments.prototype.editCommentOk = function(result)
{    
        $(pages.get('comments.commentsList').getSelector('commentTextInput')).attr('value', '');
}
client.controllers.ControllerComments.prototype.editCommentFail = function(error)
{    
	    var p = pages.get('comments.commentsList');
        $(p.getSelector("ErrorText")).html(error.message);
        client.Switcher.showError(p.getSelector("ErrorBox"));
    	var input = $(p.getSelector("commentTextInput"));
    	client.Switcher.endAreaSendingAnimation(input);
}
client.controllers.ControllerComments.prototype.editCommentUpdate = function(result)
{    
        var p = pages.get('comments.commentsList');
	    var input = $(p.getSelector("commentTextInput"));
    	client.Switcher.endAreaSendingAnimation(input);
    	if (p.commentSection == 1)
    		p.view.page = 1;
	    p.show(); 
}
client.controllers.ControllerVotes = function(name, section)
{
    client.controllers.ControllerVotes.baseConstructor.call(this, name, section);
    commands.add(new client.Command("addVote","/users/vote","/wait","/waitupdate"));  
}
client.extendClass(client.controllers.ControllerVotes, client.controllers.Controller);
client.controllers.ControllerVotes.prototype.voteUp = function(voteSection, voteTarget)
{
    this.addVote(voteSection, voteTarget, 1);
}
client.controllers.ControllerVotes.prototype.voteDown = function(voteSection, voteTarget)
{
    this.addVote(voteSection, voteTarget, 2);
}
client.controllers.ControllerVotes.prototype.addVote = function(voteSection,voteTarget,voteCode)
{    
    	var data = {voteSection:voteSection,voteTarget:voteTarget,voteCode:voteCode};
	    commands.get("addVote").execute(this, data, "addVoteLoading", "addVoteResult");
}
client.controllers.ControllerVotes.prototype.addVoteOk = function(result)
{    
	    $('.albumItemVotePanel').html("");
}
client.controllers.ControllerVotes.prototype.addVoteFail = function(error)
{    
}
client.controllers.ControllerVotes.prototype.addVoteUpdate = function(result)
{    
	    $('.albumItemVotePanel').html("Ваш голос принят.");
}
client.controllers.ControllerMainPage = function(name, section)
{
    client.controllers.ControllerMainPage.baseConstructor.call(this, name, section);
    this.addStaticBlockWithView("mainPage", "mainContent", "", client.blocks.BlockMainPage, client.views.ViewPagedByLike);
	this.addStaticBlockWithView("talants", "mainContent", "", client.blocks.BlockTalants, client.views.ViewPaged);
	this.addStaticBlockWithView("experts", "mainContent", "", client.blocks.BlockExperts, client.views.ViewPaged);
	this.addStaticBlockWithView("contests", "mainContent", "", client.blocks.BlockContests, client.views.ViewPagedByIdAndLikeAndViewMode);
	this.addStaticBlockWithView("works", "mainContent", "", client.blocks.BlockWorks, client.views.ViewPaged);
	this.addFormWithView("offerContest", "mainContent", "", client.blocks.FormOfferContest, client.views.View);
    this.addFormWithView("reportBug", "mainContent", "", client.blocks.FormReportBug, client.views.View);
    this.addStaticBlockWithView("blogPost", "mainContent", "", client.blocks.BlockBlogPost, client.views.ViewByIdAndType);
	this.addStaticBlockWithView("talantsSearchResults", "talantsSearchResults", "", client.blocks.BlockTalantsSearchResults, client.views.ViewPaged);
	this.addStaticBlockWithView("worksSearchResults", "worksSearchResults", "", client.blocks.BlockWorksSearchResults, client.views.ViewPaged);
    commands.add(new client.Command("offerContest","/main/offerContest","/wait",""));  
    commands.add(new client.Command("reportBug","/main/reportBug","/wait",""));  
}
client.extendClass(client.controllers.ControllerMainPage, client.controllers.Controller);
client.controllers.ControllerMainPage.prototype.hideBottomBanner = function(show)
{
    if (show === false)
    {
    	$("#bottomBanner").hide();
    	$("#iLikeItBottomDiv").hide();
    	$("#reportBug").hide();
    	$("#guarantor").hide();
    }
    else
    {
	    $("#bottomBanner").show();
    	$("#iLikeItBottomDiv").show();
    	$("#reportBug").show();
    	$("#guarantor").show();
    }
}
client.controllers.ControllerMainPage.prototype.openMainPageSection = function()
{
}
client.controllers.ControllerMainPage.prototype.offerContest = function()
{    
    	var p = pages.get('mainpageOfferContestForm');
        var c = controllers.get("ytMainPage");
        commands.get("offerContest").execute(c, p.getData(), "offerContestLoading", "offerContestResult");   
}
client.controllers.ControllerMainPage.prototype.offerContestOk = function(result)
{    
	    pages.get("mainpage.mainPage").open();
}
client.controllers.ControllerMainPage.prototype.offerContestFail = function(error)
{    
	    var p = pages.get('mainpageOfferContestForm');
        $(p.getSelector("ErrorText")).html(error.message);
        client.Switcher.showError(p.getSelector("ErrorBox"));
}
client.controllers.ControllerMainPage.prototype.offerContestUpdate = function(result)
{    
}
client.controllers.ControllerMainPage.prototype.reportBug = function()
{    
    	var p = pages.get('mainpageReportBugForm');
        var c = controllers.get("ytMainPage");
        commands.get("reportBug").execute(c, p.getData(), "reportBugLoading", "reportBugResult");   
}
client.controllers.ControllerMainPage.prototype.reportBugOk = function(result)
{    
	    pages.get("mainpage.mainPage").open();
}
client.controllers.ControllerMainPage.prototype.reportBugFail = function(error)
{    
	    var p = pages.get('mainpageReportBugForm');
        $(p.getSelector("ErrorText")).html(error.message);
        client.Switcher.showError(p.getSelector("ErrorBox"));
}
client.controllers.ControllerMainPage.prototype.reportBugUpdate = function(result)
{    
}
client.controllers.ControllerContests = function(name, section)
{
    client.controllers.ControllerContests.baseConstructor.call(this, name, section);
 	this.addStaticBlockWithView("contest", "", "", client.blocks.BlockContest, client.views.ViewByIdAndType);
	this.addStaticBlockWithView("contestWorkList", "", "", client.blocks.BlockContestWorkList, client.views.ViewPagedByIdAndLikeAndViewMode, false);
	this.addStaticBlockWithView("contestSingleWork", "", "", client.blocks.BlockContestSingleWork, client.views.ViewById);
	this.addStaticBlockWithView("contestCustomPage", "", "", client.blocks.BlockContestCustomPage, client.views.ViewById);
	this.addStaticBlockWithView("contestBlog", "", "", client.blocks.BlockContestBlog, client.views.ViewPagedById);
	this.addFormWithView("addParticipant", "mainContent", "", client.blocks.FormAddParticipant, client.views.ViewById, false);
 	this.addFormWithView("addWork", "mainContent", "", client.blocks.FormAddWork, client.views.ViewById, false);
    this.addFormWithView("votePopup", "mainContent", "", client.blocks.FormVotePopup, client.views.ViewById, false);
    commands.add(new client.Command("addParticipant","/users/addParticipant","/wait","/waitupdate"));      
    commands.add(new client.Command("addWork","/users/addWork","/wait","/waitupdate"));      
    commands.add(new client.Command("voteForWork","/contests/vote","/wait","/waitupdate"));    
}
client.extendClass(client.controllers.ControllerContests, client.controllers.Controller);
client.controllers.ControllerContests.prototype.showParticipant = function()
{
}
client.controllers.ControllerContests.prototype.openContest = function(link)
{
	var p = pages.get("contests.contest");
	p.view.id = 0;
	p.view.type = link;
	p.contestName = link;
	p.open();
}
client.controllers.ControllerContests.prototype.openStage = function(id)
{
	var p = pages.get("contests.contest");
	p.view.id = id;
	p.view.type = "";
	p.contestName = "";
	p.open();
}
client.controllers.ControllerContests.prototype.openStageBlog = function(id)
{
	var p = pages.get("contests.contestBlog");
	p.view.id = id;
	p.open();
}
client.controllers.ControllerContests.prototype.openWorkList = function(id)
{
	var p = pages.get("contests.contestWorkList");
	p.view.id = id;
	p.view.page = 0;
	p.open();
}
client.controllers.ControllerContests.prototype.openStanding = function(id)
{
	pages.get("contests.contestSingleWork").view.id = id;
	pages.get("contests.contestSingleWork").open();
}
client.controllers.ControllerContests.prototype.openCustomPage = function(id)
{
	pages.get("contests.contestCustomPage").view.id = id;
	pages.get("contests.contestCustomPage").open();
}
client.controllers.ControllerContests.prototype.addParticipant = function()
{    
    	var data = pages.get('contestsAddParticipantForm').getData();
        commands.get("addParticipant").execute(this, data, "setAddParticipantLoading", "setAddParticipantResult");   
}
client.controllers.ControllerContests.prototype.addParticipantOk = function(result)
{    
}
client.controllers.ControllerContests.prototype.addParticipantFail = function(error)
{    
	    var p = pages.get('contestsAddParticipantForm');
        $(p.getSelector("ErrorText")).html(error.message);
        client.Switcher.showError(p.getSelector("ErrorBox"));
}
client.controllers.ControllerContests.prototype.addParticipantUpdate = function(result)
{    
	    pages.get("contestsAddWorkForm").view.id = pages.get("contestsAddParticipantForm").view.id;
	    pages.get("contestsAddWorkForm").open();
}
client.controllers.ControllerContests.prototype.addWork = function()
{    
    	var data = pages.get('contestsAddWorkForm').getData();
        if(pages.get("albums.albumSelector").view.viewMode==0)
              pages.get('contestsAddWorkForm').targetId=0;
        commands.get("addWork").execute(this, data, "setAddWorkLoading", "setAddWorkResult");   
}
client.controllers.ControllerContests.prototype.addWorkOk = function(result)
{    
        if(pages.get('contestsAddWorkForm').targetId)
        {
            pages.get("albums.albumSelector").view.viewMode=0;
            pages.get("albums.selectItemsResults").view.like="none;";
        }
}
client.controllers.ControllerContests.prototype.addWorkFail = function(error)
{    
	    var p = pages.get('contestsAddWorkForm');
        $(p.getSelector("ErrorText")).html(error.message);
        client.Switcher.showError(p.getSelector("ErrorBox"));
}
client.controllers.ControllerContests.prototype.addWorkUpdate = function(result)
{    
		pages.get("contests.contest").view.id = pages.get('contestsAddWorkForm').stageId;
		pages.get("contests.contest").open(); 	
}
client.controllers.ControllerContests.prototype.voteForWork = function(isPopup)
{    
    	var data = {};
        if(isPopup >= 1)
        {
            var p = pages.get('contestsVotePopupForm');
    	    data["captcha"] = $(p.getSelector("voteCode")).attr("value");
    	    data["standingId"] = p.view.id;
            p.isPopup = isPopup;
        }
        else
        {
            var p = pages.get('contests.contestSingleWork');
    	    data["captcha"] = $(p.getSelector("voteCode")).attr("value");
    	    data["standingId"] = p.view.id;
        }
    	commands.get("voteForWork").execute(this, data, "voteForWorkLoading", "voteForWorkResult");
}
client.controllers.ControllerContests.prototype.voteForWorkOk = function(result)
{    
}
client.controllers.ControllerContests.prototype.voteForWorkFail = function(error)
{    
        if(pages.get('contestsVotePopupForm').isPopup >= 1)
        {
             var p = pages.get('contestsVotePopupForm');
             p.isPopup = 0;
             $(p.getSelector("ErrorText")).html(error.message);
             client.Switcher.showError(p.getSelector("ErrorBox"));
        }
        else
        {
             var p = pages.get('contests.contestSingleWork');
             $(p.getSelector("ErrorText")).html(error.message);
             client.Switcher.showError(p.getSelector("ErrorBox"));
        }
}
client.controllers.ControllerContests.prototype.voteForWorkUpdate = function(result)
{    
        if(pages.get('contestsVotePopupForm').isPopup == 1)
        {
            pages.get('contestsVotePopupForm').isPopup = 0;
            pages.get('contestsVotePopupForm').view.container = "mainContent";
            pages.get("contests.contest").show();
        }
        else if(pages.get('contestsVotePopupForm').isPopup == 2)
        {
            pages.get('contestsVotePopupForm').isPopup = 0;
            pages.get('contestsVotePopupForm').view.container = "mainContent";
            pages.get("contests.contestWorkList").show();
        }
        else
        {
	        pages.get("contests.contestSingleWork").show();
        }    
}
client.ComboBox = function(input, popupBlock, items, isAutoScroll, handler, hint)
{
	this.__input = input;
	this.__popupBlock = popupBlock;
	this.__scrollBlock = null;
	this.__items = items;
	this.__selectedItem = null;
	this.__lastAppliedItem = null;
	this.__lastZIndex = 0;
	this.__handler = handler;
	this.__hint = hint;
	this.__init();
};
client.ComboBox.prototype.__init = function()
{
	this.__scrollBlock = this.__popupBlock.find(".scroll");
	if (this.__popupBlock.width() < this.__input.outerWidth(true))
		this.__popupBlock.width(this.__input.outerWidth(true));
	this.__input.attr('autocomplete', "off");
	var self = this;
	var speed = 300;
 	this.__items.each
	(function(index){ 
    	if ($(this).text() == self.__input.attr("value"))
		{
        	$(this).stop().addClass("selectedItem");
			self.__selectedItem = $(this);
			self.__scrollToSelection();
		}
    });
	this.__input.click
	(function(){
		self.__fixPopup();		
		self.__popupBlock.css
		({
			left: self.__input.position().left,
			top: self.__input.position().top + 25
		});
		self.__popupBlock.mousemove
		(function(event){
			self.__doNotBlur = true;
		});
		self.__popupBlock.mouseleave
		(function(event){
			self.__doNotBlur = false;
		});
		self.__popupBlock.stop().fadeTo(speed, 1);
		self.__scrollToSelection();
		$(document).bind
		(
			'click',
			function(event)
			{
				if (event.target != self.__popupBlock[0] &&
					event.target != self.__input[0])
				{
					if (!self.__input.hasClass('hasHint'))
					{
						if (self.__input.attr("value") != "")
						{
							self.__applySelection();
							if (self.__input.attr("value") == "")
								self.__showHint();
						}
						self.__popupBlock.stop().fadeTo
							(speed, 0, function(){ self.__hidePopup(); });
					}
					$(document).unbind(event);
				}
			}
		);
	});
	var hover = function()
	{
		if (!self.__selectedItem || this != self.__selectedItem[0])
		{
			var t = $(this);
			if ($.browser.msie && $.browser.version == "8.0" )
			{
				t.css('visible', 'hidden');
				t.css({ backgroundColor: colors.hover, color: colors.activeText }); 
				t.css('visible', 'visible'); 
			}
			else t.css({ backgroundColor: colors.hover, color: colors.activeText });
		}
	};
	var unhover = function()
	{
		if (!self.__selectedItem || this != self.__selectedItem[0])
		{
			var t = $(this);
			if ($.browser.msie && $.browser.version == "8.0" )
			{
				t.css('visible', 'hidden');
				t.css({ backgroundColor: colors.backgroundLight, color: colors.text});
				t.css('visible', 'visible'); 
			} 
			else t.css({ backgroundColor: colors.backgroundLight, color: colors.text});
		}
    }
    this.__items.hover(hover, unhover); 
	hover = null;
	unhover = null;
	this.__items.click
	(function(){ 
		self.__selectItem($(this)); 
		self.__applySelection();
		if (self.__input.hasClass('hasHint'))
			self.__input.removeClass('hasHint');
	});
	if (this.__hint != null)
	{
		if (this.__input.attr('value') == "")
			this.__showHint();
	}
	this.__input.focus
	(function(){	
		self.__hideHint();
		self.__fixPopup();		
		self.__popupBlock.css
		({
			left: self.__input.position().left,
			top: self.__input.position().top + 25
		});
		self.__popupBlock.stop().fadeTo(speed, 1);
		self.__scrollToSelection();
	});
	this.__input.blur
	(function(event){
		if (!self.__doNotBlur)
		{
			if (self.__input.attr("value") != "")
			{
				self.__applySelection();
				if (self.__input.attr("value") == "")
					self.__showHint();
			}
			else self.__showHint();
			if (!$.browser.opera)
				self.__popupBlock.stop().fadeTo
					(speed, 0, function(){ self.__hidePopup(); });
		}
	});
	this.__input.keyup
	(function(event){
		if (self.__input.attr("value") == this.__hint)
		{
		}
		else if (event.keyCode == 13)
		{
			if (self.__input.attr("value") != "")
			{
				self.__applySelection();
				if (self.__input.attr("value") == "")
					self.__showHint();
			}
			else self.__showHint();
			self.__popupBlock.stop().fadeTo
				(speed, 0, function(){self.__hidePopup()});
			self.__doNotBlur = true;	
			self.__input.blur();
		}
		else if (event.keyCode == 40)
		{
			if (self.__selectedItem != null)
			{
				var next = self.__selectedItem.next('.selectableItem');
				if (next.length == 1 && next.css('display') != 'none')
				{
					self.__selectItem(next);
					self.__applySelection();
					if (self.__scrollBlock.length == 1 && self.__selectedItem != null)
						self.__scrollBlock.scrollTop
							(self.__scrollBlock.scrollTop() + self.__selectedItem.outerHeight());
				}	
			}
		}
		else if (event.keyCode == 38)
		{
			if (self.__selectedItem != null)
			{
				var prev = self.__selectedItem.prev('.selectableItem');
				if (prev.length == 1 && prev.css('display') != 'none')
				{
					self.__selectItem(prev);
					self.__applySelection();
					if (self.__scrollBlock.length == 1 && self.__selectedItem != null)
						self.__scrollBlock.scrollTop
							(self.__scrollBlock.scrollTop() - self.__selectedItem.outerHeight());
				}	
			}
		}
		else
		{
			var selectedIndex = -1;
			self.__items.each
			(function(index){
				if (
					$(this).text()
						   .toLowerCase()
						   .indexOf(self.__input.attr("value").toLowerCase()) == 0
				   )
				{
					if (selectedIndex == -1)
					{
						self.__selectItem($(this));
						selectedIndex = index;
						self.__scrollToSelection();
					}
				}
			});
		}
	});
};
client.ComboBox.prototype.__selectItem = function(element)
{
	if (this.__selectedItem != element)
	{
		if (this.__selectedItem != null)
		{
			this.__selectedItem.css('visible', 'hidden');
			this.__selectedItem.css({ backgroundColor: colors.backgroundLight, color: colors.text});
			this.__selectedItem.css('visible', 'visible');
		}
		this.__selectedItem = element;
		this.__selectedItem.css('visible', 'hidden');
		this.__selectedItem.css({ backgroundColor: "#E5005C", color: colors.activeText});
			this.__selectedItem.css('visible', 'visible');
	}
}
client.ComboBox.prototype.__applySelection = function()
{
	var result = this.__selectedItem 	!= null && 
				 this.__lastAppliedItem != this.__selectedItem;
	if (result)
	{
		this.__input.attr('value', this.__selectedItem.text());
		this.__lastAppliedItem 	=  this.__selectedItem;
		if (this.__handler != null)
			this.__handler();
	}
	return result;
}
client.ComboBox.prototype.__scrollToSelection = function()
{
	if (this.__scrollBlock.length == 1 && this.__selectedItem != null)
	{
		if ($.browser.opera)
			this.__scrollBlock.animate({scrollTop: this.__scrollBlock.scrollTop() + this.__selectedItem.position().top});
		else this.__scrollBlock.scrollTop(this.__scrollBlock.scrollTop() + this.__selectedItem.position().top);
	}
}
client.ComboBox.prototype.__hidePopup = function()
{
	this.__popupBlock.css('zIndex', '');
	this.__popupBlock.hide();
}
client.ComboBox.prototype.__showHint = function()
{
	if (!this.__input.hasClass('hasHint'))
	{
		this.__input.attr('value', this.__hint);
		this.__input.addClass('hasHint');
		if (this.__handler != null)
			this.__handler();
	}
}
client.ComboBox.prototype.__hideHint = function()
{
	if (this.__input.hasClass('hasHint'))
	{
		this.__input.attr('value', '');
		this.__input.removeClass('hasHint');
	}
}
client.ComboBox.prototype.__fixPopup = function()
{
	if (client.ie7 && 
		client.ComboBox.__lastParent != null && 
		client.ComboBox.__lastParent != this.__popupBlock.parent())
		client.ComboBox.__lastParent.css('zIndex', '');
	if (client.ie7)
	{
		this.__popupBlock.parent().css('zIndex', 3000);
		client.ComboBox.__lastParent = this.__popupBlock.parent();
	}
	this.__popupBlock.css({ zIndex: 2000 });
}
client.ComboBox.__lastParent = null;
client.ComboBox.init = function(selector, isAutoScroll, handler, hint)
{
	var input = $(selector);   
    var popupBlock = $(selector + "Selector");
    var items = $(selector + "Items").find(".selectableItem"); 
	return [new client.ComboBox(input, popupBlock, items, isAutoScroll, handler, hint)];
}
client.CheckBox = function(checkBoxInput, handler)
{
	this.__input = $(checkBoxInput);
	this.__wrapper = this.__input.next(".check-box");
	this.__checkState = null;
	this.__uncheckState = null;
	this.__disabled = false;
	this.__uncheckStateButton = null;
	this.__uncheckStateButtonInner = null;
	var self = this;
	if (this.__wrapper.length == 1)
	{
		this.__checkState = this.__wrapper.children(".checked").hide();
		this.__uncheckState = this.__wrapper.children(".unchecked").hide();
		this.__input.hide();
	}
	this.__applyInputState();
	if (this.__checkState && this.__uncheckState)
	{
		this.__wrapper.click
		(function(){
			if (!self.__disabled)
			{
				self.__input.attr("checked", self.__input.attr("checked") ? '' : "checked");
				self.__applyInputState();
			}
		});
		var speed = 300;
		this.__uncheckState.hover
		(function(){
			$(this).find(".check-box-button").stop().animate({borderTopColor: colors.active,
			borderBottomColor: colors.active,
			borderRightColor: colors.active,
			borderLeftColor: colors.active}, speed);
			$(this).find(".check-box-text").stop().animate({color: colors.active}, speed);	
		},
		function(){
			$(this).find(".check-box-button").stop().animate({borderTopColor: colors.checkbox,
			borderBottomColor: colors.checkbox,
			borderRightColor: colors.checkbox,
			borderLeftColor: colors.checkbox}, speed);
			$(this).find(".check-box-text").stop().animate({color: colors.text}, speed);		
		});
		this.__uncheckState.find(".check-box-text").css({color: colors.text});
	}
	if (!(handler == null))	this.__wrapper.click(handler); 
}
client.CheckBox.prototype.__applyInputState = function()
{
	if (this.__input.attr('checked'))
	{
		this.__checkState.show();
		this.__uncheckState.hide();
	}
	else
	{
		this.__checkState.hide();
		this.__uncheckState.show();
	}
	this.__disabled = this.__input.attr('disabled');
	if (this.__disabled) 
		this.__wrapper.addClass("disabled");
	else 
		this.__wrapper.removeClass("disabled");
}
client.CheckBox.prototype.setEnabled = function(value)
{
	this.__input.attr('disabled', value ? '' : 'disabled');
	this.__applyInputState();
}
client.CheckBox.initAll = function(selector, handler)
{
	var result = [];
	$(selector).each
	(function(){
		result.push(new client.CheckBox(this, handler)); 
	});
	return result;
}
client.CheckBox.setChecked = function(selector, checked)
{
	if (checked)
	{
		$(selector).parent().find(".checked").show();
		$(selector).parent().find(".unchecked").hide();
		$(selector).attr("checked", "checked");
	}
	else
	{
		$(selector).parent().find(".checked").hide();
		$(selector).parent().find(".unchecked").show();
		$(selector).removeAttr('checked');
	}
}
var Slider = function(slideContainerID, currentSlideContainerID, buttonContainerID, infoContainerID, isMultiple, activeCount)
{
	this.__activeCount = activeCount == null ? 3 : activeCount;
	var self = this;
	this.__slideContainer = $("#" + slideContainerID);
	this.__slides = this.__slideContainer.find(".slide");
	this.__currentSlides = $("#" + currentSlideContainerID).find(".current-slide");
	this.__infoBlocks = $("#" + infoContainerID).find(".slide-info");
	this.__buttons = $("#" + buttonContainerID).find(".slide-button");
	this.__slidesFinisher = this.__slideContainer.find(".clear");
	this.__slidesHolder = this.__slidesFinisher.parent();
	this.__slidesHolder.remove(this.__slidesFinisher);
	this.__fakeSlides = [];
	this.__activeSlides = [];
	var select = isMultiple ? function(i){ return function(){ if (self.__selectedIndex != i) self.selectOneMore(i); } } :
							  function(i){ return function(){ self.selectItem(i); } };
	this.__buttons.each(function(index){ $(this).click(select(index)) });
	this.__slides.each(function(index){ $(this).click(select(index)) });
	var i = 0;
	while (i < this.__activeCount)
	{
		this.__fakeSlides.push
		(
			$(this.__slides[i]).clone()
							   .appendTo(this.__slideContainer)
							   .click(select(i))
		);
		i++;
	}
	this.__slidesFinisher.appendTo(this.__slidesHolder);
	select = null;
	this.__selectedIndex = -1;
	this.__lastSelectedIndex = -1;
	this.selectItem(0);
	if (isMultiple)
		this.selectOneMore(1);
}
Slider.prototype.selectOneMore = function(index)
{
	if (this.__lastSelectedIndex != -1)
		$(this.__currentSlides[this.__lastSelectedIndex]).removeClass("current");
	this.__lastSelectedIndex = this.__selectedIndex;
	this.selectItem(index);
	$(this.__currentSlides[this.__lastSelectedIndex]).addClass("current");
}
Slider.prototype.setNextButtons = function(selector)
{
	var self = this;
	$(selector).click(function(){ self.selectNext(); });
}
Slider.prototype.setPrevButtons = function(selector)
{
	var self = this;
	$(selector).click(function(){ self.selectPrev(); });
}
Slider.prototype.selectNext = function()
{
	var nextIndex = this.__selectedIndex + 1;
	if (nextIndex < this.__slides.length)
		this.selectItem(nextIndex)
}
Slider.prototype.selectPrev = function()
{
	var nextIndex = this.__selectedIndex - 1;
	if (nextIndex >= 0)
		this.selectItem(nextIndex)
}
Slider.prototype.selectItem = function(index)
{
	var i;
	if (this.__selectedIndex != -1)
	{
		$(this.__infoBlocks[this.__selectedIndex]).removeClass("current");
		$(this.__buttons[this.__selectedIndex]).removeClass("current");
		$(this.__currentSlides[this.__selectedIndex]).removeClass("current");
		i = this.__activeSlides.length - 1;
		while (i >= 0)
		{
			this.__activeSlides[i].removeClass("active");
			i--;
		}
	}
	this.__selectedIndex = index;
	$(this.__infoBlocks[index]).addClass("current");
	$(this.__buttons[index]).addClass("current");
	$(this.__currentSlides[index]).addClass("current");
	this.__activeSlides = [];
	var j = 0, i = 0;
	while (i < this.__activeCount)
	{
		var nextIndex =  1 + index + j;
		if (nextIndex == this.__lastSelectedIndex)
		{
			j++;
			nextIndex++;
		}
		if (nextIndex < this.__slides.length)
		{
			this.__activeSlides.push
				($(this.__slides[nextIndex]).addClass("active"));
		}
		else
		{
			this.__activeSlides.push
				($(this.__fakeSlides[nextIndex - this.__slides.length]).addClass("active"));
		}
		i++;
		j++;
	}
}
var SearchEngine = function(searchClass)
{
	var self = this;
	$("input." + searchClass).keyup(function(){ self.search($(this).val()); })
	this.__list = $("div." + searchClass + " .value-holder");
	this.__nothingMessage = $("div." + searchClass + " .nothing-message").hide();
}
SearchEngine.prototype.search = function(needle)
{
	var nothing = true;
	this.__list.each
	(function(){
		if ($(this).text().toLowerCase().indexOf(needle.toLowerCase()) != -1)
		{
			$(this).show();
			nothing = false;
		}
		else $(this).hide();
	});
	nothing ? this.__nothingMessage.show() : this.__nothingMessage.hide();
}

