var CONFIG = {};
var objTabber;

window.addEvent('domready', function()
{	
	var strBaseHref = $(document.head).getElement('base');
	CONFIG.BASE_URL 		= strBaseHref.href;
	CONFIG.BASE_URL_MAIN 	= CONFIG.BASE_URL.replace('/sydney', '');
	
	if ($('search-keyword'))
	{
		var objSearch = new Search();
	};
	
	if ($('newsticker'))
	{
		var objNewsticker = new Newsticker();
	};
	
	if($('content'))
	{
		$('content').getElements('div.tabs').each(function(tabContainer)
		{
			objTabber = new Tabber(tabContainer);
		});
	}
	
	if($('content'))
	{
		$('content').getElements('div.tabslite').each(function(tabContainer)
		{
			objTabber = new Tabberlite(tabContainer);
		});
	}
	
	if($('formcontact'))
	{
		$('formcontact').getElements('input[type=text]').each(function(elInput)
		{
			elInput.addEvent('keyup', function()
			{
				$('reaction_nskey').value = 'aNtIsPaMkEy!!11';
			});
		});
	}
	
	// Dropdown Navigation in the Main Nav
	$('mainnav').getElements('ul.main li').each(function(elListItem, intKey)
	{
		if (elListItem.getElement('ul'))
		{
			elListItem.getElement('a').addEvents(
			{
				mouseenter: function()
				{
					this.addClass('hover');
					elListItem.getElement('ul').addClass('hover');
				},
				mouseleave: function()
				{
					elListItem.getElement('ul').removeClass('hover');
					this.removeClass('hover');
				}
			});
			elListItem.getElement('ul').addEvents(
			{
				mouseenter: function()
				{
					this.addClass('hover');
					this.getParent().getElement('a').addClass('hover');
				},
				mouseleave: function()
				{
					this.removeClass('hover');
					this.getParent().getElement('a').removeClass('hover');
				}
			});
		};
	});
	
	// custom stuff per page
	var strHref = location.href;
	var strFaqPattern = /faq/;
	var strBusinessPattern = /business-operations/;
	var strCulturePattern = /life-at-optiver\/global-culture/;
	var strBasicRequirements = /careers\/basic-requirements/;
	var strHistory = /the-company\/history/;
	var strGradsPattern = /careersoptiver\/grads/;
	var strExpertsPattern = /careersoptiver\/experts/;
	var strCareersEventsPattern = /careersoptiver\/events/;
	if(
		strFaqPattern.test(strHref)
		||
		strBusinessPattern.test(strHref)
		||
		strCulturePattern.test(strHref)
		||
		strBasicRequirements.test(strHref)
		||
		strHistory.test(strHref)
		||
		strGradsPattern.test(strHref)
		||
		strExpertsPattern.test(strHref)
		||
		strCareersEventsPattern.test(strHref)
	)
	{
		var i = 0;
		$$('#content .usercontent h3').each(function(elTitle)
		{
			if(i != 0)
			{
				elTitle.setStyle('margin-top', '15px');
			}
			i++;
		});
		
		$$('#content .usercontent h4').each(function(elTitle)
		{
			var arrItems = new Array();
			var elContainer = new Element('div',
			{
			    'class': 'faqtoggle'
			});
			
			var elNext = elTitle.getAllNext();
			
			var blnUseElement = true;
			elNext.each(function(elItem)
			{
				var strTagName = elItem.tagName;
				if(true == blnUseElement && ('p'  == strTagName.toLowerCase() || 'ul'  == strTagName.toLowerCase()))
				{
					elItem.clone().inject(elContainer);
					elItem.destroy();
				}
				else
				{
					blnUseElement = false;
				}
			});
			
			elContainer.inject(elTitle, 'after');
			
			elTitle.setStyle('cursor', 'pointer');
			
			elTitle.addEvent('click', function()
			{
				elContainer.toggle();
			});
		});
	}
	
	var objJobOpportunitiesTable = new JobOpportunitiesTable();	
	
});

var Search = new Class(
{
	initialize:function()
	{
		var elInputHeader = $('search-keyword');
						
		elInputHeader.addEvents(
		{
			focus:function()
			{
				this.setStyle('background', 'transparent');
			},
			blur:function()
			{
				if(!$chk(this.value))
				{
					this.setStyle('background', 'transparent url(./inc/image/bg_search.png) no-repeat left -21px');
				}
			}
		});
	}
});

var Newsticker = new Class(
{
	elWrapper: null,
	arrItems: null,
	intItems: null,
	
	intActive: 0,
	intDelay: 7000,
	
	initialize:function()
	{
		this.elWrapper = $('newsticker');
		this.arrItems = this.elWrapper.getElements('li');
		this.intItems = this.arrItems.length;
		
		this.arrItems.each(function(elItem, intKey)
		{
			if (intKey < 1)
			{
				elItem.setStyle('display', 'block');
			}
			else
			{
				elItem.setStyles(
				{
					'display': 'block', 
					'opacity': 0
				});
			}
		});
		
		this.showNext.bind(this).delay(this.intDelay);
	},
	
	showNext:function()
	{
		this.arrItems[this.intActive].fade('out');
		
		this.intActive++;
		if (this.intActive == this.intItems)
		{
			this.intActive = 0;
		};
		
		this.arrItems[this.intActive].fade('in');
		
		this.showNext.bind(this).delay(this.intDelay);
	}
});

var Tabber = new Class(
{	
	intMaxPerPage: 4,
	intCurrentPage	: 1,
	intCurrentStart: 0,
	
	initialize: function(tabContainer)
	{
		if( tabContainer.getElements('ul.tabchoose').length === 0) 
		{
			return;
		}
		
		if(tabContainer.hasClass('tabslite'))
		{
			return;
		}
		
		tabContainer.tabOptions = tabContainer.getElements('ul.tabchoose li a');
		tabContainer.tabLists = tabContainer.getElements('div.tabs-list ul');
		
		if(tabContainer.tabLists.length === 0)
		{
			tabContainer.tabLists = tabContainer.getElements('div.tabs-list table tbody');
		}
		
		tabContainer.tabNav = tabContainer.getElement('div.navsmall');
		tabContainer.tabCurrentPageElm = tabContainer.tabNav.getElement('span.navsmall-currentpage');
		tabContainer.tabTotalPageElm = tabContainer.tabNav.getElement('span.navsmall-totalpage');
		tabContainer.tabNextButton = tabContainer.tabNav.getElement('a.navsmall-next');
		tabContainer.tabPrevButton = tabContainer.tabNav.getElement('a.navsmall-prev');
		
		if(tabContainer.hasClass('unlimited-items')) 
		{
			this.intMaxPerPage = 1000;
			tabContainer.tabNav.setStyle('display', 'none');
		}
		
		var classRef = this;
		tabContainer.tabOptions.each(function(tabOption, id)
		{
			tabOption.attachedListClass = tabOption.href.toString().split('#');
			tabOption.attachedListClass = tabOption.attachedListClass[1];
			
			tabOption.addEvent('click', function() 
			{					
				tabContainer.tabOptions.removeClass('active');
				this.addClass('active');
				
				classRef.intCurrentPage = 1;
				classRef.intCurrentStart = 0;
				
				tabContainer.tabLists.each(function(tabList)
				{
					if(tabList.hasClass(this.attachedListClass))
					{
						tabList.addClass('active-tablist');
						tabList.setStyle('display', '');
					}
					else
					{
						tabList.removeClass('active-tablist');
						tabList.setStyle('display', 'none');
					}
					
				}.bind(this));
				
				classRef.initNav(tabContainer);
				return false;
			});
		});
		
		this.currentTab = 0;

		this.autoClick(tabContainer);
		
		/*if(!tabContainer.hasClass('wholesale-trading'))
		{
			setInterval(function() { classRef.autoClick(tabContainer) }, 7000);
		}*/
	},
	
	autoClick: function(tabContainer)
	{				
		if(tabContainer.tabOptions[this.currentTab])
			tabContainer.tabOptions[this.currentTab].fireEvent('click');		
			
		this.currentTab++;
		
		if(this.currentTab == tabContainer.tabOptions.length)
		{
			this.currentTab = 0;
		}
	},
	
	initNav: function(tabContainer)
	{				
		if(tabContainer.getElements('ul').length == 1)
		{
			activeTabItems = tabContainer.getElements('tbody.active-tablist tr');
		}
		else
		{
			activeTabItems = tabContainer.getElements('ul.active-tablist li');			
		}
		
		this.amountOfPages = (activeTabItems.length / this.intMaxPerPage).round();
		if(this.amountOfPages === 0 || activeTabItems.length <= this.intMaxPerPage)
		{
			this.amountOfPages = 1;
			tabContainer.tabNav.fade('out');
		}
		else
		{
			//if(this.amountOfPages === 1 && activeTabItems.length > this.intMaxPerPage)
			//{
				//this.amountOfPages++;	
				tabContainer.tabNav.fade('in');				
			//}

			tabContainer.tabCurrentPageElm.set('text', this.intCurrentPage);
			tabContainer.tabTotalPageElm.set('text', this.amountOfPages);	
		}	
				
		range = { start: this.intCurrentStart, end: ( this.intCurrentStart + this.intMaxPerPage ) };
						
		activeTabItems.each(function(activeTabItem, key)
		{
			activeTabItem.setStyle('display', 'none');
						
			if(key >= range.start && key < range.end )
			{
				activeTabItem.setStyle('display', '');
			}
		}.bind(this));		
		
		tabContainer.tabPrevButton.getElement('img').set('src', './inc/image/btn_left_grey.gif');
		tabContainer.tabNextButton.getElement('img').set('src', './inc/image/btn_right_grey.gif');
		tabContainer.tabPrevButton.removeClass('active');
		tabContainer.tabNextButton.removeClass('active');
				
		if(range.start > 0)
		{
			tabContainer.tabPrevButton.getElement('img').set('src', './inc/image/btn_left_orange.gif');			
			tabContainer.tabPrevButton.addClass('active');
		}
		
		if(this.intCurrentPage != this.amountOfPages)
		{
			tabContainer.tabNextButton.getElement('img').set('src', './inc/image/btn_right_orange.gif');			
			tabContainer.tabNextButton.addClass('active');
		}
			
		if(!this.navInit)
		{
			tabContainer.tabPrevButton.addEvent('click', function() { this.prevPage(tabContainer); return false; }.bind(this));
			tabContainer.tabNextButton.addEvent('click', function() { this.nextPage(tabContainer); return false; }.bind(this));
			this.navInit = true;
		}
	},
	
	nextPage: function(tabContainer)
	{
		if(this.intCurrentPage == this.amountOfPages) 
		{
			return;
		}
		
		this.intCurrentPage++;		
		this.intCurrentStart += this.intMaxPerPage;
					
		this.initNav(tabContainer);
	},
	
	prevPage: function(tabContainer)
	{
		if(this.intCurrentPage == 1) 
		{
			return;
		}
		
		this.intCurrentPage--;		
		this.intCurrentStart -= this.intMaxPerPage;
		
		this.initNav(tabContainer);
	}	
});

var Tabberlite = new Class(
{	
	intMaxPerPage: 4,
	intCurrentPage	: 1,
	intCurrentStart: 0,
	initialize: function(tabContainer)
	{
		if( tabContainer.getElements('ul.tabchoose').length === 0) 
		{
			return;
		}
		
		tabContainer.tabOptions = tabContainer.getElements('ul.tabchoose li a');
		tabContainer.tabLists = tabContainer.getElements('div.tabs-list div');
		
		if(tabContainer.tabLists.length === 0)
		{
			tabContainer.tabLists = tabContainer.getElements('div.tabs-list table tbody');
		}
		
		if(tabContainer.hasClass('unlimited-items')) 
		{
			this.intMaxPerPage = 1000;
			tabContainer.tabNav.setStyle('display', 'none');
		}
		
		var classRef = this;
		tabContainer.tabOptions.each(function(tabOption, id)
		{
			tabOption.attachedListClass = tabOption.href.toString().split('#');
			tabOption.attachedListClass = tabOption.attachedListClass[1];
			
			tabOption.addEvent('click', function() 
			{					
				tabContainer.tabOptions.removeClass('active');
				this.addClass('active');
				
				classRef.intCurrentPage = 1;
				classRef.intCurrentStart = 0;
				
				tabContainer.tabLists.each(function(tabList)
				{
					if(tabList.hasClass(this.attachedListClass))
					{
						tabList.addClass('active-tablist');
						tabList.setStyle('display', '');
					}
					else
					{
						tabList.removeClass('active-tablist');
						tabList.setStyle('display', 'none');
					}
					
				}.bind(this));
				return false;
			});
		});
		
		this.currentTab = 0;

		this.autoClick(tabContainer);
	},
	autoClick: function(tabContainer)
	{				
		if(tabContainer.tabOptions[this.currentTab])
			tabContainer.tabOptions[this.currentTab].fireEvent('click');		
			
		this.currentTab++;
		
		if(this.currentTab == tabContainer.tabOptions.length)
		{
			this.currentTab = 0;
		}
	}
});

/**
 * undocumented class
 *
 * @author Edgar Post
 **/
var Pushbox = new Class(
{
	initialize: function(page_id)
	{
		
		/*alert(CONFIG.BASE_URL_MAIN + 'sydney/inc/swf/main.swf');*/
		
		var flashvars = {
			baseurl: CONFIG.BASE_URL_MAIN,
			page_id: page_id
		};
		var params = {
			wmode: 'opaque',
			allowScriptAccess: 'always',
			bgcolor: '#262626' 
		};
		var attributes = {};
		
		swfobject.embedSWF(CONFIG.BASE_URL_MAIN + "main.swf", 'pushbox', '725', '305', '8', "expressInstall.swf", flashvars, params, attributes);
		
	}
});

/**
 * undocumented class
 *
 * @author Edgar Post
 **/

var JobOpportunitiesTable = new Class(
{

	container: 		null,
	table: 			null,
	tabs0: 			null,
	tabs1: 			null,	
	
	initialize: function()
	{
	
		this.container = $('content').getElement('div.multitabs');
		
		if(!this.container) { return; }
		
		this.container.getElements('ul.multitabs-options-0,ul.multitabs-options-1').setStyle('display', 'block');
		
		this.table 			= this.container.getElement('table.job-opportunities-list');		
		this.tabs0 			= this.container.getElements('ul.multitabs-options-0 li a');
		this.tabs1 			= this.container.getElements('ul.multitabs-options-1 li a');
		this.tableSorters	= this.table.getElements('thead tr th a');
		this.jobGroups		= this.table.getElements('tbody');
		this.jobRows		= this.table.getElements('tbody tr');
		
		this.tabs0.each(function(tab)
		{
			tab.jobGroups = this.jobGroups;
			tab.jobRows = this.jobRows;
			tab.sisters = this.tabs0;
			tab.addEvent('click', this.mouseClickTab0);
			
		}.bind(this));
		
		this.tabs1.each(function(tab)
		{
			tab.jobGroups = this.jobGroups;
			tab.jobRows = this.jobRows;
			tab.sisters = this.tabs1;
			tab.addEvent('click', this.mouseClickTab1);
			
		}.bind(this));
		
		this.tableSorters.each(function(sorter)
		{
			sorter.table = this.table;
			sorter.sisters = this.tableSorters;
			sorter.addEvent('click', this.sortRows);
			
		}.bind(this));
		
		this.jobRows.each(function(row)
		{
			if( !row.hasClass('more-info') )
			{
				row.maxPerPage = this.maxPerPage;
				row.jobGroups = this.jobGroups;
				row.sisters = this.jobRows;
				row.jobGroups = this.jobGroups;
				//row.addEvent('click', this.mouseClickJobRow);
			}
			
		}.bind(this));
		
		this.tabs0[0].fireEvent('click');
		this.tabs1[0].fireEvent('click');
		this.tableSorters[0].fireEvent('click');
		
		var current = window.location.hash.split('#');
		if($chk(current[1]))
		{
			current = $$('a[href*=' + current[1] + ']')[0];
			current.fireEvent('click');
		}
	},
	
	sortRows: function()
	{		
		this.sisters.each(function(sorter)
		{
			sorter.removeClass('active');
			
			if( !sorter.arrowImg)
			{
				sorter.arrowImg = sorter.getElement('img');
			}
			
			sorter.arrowImg.setStyle('display', 'none');
		});
		
		this.addClass('active');
		
		var rows = this.table.getElements('tbody tr');
		
		if( this.orderDirection == 'asc' )
		{
			this.orderDirection = 'desc';
		}
		else
		{
			this.orderDirection = 'asc';
		}
		
		if( !this.orderBy )
		{
			this.orderBy = this.href.toString().split('#');
			this.orderBy = this.orderBy[1];
		}
		
		var columnToSort;
		switch(this.orderBy.toLowerCase())
		{
			case 'vacancy' :
				columnToSort = 0;
				break;
			case 'division' :
				columnToSort = 1;
				break;
			case 'location' :
				columnToSort = 2;
				break;
		}
		
		var newSorted = [];
		var i = 0;
		var self = this;
		rows.each(function(row)
		{
			if( !row.hasClass('more-info') )
			{
				if( !row.columns )
				{
					row.columns = row.getElements('td');
				}
				
				if( !row.moreInfo)
				{
					row.moreInfo = row.getNext();
				}
					
				currentText = row.columns[columnToSort].get('text');
				
				newSorted[i] = [currentText, row];
				i++;
			}
		});	
		
		newSorted = newSorted.sort();
		
		if( !this.arrowImg )
		{
			this.arrowImg = this.getElement('img');
		}
		
		this.arrowImg.setStyle('display', 'inline');
		
		if(this.orderDirection == 'desc')
		{
			this.arrowImg.set('src', '../image/btn-up-grey.png');
			newSorted = newSorted.reverse();
		}
		else
		{
			this.arrowImg.set('src', '../image/btn-down-grey.png');
		}
		
		newSorted.each(function(row)
		{
			row = row[1];
			row.inject(row.getParent());
			row.moreInfo.inject(row, 'after');
		});
		return false;
	},
	
	mouseClickTab0: function()
	{
		if( !this.goTo )
		{
			this.goTo = this.href.toString().split('#');
			this.goTo = this.goTo[1];
		}
		
		var self = this;
		this.jobGroups.each(function(jobGroup)
		{
			if(jobGroup.title == self.goTo || self.goTo == 'all')
			{
				jobGroup.setStyle('display', '');
			}
			else
			{
				jobGroup.setStyle('display', 'none');				
			}
		});
				
		this.sisters.each(function(tab)
		{
			tab.removeClass('active');
		});
		this.addClass('active');
	//	return false;
	},
	
	mouseClickTab1: function()
	{
		if( !this.goTo )
		{
			this.goTo = this.href.toString().split('#');
			this.goTo = this.goTo[1];
		}
		
		var self = this;
		this.jobRows.each(function(jobRow)
		{
			if(jobRow.hasClass(self.goTo) || self.goTo == 'all' && ! jobRow.hasClass('more-info'))
			{
				jobRow.setStyle('display', '');
			}
			else
			{
				jobRow.setStyle('display', 'none');				
			}
		});
		
		this.sisters.each(function(tab)
		{
			tab.removeClass('active');
		});
		this.addClass('active');
		return false;
	},
	
	mouseClickJobRow: function()
	{
		if( !this.moreInfo)
		{
			this.moreInfo = this.getNext();
		}
				
		var self = this;
		this.sisters.each(function(row)
		{		
			if( !row.hasClass('more-info') && row.getNext().hasClass('opened') )
			{
				if( !row.moreInfo)
				{
					row.moreInfo = row.getNext();
				}
				
				if(self != row)
				{
					row.opened = false;
				}
				
				row.moreInfo.removeClass('opened');
				row.moreInfo.setStyle('display', 'none');
			}
		});
		
		if(this.opened) 
		{
			this.opened = false;
			return;
		}
		
		this.opened = true;
		
		if(Browser.Engine.trident)
		{
			this.moreInfo.setStyle('display', 'block');
		}
		else
		{
			this.moreInfo.setStyle('display', 'table-row');			
		}
		
		this.moreInfo.addClass('opened');
		return false;
	}
});

var GoogleMaps = new Class(
{
	objMap				: null,
	objDirections		: null,
	objMarkerLang		: null,
	objMarkerLong		: null,
	google				:
	{
		maps			: null,
		directions		: null,
		zoom			: 16,
		marker			: null
	},
	directions			:
	{
		from			: null,
		to				: null
	},
	
	initialize: function( strLocation, intLangtitude, intLongtitude )
	{
		this.directions.to	 	= strLocation;
		this.objMarkerLang	 	= intLangtitude;
		this.objMarkerLong	 	= intLongtitude;
		this.objMap 			= $('gmaps-map');
		this.objDirections 		= $('gmaps-directions');
		this.directions.form	= $('gmaps-form');
		
		this.setFormEvent();
		this.loadMaps();
	},
	
	setFormEvent: function()
	{
		this.directions.form.onsubmit = function()
		{
			this.getDirections();
			return false;
		}.bind(this);
	},	
	
	loadMaps: function()
	{
		this.google.map = new GMap2(this.objMap);
		this.google.center = new GLatLng(this.objMarkerLang, this.objMarkerLong);
		this.google.map.setCenter(this.google.center, this.google.zoom);
		this.google.map.addControl(new GSmallMapControl());			
		this.google.map.addOverlay(new GMarker(this.google.center));
		this.google.directions = new GDirections(this.google.map, this.objDirections);   				 
		GEvent.addListener(this.google.directions, "error", this.handleError);
	},
	
	getDirections: function()
	{
		this.objDirections.set('html', '');
		this.directions.from = $('from').value;
		
		if(this.directions.from === '')
		{
			return alert( 'Please enter your location.' );
		}
		
      	this.google.directions.load(this.directions.from+" to "+this.directions.to);
	},
	
	handleError: function()
	{
		switch(this.getStatus().code)
		{
			case G_GEO_SUCCESS :
				break;
				
			case G_GEO_UNKNOWN_ADDRESS :
				alert( 'Given address could not be found. Please try to be more specific.' );
				break;
				
			case G_GEO_BAD_REQUEST :
				alert( '(1) Could not request to Google Maps server. Please try again later.' );
				break;
			case G_GEO_SERVER_ERROR :
				alert( '(2) Could not request to Google Maps server. Please try again later.' );
				break;
			case G_GEO_BAD_KEY :
				alert( '(3) Could not request to Google Maps server. Please try again later.' );
				break;
			case G_GEO_TOO_MANY_QUERIES :
				alert( '(4) Could not request to Google Maps server. Please try again later.' );
				break;
				
			case G_GEO_MISSING_QUERY :
				alert( 'Please enter your location.' );
				break;
				
			case G_GEO_UNAVAILABLE_ADDRESS :
				alert( 'Given address is unavailable.' );
				break;
				
			case G_GEO_UNKNOWN_DIRECTIONS :
				alert( 'Could not determine directions. Please try it from another location.' );				
				break;
		}
	}
});
