	shortcut = {
		'all_shortcuts':{},//All the shortcuts are stored in this array
		'add': function(shortcut_combination,callback,opt) {
			//Provide a set of default options
			var default_options = {
				'type':'keydown',
				'propagate':false,
				'disable_in_input':false,
				'target':document,
				'keycode':false
			}
			if(!opt) opt = default_options;
			else {
				for(var dfo in default_options) {
					if(typeof opt[dfo] == 'undefined') opt[dfo] = default_options[dfo];
				}
			}
   
			var ele = opt.target
			if(typeof opt.target == 'string') ele = document.getElementById(opt.target);
			var ths = this;
			shortcut_combination = shortcut_combination.toLowerCase();
   
			//The function to be called at keypress
			var func = function(e) {
				e = e || window.event;
   
				if(opt['disable_in_input']) { //Don't enable shortcut keys in Input, Textarea fields
					var element;
					if(e.target) element=e.target;
					else if(e.srcElement) element=e.srcElement;
					if(element.nodeType==3) element=element.parentNode;
   
					if(element.tagName == 'INPUT' || element.tagName == 'TEXTAREA') return;
				}
   
				//Find Which key is pressed
				if (e.keyCode) code = e.keyCode;
				else if (e.which) code = e.which;
				var character = String.fromCharCode(code);
   
				if(code == 188) character=","; //If the user presses , when the type is onkeydown
				if(code == 190) character="."; //If the user presses , when the type is onkeydown
   
				var keys = shortcut_combination.split("+");
				//Key Pressed - counts the number of valid keypresses - if it is same as the number of keys, the shortcut function is invoked
				var kp = 0;
   
				//Work around for stupid Shift key bug created by using lowercase - as a result the shift+num combination was broken
				var shift_nums = {
					"`":"~",
					"1":"!",
					"2":"@",
					"3":"#",
					"4":"$",
					"5":"%",
					"6":"^",
					"7":"&",
					"8":"*",
					"9":"(",
					"0":")",
					"-":"_",
					"=":"+",
					";":":",
					"'":"\"",
					",":"<",
					".":">",
					"/":"?",
					"\\":"|"
				}
				//Special Keys - and their codes
				var special_keys = {
					'esc':27,
					'escape':27,
					'tab':9,
					'space':32,
					'return':13,
					'enter':13,
					'backspace':8,
   
					'scrolllock':145,
					'scroll_lock':145,
					'scroll':145,
					'capslock':20,
					'caps_lock':20,
					'caps':20,
					'numlock':144,
					'num_lock':144,
					'num':144,
   
					'pause':19,
					'break':19,
   
					'insert':45,
					'home':36,
					'delete':46,
					'end':35,
   
					'pageup':33,
					'page_up':33,
					'pu':33,
   
					'pagedown':34,
					'page_down':34,
					'pd':34,
   
					'left':37,
					'up':38,
					'right':39,
					'down':40,
   
					'f1':112,
					'f2':113,
					'f3':114,
					'f4':115,
					'f5':116,
					'f6':117,
					'f7':118,
					'f8':119,
					'f9':120,
					'f10':121,
					'f11':122,
					'f12':123
				}
   
				var modifiers = { 
					shift: { wanted:false, pressed:false},
					ctrl : { wanted:false, pressed:false},
					alt  : { wanted:false, pressed:false},
					meta : { wanted:false, pressed:false}	//Meta is Mac specific
				};
   
				if(e.ctrlKey)	modifiers.ctrl.pressed = true;
				if(e.shiftKey)	modifiers.shift.pressed = true;
				if(e.altKey)	modifiers.alt.pressed = true;
				if(e.metaKey)   modifiers.meta.pressed = true;
   
				for(var i=0; k=keys[i],i<keys.length; i++) {
					//Modifiers
					if(k == 'ctrl' || k == 'control') {
						kp++;
						modifiers.ctrl.wanted = true;
   
					} else if(k == 'shift') {
						kp++;
						modifiers.shift.wanted = true;
   
					} else if(k == 'alt') {
						kp++;
						modifiers.alt.wanted = true;
					} else if(k == 'meta') {
						kp++;
						modifiers.meta.wanted = true;
					} else if(k.length > 1) { //If it is a special key
						if(special_keys[k] == code) kp++;
   
					} else if(opt['keycode']) {
						if(opt['keycode'] == code) kp++;
   
					} else { //The special keys did not match
						if(character == k) kp++;
						else {
							if(shift_nums[character] && e.shiftKey) { //Stupid Shift key bug created by using lowercase
								character = shift_nums[character]; 
								if(character == k) kp++;
							}
						}
					}
				}
   
				if(kp == keys.length && 
							modifiers.ctrl.pressed == modifiers.ctrl.wanted &&
							modifiers.shift.pressed == modifiers.shift.wanted &&
							modifiers.alt.pressed == modifiers.alt.wanted &&
							modifiers.meta.pressed == modifiers.meta.wanted) {
					callback(e);
   
					if(!opt['propagate']) { //Stop the event
						//e.cancelBubble is supported by IE - this will kill the bubbling process.
						e.cancelBubble = true;
						e.returnValue = false;
   
						//e.stopPropagation works in Firefox.
						if (e.stopPropagation) {
							e.stopPropagation();
							e.preventDefault();
						}
						return false;
					}
				}
			}
			this.all_shortcuts[shortcut_combination] = {
				'callback':func, 
				'target':ele, 
				'event': opt['type']
			};
			//Attach the function with the event
			if(ele.addEventListener) ele.addEventListener(opt['type'], func, false);
			else if(ele.attachEvent) ele.attachEvent('on'+opt['type'], func);
			else ele['on'+opt['type']] = func;
		},
   
		//Remove the shortcut - just specify the shortcut and I will remove the binding
		'remove':function(shortcut_combination) {
			shortcut_combination = shortcut_combination.toLowerCase();
			var binding = this.all_shortcuts[shortcut_combination];
			delete(this.all_shortcuts[shortcut_combination])
			if(!binding) return;
			var type = binding['event'];
			var ele = binding['target'];
			var callback = binding['callback'];
   
			if(ele.detachEvent) ele.detachEvent('on'+type, callback);
			else if(ele.removeEventListener) ele.removeEventListener(type, callback, false);
			else ele['on'+type] = false;
		}
	}

	/* slide left navigation menu */
	function slideMe(elm){
		var 
			duration = .5,
			className = 'active';									
									
			slideMenu = $(elm).next();									
							
			if (slideMenu.style.display != 'none'){
				new Effect.SlideUp(slideMenu, {duration: duration});
				//elm.className = '';
			}
			else{
				$$('#leftMenu div').each(function(item){
				if (item.style.display != 'none'){
					new Effect.SlideUp(item, {duration: duration});
					//item.previous().className = '';
					}
				});
										
				new Effect.SlideDown(slideMenu, {duration: duration});
				//elm.className = className;
			}
	}
	
	/* change pages */
	function showPage(id)
	{		
		clearTimeout(timerID);
		timerID = 0;

		switch (id) {
			case 1: 
				location.href = '/';
				break;
			case 2: 
				$('tabs').className = 'investor';				
				new Ajax.Updater('page', '/wps/wcm/connect/tatneft/portal_rus/tabs/investor/',{
					method: 'get',
					evalScripts: true,
					onComplete: function(){
						new Effect.Appear('myAjax');						
						resizePageHard();
					}
				});
				break;
			case 3: 
				$('tabs').className = 'priority';				
				new Ajax.Updater('page', '/wps/wcm/connect/tatneft/portal_rus/tabs/priority/',{				
					method: 'get',
					evalScripts: true,
					onComplete: function(){
						new Effect.Appear('myAjax');
						resizePageHard();
					}
				});
				break;
			case 4: 
				$('tabs').className = 'enterprise';							
				new Ajax.Updater('page', '/wps/wcm/connect/tatneft/portal_rus/tabs/enterprise',{				
					method: 'get',
					evalScripts: true,
					onComplete: function(){
						new Effect.Appear('myAjax');
						resizePageHard();
					}					
				});
				break;
			
			default: 
				$('tabs').addClassName('event'); 
		}	
	}

	function showPageEng(id)
	{		
		clearTimeout(timerID);
		timerID = 0;

		switch (id) {
			case 1: 
				location.href = '/eng';
				break;
			case 2: 
				$('tabs_eng').className = 'investor';				
				new Ajax.Updater('page', '/wps/wcm/connect/tatneft/portal_eng/tabs/investor/',{
					method: 'get',
					evalScripts: true,
					onComplete: function(){
						new Effect.Appear('myAjax');						
						resizePageHard();
					}
				});
				break;
			case 3: 
				$('tabs_eng').className = 'priority';				
				new Ajax.Updater('page', '/wps/wcm/connect/tatneft/portal_eng/tabs/priority/',{				
					method: 'get',
					evalScripts: true,
					onComplete: function(){
						new Effect.Appear('myAjax');
						resizePageHard();
					}
				});
				break;
			case 4: 
				$('tabs_eng').className = 'enterprise';							
				new Ajax.Updater('page', '/wps/wcm/connect/tatneft/portal_eng/tabs/enterprise',{				
					method: 'get',
					evalScripts: true,
					onComplete: function(){
						new Effect.Appear('myAjax');
						resizePageHard();
					}					
				});
				break;
			
			default: 
				$('tabs_eng').addClassName('event'); 
		}	
	}
		
	/* resize page on ajax pages */
	function resizePageHard()
	{		
		/*margin = 15;
		
		$$('#verticalmenu ul').each(function(item)
		{			
			if (item.style.display != 'none')
			{				
				$('verticalmenu').style.height = item.getHeight() - margin + 'px';
			}
		});
		*/
		return false;
	}

	Object.extend(Element,
	{   
  		togglePair: function(element1, element2) 
  		{
	    	Element.toggle(element1);
	    	Element.toggle(element2);
		}
	});

	/* cookies */
	function createCookie(name,value,days) 
	{
		if (days) {
			var date = new Date();
			date.setTime(date.getTime()+(days*24*60*60*1000));
			var expires = "; expires="+date.toGMTString();
		}
		else var expires = "";
		document.cookie = name+"="+value+expires+"; path=/";
	}
   
	function readCookie(name) 
	{
		var nameEQ = name + "=";
		var ca = document.cookie.split(';');
		for(var i=0;i < ca.length;i++) {
			var c = ca[i];
			while (c.charAt(0)==' ') c = c.substring(1,c.length);
			if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
		}
		return null;
	}
   
	function eraseCookie(name) 
	{
		createCookie(name,"",-1);
	}	

	
	/* change menu */
	/* shortcut.add("Shift+1",function()
	{
		eraseCookie('menucolor');
		$('leftMenu').removeClassName('red');
	});
	
	shortcut.add("Shift+2",function()
	{
		createCookie('menucolor', 'red', 365);
		$('leftMenu').addClassName('red');
	});	
	
	Event.observe(window, 'load', function()
	{
		$('leftMenu').className = readCookie('menucolor');
	});
	/* end of */

    var g_top;
	
	function stayHome()
	{	
		nV = $('container').cumulativeScrollOffset().top

		if (nV > g_top)
			document.getElementById('approve-buttons').style.top = (nV);

		if (nV <= g_top)
			$('approve-buttons').style.top = g_top;
	}

	Event.observe(window, 'scroll', function() 
	{
		if ($('approve-buttons'))
		{
			stayHome();
		}
	});

	Event.observe(window, 'load', function () {
		if ($('approve-buttons'))
		{
			var ofs = $('approve-buttons').cumulativeOffset();
			g_top = ofs[1];
			stayHome();
		}
	});