/** Etiquette service behaiviour
 * @author danyastuff
 * @version 1.0
 * @description uses global vars: BaseServer, StaticServer, DishData, DrinkData
 */
 
 	var SECTION_DISHES = 'dish',
 		SECTION_DRINKS = 'drink',
 		SECTION_SERVE  = 'serve';
	 
	var EtiquetteInterface = function () {
		var self = this;
		this.dishTrigers = $('#dish-menu > LI > UL > LI > A');
		this.drinkTrigers = $('#drink-menu > LI > UL > LI > A');
		this.serveTrigers = $('#serve-menu > LI > A');
		
		this.mode = { 
			section : MenuSection,
			item	: MenuItem,
			iCase	: MenuItemCase,
			ru		: MenuTitle,
			extraRu : MenuExtra
		}	
		
		this.dish = {
			left : $('IMG#left-hand'),
			right: $('IMG#right-hand'),
			food : $('#dish-name'),
			note : $('#dish-note'),
			tableware : $('#tableware'),
			extra : $('#with'),
			tabMode: '.dishes',
			link: {
				http : $('#result-link-url'),
				html : $('#result-link-code')
			}
		}
		this.drink = {
			name  : $('#drink-name'),
			note  : $('#drink-note'),
			glass : $('#glass'),
			extra : $('#alternate'),
			tabMode: '.drinks',
			link: {
				http : $('#result-link-url'),
				html : $('#result-link-code')
			}
		}
		this.serve = {
			type : $('#serve-type'),
			tabMode : '.serve',
			link: {
				http : $('#result-link-url'),
				html : $('#result-link-code')
			}
		}
		
		this.link = {
			http : $('#result-link-url'),
			html : $('#result-link-code'),
			setItem : function (item, ru) {
				self.mode.item  = item;
				self.mode.iCase = '';
				if (self.mode.section == SECTION_SERVE) {										
					self.mode.ru = ru + ' ' + s('serving');
				} else {
					self.mode.ru = ru;
				}
				self.mode.extraRu = '';
				self.setLink();				 
			},
			setCase : function (iCase, ru) {
				self.mode.iCase = iCase == 1 ? '' : iCase;
				self.mode.extraRu = ' '+ru;
				self.setLink();
			}
		}
		
		this.URL = 'http://' + StaticServer + '/i/services/etiquette/';
		
		this.dishTrigers.click(function (e) {
			id = this.id.replace('_',''); 						
			self.updateDish(id);
			self.link.setItem(id, $(e.target).text());
		}) 
		this.drinkTrigers.click(function (e) {
			id = this.id.replace('_',''); 
			self.updateDrink(id);
			self.link.setItem(id, $(e.target).text());
		})
		this.serveTrigers.click(function (e) {
			id = this.id.replace('_',''); 			
			self.updateServe(id);
			self.link.setItem(id, $(e.target).text());
		})
		
		
		this.dish.extra.clean = function () {
			this.html('');
		}
		this.dish.extra.add = function (src,ind) {
		  	var switcher = $(document.createElement('A'));
		  	if (ind !== null) switcher.attr('ind',ind);
			switcher
				.html('<span>'+src.label+'</span>')
				.click(function () {
					if ( !$(this).hasClass('selected') ) {
						self.updateDish(src);
						$(this.parentNode).find('A').removeClass('selected');
						$(this).addClass('selected');
						self.link.setCase(
							parseInt($(this).attr('ind')) +1,
							$(this).text()
						)
					} // ! has class
				});
			this.append(switcher);
		}
		
		this.drink.extra.clean = function () {
			this.html('')
		}
		this.drink.extra.add = function (src,ind) {
			var switcher = $(document.createElement('A'));
			if (ind !== null) switcher.attr('ind',ind);
			switcher
				.html('<span>'+src.label+'</span>')
				.click(function () {
					if ( !$(this).hasClass('selected') ) {
						self.updateDrink(src);
						$(this.parentNode).find('A').removeClass('selected');
						$(this).addClass('selected');
						self.link.setCase(
							parseInt($(this).attr('ind')) +1,
							$(this).text()
						);
					} //if !selected
				})
			this.append(switcher);
		}
		
		var selectOnClick = function () {$(this).select().focus()}
		
		this.dish.link.http.click(selectOnClick);
		this.dish.link.html.click(selectOnClick);
		this.drink.link.http.click(selectOnClick);
		this.drink.link.html.click(selectOnClick);
		this.serve.link.http.click(selectOnClick);
		this.serve.link.html.click(selectOnClick);
	
	// extra item case switchers
		if (this.mode.section == SECTION_DISHES) {
			var src = DishData[ this.mode.item ];
			if (src.extra) {
				this.dish.extra.clean();
				this.dish.extra.add(src,0);
				for (i in src.extra) 
					this.dish.extra.add(src.extra[i],i+1);
				this.dish.extra.find('A:eq('+(this.mode.iCase-1)+')').addClass('selected');
			}//if extra
		} else if (this.mode.section == SECTION_DRINKS) {
			var src = DrinkData[ this.mode.item ];
			if (src.tableware.length > 1) {
				this.drink.extra.clean();
				for (i in src.tableware)
					this.drink.extra.add(src.tableware[i],i);	
				this.drink.extra.find('A:eq('+(this.mode.iCase-1)+')').addClass('selected');
			}//if tableware > 1
		}
		
	}//class
	
	EtiquetteInterface.prototype = {
		url : function (name) {
			return this.URL + name + '.jpg'
		},
		setLink : function () {
			var ref = 'http://'+window.BaseServer+'/services/etiquette'
				+ '/'+this.mode.section
				+ '/'+this.mode.item
				+ '/'+this.mode.iCase; 
            
			this.link.http.attr('value', ref);
			this.link.html.attr('value', '<a href="'+ref+'">'+this.mode.ru+this.mode.extraRu+'</a>');
			
			//Image code to blog
			var $ware = $('.ware');
			
			var $code = $('<div></div>').css({
			    float:'left',
			    position:'relative'
			})
			
			$code.append(
			    $('<p>'+ $ware.find('h2').text() +'</p>').css({
			        'font-variant': 'small-caps',
			        'letter-spacing':'2px',
			        'margin-bottom':'10px',
			        'text-align':'center'
			    })
			);
			$img = $('<div></div>').css({
                width: '300px',
			    margin:'0 auto'
			});
			$ware.find('img').each(function () 
			{
			    $img.append($(this).clone().attr('id', ''))
			})
			$code.append($img);
			if ($ware.find('#serve-type').length)
			    $img.css('width', '500px');
			else if ($ware.find('#drink-name').length)
			    $img.css('width', '200px');
			
			$code.append(
			    $('<p>'+ $('.frame .desc').text() +'</p>').css({
			        'margin': '10px 0',
			    })
			);
			$code.append(
			    $('<p>WhoYOUgle — <a href="'+ window.location.toString() +'">'+ s('etiquette') +'</a></p>')
			        .css('text-align', 'center')
			)
			
			$('#result-article-code').val($code.html());
		},
		getHash : function () {
			return document.location.hash.toString().replace('#', '')
		},
		resetHash : function () {
			
		},
		checkHash : function () {
			var hash = this.getHash();
			for (i in DishData)
				if (i == hash) {
					this.updateDish(hash, true);
					return
				}
			for (i in DrinkData)
				if (i == hash) {
					this.updateDrink(hash, true);
					return
				}
			for (i in ServeData)
				if (i == hash) {
					this.updateServe(hash, true);
					return
				}
		},
		setLinks : function (obj, text, id) {
			var ref = document.location.toString().replace(document.location.hash, '');
			obj.link.http.attr('value', ref + '#' + id);
			obj.link.html.attr('value', '<a href="'+ ref + '#' + id +'">'+text+'</a>');
		},
		
		updateDish : function (idOrSrc, open, noHash) {
			var src, switcher;
			if (typeof(idOrSrc) == 'string') {
				this.dishTrigers.removeClass('selected');
				$('#_'+idOrSrc).addClass('selected');
				src = DishData[idOrSrc];
				switcher = false;
				this.dish.tableware.attr('src', this.url(src.plate));
				this.dish.tableware.attr('title', src.plateName);

				this.setLinks(this.dish, this.dish.food.text(), idOrSrc);
			} else {
				src = idOrSrc;
				switcher = true;
				if (src.plate) {
					this.dish.tableware.attr('src', this.url(src.plate));
					this.dish.tableware.attr('title', src.plateName);
				} // if
			}
			
			this.dish.food.text(src.food);
			this.dish.note.text(src.note);
			
			if (src.left) 
				this.dish.left
					.attr('src', this.url(src.left.name))
					.attr('title', src.left.title)
					.css('visibility', 'visible');
			else 
				this.dish.left
					.attr('src', '')
					.css('visibility', 'hidden');
					
			if (src.right) 
				this.dish.right
					.attr('src', this.url(src.right.name))
					.attr('title', src.right.title)
					.css('visibility', 'visible');
			else 
				this.dish.right
					.attr('src', '')
					.css('visibility', 'hidden');
			
			if (!switcher) {					
				this.dish.extra.clean();
				if (src.extra) {
					this.dish.extra.add(src,0);
					for (i in src.extra)
						this.dish.extra.add(src.extra[i],i+1);
				} // if	
				this.dish.extra.find('A:first').addClass('selected');
			}
			
		},
		updateDrink : function (idOrSrc, open, noHash) {
			var src;
			if (typeof(idOrSrc) == 'string') {
				src = DrinkData[idOrSrc];
				this.drinkTrigers.removeClass('selected');
				$('#_' + idOrSrc).addClass('selected');
				
				this.drink.extra.clean();
				if (src.tableware.length > 1) 
					for (i in src.tableware)
						this.drink.extra.add(src.tableware[i],i);
						
				this.drink.extra.find('A:first').addClass('selected');					
				src = src.tableware[0];
				
				if (open) {
					document.menuDrink.expandBy('#_'+idOrSrc);
					if (!this.getHash() && !noHash) this.setHash(idOrSrc);
				}
				this.setLinks(this.drink, this.drink.name.text(), idOrSrc);
			} else 
				src = idOrSrc;
				
			this.drink.name.text(src.name);
			this.drink.note.text(src.note);
			this.drink.glass.attr('src', this.url(src.glass));
		},
		updateServe : function (id, open) {
			this.serve.type.attr('src', this.url(id + '-' + window.Language));
			this.serveTrigers.removeClass('selected');
			$('#_' + id).addClass('selected');			
		}
	}
