// зависит от scripts.js
with (Object.createPackage('xm.site.ui')) {
	getInstance().Menu = function (appUrl, lang, timeout, alfdata, menudata, currentAlfLetter) {
		var me = this;
		var _activeMenuItem = null;
		var _expandedMenuItem = null;
		var _collapsedMenuItem = null;
		var _activeAlfLang = 'en';
		var _activeChar = null;
		var _currentAlfLetter = currentAlfLetter;

		me.setActiveMenuItem = function(item) {
			_activeMenuItem = item;
			this.expand(1, item);
		}
				
		me.setActiveAlfLang = function(lang) {
			_activeAlfLang = lang;
		}
		
		me.setActiveChar = function(achar) {
			_activeChar = achar;
		}

		me.expand = function(show, what) {
			if (!menudata[what]) {
				return;
			}
			var alphabet = menudata[what][0];

			if (show) {
				_expandedMenuItem = what;
				this.clearTimer(what);
				_hideAll();
				_createAlf(what);

				if (alphabet) alphabet.style.display = 'block';

				menudata[what][1].src = appUrl +'/images/' + lang + '/menu' + what + '-e.gif';
				menudata[what][2].style.display = '';

				if (/Gecko/.test(navigator.userAgent) || /Opera/.test(navigator.userAgent)){
						if (what=='audiobooks'){
								shift=-12;
						}else{
								shift=-7;
						}
				} else {
						shift=-27;
				}
				menudata[what][2].style.left = shift;

			} else {
				alphabet.t = setTimeout(
					function() {
						_hideId(what);
						_collapsedMenuItem = what;
						if (_expandedMenuItem == _collapsedMenuItem && _activeMenuItem) {
							me.expand(1, _activeMenuItem);
						}
					},
					timeout
				);
			}
		}

		me.clearTimer = function(what) {
			var alphabet = menudata[what][0];
			if (alphabet.t) window.clearTimeout(alphabet.t);
		}

		function _hideId(what) {
			menudata[what][1].src = appUrl + '/images/' + lang + '/menu' + what + '-d.gif';
			menudata[what][2].style.display = 'none';

			var alphabet = menudata[what][0];
			if (alphabet) alphabet.style.display = 'none';
		}

		function _hideAll(){
			_hideId('albums');
			_hideId('artists');
			_hideId('collections');
			_hideId('soundtracks');
			_hideId('audiobooks');
		}
		
		function _appendLighters(td) {
			td.onmouseover = function() { td.style.background = '#FFCF28' }
			td.onmouseout = function() { td.style.background = '#FF9400' }
		}
		
		function _getLangByLetter(letter)
		{
			for(var result in alfdata) {
				var letters = alfdata[result][1];
				if (letters.indexOf(letter,0)>=0) {
					return result;
				}
			}
			return false;
		}
		
		function _createAlf(what) {
			var lngmap = { 'ru' : 'en' , 'en' : 'ru' };
			var alphabet = menudata[what][0];
			var patterns = menudata[what][3];
			var urlsuffix = menudata[what][4];
			var tables = {};
			if (!patterns) return;
			
			me.setActiveAlfLang(
				_getLangByLetter(_currentAlfLetter)
			);
			
			if (!alphabet.innerHTML.trim()) {
				var alfLang = _activeAlfLang;
				alphabet.innerHTML = '';
				var lngcnt = 0;
				for (var lng in alfdata) {
					if (typeof(alfdata[lng]) == 'object') {
						lngcnt++
					}
				}
				for (var lng in alfdata) {
					var alfitem = alfdata[lng];
					
					if (typeof(alfitem) != 'object') continue;
					
					var alf = alfitem[1];
					var pattern = patterns[lng];
					var table = document.createElement('table');
					
					alphabet.appendChild(table);
					
					tables[lng] = table;
					
					table.style.display = (_activeAlfLang==lng ? '' : 'none');
					with (table) {border = 0; cellSpacing = 0; cellPadding = 0; width = 600; }

					var row = table.insertRow(table.rows.length);
					row.align = 'center';
					with(row.insertCell(row.cells.length)) {
						width = '1%'; innerHTML = '<img src="' + appUrl + '/images/alf-corners-left.gif">'; align='right';
					}
					
					with(row.insertCell(row.cells.length)) {
						width = '2%'; bgColor='#FF9400'; innerHTML = '&nbsp;';
					}

					var cell;
					for(var i=0; i<alf.length; i++) {
						with(cell = row.insertCell(row.cells.length)) {
							width = '3%'; bgColor='#FF9400';
							var chr = alf.charAt(i);
							if (_activeMenuItem == what && _activeChar == chr) {
								alfLang = lng;
								style.background = '#ffae00';
							} else {
								_appendLighters(cell);
							}

							if (chr == '0') chr = '0..9';
							if (alf.charAt(i) == _currentAlfLetter) {
								innerHTML = '<a class="alf alf_active">' + chr + '</a>';
							} else if (pattern.charAt(i) == '1') {
								innerHTML = '<a class="alf" href="' + appUrl + urlsuffix + alf.charAt(i) + '">' + chr + '</a>';
							} else {
								innerHTML = '<span class="alfdis">' + chr + '</span>';
							}
						}
					}

					if (lngcnt > 1) {
						with(row.insertCell(row.cells.length)) {
							width = '3%'; bgColor='#FF9400'; className = 'pink'; innerHTML = '|';
						}
						
						with(row.insertCell(row.cells.length)) {
							style.backgroundPosition = 'right top';
							style.backgroundImage = 'url(' + appUrl + '/images/alf-corners-right.gif)';
							style.backgroundRepeat = 'no-repeat';
							width = '3%';
							bgColor = '#FF9400';
							
							var e = 'id' + Object.createUniqueId();
							innerHTML = '<a id="' + e + '" class="alf" href="javascript:void(0)">' + alfitem[0] + '</a>&nbsp;&nbsp;&nbsp;&nbsp;';
							e = document.getElementById(e);
							(function(lng, table) {
								e.onclick = function() { tables[lngmap[lng]].style.display = ''; table.style.display = 'none'; }
							})(lng, table);

							_appendLighters(e);
						}
					} else {
						with(row.insertCell(row.cells.length)) {
							style.backgroundPosition = 'right top';
							style.backgroundImage = 'url(' + appUrl + '/images/alf-corners-right.gif)';
							style.backgroundRepeat = 'no-repeat';
							innerHTML = '&nbsp;'
							width = '5%';
							bgColor = '#FF9400';
						}
					}					
				}
	
				if (alfLang && lngcnt>1) {
					tables[lngmap[alfLang]].style.display = 'none';
					tables[alfLang].style.display = '';
				}
			}
		}
	}
}