var _images = ["/images/plus.png", "/images/minus.png"];
	var gotime = _images.length;
	$.each(_images,function(e) {
		$(new Image()).attr('src',this);
	});

var moreimgPR;
moreimgPR=$(document.createElement('img')).attr('src', 'images/plus.gif').css('cursor',"pointer").attr('alt','Добавить к заказу').attr('title','Добавить к заказу');
var lessimgPR;
lessimgPR=$(document.createElement('img')).attr('src', 'images/minus.gif').css('cursor',"pointer");
	
/* 
 * encapsulate - позволяет добавлять к функциям пост и пред - обрабочики
 * deepExtend - применяет extend к вложенным объектам
 * appendArray - доабавляет массив к узлу DOM
 */
var order = undefined;
var dis = undefined;
(function($){
	$.encapsulate = function(func, beforeFunc, afterFunc){
		if(typeof(func) != 'function'){
			func = function(){};
		}
		var _func = func;
		func = function(){
			var args = '';
			if(arguments.length > 0){
				for(var i = 0; i < arguments.length; i++){
					args += 'arguments["' + i + '"],'; 
				}
				args = args.substr(0, args.length - 1);
			}
			
			if(typeof(beforeFunc) == 'function'){
				eval('beforeFunc(' + args + ');');
			}
			eval('_func(' + args + ');');
			if(typeof(afterFunc) == 'function'){
				eval('afterFunc(' + args + ');');
			}
		};
		
		return func;
	};

	$.deepExtend = function(var1, var2){
		if(!var2){
			return var1;
		}
		
		if( typeof(var1) != 'object' && typeof(var2) != 'object'){
			return var2 ? var2 : var1;
		}
		
		if(typeof(var2) != 'object'){
			return var1;
		}
		
		var objects = {};
		for(var i in var1){
			objects[i] = var2[i] ? $.deepExtend(var1[i], var2[i]) : var1[i];
		}
		var res = $.extend(var1, var2);
		for(var i in objects){
			res[i] = objects[i];
		}
		return res;
	};	
	
	/**
	 * @param {Array} values массив узлов DOM для вставки
	 * @param {Object} separator
	 * @param {Object} leftBorder
	 * @param {Object} rightBorder
	 */
	$.fn.appendArray = function(values, separator, leftBorder, rightBorder, skipBordersIfOnly){
		return $(this).each(function(){
			var me = $(this);

			if(leftBorder && !skipBordersIfOnly){
				me.append(leftBorder);	
			}
			
			for(var i = 0; i < values.length; i++){
				me.append(values[i]);
				if(i < values.length - 1){
					me.append(separator);	
				}
			}
			
			if(rightBorder && (!skipBordersIfOnly && values.length == 1)){
				me.append(rightBorder);	
			}
			
		});
	};
}(jQuery));

/* validateAjaxForm - ajaxForm с валидацией*/
(function($){
	$.fn.validateAjaxForm = function(options){
		var _startTransaction = false;
		var opts = {
			validation: {},
			ajaxForm: {}
		};
		$.deepExtend(opts, options);
		
		$(this).each(function(){
			var me = $(this); 
			
			if (!options.ajaxForm.notDisableForm) {
				var inputs = me.find(':input:not([disabled])');
				var enableForm = function(){
					inputs.removeAttr('disabled');
					me.css('opacity', 1);
				};
				opts.ajaxForm.success = $.encapsulate(opts.ajaxForm.success, null, enableForm);
				opts.ajaxForm.error = $.encapsulate(opts.ajaxForm.error, null, enableForm);
			};
			me.validate(opts.validation);
			
			var events = me.data("events");
			var handlers = [];
			if(events){
				for(var ev in events['submit']){
					handlers.push(events['submit'][ev]);
				}
			}
			
			me.unbind('submit');
			var beforeSubmit = function(){
				for(var i in handlers){
					if(!handlers[i]()){
						return false;
					}
				}
				if(!options.ajaxForm.notDisableForm){
					inputs.attr('disabled', 'disabled');
					me.css('opacity', 0.3);
				}
				//_startTransaction = true;
				return true;
			};
			
			var _beforeSubmit = opts.ajaxForm.beforeSubmit;
			if(typeof(_beforeSubmit) == 'function'){
				opts.ajaxForm.beforeSubmit = function(){
					return(_beforeSubmit() && 	beforeSubmit());
				}
			}else{
				opts.ajaxForm.beforeSubmit = function(){
					return beforeSubmit();
				}
			}
			me.ajaxForm(opts.ajaxForm);	
		});
	}
}(jQuery));

/* beautifullModal - simpleModal c эффектами*/
(function($){
	$.fn.beautifullModal = function(options){
		var onOpen = function(dialog){
			var _tmp = $(document.createElement('div')).css('display', 'none').attr('id', 'simplemodal-container').addClass('simplemodal-container').append($(document.createElement('div')).addClass('simplemodal-data').html(dialog.data.html()));
			
			$('body').append(_tmp);
			var height = _tmp.height();
			var width = _tmp.width();
			_tmp.empty().remove();
			delete _tmp;
			
			opts.additionalHeight = parseInt(opts.additionalHeight);
			opts.additionalWidth = parseInt(opts.additionalWidth);
			
			var vertPadding = parseInt(dialog.container.css('padding-top').replace(/px|em|%/, '')) +
			parseInt(dialog.container.css('padding-bottom').replace(/px|em|%/, ''));
			
			if (isNaN(vertPadding)) {
				vertPadding = 0;
			}
			
			var horizontPadding = parseInt(dialog.container.css('padding-left').replace(/px|em|%/, '')) +
			parseInt(dialog.container.css('padding-right').replace(/px|em|%/, ''));
			if (isNaN(horizontPadding)) {
				horizontPadding = 0;
			}
			
			// Фикс высоты и ширины контейнера
			var w = $(window);
			var top = w.height() && height ? Math.round((w.height() - height - opts.additionalHeight - vertPadding) / 2) : 60;
			if(top>1000)top=60;//Special for Opera. Opera must die!!!
			var left = w.width() && width ? Math.round((w.width() - width - opts.additionalWidth - horizontPadding) / 2) : 100;
			
			dialog.container.css('height', (height ? height + opts.additionalHeight : 350) + 'px');
			dialog.container.css('width', (width ? width + opts.additionalWidth : 650) + 'px');
			
			dialog.container.css('top', top + 'px');
			dialog.container.css('left', left + 'px');
			
			// Красявшности
			dialog.overlay.fadeIn('slow', function(){
				dialog.container.slideDown('slow', function(){
					dialog.data.fadeIn('slow');
				});
			});
		};
		
		var onClose = function(dialog){
			dialog.data.fadeOut('slow', function(){
				dialog.container.slideUp('slow', function(){
					dialog.container.empty();
					dialog.overlay.fadeOut('slow', function(){
						$.modal.close();
					});
				});
			});
		}
		
		var opts = {
			additionalWidth: 180,
			additionalHeight: 0
		};
		$.extend(opts, options);
		opts.onOpen = $.encapsulate(onOpen, null, opts.onOpen);
		opts.onClose = $.encapsulate(onClose, null, opts.onClose);
		return $(this).modal(opts);
	}
}(jQuery));

/* menu -  меню с разделами и калькулятором */
(function($)
{
	var isFreeFods=false;
	var Order = function(options)
	{
		if(!options){
			options = {};
		}
		this.title = options.title ? options.title : 'Ваш заказ';
		this.totalCount = options.totalCount ? options.totalCount : 'Итого:';
		this.text = options.text ? options.text :
			'<p>Проверьте, пожалуйста, правильность введенных данных</p>'+
			'<p>Если данные верны,&nbsp;&mdash; нажмите кнопку &laquo;Заказать&raquo;</p>';
		this.items = options.items instanceof Array ? options.items : [];
		this.currency = options.currency ? options.currency : 'руб.';
	
		
		this.addItem = function(name, count, price){
			this.items.push({name: name, count: count, price: price});
		};
		
		this.Clear = function(){
			this.items=[];
		};
		
		this.SetDiscount = function(discount){
			this.discount=discount;
		};
		this.ClearDiscount = function(){
			this.discount = undefined
		};
		this.GetDiscount = function(){
			return this.discount;
		};
		
		
		this.removeItem = function(name){
			for(var i in this.items){
				if(this.items.name == name){
					this.items.splice(i, 1);
				}
			}
		};
		
		this.toString = function()
		{
			if(!(this.items instanceof Array)){
				this.items = [];
			}
			var total = 0;
			var res = '<h2>' + this.title + '</h2>';
			res += '<div class="OrderText">' + this.text + '</div>';
			res += '<div class="OrderSpace">' +
			'<div class="OrderItems"><table>'+
			'<tr><th>Название</th><th>Количество</th><th>Стоимость</th></tr>';
			for(var i in this.items)
			{
				var itemTotal = parseInt(this.items[i].count) * parseFloat(this.items[i].price);
				res += '<tr><td class="Col1">' + this.items[i].name + '</td>'+
				'<td class="Col2">' + this.items[i].count + '</td>' +
				'<td class="Col3">' + itemTotal + '</td></tr>';
				
				if(!itemTotal)
				{
					isFreeFods=true;
				}
				
				total += itemTotal;
			}
		
			res += '</table>';
			res +='</div>';
			
			if (this.discount !=undefined)
			{
				discount=Math.round( total/100* this.discount.discountAmmount);
				total-=discount;
				res += '<div class="OrderTotalPrice">Скидка ' + discount + this.currency +'</div>';
			}
			res += '<div class="OrderTotal">' + this.totalCount ;
			res +='<span class="OrderTotalPrice">' +total + '</span> ' ;
			res +=this.currency + '</div>';

			res +='</div>';
			
			return '<div class="Order">' + res + '</div>'
                + '<div class="orderFormContainer" style="float:left;padding-right:20px;"></div>';
/*                + '<span class="IpodAction" style="display: block;float: left;width: 220px;">'
                + '<a href="http://kazan.edaki.ru/blog/page/apple-ipod-nano/" target="_blank" style="color: #CC0000;display: block;padding-left: 36px;">Участвуй в акции,<br /> выиграй<br /> IPod Touch 8GB, 4 gen!</a>'
                + '<a href="http://kazan.edaki.ru/blog/page/apple-ipod-nano/" target="_blank" ><img src="http://kazan.edaki.ru/images/ipod.jpg" width="220px" border="0" /></a></span>';*/
		};
	};

	
	/*---------------------------------------------------------------------------*/
	$.fn.menu = function(options)
	{
	/* Основные функции */
	var createCalc;
	var initCalc;
	var createTabs;
		
	var sortPartitions;	
	var processPartition;	
	var processMenus;
	var processMenu;
	var processPortionPrices;
		
	/* Перменные, используемые в замыканиях */
	var _this;
	var _foods;
	var _calc;
	var _calcEmpty = true;
	var _defaults = {
		menus: {
			name: 'Меню'
		},
		partitions: {
			name: 'Прочее'	
		},
		
		drinkMaps: {
			name: 'Карта бара'
		}
	};
	var opts = 
	{
		currency: 'руб.',
		url: '/make_order.php', // На продакшене должно быть /make_order.php
		tabs: {
			on: true,
			menuTabsTitle: '',
			partitionTabsTitle: ''
		},
		
		titles: {
			col1: 'Наименование',
			col2: 'Порции',
			col3: 'Цена (руб)'
		},
		order:
		{
			successMessage: '<h2>Спасибо за заказ</h2><p>Менеджер перезвонит вам в течение нескольких минут</p>',
			errorMessage: '<h2>Произошла ошибка</h2><p>К сожалению, во время выполнения операции произошла ошибка, ваш заказ не был обработан</p>',
			form: '',
			submitText: 'Заказать',
			cancelText: 'Отмена',
			
			onOpen: function(container, form)
			{
				var onChange = function()
				{
					
					if(isFreeFods)
					{
						$.jGrowl("Бесплатное блюдо можно заказать только с доставкой" ,{life:1000});						
						return false;
					}
					
					var addr = container.find('#order_address');
					
					if(!this.checked)
					{
						addr.removeAttr('disabled');
						if(addr.html() == 'Не нужно заполнять')
						{
							addr.empty();
						}
					}else
					{
						addr.attr('disabled', 'disabled');
						if(!addr.html()){
							addr.html('Не нужно заполнять');
						}
					}
				};
				
				var rightNowChange = function()
				{
					var now = new Date();
					var hours = now.getHours().toString();
					var minutes = now.getMinutes().toString();
					
					if(hours.length < 2)
					{
			            hours = '0' + hours; 
								}
								
								if(minutes.length < 2){
			            minutes = '0' + minutes; 
			        }
								now =  hours + ":" + minutes;
			        if($(this).attr('checked'))
			        {
			            $('#order_time1').val(now).attr('disabled',  'disabled');
			        }
			        else
			        {
			            $('#order_time1').val(now).removeAttr('disabled');
			        }
				};
				container.find('#order_no_delivery').click(onChange).change(onChange);
				container.find('#order_right_now').click(rightNowChange).change(rightNowChange);
			},
			
			rules:{
				order_client_name: {
					required: true
				},
				order_client_phone: {
					required: true
				},
				order_address: {
					required: true
				},
				order_time1: {
					required: true
				}
			},
			messages:{
				order_client_name: {
					required: 'Ваше имя?'
				},
				order_client_phone: {
					required: 'Номер телефона?'
				},
				order_address: {
					required: 'Куда доставить?'
				},
				order_time1: {
					required: 'Когда доставить заказ?'
				}
			}
		},
		calc:
		{
			placeHolder: '',
			defaultText: 'Кликните на пункт меню или порцию, чтобы добавить блюдо к заказу',
			title: 'Ваш счет',
			total: 'Итого:',
            discountCoupon : 'Купон' ,
            discountLbl : 'Скидка' , 
			col1: 'Название',
			col2: 'Количество',
			col3: 'Цена (руб)',
			lessButton: '&larr;',
			discounts: null,
			moreButton: '&rarr;',
			onLoad: function(){},
			onInit: function(){},
			onReset: function(){},
			submitButton: null,
			cancelButton: null
		},
		separator: '<span class="Separator">/</span>',
		onLoad: function(){},
		menus: []
	};
	
	/**
	 * Основные функции
	 */
	processMenus = function(menus){
		for(var i in menus){
			var menu = processMenu(menus[i]);
			_this.append(menu);	
		}
	};
	
	sortPartitions = function(items){
		var partitions = {};
		var pName;
		for(var i in items){
			pName = items[i]['partition'];
			if(!pName){
				pName = 'noname';	
			}
			
			if(!partitions[pName]){
				partitions[pName] = [];
			}
			partitions[pName].push(items[i]);
		}
		return partitions;
	};
	
	processPortionPrices = function(name, portions, prices, ignore){
		var toReturn = {
			portions: [],
			prices: []
		}
		
		_foods[name] = [];
		
		for(var i in portions){
			toReturn.portions.push($(document.createElement(ignore ? 'span' :'a')).
				attr('href', 'javascript: void(0)').html(portions[i])
			);

			toReturn.prices.push($(document.createElement('span')).
				addClass('Col3').html(prices[i])
			);
			
			_foods[name].push({
				portion: portions[i] ? portions[i] : 'portion',
				price: prices[i]
			})
		}
		return toReturn;
	};
	
	processPartition = function(partition){
		var toReturn = [];
		for (var j in partition) {
			if (!partition[j].prices || partition[j].prices.length == 0) {
				partition[j].prices = [];
				partition[j].portions = [];
			}
			else {
				if (partition[j].prices.length == 1 &&
				(!partition[j].portions || partition[j].portions.length == 0)) {
					partition[j].portions = [''];
				}
			}
			var ignoreCalc = false;
			if (!partition[j].prices || partition[j].prices.length == 0) {
				ignoreCalc = true;
				partition[j].prices = [];
				partition[j].portions = [];
			}
			
			var wrongPriceCount = false;
			if (partition[j].prices.length != partition[j].portions.length) 
			{
				//throw "Не совпадает количество порций и цен в разделе " + partition[j]['name'];	
				wrongPriceCount = true;
				ignoreCalc = true;
			}
			
			var __pp = processPortionPrices(partition[j]['name'], partition[j]['portions'], partition[j]['prices'], ignoreCalc);
			
			var bindCouple = partition[j]['prices'].length > 1;
			
			var tr = $(document.createElement('tr')).addClass('MenuItem');
			var tdTitle = $(document.createElement('td')).addClass('Col1');
			var tdWeight = $(document.createElement('td')).addClass('Col2');
			var tdPrice = $(document.createElement('td')).addClass('Col3');
			
			tdTitle.attr({'width':'50%'})
			
			if(ignoreCalc){
				tdTitle.addClass('ItemCalcIgnore');
				tdWeight.addClass('ItemCalcIgnore');
				tdPrice.addClass('ItemCalcIgnore');
			}
			
			tr.append(tdTitle).append(tdWeight).append(tdPrice);
			
			toReturn.push(tr);
			if (partition[j]['description'] || partition[j]['photo']) {
				var decrHtml = partition[j]['description'];
				if(partition[j]['photo']) decrHtml = "<img src='/dm_pics/thumbs/"+partition[j]['photo']+"'>" + decrHtml;
				var tr = $(document.createElement('tr')).addClass('MenuDescription').append($(document.createElement('td')).attr('colspan', 3).html(decrHtml));
				toReturn.push(tr);
			}
			
			// binding...
			//var spanTitle = $(document.createElement((ignoreCalc || partition[j].portions.length > 1) ? 'span' : 'a')).html(partition[j]['name']);
			var spanTitle = $(document.createElement('a')).html(partition[j]['name']);
			
			if (!ignoreCalc) {
				spanTitle.attr('href', 'javascript:void(0)');
			}
			/*anc=partition[j]['name'].replace(' ','').replace('—','').replace('-','').replace('&nbsp;','').
			  replace('&mdash;','');*/
			spanTitle.attr('name',partition[j]['name']);
			var portions = __pp.portions;
			var prices = __pp.prices;
			
			var titlePlaceHolder = $(document.createElement('span')).addClass('Wrapper').append(spanTitle);
			//var moreimg=$(document.createElement('img')).attr('src', 'images/plus.png').css('cursor',"pointer").attr('alt','Добавить к заказу').attr('title','Добавить к заказу');
			//var lessimg=$(document.createElement('img')).attr('src', 'images/minus.png').css('display','none');
			var moreimg=$(moreimgPR).clone();
			titlePlaceHolder.append(' ');
			titlePlaceHolder.append(moreimg);		
			tdTitle.append(titlePlaceHolder);
			
			if (portions.length > 0) {
				var spanPortions = $(document.createElement('span')).addClass('Wrapper');
				spanPortions.appendArray(portions, opts.separator);
				tdWeight.append(spanPortions)
			}
			
			if (prices.length > 0 && !wrongPriceCount) {
				var spanPrices = $(document.createElement('span')).addClass('ItemPrices');
				spanPrices.appendArray(prices, opts.separator);
				tdPrice.append(spanPrices).append($(document.createElement('span')).addClass('Wrapper').append(spanPrices).append(' ').append(opts.currency));
			}
			
			var addCalc = function(name, portion, price)
			{
			
				var isFree=false;
				for (var i in _calc.foods)
				{
					if (_calc.foods[i]) 
					{
						if(!(parseFloat(_calc.foods[i]['price'])))
						{
							isFree=true;
						}
					}
				}
					
				if(isFree&&(!parseFloat(price)))
				{
					$.jGrowl("Можно добавить только одно бесплатное блюдо" ,{life:1000});
				}
				else
				{
					$.jGrowl("Блюдо <b>"+name+"</b> добавлено к заказу" ,{life:1000});
		
					var _name;
					if (portion && portion != 'portion') {
						_name = name +
						' (' +
						portion +
						')';
					}
					else {
						_name = name;
					}
					_calc.addFood(_name, price);
				}
			};
			var __name = partition[j]['name'];
			
			if (!ignoreCalc) {
				if (!bindCouple) 
				{
					(function(name){
						var _portion;
						var _price;
						for (var i in _foods[name]) 
						{
							_portion = _foods[name][i].portion;
							_price = _foods[name][i].price;
						}
						
						moreimg.click(function()
						{
							addCalc(name, _portion, _price);
						});
						
						spanTitle.click(function()
						{
							addCalc(name, _portion, _price);
						});
						
					}(__name));
				}
				else
				{
					moreimg.click(function(){
							alert('Для того чтобы заказать данное блюдо, необходимо кликнуть на необходимую Вам порцию!');
					});
					spanTitle.click(function(){
							alert('Для того чтобы заказать данное блюдо, необходимо кликнуть на необходимую Вам порцию!');
					});
				}
			}
			
			if (!ignoreCalc) {
				for (var i in portions) {
					(function(name)
					{
						portions[i].click(function(){
							var portion = $(this).html();
							var price = 0;
							for (var i in _foods[name]) {
								if (_foods[name][i].portion == portion) {
									price = _foods[name][i].price;
								}
							}
							addCalc(name, portion, price);
							
						});
					}(__name));
				}
			}
		}
		return toReturn;
	}

	processMenu = function(menu){
		if(!menu['name']){
			menu['name'] = _defaults['menus']['name'];
		}
		var menuWrapper = $(document.createElement('div')).addClass('MenuWrapper').append(
			$(document.createElement('h2')).html(menu['name'])
		);
		
		var partitions = sortPartitions(menu['items']);
		
		var _index = 1;
		
		for(var i in partitions){
			if(partitions.length < 1){
				continue;
			}

			var partitionWrapper = $(document.createElement('div')).
				addClass('Partition');//.attr('id', 'Partition' + (_index++));
			
			var partitionName = i;
			if(i == 'noname'){
				partitionName = _defaults['partitions']['name'];
			}
		
			var pNameH = $(document.createElement('h3')).html(partitionName);
			partitionWrapper.append(pNameH);	
			
			var menuTable = $(document.createElement('table'));
			var tHeaders = $(document.createElement('tr')).addClass('MenuTitles');
			tHeaders.append($(document.createElement('th')).html(opts.titles.col1).addClass('Col1') );
			tHeaders.append($(document.createElement('th')).html(opts.titles.col2).addClass('Col2') );
			tHeaders.append($(document.createElement('th')).html(opts.titles.col3).addClass('Col3') );
			
			menuTable.append(tHeaders);
			partitionWrapper.append(menuTable);
			menuWrapper.append(partitionWrapper);
			
			var t1 = new Date();
			var trArray = processPartition(partitions[i]);
			for(var j in trArray){
				menuTable.append(trArray[j]);
			}
		}
		return menuWrapper;
	};

    
	createCalc = function(){
		if(opts.menus.length == 0) return;
		var wrapper = $(document.createElement('div')).addClass('Calc');
		var header = $(document.createElement('div')).addClass('CalcHeader').
			html(opts['calc']['title'])
		
		var items = $(document.createElement('div')).addClass('CalcItems').append(
			$(document.createElement('div')).addClass('CalcMessage').
			html(opts['calc']['defaultText'])
		);
        
        
		var footer = $(document.createElement('div')).addClass('CalcFooter');
        
		wrapper.append(header).append(items).append(footer);
		
		var tmp;
		if (tmp = opts.calc.placeHolder) {
			$(tmp).append(wrapper);
		}else{
			_this.before(wrapper);	
		}
		_calc = wrapper;
		
		_calc.initialized = false;
		_calc.foods = {}
		_calc.items = items;
        
        
        _calc.currentCouponCode = null;
        _calc.applyCoupon = function(){
            _calc.currentCouponCode = document.getElementById('couponCodeInp').value; 
            _calc.changeTotalCount( );
        } ;
		
        
        if( typeof opts['calc']['discounts'] == 'object' )
//        for( var i=0; i < opts['calc']['discounts'].length ; i++ ) {
         for( var discount in opts['calc']['discounts'] ) {
          if( opts['calc']['discounts'][discount].code ){
		    var discountCoupon = $('<div class="CalcFoterControlsWrapper"><label for="id1">' + opts['calc']['discountCoupon'] + ':</label><input type="text" style="width:110px;" id="couponCodeInp" /> <input type="button" value="ok" id="calcBtnCouponApply" size="5" />&nbsp;</div>');         
            footer.append(discountCoupon);
            $('#calcBtnCouponApply').click( _calc.applyCoupon );
            if( opts['calc']['autoDiscountCode'] ){
                $('#couponCodeInp').attr('value' , opts['calc']['autoDiscountCode'] );
                _calc.currentCouponCode = opts['calc']['autoDiscountCode'] ;
                // $('#calcBtnCouponApply').click();
            }
            break;
         }
        }
        
		if(typeof(opts.calc.onLoad) == 'function'){
			opts.calc.onLoad();
		}
		
		// Основная
		_calc.reset = function(){
			/*
			_calc.remove();
			createCalc();
			opts.calc.onReset();
			*/
			_calc.children().unbind();
			$(_calc.get(0)).remove();
			delete _calc;
			
			createCalc();
			opts.calc.onReset();
		};
		       
		_calc.addFood = function(name, price)
		{
			initCalc();
			_calcEmpty = false;
			if (!_calc.foods[name]) 
			{
				var count = $(document.createElement('span')).html(1);
				//333
				var lessimg=$(lessimgPR).clone();
				var less = $(document.createElement('a')).attr('href', 'javascript: void(0)').append(lessimg).addClass('Less');
					
				
				var moreimg=$(moreimgPR).clone();
				var more = $(document.createElement('a')).attr('href', 'javascript: void(0)').
					append(moreimg).addClass('More');
				
				
				less.click(function(){
					_calc.decFood(name);
				});
				
				more.click(function(){
					_calc.incFood(name);
				});
				
				var tr = $(document.createElement('tr'));
				var td1 = $(document.createElement('td')).addClass('Col1');
				
				
				var td2 = $(document.createElement('td')).addClass('Col2').
					append(less).append(count).append(more) ;
				var td3 = $(document.createElement('td')).addClass('Col3');
				
				td1.html(name);
				
				td3.html(price);
				
				_calc.items.append(tr.append(td1).append(td2).append(td3));
				
				_calc.foods[name] = {
					count: 1,
					price: price,
					titlePlaceHolder: count,
					pricePlaceHolder: td3
				};
				_calc.changeItemCount(name);
				
			}
			else
			{
				_calc.incFood(name);
			};
		
		
				if(~~$(_calc.items).height()>200)
				{
					$('.CalcItems').css('height','200px');
					$('.CalcItems').css('overflow-x','hidden').css('overflow-y','scroll');
					
				}

			
		};
		
		_calc.changeItemCount = function(name)
		{
			
			var nprice=(_calc.foods[name]['count'] * _calc.foods[name]['price']);
			
			_calc.foods[name]['titlePlaceHolder'].html(_calc.foods[name]['count']);
			
			
			if(!nprice)
				_calc.foods[name]['pricePlaceHolder'].html('0');
			else
				_calc.foods[name]['pricePlaceHolder'].html(nprice);
			_calc.changeTotalCount( );
	    }; 
        
        _calc.changeTotalCount = function( ){

			var totalCount = 0;
			var nullFlag = false;
			for(var i in _calc.foods){
				// Если удаляли
				if (_calc.foods[i]) {
					totalCount += _calc.foods[i]['count'] * _calc.foods[i]['price'];
				}
			}
			/*
			if(totalCount == 0){
				_calcEmpty = true;
			}
			*/
            
            var maxD = 0;
            var dis = undefined;
			for (var idx in opts.calc.discounts) {
                if( _calc.currentCouponCode && opts.calc.discounts[idx].code.toLowerCase().indexOf( _calc.currentCouponCode.toLowerCase() ) >= 0 ){
                    // coupon 
                    if (opts.calc.discounts[idx].discountAmmount >= maxD) {
                        maxD = opts.calc.discounts[idx].discountAmmount;
                        dis = opts.calc.discounts[idx];
			            order.SetDiscount(dis);
                    }
                }
			    switch (opts.calc.discounts[idx].type) {
			    case 
                    //41586 : // test
                     39070: // production
                    // by time
			        var DO = new Date();
			        var CurrentTime = new Date(1970, 0, 0, DO.getHours(), DO.getMinutes(), 0, 0);
			        var startParsedarray = opts.calc.discounts[idx].timeStart.split(":", 3);
			        var startTime = new Date(1970, 0, 0, startParsedarray[0], startParsedarray[1], 0, 0);

			        var endParsedarray = opts.calc.discounts[idx].timeEnd.split(":", 3);
			        var endTime = new Date(1970, 0, 0, endParsedarray[0], endParsedarray[1], 0, 0);
			        if (opts.calc.discounts[idx].discountAmmount >= maxD) {
			            if (CurrentTime.getTime() >= startTime.getTime() && CurrentTime.getTime() <= endTime.getTime()) {
			                maxD = opts.calc.discounts[idx].discountAmmount;
			                dis = opts.calc.discounts[idx];
			                order.SetDiscount(dis);
			            }
			        }
			        break;


			    case 
                    //41588 : // test 
                     39071: // production
                    // by time 
                    
			        if (opts.calc.discounts[idx].discountAmmount >= maxD) {
			            if (totalCount > opts.calc.discounts[idx].sum) {
			                maxD = opts.calc.discounts[idx].discountAmmount;
			                dis = opts.calc.discounts[idx];
			                order.SetDiscount(dis);
			            }
						/*else
							{
								
								order.ClearDiscount();
								 dis = undefined;
							}*/
			        }
						if (typeof console == "object")
						{
							console.log(dis);
							console.log(order.GetDiscount());
							console.log(totalCount);
							
							
						}
			        break;
			    default:
			    	  // order.ClearDiscount();
			        break;
			    }
			}
            
            for (var idx in opts.calc.discounts) {
			    //if (opts.calc.discounts[idx].__DocID != dis.__DocID) {
			        $("#discount" + opts.calc.discounts[idx].__DocID).html('&mdash;');
			    //}
			}
            
			if (dis != undefined) {
				skidka = Math.round(totalCount / 100 * dis.discountAmmount);
			    $("#discount" + dis.__DocID).html(skidka + ' ' + opts.currency);
			    totalCount -= skidka;
                
                _calc.discountPercentPlaceHolder.html( dis.discountAmmount );
                _calc.discountCashPlaceHolder.html( skidka );
                _calc.discountPlaceHolder.css('display' , 'block');
			} 
			else
			{
                _calc.discountPlaceHolder.css('display' , 'none');
			}
            
            if( _calc.totalPlaceHolder )
            {
            	if(!totalCount)
            	{
            		_calc.totalPlaceHolder.html('0');
            	}
            	else
            	{
            		_calc.totalPlaceHolder.html(totalCount);
            	}                
            }
		}
		
		_calc.incFood = function(name)
		{
			if(_calc.foods[name]['price']<=0)
			{
				$.jGrowl("Можно добавить только одно бесплатное блюдо" ,{life:1000});
				return false;
			}
			if(_calc.foods[name]['count']){
				_calc.foods[name]['count']++ ;	
				_calc.changeItemCount(name);
				return true;
			}else{
				return false;
			}
		}
		
		_calc.removeFood = function(name)
		{
			_calc.foods[name]['count'] = 0;
			_calc.changeItemCount(name);
			
			if(!_calcEmpty)
			{
				var tr = _calc.foods[name]['titlePlaceHolder'].parents('tr');
				tr.children().unbind();
				tr.remove();
				_calc.foods[name] = null;
			}
			else
			{
				_calc.reset();
			}
			
			
				if(~~$(_calc.items).height()<200)
				{
					$('.CalcItems').css('height','auto').css('overflow-y','hidden').css('overflow-x','hidden');
				} 
		}
		
		_calc.decFood = function(name)
		{
			if (_calc.foods[name]['count']) 
			{
				if(_calc.foods[name]['count'] > 1)
				{
					_calc.foods[name]['count']--;
					_calc.changeItemCount(name);
					return true;
				}
				else
				{
					return _calc.removeFood(name);
				}
			}
			else
			{
				// TODO: что это?
			}
		}
		
	};
	
	initCalc = function()
	{
		
		if (!_calc.initialized) 
		{
			order = new Order();
			var tr = $(document.createElement('tr')).append($(document.createElement('th')).html('Название').addClass('Col1').html(opts['calc']['col1'])).append($(document.createElement('th')).html('Количество').addClass('Col2').html(opts['calc']['col2'])).append($(document.createElement('th')).html('Цена').addClass('Col3').html(opts['calc']['col3'])).addClass('OrderHeader');
			
			var itemTable = $(document.createElement('table'));
			$('#calcTable').empty();
			
			$(_calc).find('.CalcMessage').remove();
			
			itemTable.attr('id','calcTable');
			
			//_calc.items.empty();
			//console.log(_calc.items);
			
			_calc.items.prepend(itemTable);
			
			_calc.items = itemTable;
			_calc.items.append(tr);
			_calc.initialized = true;
			
			var submitButton = opts.calc.submitButton ? opts.calc.submitButton : 
				$(document.createElement('input')).attr('type', 'button').val('Оформить заказ');
			
			var showMessage = function(target, message, containerClass, resetCalc)
			{
				if(!resetCalc)
				{
					$.jGrowl(message,{life:1000});
					$(".OrderText").html(message);
				}
				else
				{
					target.fadeOut('slow', function()
					{
						target.empty();
							target.append($(document.createElement('div')).
								addClass(containerClass).append(message)
							);
							target.fadeIn('slow', function(){
								setTimeout(	function(){
									$.modal.close();
									if(resetCalc) _calc.reset()
								},2000);
							})
					});
				}
			};
			
			submitButton.click(function()
			{
				var postParams = new PostParams();
				postParams.foods = [];
				postParams.total = 0;
				order.Clear();
				counter=0;
				for (var i in _calc.foods)
				{
					if (_calc.foods[i]) {
						order.addItem(i, _calc.foods[i]['count'], _calc.foods[i]['price']);
						postParams.foods.push({
							name: i,
							count: _calc.foods[i]['count'],
							price: _calc.foods[i]['price']
						});
						postParams.total += parseFloat(_calc.foods[i]['price']) * parseInt(_calc.foods[i]['count']);
						
					}
					counter++;
				}
				if (counter==0)
					return false;
                
                var dis = order.GetDiscount();
				if(typeof(dis)!='undefined')
				{
					postParams.total-=postParams.total/100*dis.discountAmmount;
					postParams.discount = dis.discountAmmount;
					postParams.discountName = dis.name;
				}
				submitButton.attr('disabled', 'disabled');
				
				var _submitButton = $(document.createElement('input')).attr('type', 'submit').val(opts.order.submitText);
				var _cancelButton = $(document.createElement('input')).attr('type', 'button').attr("id","closeBtn").val(opts.order.cancelText);
				
				var orderForm;
				if($(opts.order.form).is('form')){
					orderForm = $(opts.order.form);
					orderForm.attr('action', opts.url);
					orderForm.attr('method', 'post');
				}else{
					orderForm = $(document.createElement('form'));
					orderForm.attr('name', 'OrderForm');
					orderForm.attr('action', opts.url);
					orderForm.attr('id', 'OrderForm');
					orderForm.attr('method', 'post');
					orderForm.append(opts.order.form);
				};
			
				/*_cancelButton.bind('click', function()
							{
								alert("close");
								$.modal.close();
							});*/

				orderForm.append(
					$(document.createElement('div')).addClass('OrderButtons').append(_submitButton).append(_cancelButton)
				);
				
				var modalDialog = $(document.createElement('div')).append($(order.toString()));
                    modalDialog.find('DIV.orderFormContainer').append(orderForm);
				
				var formSubmit = function(form)
				{
					var formValue = form.formSerialize();
					form.find(':input:not([disabled])').attr('disabled', 'disabled');
					form.animate({opacity: 0.4}, 1000);
					
					$.ajax({
						type: 'POST',
						dataType: 'json',
						url: opts.url,
						data: postParams.toString() + "&" + formValue,
						success: function(data)
						{
							var success = data && data.success;
							submitButton.removeAttr('disabled');
							form.animate({opacity: 1}, 1000);
							form.find(':input').removeAttr('disabled');
							
							showMessage(modalDialog.find('.Order'),
								success == 1 ? opts.order.successMessage : (data.error?data.error:opts.order.errorMessage),
								success == 1 ? 'OrderSuccess' : 'OrderError', success);
							
						
						},
						error: function(){
							submitButton.removeAttr('disabled');
							showMessage(modalDialog.find('.Order'), opts.order.errorMessage, 'OrderError', false);
						}
					});
				};
				
		
						
				$(modalDialog).beautifullModal(
				{
					onOpen: function(dialog){
						orderForm.validate({
							focusInvalid: false,
	    					focusCleanup: true,
	    					rules: opts.order.rules,
	    					messages: opts.order.messages,
	    					errorPlacement: function(error, element) {
								element.parent().append(error);
							}
    			});
						
						orderForm.attr('onsubmit', 'return false;');
						var events = orderForm.data("events");
						var handlers = [];
						if(events){
							for(var ev in events['submit']){
								handlers.push(events['submit'][ev]);
							}
						}
						orderForm.unbind('submit');
						
						orderForm.submit(function(event){
							for(var i in handlers){
								if(!handlers[i](event)){
								  event.returnValue = false;
									return false;
								}
							}
							formSubmit(orderForm);
							event.returnValue = false;
							return false;
						});
						
						opts.order.onOpen(dialog.container, orderForm);
					},
					
					
					onClose: function(dialog){
						setTimeout(function(){
							submitButton.removeAttr('disabled');
							orderForm.empty().remove();
							delete orderForm;
						}, 1000);
						 
					}
				});
				$("#closeBtn").click(function(){$.modal.close();});
				
			});
			var footer = _calc.find('.CalcFooter');
            
            
            _calc.discountCashPlaceHolder = $(document.createElement('span')).html(0); 
            _calc.discountPercentPlaceHolder = $(document.createElement('span')).html(0);
			
            _calc.discountPlaceHolder = $( document.createElement('div') );
            _calc.discountPlaceHolder.css('display' , 'none');
            
            var discountPlaceHolderLeft = $('<div class="col5">' + opts['calc']['discountLbl'] + ' </div>' )
                .append(_calc.discountPercentPlaceHolder)
				.append('%: ');
            
            var discountPlaceHolderRight = $('<div class="col6"></div>' )
                .append(_calc.discountCashPlaceHolder)
				.append(" " + opts['currency'] );
            
            _calc.discountPlaceHolder.addClass('CalcFoterControlsWrapper')
                .append( discountPlaceHolderLeft )
                .append( discountPlaceHolderRight )
            ;
            footer.append( _calc.discountPlaceHolder );
            
            
			_calc.totalPlaceHolder = $(document.createElement('span')).html(0);
            
            var totlaPlaceHolderLeft = $('<div class="col5"></div>')
                .append( opts['calc']['total'] + " ")
            ;
            var totlaPlaceHolderRight = $('<div class="col6"></div>')
                .append( _calc.totalPlaceHolder )
				.append(" " + opts['currency'] + " ")
            ;
            
			footer.append( 
                $( document.createElement('div') )
                  .addClass('CalcFoterControlsWrapper')
                  .append( totlaPlaceHolderLeft )
                  .append( totlaPlaceHolderRight )
            );	
			
			if(!opts.calc.submitButton){
				footer.append(submitButton);
			}
			
			if(typeof(opts.calc.onInit) == 'function'){
				opts.calc.onInit();
			}
		}// if !calc.Initialized
	};
		
	createTabs = function(container){
		var ul = $(document.createElement('ul')).addClass('MenuTabs');
		var i = 1;
		
		container.find('.MenuWrapper').each(function(){
			var _me = $(this);
			var _ul = $(document.createElement('ul')).addClass('PartitionTabs');
		
			var _index = 1;
			_me.find('table').each(function(){
				_ul.append(
					$(document.createElement('li')).append(
						$(document.createElement('a')).attr('href',
						'#Partition'+ (_index++)).html($(this).prev().html())
					) 
				);
			});
			
			var _wrapper = $(document.createElement('div')).append(_ul).addClass('PartitionTabsWrapper');
			if(opts.tabs.partitionTabsTitle){
				_wrapper.prepend(opts.tabs.partitionTabsTitle);
			}
			_me.prepend(_wrapper);
			_ul.tabs();
			ul.append(
				$(document.createElement('li')).append(
					$(document.createElement('a')).attr('href', '#Menu'+ i).
					html($(this).find('h2:first').html())
				) 
			);
			$(this).attr('id', 'Menu' + (i++)).addClass('Menu');
		});
		
		var _wrapper = $(document.createElement('div')).append(ul).addClass('MenuTabsWrapper'); 
		if (opts.tabs.menuTabsTitle){
			_wrapper.prepend(opts.tabs.menuTabsTitle);
		}
		
		container.prepend(_wrapper);
		ul.tabs();
	}

	/* Тело функции */
	$.deepExtend(opts, options);
	if(!opts['url']){
		opts['url'] = window.location.href;
	}
	
	return $(this).each(function(){
		_this = $(this);
		_this.empty().append(opts.loadingMessage);
		_foods = [];
		_calc = {};
		processMenus(opts.menus);
		createCalc();
		if(opts.tabs.on){
			createTabs(_this);
		}
	});
}}(jQuery));

/* reservation - оформление заказа */
(function($){
	$.fn.reservation = function(options){
		var opts = {
			onOpen: function(dialog){
			
			},
			onClose: function(){
				
			},
			form: '',			
			messages: {
				success: '<h2>Заявка отправлена</h2><p>Ваша заявка отправлена, менеджер свяжется с вами втечение нескольких минут</p>',
				error: '<h2>Заявка не отправлена</h2><p>В процессе отправки произошла ошибка, пожалуйста, попробуйте еще раз</p>'
			},
			
			validation: {
				rules:{
					order_cafe_name: {'required': true},
					order_client_name: {'required': true},
					order_client_phone: {'required': true},
					order_person_count: {'required': true, 'number': true},
					order_date: {'required': true},
					order_time: {'required': true}
				},
				messages:{
					order_client_name: {'required': 'Ваше имя?'},
					order_client_phone: {'required': 'Номер телефона?'},
					order_person_count: {'required': 'Сколько будет человек?', 'number': 'Нужно ввести число'},
					order_date: {'required': 'Когда вы придете?'},
					order_time: {'required': 'Когда вы придете?'}
				}
			},
			ajaxForm: 
			{
				url: 'make_order.php',
				success: function(){opts.ajaxForm.success()},
				error: function(){}
			}
		};
		var ordForm;
		$.deepExtend(opts, options);
		if(!opts.ajaxForm.url)
		{
			opts.ajaxForm.url = window.location.href;
		}
		
		
		
		
		opts.ajaxForm.success = function(data)
		{
			var msg;
			eval("msg="+data+";");
			if (msg.success) 
			{
				var parent = ordForm.parent();
				parent.fadeOut('slow', function()
				{
					ordForm.remove();
					delete ordForm;
					parent.empty();
					var messageSpace = $(document.createElement('div')).html(opts.messages.success);
					parent.append(messageSpace);
					parent.fadeIn('slow', function(){
						setTimeout(function(){
							$.modal.close();
						}, 2000);
					})
					
				})
			}else
			{
				opts.ajaxForm.error();
			}
		};
		
		opts.ajaxForm.error = $.encapsulate(opts.ajaxForm.error, null, function()
		{
			var parent = ordForm.parent();
			parent.fadeOut('slow', function(){
				ordForm.hide();
				var messageSpace = $(document.createElement('div')).
					html(opts.messages.error);
				
				parent.append(messageSpace);
				parent.fadeIn('slow', function(){
					setTimeout( function(){
						parent.fadeOut('slow', function(){
							messageSpace.remove();
							delete messageSpace;
							ordForm.show();
							parent.fadeIn('slow');
						});
					}, 2000);
				})
			})
			
		});
		
		return $(this).each(function(){
			var me = $(this);
			me.css('cursor', 'pointer');
			if(me.is('a')){
				me.attr('href', 'javascript: void(0);');
			}
			
			me.click(function()
			{
				if($(opts.form).is('form'))
				{
					ordForm = $(opts.form);
					ordForm.attr('action', opts.url);
					ordForm.attr('method', 'post');
				}
				else
				{
					ordForm = $(document.createElement('form'));
					ordForm.attr('name', 'OrderForm');
					ordForm.attr('action', opts.url);
					ordForm.attr('id', 'OrderForm');
					ordForm.attr('method', 'post');
					ordForm.append(opts.form);
				}
				//ordForm.append($(document.createElement('div')).addClass('OrderButtons').append(__submitButton).append(__cancelButton));
				var OrderButtons=$(document.createElement('div'));
				ordForm.append(OrderButtons.css({"height":"30px"}).addClass('OrderButtons'));
				me.attr('disabled', 'disabled');
				var wrapper = $(document.createElement('div')).append(ordForm).attr('id', 'Reservation').
					beautifullModal({
						onOpen: function(dialog)
						{
						/*******************/
						var curDate = new Date();
						var day = curDate.getDate()
						var month = curDate.getMonth() + 1;
						
						if (day.toString().length == 1) 
						{
							day = '0' + day;
						}
						
						if (month.toString().length == 1) 
						{
							month = '0' + month;
						}
						
						dialog.data.find('input[name="order_date"]').val(day + '.' + month + '.' + curDate.getFullYear()).datepicker();
						/*************/
						/*****************************/
							// Кнопочки добавляем
							var __submitButton = $(document.createElement('input')).attr('type', 'submit').val('Забронировать');
							var __cancelButton = $(document.createElement('input')).attr('type', 'button').val('Отмена');
	
							__cancelButton.click(function()
							{
								$.modal.close();
							});
							
							/*form.append(ordForm);*/
							
							OrderButtons.append(__submitButton).append(__cancelButton);
						/**********************************/
							ordForm.validateAjaxForm(opts);
							opts.onOpen(dialog.container, ordForm);
						},
						onClose: $.encapsulate(opts.onClose, null, function(){me.removeAttr('disabled');})
					});
			
			});
				
		});	
	};
}(jQuery));

PostParams = function(params){
	var _simpleSerialize = function(data, parent){
		var res = '';
		for(var i in data){
			if(i == 'toString')continue;
			var _par = i;
			if(parent){
				_par = parent + '[' + _par + ']'; 
			}
			if(typeof(data[i]) == 'object'){
				res += _simpleSerialize(data[i], _par) + '&';
			}else{
				res += (parent ? parent + '[' + i + ']' : i) + '=' + 
					encodeURIComponent(data[i]) + '&';
			}
		}
		return res.substr(0, res.length - 1);	
	}
	
	this.toString = function(){
		return _simpleSerialize(this);					
	}
	
	if(typeof(params) == 'object'){
		for (var i in params) {
			this.i = params.i;
		}	
	}
};


$(function() {						
/*>>only edaki.ru*/
	var offset = $("#CalcSpace").offset();
		var topPadding = 15;
		$(window).scroll(function() {
			if ($(window).scrollTop() > offset.top) {
				$("#CalcSpace").stop().animate({marginTop: $(window).scrollTop() - offset.top + topPadding});
			}
			else {$("#CalcSpace").stop().animate({marginTop: 0});};});
			
/*<<only edaki.ru*/
			
			$("#SubmitCalc").bind("click",function(){
				if($('#calcTable').length==0)
				{
					alert("Пожалуйста, добавьте хотя бы одно блюдо в счет");
					return false;
				}
				return true;
					
			});
			

/*>>only rukazan

var offset = $("#openMenu").offset();
var topPadding = 10;
$(window).scroll(function() {
    
        if ($(window).scrollTop() > offset.top) {
                $("#CalcSpace").css('left', '175');
                $("#CalcSpace").stop().animate({top: $(window).scrollTop() - offset.top + topPadding});
                    }
                        else {
                    	     $("#CalcSpace").stop().animate({top : 0 });//  offset.top});
                    	    	}
                    	    	    });
<<only rukazan*/
});

