 jQuery.fn.extend({
   check: function() {
     return this.each(function() { this.checked = true; });
   },
   uncheck: function() {
     return this.each(function() { this.checked = false; });
   }
 });

var Modules = {
initialize: function() 
    {
        Modules.items = [        
            {type: "text", callFunction: Modules.loadTextBlocks, callback: Modules.onLoadedTextBlocks,
		            action: "PAGE", container: "#mainText1", id: 3},
            {type: "text", callFunction: Modules.loadTextBlocks, callback: Modules.onLoadedTextBlocks,
                    action: "PAGE", container: "#mainText2", id: 4},
            {type: "menuAndText", callFunction: Modules.loadTextBlocks, callback: Modules.onLoadedMenuBlocks,			            
        	        action: "OFFER", id: "ALL", menuContainer: "#offerMenu", contentContainer_1: "#offerContent_1", 
                    contentContainer_2: "#offerContent_2", randomContainer: "#mainOffer"},                
	        {type: "poll", callFunction: Modules.loadTextBlocks, callback: Modules.onPollsLoaded, 
	                action: "POLL", id: "ALL", container: "#mainPoll"},	       
            {type: "menuAndText", callFunction: Modules.loadTextBlocks, callback: Modules.onLoadedMenuBlocks, 
		            action: "INTERESTING", id: "ALL", menuContainer: "#interestMenu", contentContainer_1: "#interestContent", 
			        linkMaster: "#nextLink", photoContainer: "#interestPhoto"},
            {type: "text", callFunction: Modules.loadTextBlocks, callback: Modules.onLoadedTextBlocks,
        	        action: "PAGE", container: "#menuText", id: 33},
            {type: "menu", callFunction: Modules.loadMenuBlocks, callback: Modules.onLoadedFoodBlocks, 
		            action: "MENU", id: "ALL", menuContainer: "#menuList", itemsContainer_1: "#menuItems", 
			        itemsContainer_2: "#menuAdditional", imageContainer: "#menuImage", calcContainer: "#menuCalcList",
			        priceContainer: "#overallCost", linkContainer: "#calcLink", titleContainer: "#menuTitle",
			        additionalContainer: "#additionalItems", addPhotoContainer: "#bigPhoto", foodContainer: "#foodContainer",
			        deliveryBox: "#deliveryBox"},        	        
            {type: "text", callFunction: Modules.loadTextBlocks, callback: Modules.onLoadedTextBlocks,        	        
                    action: "PAGE", container: "#addressText", id: 34},
	        {type: "address", callFunction: Modules.loadTextBlocks, callback: Modules.onAddressLoaded, 
		        action: "ADDRESS", id: "ALL", addressContainer: "#addressContainer", mapContainer: "#mapContainer",
			        addressLayer: "#addressLayer", layerMap: "#addressMapL", layerList: "#addressListL", layerText: "#addressTextL",
			        rstLayer: "#rstLayer", rstList: "#addressListR", rstText: "#rstText", rstGallery: "#rstGallery", rstPopup: "#rstPopup"},	        
            {type: "text", callFunction: Modules.loadTextBlocks, callback: Modules.onLoadedTextBlocks,                	
	                action: "PAGE", container: "#feedBackText", id: 36}
        ];
        
	    Modules.interestData = [];
	    Modules.offerData = [];
	    Modules.selectedItemList = [];
	    Modules.menuData = [];
	    Modules.itemsList = [];
	    Modules.blockItems = [];
	    Modules.deliveryItems = [];
	    Modules.currentInterest = 0;
	    Modules.currentOfferIndex = 0;
	    Modules.loadBlockIndex = 0;
	    Modules.currMenuCategory = null;
	    Modules.currInterestItem = null;
	    Modules.currOffer = null;
	    Modules.curMenuElem = null;
	    Modules.curAddress = null;
       
        Modules.startLoadBlock(Modules.loadBlockIndex);    
    },
    startLoadBlock: function(index)
    {
        if(Modules.loadBlockIndex >= Modules.items.length)
            return;
   	    Modules.items[index].callFunction(Modules.items[index]);
    },
    loadTextBlocks: function(item)
    {
        var params = {'TYPE': item.action, "ID": item.id};
        Modules.getData(params, item, item.callback);
    },
    getData: function(params, elem, callback)
    {
        var tp = (elem.type == "address")? "" : "json";    
	$.post("/bitrix/templates/main/service/load_json.php", params, function(data){callback(elem, data)}, tp);
    },	
    onLoadedTextBlocks: function(elem, data)
    {              
        Modules.startLoadBlock(++Modules.loadBlockIndex);    
        
	    if(data == "ERROR")                                       	
	        $(elem.container).html("<p>Во время загрузки произошла ошибка. Попробуйте обновить страницу.</p>");
	    else if(data[0]["0"] != undefined && $(elem.container) != null)	
	        $(elem.container).html(data[0]["0"]["PREVIEW_TEXT"]);
    },
    onLoadedMenuBlocks: function(elem, data)
    {
        Modules.startLoadBlock(++Modules.loadBlockIndex);
        
 	    if(data=="ERROR")
	    {	
	        $(elem.contentContainer_1).html("<p>Во время загрузки произошла ошибка. Попробуйте обновить страницу.</p>");
	        if($(elem.randomContainer).html() != null)
	            $(elem.randomContainer).html("<p>Во время загрузки произошла ошибка. Попробуйте обновить страницу.</p>");
	        else
		    $(elem.photoContainer).empty();	
	        return;		
            }

	    var data = data[0];
    	
	    if(data["0"] != undefined && $(elem.menuContainer) != null)	
	    {	    

	        var ul = $(elem.menuContainer);
	        var isFirst = true;	
   	        var isInterest = (elem.linkMaster != undefined)? true : false;
    	        var menuData = (isInterest)? Modules.interestData : Modules.offerData;
	        for(var key in data)
	        {
		    var li = $("<li></li>").appendTo(ul);
		    var a = $("<a href=''>"+data[key]["NAME"]+"</a>").appendTo(li);
		    a.attr("name", menuData.length);

		    menuData.push({name: data[key]["NAME"], text1: data[key]["PREVIEW_TEXT"], text2: data[key]["DETAIL_TEXT"], isInterest: isInterest, image: data[key]["PREVIEW_PICTURE"]});
		    if(data[key]["PROPERTY_ADD_OFFER_VALUE"] != undefined)
		    menuData[menuData.length-1].description = data[key]["PROPERTY_ADD_OFFER_VALUE"]["TEXT"];

		    if(isFirst)
		    {
 		        Modules.addItem(elem, menuData[0]);
 		        isFirst = false;
		        if(!isInterest)			
		            Modules.setActiveElement("offer", li);
		        else
		            Modules.setActiveElement("interest", li);
		    }                                   		
    	
		    a.click(function(){
			    var i = parseInt($(this).attr("name"));
			    if(isInterest)
			    {			
			        Modules.currentInterest = i;
		  	        Modules.setActiveElement("interest", $(this).parent());
			    }
			    else
			    {
			        Modules.currentOfferIndex = i;
		  	        Modules.setActiveElement("offer", $(this).parent());
                	    }
			    Modules.addItem(elem, menuData[i]);
			    return false;	
		    });
	        }	    	
	        if(!isInterest)   	    
 	        {
		    var rand = menuData.length;
		    if(rand != 0)
		    {
  		        var d = (Math.round(Math.random()*(rand-1)));
		        if(elem.randomContainer != undefined)	
        	    	    Modules.showRandomOffer(elem.randomContainer, menuData[d]);
		    }
	        }

	        if(elem.linkMaster != undefined)
	        {
		    $(elem.linkMaster).click(function(){
			    var k = Modules.currentInterest+1;
			    if(k == menuData.length)
				    k=0;		
		            Modules.currentInterest = k;
			    Modules.addItem(elem, menuData[k]);
			    return false;	
		    });
	        }
	    }
    },
    addItem: function(elem, menuData)
    {
	    $(elem.contentContainer_1).empty();

	    if(elem.linkMaster != undefined)
	    {
	        $("<h2><big>"+menuData.name+"</big></h2>").appendTo($(elem.contentContainer_1));
	        $("<div class='text'>"+menuData.text1+"</div>").appendTo($(elem.contentContainer_1));
	        $(elem.photoContainer).html("<img src='"+menuData.image+"' alt=''/>");
	    }
	    else
	    {
	        $("<h1>"+menuData.name+"</h1>").appendTo($(elem.contentContainer_1));
	        $("<div class='text'>"+menuData.text1+"</div>").appendTo($(elem.contentContainer_1));
	        $(elem.contentContainer_2).html(menuData.text2);
	    }
    },
    showRandomOffer: function(container, data)
    {
	    if(data != undefined)
		    $(container).html("<h3>"+data.name+"</h3><div class='text' onclick='navToPage(5, true)' style='cursor: pointer;'>"+data.description+"</div>");	
    },
    addFeedback: function(button, id)
    {
	    var name = $("#feedNameField").val();
	    var text = $("#"+id+" textarea").val();
	    var email = $("#feedMailField").val();

	    $("#"+id+" p").empty();
	    var re = /^\s*$/;

	    if(re.test(text) || re.test(name) || name == "Имя" || text == "Комментарий")
		    $("#"+id+" p").html("Пожалуйста, заполните все поля!");
	    else
	    {
		    $(button).attr("disabled", "disabled");
		    $("#"+id).html('<img src="img/preload2.gif" alt=""/>');
		    Modules.send(name, text, email, $("#"+id));
	    }
    },
    send: function(name, text, email, elem)
    {
	    var params={ "IBLOCK_ID": 5, "NAME" : "Отзыв от: "+name, "PREVIEW_TEXT" : text, 'PROPERTY_VALUES[feed_name]' : name, 'PROPERTY_VALUES[feed_email]' : email };
	    $.post("/bitrix/templates/main/service/add_json.php", params, function(data){
		    if(data=="ERROR")
			    elem.html("<p>При отправке произошла ошибка! Попробуйте повторить попытку позднее.</p>")
		    else
			    elem.html("<h6>Ваше сообщение отправлено. Спасибо!</h6>")
	    }, "json");
    },
    loadMenuBlocks: function(item)
    {
	    var params = {'TYPE': "MENU", "ID": "ALL" };
	    Modules.getData(params, item, item.callback);
    },
    onLoadedFoodBlocks: function(elem, data)
    {
	    $(elem.deliveryBox).uncheck();

            Modules.startLoadBlock(++Modules.loadBlockIndex);
	    if(data=="ERROR")
            {
	        $(elem.menuContainer).html("<li>Во время загрузки произошла ошибка. Попробуйте обновить страницу.</li>");
	        return;		
            }

	    for(var key in data[0])
 	        Modules.menuData.push(data[0][key]);

	    var count = Math.ceil(Modules.menuData.length/2);
            $(elem.linkContainer).css({"display":"none"});

	    $(elem.menuContainer).empty();
	    $(elem.itemsContainer_1).empty();

            var ul = $("<ul></ul>").appendTo($(elem.menuContainer));
            var ul2 = $("<ul></ul>").appendTo($(elem.menuContainer));

	    var len = Modules.menuData.length;
	    for(var i=0; i<len; i++)
	    {
	        var parent = (i<count)? ul : ul2;
	        var li = $("<li></li>");
	        var a = $("<a href=''>"+Modules.menuData[i]["NAME"]+"</a>");
	        a.attr("name", Modules.menuData[i]["ID"]);
	        a.attr("title", Modules.menuData[i]["NAME"]);
	        a.attr("elem", i);									  
  	        a.appendTo(li);
   	        li.appendTo(parent);
                a.click(function(){
		    $(elem.foodContainer).empty();
		    Modules.loadFoodItems(elem, this);
		    Modules.setActiveElement("menu", $(this).parent());
		    Modules.setTitle(elem.titleContainer, $(this).attr("title"));
		    return false;
		    });
	    }
	    $(elem.deliveryBox).click(function(){
		    if($(elem.deliveryBox).attr("checked"))
		        Modules.setDelivery(Modules.deliveryItems, elem, true);
		    else
		        Modules.setDelivery(Modules.deliveryItems, elem, false);
	    });
    },
    setDelivery: function(items, elem, mode)
    {
	    $(elem.priceContainer).empty();

	    for(var i=0; i<items.length; i++)
	    {
	        var classD = (mode)? "deliv" : "";
	        $(items[i].iLink).attr({"class":classD});
	        if(mode)		
	    	    $(items[i].iField).attr({"disabled":"disabled"});
	        else	
	    	    $(items[i].iField).removeAttr("disabled");

	        if($("#"+$(items[i].iLink).attr("calcId")).html() == null)
		    continue;	

                var index = parseInt($(items[i].iLink).attr("elem"))-1; 
	        Modules.itemsList[index].selected = (mode)? false : true;

	        var vis = (mode || !Modules.itemsList[index].selected)? "none" : "block";	    	
	        $("#"+$(items[i].iLink).attr("calcId")).css({"display":vis});
	    }
    },
    setTitle: function(container, title)
    {
	    var titleText = (title == "Лапша")? ("<b>"+title + "</b><span>в любом сочетании на ваш выбор</span>") : (title == "Десерт")? ("<b>"+title + "</b><span>соус к десерту на ваш выбор</span>"): ("<b>"+title+"</b>");
	    $(container).html(titleText);
    },	
    setActiveElement: function(type, elem)
    {
        if(type == "menu")
        { 
            if(Modules.currMenuCategory != null)
	        $(Modules.currMenuCategory).attr("class", "");
            Modules.currMenuCategory = elem;
            $(Modules.currMenuCategory).attr("class", "active");	
        }
        if(type == "interest")
        {
            if(Modules.currInterestItem != null)
	        $(Modules.currInterestItem).attr("class", "");
            Modules.currInterestItem = elem;
            $(Modules.currInterestItem).attr("class", "active");	
        }
        if(type == "offer")
        {
            if(Modules.curOffer != null)
	        $(Modules.curOffer).attr("class", "");
            Modules.curOffer = elem;
            $(Modules.curOffer).attr("class", "active");	
        }
    },
    loadFoodItems: function(elem, linkA)
    {  
	    var items = Modules.menuData[parseInt($(linkA).attr("elem"))]["ITEMS"];
	    var id = Modules.menuData[parseInt($(linkA).attr("elem"))]["ID"];

	    var bg = (parseInt(id) == 16)? "../img/block3Bg5_2.jpg" : "../img/block3Bg5.jpg";
            $(".plate").css({"background": "url('"+bg+"') no-repeat left bottom"}); 
    	       
            var len1 = Modules.blockItems.length;	
            for(var j=0; j<len1; j++)
	        Modules.blockItems[j].css({"display":"none"});			

	    if($("#itemsList_"+$(linkA).attr("elem")).html() != null)
	    {
	        $("#itemsList_"+$(linkA).attr("elem")).css({"display":"block"});		
	        if(items != undefined && parseInt(id)!=16)
		    $("#itemsList_"+$(linkA).attr("elem")+" li").attr("class","");
	        else if(items != undefined)	
		    $("#itemsList_"+$(linkA).attr("elem")+" em").attr("class","");

	        var bg = (parseInt(id) == 16)? "../img/block3Bg5_2.jpg" : "../img/block3Bg5.jpg";
                $(".plate").css({"background": "url('"+bg+"') no-repeat left bottom"}); 

	        return;
	    }
            
            if(parseInt(id)!=16)
		    var ul = $("<ul id='itemsList_"+$(linkA).attr("elem")+"'></ul>").appendTo($(elem.itemsContainer_1));
	    else
		    var ul = $("<p id='itemsList_"+$(linkA).attr("elem")+"'></p>").appendTo($(elem.itemsContainer_1));

	    Modules.blockItems.push(ul);

	    if(items == undefined)
	    {
	        $(ul).html("<li>В данной категории нет элементов</li>");
	        return;
	    }
    
            var noAddit = false;

	    for(var key in items)
	    { 	   
	        if(items[key]["NAME"] == undefined)
		    continue;

 	        var additional = items[key]["ADDITIONAL"];

	        Modules.itemsList.push({name: items[key]["NAME"], price: items[key]["UF_COST"],
		    count: 1, selected: false, additional: additional, visible: true, photo: items[key]["PICTURE"]});
    	
	        if(parseInt(id)!=16)
	    	    var div = $("<li id='div_"+ Modules.itemsList.length +"'></li>").appendTo(ul);
	        else
	    	    var div = $("<em id='div_"+ Modules.itemsList.length +"'></em>").appendTo(ul);	

	        var input = $("<input type='checkbox' />").appendTo(div);
	        if(parseInt(id)==16)
	        {	
		    ul.attr({"class":"drinks"});
		    input.check();
	        }             

	        if(additional == undefined)
		    $("<b>"+ items[key]["UF_COST"] +"</b>").appendTo(div);

		noAddit = (additional == undefined)? true : false;
     
	        input.attr("item", Modules.itemsList.length);

	        var itemLink = $("<a href=''>"+items[key]["NAME"]+"</a>").appendTo(div);
	        itemLink.attr("pElem", $(linkA).attr("elem"));
	        itemLink.attr("elem", Modules.itemsList.length);
 	        itemLink.attr("calcId", "item_"+Modules.itemsList.length);		
	        itemLink.attr("pId", id);
                if(items[key]["UF_DELIVERY"] == "0")		
		    Modules.deliveryItems.push({iLink: itemLink, iField: input});
		
	        itemLink.click(function(){  	        
                    $(".plate").css({"background": "url('../img/block3Bg5_2.jpg') no-repeat left bottom"}); 

		    var elm = $(this).attr("elem");
		    var addit = Modules.itemsList[parseInt(elm)-1].additional;
		    Modules.elemClick(this, addit, elem);
     
		    if($("#div_"+elm+" input").attr("checked") && !$(elem.deliveryBox).attr("checked"))
		        $("#itemsList2_"+elm+" input").removeAttr("disabled");

		    if(Modules.itemsList[parseInt(elm)-1].photo != "")
			    $(elem.foodContainer).html("<img id='photo_"+elm+"' src='"+Modules.itemsList[parseInt(elm)-1].photo+"' alt='' />");
		    else
			    $(elem.foodContainer).empty();
		    return false;	
		    });
	        if(Modules.itemsList.length == 1)
		    Modules.curMenuElem = itemLink;

	        input.click(function(){
                    $(".plate").css({"background": "url('../img/block3Bg5_2.jpg') no-repeat left bottom"}); 
		    var attrib = $(this).attr("item");
		    var list = $("#itemsList2_"+attrib+" li input[@type=checkbox]");
		    var curItem = $("#item_"+attrib);
		    var addit = Modules.itemsList[parseInt(attrib)-1].additional;
		    if($(this).attr("checked"))
		    {
		        var iLink = $("#div_"+attrib+" a");
		        Modules.elemClick(iLink, addit, elem);

		        $("#itemsList2_"+attrib+" input").removeAttr("disabled");

		        if(Modules.itemsList[parseInt(attrib)-1].photo != "")
			    $(elem.foodContainer).html("<img id='photo_"+attrib+"' src='"+Modules.itemsList[parseInt(attrib)-1].photo+"' alt='' />");

 		        if(curItem.html() != null)
		        {
		            var i = parseInt(attrib)-1;
			    Modules.itemsList[i].selected = true;
			    curItem.css({"display":"block"});
			    $("#item_"+attrib+" input").attr("checked","checked").removeAttr("disabled").val(1);

			    var li2 = $("#item_"+attrib+" li");
			    var li2Len = li2.length;
			    for(var t=0; t<li2Len; t++)	
		    	        Modules.itemsList[parseInt($(li2[t]).attr("index"))-1].selected = Modules.itemsList[parseInt($(li2[t]).attr("index"))-1].visible;
	                }	
		        else
		        {
			    Modules.itemsList[parseInt(attrib)-1].selected = true;
		    	    var itemDiv = $("<li></li>");
		    	    itemDiv.attr("id", "item_"+attrib);
		    	    var field = $("<input type='checkbox' checked='checked' />").appendTo(itemDiv);
		    	    field.attr("count", attrib);
		    	    $("<span>"+Modules.itemsList[parseInt(attrib)-1].name+"</span>").appendTo(itemDiv);
		    	    itemDiv.appendTo($(elem.calcContainer));
		    	    var smallT = $("<small></small>").appendTo(itemDiv);
		    	    var countField = $("<input type='text' value='1'/>").appendTo(smallT);
			    if(addit != undefined)
				    countField.css({"display":"none"});

		    	    Modules.itemsList[parseInt(attrib)-1].countField = countField;
    		    	
			    field.click(function(){
				    var k = parseInt($(this).attr("count"))-1;
			            Modules.itemsList[k].selected = ($(this).attr("checked"))? true : false;
				    $(elem.priceContainer).empty();

				    var li = $("#item_"+attrib+" li");
				    var liLen = li.length;
				    var box = $("#item_"+attrib+" li input[@type=checkbox]");

				    for(var p=0; p<liLen; p++)	
				        if(!$(this).attr("checked"))	
			    	    	    Modules.itemsList[parseInt($(li[p]).attr("index"))-1].selected = false;
    				
				    if($(this).attr("checked"))
				        box.removeAttr("disabled");
				    else
				    {
				        box.attr("disabled", "disabled");
				        box.uncheck();
				    }	
		            });
		        }
		        $(elem.linkContainer).css({"display":"block"});
 		        if($("#item_"+attrib+" ul").html() == null)
			    $("<ul></ul>").appendTo($("#item_"+attrib));
		    }      			
		    else 
		    {
		        var bg = (parseInt(id) == 16)? "../img/block3Bg5_2.jpg" : "../img/block3Bg5.jpg";
	                $(".plate").css({"background": "url('"+bg+"') no-repeat left bottom"}); 
                        $(elem.foodContainer).empty();
		        if($("#photo_"+attrib).html() != null)
			    $("#photo_"+attrib).remove();

       		        list.attr("disabled", "disabled");

		        var li3 = $("#item_"+attrib+" li");
		        var li3Len = li3.length;	
                        
		        for(var q=0; q<li3Len; q++)	
		            Modules.itemsList[parseInt($(li3[q]).attr("index"))-1].selected = false;
    			
		        if(curItem != null)
		        {
		            var i = parseInt(attrib)-1;
			    Modules.itemsList[i].selected = false;
			    curItem.css({"display":"none"});
		        }                           
		    }
		    $(elem.priceContainer).empty();
	            $(elem.calcContainer).scrollTop(2000);
	        });
	    }

	    if(parseInt(id) != 1 && noAddit)
	    {	
		ul.css({"height":"310px", "position":"absolute"});
		$(elem.itemsContainer_2).css({"height":"0px"});
	    }	    	

	    if($(elem.deliveryBox).attr("checked"))
	        Modules.setDelivery(Modules.deliveryItems, elem, true);
    	
	    $(elem.linkContainer).empty();
	    var calcLink = $("<a href=''>Посчитать <span>&#8594;</span></a>").appendTo($(elem.linkContainer));
	    var resetLink = $("<a href=''>Очистить заказ <span style='left: 107px;'>&#8594;</span></a>").appendTo($(elem.linkContainer));

	    calcLink.click(function(){
	        var sum = 0;
	        var len = Modules.itemsList.length;
	        for(var i=0; i<len; i++)	
	        {	
	            var cost = (isNaN(parseInt(Modules.itemsList[i].price)))? 0 : parseInt($(Modules.itemsList[i].countField).val())*parseInt(Modules.itemsList[i].price);
		    if(Modules.itemsList[i].selected)
		        sum += cost;
	        }
	        $(elem.priceContainer).empty();
	        if(sum==0)	
	            $("<div>Пожалуйста, сделайте выбор из меню.</div>").appendTo($(elem.priceContainer));	
	        else
	            $("<div style='float: left;'>Общая стоимость: <big>"+sum+" <font style='font-size:11px;'>руб.</font></big></div>").appendTo($(elem.priceContainer));	
		return false;
	    });	
	    resetLink.click(function(){
	        var len = Modules.itemsList.length;
	        for(var i=0; i<len; i++)	
	        {	
		    Modules.itemsList[i].selected = false;
	        }
	        $(elem.itemsContainer_1 + " input").uncheck();
	        $(elem.itemsContainer_2 + " input").uncheck();
	        $(elem.additionalContainer + " input").uncheck();
	        $(elem.calcContainer).empty();
	        $(elem.priceContainer).empty();
		return false;
	    });
    }, 
    elemClick: function(itemLink, additional, elm)
    {
	    var pElem = $(itemLink).attr("pElem");
	    var elem = $(itemLink).attr("elem");
	    var parent = $(itemLink).parent();
	    var container = elm.additionalContainer;

	    for(var j=0; j<Modules.blockItems.length; j++)
	        Modules.blockItems[j].css({"display":"none"});

	    $("#itemsList_"+pElem).css({"display":"block"});
	    Modules.curMenuElem.attr("class", "");
	    Modules.curMenuElem = $(parent);
	    Modules.curMenuElem.attr("class", "active");

	    if(Modules.itemsList[parseInt(elem)-1].photo != "")
		    $("#foodContainer").html("<img src='"+Modules.itemsList[parseInt(elem)-1].photo+"' alt='' />");
	    else
		    $("#foodContainer").empty();


	    if($("#itemsList2_"+elem).html() != null)
	    {
	        $("#itemsList2_"+elem).css({"display":"block"});
	        if($(elm.deliveryBox).attr("checked"))
	    	    Modules.setDelivery(Modules.deliveryItems, elm, true);

	        return;
	    }
	    var ul2 = $("<ul id='itemsList2_"+elem+"'></ul>").appendTo($(container));
	    Modules.blockItems.push(ul2);
	    Modules.showAdditional(itemLink, additional, ul2, elm);
    },
    showAdditional: function(itemLink, additional, container, elem)
    {        
	    if(additional == undefined)
	    {
	        var div = $("<li></li>");
	        div.appendTo(container);
	        return;
	    }
	    var pId = parseInt($(itemLink).attr("pId"));
	
	    if(pId==16)
	        container.attr("class", "drinksAdd");
	    for(var key in additional)
	    {
	        if(additional[key]["NAME"] == undefined)
		    continue;

	        Modules.itemsList.push({name: additional[key]["NAME"], price: additional[key]["PROPERTY_COST_VALUE"],
		    count: 1, selected: false, visible: true});

                var len = Modules.itemsList.length; 		
	        var div2 = $("<li></li>").appendTo(container);
	        var input2 = $("<input type='checkbox' />").appendTo(div2);
	        input2.attr("index", len);
	        input2.attr("item", Modules.itemsList.length);

	        if(pId!=16)	
            	    input2.attr("disabled", "disabled");
        
 	        input2.click(function(){
		    var index = $(this).attr("index");
	            $(elem.linkContainer).css({"display":"block"});
		    if($(this).attr("checked"))
		    {
  		        Modules.itemsList[parseInt(index)-1].selected = true;
		        Modules.itemsList[parseInt($(this).attr("index"))-1].visible = true;

	                if(Modules.itemsList[parseInt(index)-1].bigPhoto != "")
		            $(elem.foodContainer).html("<img id='photo_"+index+"' src='"+Modules.itemsList[parseInt(index)-1].bigPhoto+"' alt='' />");
		        else if(pId!=16)
			    $(elem.foodContainer).empty();	

		        if($("#calcAdd_"+index).html() != null)
		        {
			    $("#calcAdd_"+index).css({"display":"block"});
			    return;
		        }

		        if($("#"+$(itemLink).attr("calcId")).html() != null || parseInt($(itemLink).attr("pId"))==16)
		        {
			    var parent;
			    if(pId==16)
			        parent = $(elem.calcContainer);	
			    else
			        parent = $("#"+$(itemLink).attr("calcId")+" ul");
			    var add = Modules.itemsList[parseInt($(this).attr("index"))-1];
			    var li = $("<li id=calcAdd_"+index+"></li>").appendTo(parent);
			    var field = $("<input type='checkbox'/>").appendTo(li);
		  	    field.check();
			    field.attr("count", index);
			    field.click(function(){
			        var k = parseInt($(this).attr("count"))-1;
			        Modules.itemsList[k].selected = ($(this).attr("checked"))? true : false ;
			        $(elem.priceContainer).empty();		                                 
			    });
			    $("<span>"+add.name+"</span>").appendTo(li);
	    		    li.attr("index", parseInt(index));	
			    var countField = $("<input type='text' value='1'/>");	
			    var smallT = $("<small></small>").appendTo(li);
			    countField.appendTo(smallT);
	    	            Modules.itemsList[parseInt(index)-1].countField = countField;
                        }			
		    }
		    else
		    {
		        var bg = (pId == 16)? "../img/block3Bg5_2.jpg" : "../img/block3Bg5.jpg";
	                $(".plate").css({"background": "url('"+bg+"') no-repeat left bottom"});
	                if(pId != 16)
	                    $(elem.foodContainer).empty();
		        Modules.itemsList[parseInt($(this).attr("index"))-1].selected = false;
		        Modules.itemsList[parseInt($(this).attr("index"))-1].visible = false;

		        if($("#calcAdd_"+$(this).attr("index")).html() != null)
			    $("#calcAdd_"+$(this).attr("index")).css({"display":"none"});
		    }
	            $(elem.calcContainer).scrollTop(2000);
	        });
		            	
	        var cost = (isNaN(parseInt(additional[key]["PROPERTY_COST_VALUE"])))? 0 : additional[key]["PROPERTY_COST_VALUE"]; 	
	        $("<small>"+cost+"</small>").appendTo(div2);
	        var addLink = $("<a href=''>"+additional[key]["NAME"]+"</a>").appendTo(div2);

	        if(additional[key]["PROPERTY_PRODUCER_VALUE"] != "")
	    	    $("<font>/"+additional[key]["PROPERTY_PRODUCER_VALUE"]+"</font>").appendTo(addLink);	
	        if(additional[key]["PROPERTY_VOLUME_VALUE"] != "")
	    	    $("<font>/"+additional[key]["PROPERTY_VOLUME_VALUE"]+"</font>").appendTo(addLink);	

	        if(parseInt($(itemLink).attr("pId"))==1)
		    addLink.attr("title", "Пожалуйста, сначала выберите лапшу");
	        if(parseInt($(itemLink).attr("pId"))==26)
		    addLink.attr("title", "Пожалуйста, сначала выберите закуску");

     	        Modules.itemsList[parseInt(Modules.itemsList.length)-1].bigPhoto = additional[key]["DETAIL_PICTURE"];
	        addLink.attr("index", Modules.itemsList.length);
	        addLink.attr("elem", Modules.itemsList.length);
 	        addLink.attr("calcId", "calcAdd_"+Modules.itemsList.length);

	    	    addLink.click(function(){
	                $(".plate").css({"background": "url('../img/block3Bg5_2.jpg') no-repeat left bottom"}); 
		        if(Modules.itemsList[parseInt($(this).attr("index"))-1].bigPhoto != "")	
		    	    $(elem.foodContainer).html("<img id='photo_"+$(this).attr("index")+"' src='"+Modules.itemsList[parseInt($(this).attr("index"))-1].bigPhoto+"' alt='' />");
		        else if(pId!=16)
			    $(elem.foodContainer).empty();
			return false;	
        	    });
                if(additional[key]["PROPERTY_DELIVERY_VALUE"] == "Нет")  
		    Modules.deliveryItems.push({iLink: addLink, iField: input2});
	    } 
	    if($(elem.deliveryBox).attr("checked"))
	        Modules.setDelivery(Modules.deliveryItems, elem, true);
    },
    onPollsLoaded: function(elem, data)
    {
        Modules.startLoadBlock(++Modules.loadBlockIndex);
	    if(data=="ERROR")
            {
	        $(elem.container).html("<div><div>В настоящий момент активных опросов нет.</div></div>");
  	        return;
            }
	    var arr = [];
	    var now = new Date();

	    for(var key in data[0])	
	        arr.push(data[0][key]);
    	
	    var rand = arr.length;
	    if(rand != 0)
	    {
	        var d = (Math.round(Math.random()*(rand-1)));
	        var poll = arr[d];

	        if(poll["USER_ALREADY_VOTE"] == "Y")
		    Modules.getPollResult(elem, poll["ID"]);
	        else		
	            Modules.loadRandomPoll(elem, poll);
	    }
    },
    loadRandomPoll: function(elem, poll)
    {
	    if($(elem.container) == null || poll == undefined)
		    return;
    	
	    var answer = "";
	    var answerList = [];
	    $(elem.container).empty();

	    var pollId = poll["ID"].toString();
	    $("<strong>"+poll["NAME"]+"</strong>").appendTo($(elem.container));
	    var div = $("<div></div>").appendTo($(elem.container));
	    var div2 = $("<div></div>").appendTo(div);

	    for(var key in poll["ANSWERS"])		
	    {
	        var answer = poll["ANSWERS"][key]["ID"];
                var field = $("<input type='radio' name='poll'/>").appendTo(div2);
	        field.attr("answer", answerList.length)
	        answerList.push(answer);
	        $("<span>"+poll["ANSWERS"][key]["NAME"]+"<br/></span>").appendTo(div2);
	        field.click(function(e){
		    var id = parseFloat($(this).attr("answer"));
		    answer = answerList[id];
		    });
	        answer="";
	    } 
	    var em = $("<em></em>").appendTo(div2);
	    var button = $("<a href=''>Голосовать</a>").appendTo(em);
	    button.click(function(){
		    if(answer == "")
		    {
		        if($("#pollErr") != null)
			    $("#pollErr").remove();
		        $("<b id='pollErr'>Пожалуйста, выберите вариант ответа!</b>").appendTo(div2);
		    }
		    else
		    {
		       $(elem.container).empty();
		       $(elem.container).html("<div><div>Ваш голос принят. Спасибо!</div></div>");
		       var poll={"IBLOCK_ID": 6, "ID_SECTION" : pollId, "ID_ANSWERS[]" : [answer]};
		       $.post("/bitrix/templates/main/service/add_vote_json.php", poll, function(data){Modules.getPollResult(elem, pollId);}, "json");
		    }
		    return false;	
	    });
    },
    getPollResult: function(elem, id)
    {
        var params = {'TYPE': "POLL", "ID": id};
	    $.post("/bitrix/templates/main/service/load_json.php", params, function(data){Modules.showPollResult(elem, data)}, "json");
    },
    showPollResult: function(elem, data)
    {
	    if(data == "ERROR")
  	        $(elem.container).html("<div><div>При голосовании произошла ошибка! Попробуйте повторить позднее.</div></div>");
	    else	
	    {   
	        $(elem.container).empty();
	        $("<strong><em>Результаты опроса:</em> "+data[0]["0"]["NAME"]+"</strong>").appendTo($(elem.container));	

	        var div = $("<div></div>").appendTo($(elem.container));
	        var div2 = $("<div></div>").appendTo(div);

  	        var answs = data[0]["0"]["ANSWERS"];
	        var count = parseInt(data[0]["0"]["COUNT"]);
 	        var w = 120;
 	        var h = 4;	

 	        for(var key in answs)
	        {	
	            var counter = (answs[key]["SHOW_COUNTER"] == "")? 0 : parseInt(answs[key]["SHOW_COUNTER"]);
	            var votecount = (parseInt(count) == 0)? 0 : Math.round((counter/count)*100);
		        var nw = (parseInt(count) == 0)? 1 : Math.round((parseInt(answs[key]["SHOW_COUNTER"])/count)*w);
	            var graph = "<img src='img/blank.gif' width='"+nw+"px' height='"+h+"px'/>";
		        $("<span class='answer'><small>"+votecount+"%</small>"+answs[key]["NAME"]+graph+"</span>").appendTo(div2);
            }
	    }
    },
    onAddressLoaded: function(elem, data)
    {
        Modules.startLoadBlock(++Modules.loadBlockIndex);
	    var data = eval("("+data+")");

	    if(data=="ERROR")
            {
	        $(elem.addressContainer).html("<p>Во время загрузки произошла ошибка. Попробуйте обновить страницу.</p>");
  	        return;
            }

  	    var container = $(elem.addressContainer);
	    container.empty();

	    for(var key in data[0])	
	    {
	        var div = $("<div></div>").appendTo(container);
	        var a = $("<a href='' onclick='return false;'>"+data[0][key]["NAME"]+"</a>").appendTo(div);
	        $("<span>"+data[0][key]["UF_ADDRESS"]+"</span>").appendTo(a);

	        var x = data[0][key]["UF_COOR_X"];
	        var y = data[0][key]["UF_COOR_Y"];

	        var image = $("<img src='"+data[0][key]["PICTURE"]+"' alt=''/>").appendTo($(elem.mapContainer));
	        image.css({"top":y+"px", "left":x+"px"});

	        image.attr("key", key);
	        a.attr("key", key);

	        image.click(function(){
		    Modules.showAddress($(this).attr("key"), data[0], elem);
		    });

	        a.click(function(){
		    Modules.showAddress($(this).attr("key"), data[0], elem);
		    return false;	
		    });
	    }
    },
    showAddress: function(k, d, elem)
    {
	    var data = d[k];
	    var container = $(elem.addressLayer);
    	
	    $(container).css({"visibility":"visible"});
	    $(elem.layerList).empty();

	    for(var key in d)	
	    {
		if(key == k)
		{
	            var div = $("<div></div>").appendTo($(elem.layerList));
		    var a = $("<a href='' onclick='return false;'>"+d[key]["NAME"]+"</a>").appendTo(div);
		    $("<span>"+d[key]["UF_ADDRESS"]+"</span>").appendTo(a);
  	            a.attr("key",key);
		    Modules.activeAddress(a);
		}
	        /*a.click(function(){
		    return false;
		    Modules.activeAddress($(this));	
		    Modules.loadActive(d[key], elem, key);
		    });*/
	    }          
	    Modules.loadActive(data, elem, k);
	    return false;
    },
    loadActive: function(data, elem, k)
    {
	    $(elem.layerMap).empty(); 

	    $(elem.layerText).html(data["DESCRIPTION"]);

	    var pic = data["DETAIL_PICTURE"];
	    $(elem.layerMap).css({"background": "url('"+pic+"') no-repeat left top"});

	    if(data["RESTAURANT"] == undefined)
			return;

	    var restaurant = data["RESTAURANT"];

	    var x = parseInt(restaurant["UF_COOR_X"]);
	    var y = parseInt(restaurant["UF_COOR_Y"]);

	    if(x==null || y==null)
		return;

	    var img = $("<img src='/img/restoran.png' alt='' />").appendTo($(elem.layerMap));
	    if(jQuery.browser.msie)
	    {
       	        var w, h;
                w = img.width(), h = img.height();
       	        img.attr("src", "/img/blank.gif");
                img.width(w), img.height(h);
       	        img.css({"filter": "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='/img/restoran.png', SizingMethod='scale');"});
	    }

	    img.css({"left": x+"px", "top": y+"px"});
	    $(elem.rstPopup).css({"left": (x-100)+"px", "top": (y-100)+"px"});

	    img.click(function(){
		    Modules.showRestaurantInfo(data, elem);
	    });
	    img.mouseover(function(){
		    $(elem.rstPopup+" em").html("<img src='"+data["RESTAURANT"]["PICTURE"]+"' alt='' />");
		    $(elem.rstPopup).css({"visibility":"visible"});

		    $(this).mouseout(function(){
			    $(elem.rstPopup).css({"visibility":"hidden"});
		    });
	    });	
    },
    activeAddress: function(elem)
    {
	    if(Modules.curAddress != null)
		    Modules.curAddress.attr("class","");

	    Modules.curAddress = elem;
	    Modules.curAddress.attr("class","active");
    },
    showRestaurantInfo: function(data, elem)
        {           	
	    $(elem.addressLayer).css({"visibility":"hidden"});
	    $(elem.rstLayer).css({"visibility":"visible"});
	    $(elem.rstList).empty();

	    var div = $("<div></div>").appendTo($(elem.rstList));
            var a = $("<a class='active' href='' onclick='return false;'>"+data["NAME"]+"</a>").appendTo(div);
	    $("<span>"+data["UF_ADDRESS"]+"</span>").appendTo(a);

	    $(elem.rstText).html(data["RESTAURANT"]["DESCRIPTION"]);
	    if(data["RESTAURANT"]["GALLERY"] != undefined)
		    Modules.showGallery(data["RESTAURANT"]["GALLERY"], elem);
    },
    showGallery: function(gallery, elem)
    {
	    var container = $(elem.rstGallery+" div");
	    container.empty();

	    var arr = [];
	    for(var key in gallery)
	        arr.push(gallery[key]);
	    var len = arr.length;

	    var table = $("<table></table>").appendTo(container);
	    var tr = $("<tr></tr>").appendTo(table);

	    for(var i=0; i<len; i++)
	    {
	        var td = $("<td></td>").appendTo(tr);

	        var img = $("<img src='"+arr[i]["PREVIEW_PICTURE"]+"' alt='"+arr[i]["NAME"]+"' />").appendTo(td);
	        img.attr("index",i);
	        img.click(function(){
		        var ind = $(this).attr("index");
		        Modules.showBigPhoto(arr[ind], elem);
		    });            	
	        if(i==0)
		    Modules.showBigPhoto(arr[i], elem);
	    }
    },
    showBigPhoto: function(photo, elem)
    {
	    $(elem.rstGallery+" span").html("<img src='"+photo["PREVIEW_PICTURE"]+"' alt='"+photo["NAME"]+"' />");
    }			
}                               