//Portions are Copyright (c) 2000-2005, Mobular Technologies&#174;, Inc.  All Rights Reserved.
//Mobular and Mobular Technologies are Registered Trademarks of Mobular
//Technologies, Inc.
//All rights reserved.  Unauthorized reproduction prohibited.
//http://www.mobular.com/
//
 
var zoomInEnable = {
	_obj 			: "zoomInImg",
	src 			: "images/zoom_in.gif",
	alt 			: "Zoom in"
}

var zoomInDisable = {
	_obj 			: "zoomInImg",
	src 			: "images/zoom_in_dis.gif",
	alt 			: ""
}

var zoomOutEnable = {
	_obj 			: "zoomOutImg",
	src 			: "images/zoom_out.gif",
	alt 			: "Zoom out"
}

var zoomOutDisable = {
	_obj 			: "zoomOutImg",
	src 			: "images/zoom_out_dis.gif",
	alt 			: ""
}

var firstEnable = {
	_obj 			: "first",
	src 			: "images/rewind.gif",
	alt 			: "First page"
}

var firstDisable = {
	_obj 			: "first",
	src 			: "images/rewind_dis.gif",
	alt 			: ""
}

var previousEnable = {
	_obj 			: "previous",
	src 			: "images/previous.gif",
	alt 			: "Previous page"
}

var previousDisable = {
	_obj 			: "previous",
	src 			: "images/previous_dis.gif",
	alt 			: ""
}

var nextEnable = {
	_obj 			: "next",
	src 			: "images/next.gif",
	alt 			: "Next page"
}

var nextDisable = {
	_obj 			: "next",
	src 			: "images/next_dis.gif",
	alt 			: ""
}
	
var nextDocEnable = {
	_obj 			: "nextdoc",
	src 			: "images/fastforw.gif",
	alt 			: "Next document"
}
	
var nextDocDisable = {
	_obj 			: "nextdoc",
	src 			: "images/fastforw_dis.gif",
	alt 			: ""
}
	
var uiElements = {

	imgSettings : [	
					"_obj",
					"src",
					"alt"
				  ],	 
	
	processImg: function(settings, alt_override) {

		var collection = uiElements.imgSettings;	
		var _obj = settings[collection[0]];
		var obj = document.getElementById(_obj);
		if (obj) {
			for ( var n=1; n < collection.length; n++ ) {
				var setting = collection[n];
				try {
					var _setting = settings[setting];
					if (alt_override && setting == "alt") { _setting = alt_override }
					obj.attributes[setting].value = _setting;					
				} catch (e) { }
			}	
		}		
	}
};

// Event model listeners

function onEngineIdle() {
	
	document.getElementById('active_page_count').innerHTML = "";
	document.getElementById('active_document').innerHTML = g_eKitTitle;
 			
	uiElementsSetState();
	
	//var cover_voting_segment = document.getElementById('cover_voting_segment');
	//var currentDate = new Date();
	//if (cover_voting_segment && currentDate < finalVotingDate) { 
	//	cover_voting_segment.style.visibility = "visible"; 
	//}
	//else
	//{
	//	cover_voting_segment.style.visibility = "hidden";
	//}	  
  
	// Ensure that the top level dropdown menu lines up properly by adjusting the location as necessary.
	var noPx = document.childNodes ? 'px' : 0;
	var offsetPxY = 5;

	var toc_link_x = 0;
	var toc_link_y = offsetPxY;
	var obj = document.getElementById('toc_link');
	var toc_width = obj.offsetWidth;
	while (obj = obj.offsetParent) {
		toc_link_x += obj.offsetLeft
		toc_link_y += obj.offsetTop
	}  
	
	if ( navigator.appName.indexOf("Microsoft") == -1) { toc_link_y = toc_link_y + 2; }  
		document.getElementById('dropdown1').style.left=toc_link_x + toc_width + noPx;
		document.getElementById('dropdown1').style.pixelLeft=toc_link_x + toc_width;
		document.getElementById('dropdown1').style.top=toc_link_y + noPx;
		document.getElementById('dropdown1').style.pixelTop=toc_link_y;  
	// End menu alignment reset
  		
	recreateShowShow();  
	eengine.total_load                   = 1;
		
}
eengineConfig.subscribe( "onEngineIdle()", "eengine.postProcess.engineidle");
	
// this is a workaround until the full themes system can be implemented.
function injectStyle(widget, mySession) {
	if ( mySession.event == -900 ) {
		/* add stylesheet code here like so:
			var css = '.rssCrumbBaseMiddle { background-color: #CCC; }';
		*/
		var css = '';
		css += '.rssWidgetContainer { width:  150px; height: 350px;	}';
		
		// css strings may be entered
		if ( css != '' ) {
			dojo.html.insertCssText(css);
		}
	}
}
eengineConfig.subscribe( "injectStyle", "rssCrumb" );	
	
function onDisplayS2F() {
	uiElementsSetState();	
}    
eengineConfig.subscribe( "onDisplayS2F()", "eengine.postProcess.s2fUI" );

function onDisplayS2D() {
	uiElementsSetState();
}   
eengineConfig.subscribe( "onDisplayS2D()", "eengine.postProcess.s2dUI" );

function onDisplayPrint() {
	uiElementsSetState();
}    
eengineConfig.subscribe( "onDisplayPrint()", "eengine.postProcess.displayprintUI" );

function onDisplayHelp() {
	uiElementsSetState();
}   
eengineConfig.subscribe( "onDisplayHelp()", "eengine.postProcess.helpUI" );

function onDislayPage() {

	var _page_count = eengine.kitData.documents[eengine.kitData.current.doc].pages.length - eengine.kitData.documents[eengine.kitData.current.doc].pageOffset + 1;
	document.getElementById('active_page_count').innerHTML = "of " + _page_count;
	document.getElementById('active_document').innerHTML = eengine.kitData.documents[eengine.kitData.current.doc].title;
		
	// Need this here until the getZoom fix goes into place in 9.4.  Then only the zoom listeners should
	// should need to be invoked.
	uiElementsSetState();

}
eengineConfig.subscribe( "onDislayPage()", "eengine.postProcess.displayPage");

function onDislayCover() {
	
	document.getElementById('active_page_count').innerHTML = "";
	document.getElementById('active_document').innerHTML = g_eKitTitle;
	
	uiElementsSetState();
	
	// Display the Voting / Segment 5
	// var currentDate = new Date();
		
	// var url = "";
	// try { url = eval('voting_link'); } catch (e) { }		
	// var cover_voting_segment = document.getElementById('cover_voting_segment');
	// if (cover_voting_segment && currentDate < finalVotingDate && url != "" && votingEnabled) { 
		// cover_voting_segment.style.visibility = "visible"; 
	// } else if (cover_voting_segment) {
		// cover_voting_segment.innerHTML = "";
		// cover_voting_segment.style.visibility = "hidden";
	// }	

	//Display the Notice of Annual Meeting / Segment 6
	// var cover_notice_segment = document.getElementById('cover_notice_segment');
	// if (cover_notice_segment && currentDate < finalVotingDate && votingEnabled) { 
		// cover_notice_segment.style.visibility = "visible"; 
	// } else if (cover_notice_segment) {
		// cover_notice_segment.innerHTML = "";
		// cover_notice_segment.style.visibility = "hidden";
	// }	
	
}  
eengineConfig.subscribe( "onDislayCover()", "eengine.postProcess.coverUI" );

function uiElementsSetState() { 

	var event = eengine.reporting.getLatest();
	var action = parseInt( event.action, 10 );
	var _alt = "";

	// If the last action is not a pageDisplay (-913), disable the zoom buttons.  If it
	// is a page display, determine the appropriate state for the buttons.
	if (action != -913) {
	    uiElements.processImg(zoomInDisable);
	    uiElements.processImg(zoomOutDisable);		
	} else if (eengine.zoomLvl == 0) {
	    uiElements.processImg(zoomInEnable);
	    uiElements.processImg(zoomOutDisable);			
	} else if (eengine.zoomLvl == 1) {
		uiElements.processImg(zoomInEnable);
	    uiElements.processImg(zoomOutEnable);		
	} else if (eengine.zoomLvl == 2) {
		uiElements.processImg(zoomInDisable);
	    uiElements.processImg(zoomOutEnable);
	}

	if (action != -913) {
	    uiElements.processImg(firstDisable);
	    uiElements.processImg(previousDisable);
	    uiElements.processImg(nextDisable);	
	    uiElements.processImg(nextDocDisable);		
	} else {
		if (isAtKitStart()) { 
			uiElements.processImg(firstDisable);
			uiElements.processImg(previousDisable);
			uiElements.processImg(nextEnable);	
			if (isLastDoc()) { 
				uiElements.processImg(nextDocDisable) 
			} else { 
				_alt = "Next document - " + eengine.kitData.documents[eengine.kitData.current.doc+1].title;
				uiElements.processImg(nextDocEnable, _alt) 
			}			
		} else if (isAtKitEnd()) {
			uiElements.processImg(firstEnable);
			uiElements.processImg(previousEnable);
			uiElements.processImg(nextDisable);	
			uiElements.processImg(nextDocDisable);	
		} else if (isAtDocStart()) { 
			_alt = "Previous document - " + eengine.kitData.documents[eengine.kitData.current.doc-1].title;
			uiElements.processImg(firstEnable, _alt);
			
			_alt = "Previous document - " + eengine.kitData.documents[eengine.kitData.current.doc-1].title + " (last page)";
			uiElements.processImg(previousEnable, _alt);
			
			uiElements.processImg(nextEnable);	
			
			if (isLastDoc()) { 
				uiElements.processImg(nextDocDisable) 
			} else { 
				_alt = "Next document - " + eengine.kitData.documents[eengine.kitData.current.doc+1].title;
				uiElements.processImg(nextDocEnable, _alt) 
			}
		} else if (isAtDocEnd()) {
			uiElements.processImg(firstEnable);
			uiElements.processImg(previousEnable);
			
			_alt = "Next document - " + eengine.kitData.documents[eengine.kitData.current.doc+1].title;	
			uiElements.processImg(nextEnable, _alt);	
			
			if (isLastDoc()) { 
				uiElements.processImg(nextDocDisable) 
			} else { 
				_alt = "Next document - " + eengine.kitData.documents[eengine.kitData.current.doc+1].title;	
				uiElements.processImg(nextDocEnable, _alt) 	
			}		
		} else {
			uiElements.processImg(firstEnable);
			uiElements.processImg(previousEnable);
			uiElements.processImg(nextEnable);	
			if (isLastDoc()) { 
				uiElements.processImg(nextDocDisable) 
			} else { 
				_alt = "Next document - " + eengine.kitData.documents[eengine.kitData.current.doc+1].title;	
				uiElements.processImg(nextDocEnable, _alt) 	
			}			
		}
	}
}
//eengineConfig.subscribe( "uiElementsSetState()", "eengine.postProcess.zoomin" );
//eengineConfig.subscribe( "uiElementsSetState()", "eengine.postProcess.zoomout" );		 

function isAtDocStart() {
	var _current = eengine.kitData.current;
	if ((_current.layout == 1 && _current.page <= 1) || (_current.layout == 0 && _current.page == 0)) {
		return true;
	} else {
		return false;
	}
}

function isAtKitStart() {
	var _current = eengine.kitData.current;
	if (isAtDocStart() && _current.doc == 1) {
		return true;
	} else {
		return false;
	}
}

function isAtDocEnd() {
	var _kit = eengine.kitData;
	var _current = _kit.current;
	if ((_current.layout == 1 && _current.page >= _kit.documents[_current.doc].pages.length - 1) || (_current.layout == 0 && _current.page == _kit.documents[_current.doc].pages.length - 1)) {
		return true;
	} else {
		return false;
	}
}

function isAtKitEnd() {
	var _kit = eengine.kitData;
	var _current = _kit.current;
	if (isAtDocEnd() && _current.doc == _kit.documents.length - 1) {
		return true;
	} else {
		return false;
	}
}

function isLastDoc() {
	var _doc = eengine.kitData.current.doc;
	if (_doc == eengine.kitData.documents.length - 1) {
		return true;
	} else {
		return false;
	}
}

function zoomIn() {
	// First part of the if statement is a work around, I should just be able to call eengine.getZoom(0) to
	// zoom out.  Once all zoom issues are worked out the getZoom calls should go directly into the eesearch.html
	// template file and the zoomIn and zoomOut functions can be deleted.
	if (eengine.kitData.current.layout == 1) {
		eengine.switchLayout();
	} else if (eengine.kitData.current.layout == 0) {
		eengine.getZoom(0);
	}
}

function zoomOut() {
	eengine.getZoom(1);
}	

function goFirst() {
	var _doc = eengine.kitData.current.doc;
	if (isAtDocStart() && !isAtKitStart()) {
		_doc--;
	}
	if (_doc > 0) {
		eengine.writePage(_doc, 0);
	}
}

function goPrevious() {
	var _doc = eengine.kitData.current.doc;
	if (isAtDocStart() && !isAtKitStart()) {
		_doc--;
		var _page = eengine.kitData.documents[_doc].pages.length - 1;		
		eengine.writePage(_doc, _page);
	} else {
		eengine.writePage(-65536);
	}
}

function goNext() {
	var _doc = eengine.kitData.current.doc;
	if (isAtDocEnd() && !isAtKitEnd()) {
		_doc++;		
		eengine.writePage(_doc, 0);
	} else {
		eengine.writePage(65536);
	}
}

function goNextDoc() {
	var _doc = eengine.kitData.current.doc;
	_doc++;	
	if (_doc < eengine.kitData.documents.length) {
		eengine.writePage(_doc, 0);
	}
}

var backup_gShowShow = '';
function initializeCover()
{
  document.getElementById("showFrame").style.visibility = "HIDDEN";
  
  /*if ( ( g_ekitCover != "" ) && ( g_cover == 3 ) ) 
  {
    // Modify g_showShow so that when the user goes back to the kit cover they
    // do not see the single page.
*/
    var new_cover = "";  
    new_cover += "\n<table width=\"814\" height=\"500\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">";
    new_cover += "\n  <tr valign=\"middle\">";
    new_cover += "\n    <td align=\"center\" valign=\"middle\">";
    new_cover += "\n          <h2>";
    new_cover += g_engineTitle;
    new_cover += "\n          </h2>";
    new_cover += "\n          <br />";
    new_cover += "\n          is loading.  Please be patient.";
    new_cover += "\n          <br />";
    new_cover += "\n          <br />";
    new_cover += "\n          <br />";
    new_cover += "\n          <img src=\"images/loading.gif\" alt=\"\" />";
    new_cover += "\n    </td>";
    new_cover += "\n  </tr>";
    new_cover += "\n  <tr>";
    new_cover += "\n    <td><img src=\"images/c.gif\" alt=\"\" width=\"1\" height=\"10\" border=\"0\" /></td>";
    new_cover += "\n  </tr>";
    new_cover += "\n</table>";
	
   document.getElementById("loadingFrame").style.visibility = "HIDDEN";   
   document.getElementById("loadingFrame").innerHTML = new_cover;	   
   document.getElementById("loadingFrame").style.visibility = "VISIBLE";   
 // }

  backup_gShowShow = g_showShow;
  
}

function pageStatusCheck(_pg) {
	if ( eengine.kitData.current.doc > 0 ) {
		if ( window.eengine ) {
			var _pg = '' + trim(document.pageForm.pageStatus.value);
			var _prefix=eengine.navPrefix;
			if ( ( _prefix=='' ) && ( _pg.toLowerCase().indexOf("page") == -1 ) ) {
				_prefix='Page'
			}
			_pg = _prefix + ' ' + _pg;
			
			eengine.goToPage(eengine.kitData.current.doc, (''+_pg) );
		}
	}
	return false;
}

function recreateShowShow() {
	offsetFix();
	fixBreadcrumbs();
	
	// just in case set toc for framed or frameless
	eengine.SetSectionTOC();
	eengine.loadDropdownMenus();	
	
	// reload cover	
	// hide loading screen.. and display cover screen
	document.getElementById("loadingFrame").innerHTML = '';
	document.getElementById("loadingFrame").style.visibility = "HIDDEN";
}

function fixBreadcrumbs() {
  var offset = 1;
  if ( eengine.kitData.documents.length > 1 ) {
	offset = 0;
  }
  
	for ( var d=0; d < eengine.kitData.documents.length; d++ ) {
		var currentDoc = eengine.kitData.documents[d];	
		for ( var _p=0; _p < currentDoc.pages.length; _p++ ) {
			currentDoc.pages[_p].toc = [];
		}
	}
  
	for ( var t=0; t < g_TocRef.length; t++ ) {
		var entry = g_TocRef[t].split('|');

		var _doc = parseInt(entry[0],10);
		if ( offset > 0 ) { 
			_doc--;
		}
		
		var _book = eengine.navigate.gotoPage.evaluateDocPagePattern( [ _doc, entry[1] ] );
		
		var _position = eengine.kitData.documents[_book.doc].pages[_book.page];
		_position.toc[_position.toc.length] = entry[2];
	}
}

function offsetFix() {
eengine.navigate.gotoPage.evaluateDocPagePattern = function(range) {
				var eNavigate = eengine.navigate;
				var book = {
					doc : 0,
					page: 0
				};
		
				var re = /^[0-9]+$/i;

				var testPos = range[0];
				var testPage = range[1];

				if ( re.test(testPos) ) {
					var doc = parseInt(range[0],10);
					if ( doc >= eengine.kitData.documents.length ) {
						doc = doc-1;
					}
					if ( doc <= 0 ) {
						doc = 1;
					}
					book["doc"] = doc;
				} else {
					// 'doc' is a string... check doc names and resolve
					book["doc"] = eNavigate.convertDocName( (''+range[0]) )["doc"];	
				}
				if ( book["doc"] >= eengine.kitData.documents.length ) {
					book["doc"] = book["doc"]-1;
				}

				// check page.. could be an approximate
				var _docs = eengine.kitData.documents;
				var _currentDoc = book["doc"];

				_currentDoc = eengine.kitData.documents[_currentDoc];

				var _pageToUse = -1;

				for ( var _p = 0; _p < _currentDoc.pages.length; _p++ ) {
					var _page = _currentDoc.pages[_p];

					// check.. page could be text.. could be numerical
					eval("var reCurrentTitle = /^(?:Page)*?[ ]*"+range[1]+"$/i;");
					
					var _testTitle = _page.title.replace(/&nbsp;/gi, ' ');
					
					if ( reCurrentTitle.test( _testTitle ) ) {
						// we've a match, use it.
						_pageToUse = _p;
						break;
					}
				}
				if ( _pageToUse == -1 ) {
					// number not there... use as position??
					_pageToUse = (parseInt(range[1],10)-1);
				}
				book["page"] = _pageToUse;

				return book;
			};

		eengine.navigate.transPosToPage = function(idx, useOffset) {	
			var pgStatus = eengine.kitData.current;
			var docs = eengine.kitData.documents;						
			
			var book = {
				doc: -1,
				page: -1
			};
			
			idx = parseInt(idx,10)-1;
			
			if (idx >= 0) {
				if ( idx <= eengine.db.length-1 ) {
					// this performs a mapping between the database array and the DOM.
					var row = eengine.db[idx].split('|');
					var htmlToCompare = row[2];					
					
					// since the old method is by position and the new method is by page... html must be compared.						
					for ( var i=0; i < docs.length; i++ ) {
						// get doc
						var doc = docs[i];
						
						// walk through pages
						for ( var p=0; p < doc.pages.length; p++ ) {
							var page = doc.pages[p];
							
							if ( page.html == htmlToCompare ) {
								//got it and store
								book.doc = i;
								book.page = p;
							}
						}
					}						
					
				}
			}
			
			return book;
		};
}

//-----------------------------------------------------------------------------
// validate checks to see if the form values passed in from the s2f forward are valid.
//-----------------------------------------------------------------------------

function I2U_validate2(fo) {

	// in case the form reference is lost... look again for it.
	if (! fo ) {
		if ( document.data ) {
			fo = document.data;
		} else {
	        if ( eval( this.sFS ) ) {
	           fo = eval(this.sFS+".document.data");
	        }			
		}
	}		
		
    if ( eval( this.sFS ) ) {
		fo = eval(this.sFS+".document.data");
    }
	
	// Cleanse the subject and comments fields of any HTML tags
    if ( fo.subject.value == "" ) {
		return this.shwEr(this.erMsg[11], -1);
	} else {
		fo.subject.value = fo.subject.value.replace( /<[^<|>]+?>/gi, '' );		
	}
	
    if ( fo.Comments.value != "" ) {
		fo.Comments.value = fo.Comments.value.replace( /<[^<|>]+?>/gi, '' );				
	}

	// Let the standard engine code finish the process
	return eengine.validate(fo);
	
}




//---------------- Default showglobal.html variables --------------------------

//----------------------- Segment 8 - Voting ----------------------------------
voting_link_text 			= "CAST YOUR VOTE";
voting_link 				= "";
voting_ends					= "";

// Note: The voting_ends variable must be defined in the following format:
//		 "yyyy-mm-dd".
//-----------------------------------------------------------------------------

//----------------------- Segment 9 - Shareholding management -----------------
shareholding_link_text		= "View and update your shareholding";
shareholding_link 			= "";
//-----------------------------------------------------------------------------

//----------------------- Segment 11 - Useful links ---------------------------
useful1_link_text			= "Company website";
useful1_link 				= "";

useful2_link_text			= "Share price";
useful2_link 				= "";

useful3_link_text 			= "Announcements";
useful3_link 				= "";

useful4_link_text 			= "";
useful4_link 				= "";

useful5_link_text 			= "";
useful5_link 				= "";

useful6_link_text 			= "";
useful6_link 				= "";

useful7_link_text 			= "";
useful7_link 				= "";

useful8_link_text 			= "";
useful8_link				= "";

// Note: For the financials_link variable, enter only the name of the Excel  
//       file being uploaded.  If no financials spreadsheet is being deployed
//       with the AMK, leave the financials_link value blank.
financials_link_text		= "Download financials";
financials_link				= "";  
//-----------------------------------------------------------------------------

//----------------------- Miscellaneous ---------------------------------------
usefulLinksString			= "Useful links";
clickString 				= "Click here";
//----------------------- Miscellaneous ---------------------------------------
