	// ENGINES DEFINITIONS
	var zEngines,
		zEc =	{	'engines' : [ 'web', 'images', 'video', 'torrents', 'news', 'blogs', 'maps', 'friends'],
					'eOptions' : [ 	[ 'Ask' ],
							 	[ 'Ask', 'Google', 'Flickr', 'Photobucket'],
							 	[ 'Ask', 'Google', 'YouTube', 'MetaCafe', 'DailyMotion'],
								[ 'Mininova', 'Vuze', 'Youtorrent'],
								[ 'Ask', 'Google', 'BBC', 'CNN', 'Digg'],
								[ 'Ask', 'Google', 'Technorati', 'Bloglines'],
								[ 'Google', 'Yahoo', 'Live'],
								[ 'Facebook', 'Myspace' ]								 
							 ]	 
				},
		curEngType = '', tabLinks = [];
	
	
	// CREATE TABS
	function loadTabs( tel )
	{
	
		tel.empty();
		
		zEngines.engines.each(function(el, i)
		{
			new Element ('span' , { 'id' : el , 'html' : (zEnginesTrans[el] ? zEnginesTrans[el] : el.capitalize()) } ).inject(tel);		
		});
		
		if (tabLinks.length > 0)
			tabLinks.each(function(el, i)
			{
				var nTab = new Element ('span' , { 'html' : el.name, 'id' : el.name, 'title' : el.url } );
				
				if (el.pos)
					nTab.inject($(el.pos),'after')
				else
					nTab.inject(tel);		
			});			
		
	}
	
	// CREATE ENGINE DROPDOWNS
	function loadDrops ( tel )
	{
		
		tel.setStyle('display','block')
		
		tel.empty();
		
		var dm2,dm3;
		
		zEngines.engines.each(function(el, i)
		{
			var dm = new Element ('div' , { 'id' : 'drop_'+el , 'class' : 'dropmenu' } );
			zEngines.eOptions[i].each ( function ( el2, i2 )
			{
				dm2 = new Element ('div', { 'id' : el+'_'+el2.capitalize(), 'class' : ( zEngines.eOptions[i].length == 1 ? 'fixed' : '')});
				dm3 = new Element('span' , { 'id' : el+'_img_'+el2.capitalize() } ).inject(dm2);
				dm3.setStyles({'display':'block','background':'url(/i/engines/'+el+'_'+el2.toLowerCase()+'.gif) no-repeat center','width':'121px','height':'38px'});
				dm2.inject( dm );
				dm2.addEvents({'mouseover' : function(e) 
				{ 
					this.setStyle('cursor','pointer'); 
					if (this.hasClass('browse'))
						this.setStyle('background-image','url(/i/dbg_hover2.png)'); 
				}, 'mouseout' : function (e) 
				{ 
					if ( this.hasClass('browse') && this.id != 'browse_elem')
					{
						this.setStyle('background-image','none'); 
					}
						
				} 
				});
			});
			
			dm.inject(tel);
			
			
		})
	
	}
	
	// DOM READY
	window.addEvent('domready', function(){

		// LOAD SAVED SETTINGS OR DEFAULTS
		zEngines = ( JSON.decode(Cookie.read('zugoSettingsV3')) || zEnginesDef );
	
		// PREP TABS AND DROPMENUS
		loadTabs($('tabs'));
		
		if (zDrops)
		{
			loadDrops($('drop_container'));		
		}	
		
		// FOCUS SEARCH BOX AND WEB TAB
		$('srch_q').focus();
		
		initUI();	
		
		// SHOW CUSTOMIZE LINK IF ON
		
		if (zCustomize)
		{
			$('customize').setStyle('display','block');
			$('customize').innerHTML = zCustomize;
		}
		
		// TRANSLATIONS
		
		if (zTrans)
		{
			$('flags').setStyle('display','block');
		}
		
		// HIDE BROWSE MENU IF SEARCH BOX FOCUSED
		window.addEvents({'click': function(e) {
		
			var parTest = e.target.getParents().some(function(item, index){
						
					return item.id.match('drop_');
					
				});
		
			if (  !e.target.id.match('drop') && !parTest && zDrops)
			{
				$$('div.dropmenu div').each( function (el)
				{
					el.removeClass('browse');
					if (!el.hasClass('fixed') && el.hasClass('active'))
					{
						el.setStyle('background-image','url(/i/dbg_active.png)');					
					}
				});
				if ($('browse_elem')) { $('browse_elem').destroy(); }
			}
		}
		});
		
		$('olay1').addEvents({'click': function(e) {
		
			if (this.id != 'olay3' && this.id != 'flags')
			{
				hideOverlay();				
				
				if ($('flags').className == 'menu')
					setLang(lang);
			}
		}});
	
	});
	
	
	function initUI()
	{
	
		// NAVIGATION TABS
		
		$('srch_btn').addEvents({'mouseover': function (e) { this.setStyle('cursor','pointer') } });
		
		$$('#tabs span').addEvents({'mouseover': function(e) { this.setStyle('cursor','pointer') } });
		
		$$('#tabs span').addEvents({'click': function(e) {
			
			// REMOVE ALL ACTIVE CLASSES
			$$('#tabs span').removeClass('active');
			$(this.id).addClass('active');			
			
			if (this.title != '')
			{
				document.location = this.title;
			}
			else
			{	
			
			// RESTORE SEARCH SITE VALUE BASED ON COOKIES OR DEFAULT
			
			$('srch_site').value = zEngines.eDefaults[ zEngines.engines.indexOf( this.id ) ]; 
		
			// LANGUAGE SPECIFIC LABELS
			var srch_lbl = "";
			
			switch(lang)
			{
		 		case 'engb':
				srch_lbl = lbl_search + " "+ this.innerHTML;		
				break;    

		 		case 'enus':
				srch_lbl = lbl_search + " "+ this.innerHTML;		
				break;    
				
				case 'de':
				srch_lbl = this.innerHTML + '-' + lbl_search;
				break;
				
				default:
				srch_lbl = lbl_search;		
				
			}
		
			// ADD NEW ACTIVE AND SET MORE VALUES
			$('srch_btn').value = srch_lbl;
			$('srch_eng').value = this.id;
		
			if (zDrops)
			{
				// CLOSE MENU BROWSE AND DESTROY TEMPORARY ELEMENT
				$$('div.dropmenu div').removeClass('browse');
				if ($('browse_elem')) { $('browse_elem').destroy(); }
			
				// HIDE ALL LIST MENUS AND SHOW ACTIVE MENU
				$$('div.dropmenu').setStyle('display', 'none');
				$('drop_'+this.id).setStyle('display', 'block');
				$$('#drop_'+this.id+' span').each ( function (el)
				{
					Asset.image(el.getStyle('background-image').replace('url(','').replace(')',''));
				} );
				

			}

			$('srch_q').focus();
		
			}
			
			}
			
		});
		
		// DROP DOWN MENUS
		
		if (zDrops)
		{

		$$('div.dropmenu div').addEvents({'click': function(e) {
			
			if (!this.hasClass('fixed')) {
			
				// GET CURRENT FIRST AND ACTIVE ELEMENTS
				var pid = this.getParent().id;
				var firstElem = $$('div#'+pid+' div').reverse().getLast();
				var activeElem = $$('div#'+pid+' div.active').getLast();
				var lastElem = $$('div#'+pid+' div').getLast();
				
				// MENU CONDITIONS
				if (!firstElem.hasClass('browse'))
				{
					var tempElem = activeElem.clone();
					tempElem.innerHTML = this.innerHTML;
					tempElem.id = "browse_elem";
			
					tempElem.addEvents({
					'click': function(e) {
							$$('div#'+pid+' div').toggleClass('browse');
							activeElem.setStyle('background-image','url(/i/dbg_active.png)');
							this.destroy();
						}
					});
							
					tempElem.injectBefore(firstElem);
					$$('div#'+pid+' div').each( function(el)
					{
						el.addClass('browse')
						if (el.id != 'browse_elem')
							el.setStyle('background-image','none');
					});
					
					lastElem.addClass('last');
				}
				else
				{
			
					$$('div#'+pid).getFirst().destroy();
					$$('div#'+pid+' div.active').removeClass('active');
					$$('div#'+pid+' div').removeClass('browse');	
					lastElem.removeClass('last');					
					this.addClass('active');
					this.setStyle('background-image','url(/i/dbg_active.png)');					
					$('srch_site').value = this.id.split("_")[1];
					
					zEngines.eDefaults[ zEngines.engines.indexOf( this.id.split("_")[0] ) ] = this.id.split("_")[1];
					
					Cookie.write('zugoSettingsV3', JSON.encode(zEngines), {duration: 365});
				} // IF
			} // FUCTION
			} // FIXED
		}); // EVENT
		
		// READ COOKIES AND SET PREFERENCES
		zEngines.eDefaults.each(function(el,i){
			$$('div#drop_'+zEngines.engines[i]+' div').removeClass('active');
			if (zEngines.engines[i] == 'web') { $('srch_site').value = el.toLowerCase(); }
			if ($(zEngines.engines[i]+'_'+el))
			{
				$(zEngines.engines[i]+'_'+el).addClass('active');	
				Asset.image($(zEngines.engines[i]+'_img_'+el).getStyle('background-image').replace('url(','').replace(')',''));
			}
		});
		
		if ($('srch_eng').value != null )
			$($('srch_eng').value).addClass('active');
		
		}
		
		$('web').fireEvent('click');		
	
	}
	
	// Customization Functions

	function loadCustomize()
	{
		
		curEngType = '';
		
		$('olay_body').empty();
		
		var cEng = new Element('ul', { 'class' : 'cust_engines' , 'id' : 'cust_engines'} );
		cEng.inject($('olay_body'));
		
		var cOpt = new Element('ul', { 'class' : 'cust_options', 'id' : 'cust_options' });
		cOpt.inject($('olay_body'));
		
		var sortEngines = new Sortables('#cust_engines', {constrain: true, clone: true, revert: true});
		var sortOptions = new Sortables('#cust_options', {constrain: true, clone: true, revert: true});		
		
		sortEngines.addEvents({'complete' : function(  ) { storeOptions() }})
		sortOptions.addEvents({'complete' : function(  ) { storeOptions() }})		
		
		new Element ('h3' , { 'html' : 'Check your favorite Search Tabs on the left and click on a specific Search Type to customize Engines'}).setStyle('color','#888').inject(cOpt);
		
		zEc.engines.each ( function ( el, i )
		{
			var cEopt = new Element('li', { 'html' : el , 'href' : 'javascript:void(0)', 'id' : 'cEopt_'+el} );
			cEopt.inject(cEng);
			sortEngines.addItems(cEopt);
			
			var chEopt = new Element('input', { 'type' : 'checkbox' , 'id' : 'check_'+el , 'checked' : (zEngines.engines.indexOf(el) != -1 ? 'true' : '') });
			chEopt.addEvents({'click' : function(e)
			{
				e.stop();
			}});
			
			chEopt.inject(cEopt , 'top');
			
			cEopt.addEvents({'click': function(e) {
				
				if (e.type != 'checkbox')
				{
					$$('.cust_engines li').removeClass('active');
					this.addClass('active');
		
					cOpt.empty();		
							
					curEngType = this.id.replace('cEopt_','');
							
					zEc.eOptions[zEc.engines.indexOf(curEngType)].each ( function ( el2, i2 )
					{
						var cOption = new Element('li', { 'id' : 'coco_'+el2 } );
						cOption.inject(cOpt);
						sortOptions.addItems(cOption);
						
						var cOptLabel = new Element('label');
						cOptLabel.inject(cOption);
						
						new Element('img', { 'src' : '/i/engines/'+curEngType+'_'+el2.toLowerCase()+'.gif' , 'align' : 'absmiddle' , 'title' : el2 , 'alt' : el2 }).inject(cOptLabel);
						
						var chOption = new Element('input', { 'type' : 'checkbox' , 'id' : 'ch_opt_'+el2 , 'checked' : ( zEngines.engines.indexOf(curEngType) != -1 ?  (zEngines.eOptions[zEngines.engines.indexOf(curEngType)].indexOf(el2) != -1 ? 'true' : '') : '' ) });
						
						chOption.inject(cOptLabel , 'top');
						
						chOption.addEvents({ 'click' : function (e){	storeOptions();		} });
	
					}
					);
					
				}
			}});
			
		}
		);

	}
	
	function storeOptions ()
	{
		
		var oldConfig = $unlink(zEngines);
		
		// store engine types
		zEngines.engines = new Array();
		$$('#cust_engines input').each( function (el, i)
		{
			
			//check if type checkbox needs to be updated
			if ( el.id.replace('check_','') == curEngType)
			{			
				var nChecked = 0;
				$$('#cust_options input').each( function ( el2, i2){ if (el2.checked) nChecked++; });
				$(el).checked = (nChecked > 0 ? true : false);
			}
			
			if(el.checked)
				zEngines.engines.include(el.id.replace('check_',''));
		});
		
		
		// store engine options
		zEngines.eOptions = new Array();
	
		zEngines.engines.each( function (el,i) 
		{
			zEngines.eOptions[i] = new Array();
			
			if (curEngType != '' && el == curEngType)
			{
				$$('#cust_options input').each( function ( el2, i2)
				{
					if (el2.checked)
						zEngines.eOptions[i].include(el2.id.replace('ch_opt_',''));
				});
			}
			else
			{
					zEngines.eOptions[i] = oldConfig.eOptions[oldConfig.engines.indexOf(el)];
			}	
			
		});		

		// store Defaults
		zEngines.eDefaults = new Array();
		
		zEngines.engines.each( function (el,i) 
		{
			var oldDef = oldConfig.eDefaults[oldConfig.engines.indexOf(el)];
			zEngines.eDefaults[i] = ( oldDef != null ? (zEngines.eOptions[i].indexOf(oldDef) != -1 ? oldDef : zEngines.eOptions[i][0]) : zEngines.eOptions[i][0] );
		});
		
		//olay_debug ( "Current State of zEngines" , zEngines );
		
	}
	
	
	function showOverlay()
	{
			$('olay1').setStyle('display', 'block').set('opacity','0.5');
			$('olay3').setStyle('display', 'block');
			loadCustomize();
	}
	
	function hideOverlay()
	{
		
		Cookie.write('zugoSettingsV3', JSON.encode(zEngines), {duration: 365});
		// UPDATE TABS AND DROPMENUS
		loadTabs($('tabs'));

		if (zDrops)
			loadDrops($('drop_container'));

		initUI();
		
		$('olay1').setStyle('display', 'none');
		$('olay3').setStyle('display', 'none');	
		
	}
	
	function olay_debug ( msg , obj )
	{
			$('olay_debug').innerHTML = msg + '<br/>'+(obj != '' ? JSON.encode(obj)+'<br/><br/>' : '') + $('olay_debug').innerHTML ;		
	}
	
	function setLang ( language )
	{
		if (language == lang )
		{
			if ($('flags').hasClass('menu'))
			{
				$('flags').removeClass('menu');
				$$('#flags a').setStyle('display','none');
				$('flag_'+language).setStyle('display','block');
			}
			else
			{
				$('olay1').setStyle('display', 'block').set('opacity','0.01');
				$('flags').addClass('menu');
				$$('#flags a').setStyle('display','block');
			}
		}
		else
		{
			document.location = '?lang='+language;
		}
	}

	Browser.sniffBrowser = function() {
	
			var dataBrowser =  [
					{
						string: navigator.userAgent,
						subString: "Chrome",
						identity: "Chrome"
					},
					{
						string: navigator.userAgent,
						subString: "Wyzo",
						identity: "Wyzo"
					},
					{ 	
						string: navigator.userAgent,
						subString: "OmniWeb",
						versionSearch: "OmniWeb/",
						identity: "OmniWeb"
					},
					{
						string: navigator.vendor,
						subString: "Apple",
						identity: "Safari",
						versionSearch: "Version"
					},
					{
						prop: window.opera,
						identity: "Opera"
					},
					{
						string: navigator.vendor,
						subString: "iCab",
						identity: "iCab"
					},
					{
						string: navigator.vendor,
						subString: "KDE",
						identity: "Konqueror"
					},
					{
						string: navigator.userAgent,
						subString: "Firefox",
						identity: "Firefox"
					},
					{
						string: navigator.vendor,
						subString: "Camino",
						identity: "Camino"
					},
					{		// for newer Netscapes (6+)
						string: navigator.userAgent,
						subString: "Netscape",
						identity: "Netscape"
					},
					{
						string: navigator.userAgent,
						subString: "MSIE",
						identity: "Explorer",
						versionSearch: "MSIE"
					},
					{
						string: navigator.userAgent,
						subString: "Gecko",
						identity: "Mozilla",
						versionSearch: "rv"
					},
					{ 		// for older Netscapes (4-)
						string: navigator.userAgent,
						subString: "Mozilla",
						identity: "Netscape",
						versionSearch: "Mozilla"
					}
				];
				
				
				var searchVersion = function (dataString) {
							var index = dataString.indexOf(versionSearchString);
							if (index == -1) return;
							return parseFloat(dataString.substring(index+versionSearchString.length+1));
						};
				
				
				
			 for (var i=0;i<dataBrowser.length;i++)	{
					var dataString = dataBrowser[i].string;
					var dataProp = dataBrowser[i].prop;
					var versionSearchString = dataBrowser[i].versionSearch || dataBrowser[i].identity;
					if (dataString) {
						if (dataString.contains(dataBrowser[i].subString) ) {
								Browser.Engine.browserName = dataBrowser[i].identity;
								break;
						}
					}
					else if (dataProp) {
						Browser.Engine.browserName = dataBrowser[i].identity;
						break;
						
					}
			 }
				
				Browser.Engine.browserVersion =  searchVersion(navigator.userAgent) ||  searchVersion(navigator.appVersion)	|| "an unknown version";
	}

	Browser.sniffBrowser();