// Startup Functions
function init() {
	changeFontSize(getSelectedFontSizeFromCookie()); // set font size	
}
window.onload = init; 


/* ------------------------------------------------------------------------------  	*/
/* COMMON FUNCTIONS FOR BMO.COM														*/
/* ------------------------------------------------------------------------------  	*/

// Defines root path for referencing images within scipts (root relative paths)
function baseFileURL() {
	return BMO.staticPrefix + "/";
}

// Defines root path for referencing links within scipts (root relative paths)
function baseURL() {
	return BMO.sitePrefix + "/";
}

// Show-Hide Div
function showHide(divName) {
	var getObj = document.getElementById(divName);
	if(getObj == undefined)	{}
	else {
		if(getObj.style.display == "none")	{
			getObj.style.display = 	"block";
		}
		else {
			getObj.style.display = "none";
		}
	}
}

//  Rates bar functionality
function ratesBar() {
	//captureLinkAlt(document.location.href,'','','action=ClickRatesButton');
	var handle = document.getElementById("rnav_ratestools_selector");
	var handle1 = document.getElementById("rates_box");
	var handle2 = document.getElementById("tools_box");
	//newImage = "url(../images/menu_bg.jpg)";
	//handle.style.backgroundImage = newImage;
	handle.className="rnav_ratestools_rates";
	handle1.style.display = "block";
	handle2.style.display = "none";
}

//  Tools bar functionality
function toolsBar() {
	//captureLinkAlt(document.location.href,'','','action=ClickToolsButton');
	var handle = document.getElementById("rnav_ratestools_selector");
	var handle1 = document.getElementById("rates_box");
	var handle2 = document.getElementById("tools_box");
	//newImage = "url(../images/menuTools_bg.jpg)";
	//handle.style.backgroundImage = newImage;
	handle.className="rnav_ratestools_tools";
	handle1.style.display = "none";
	handle2.style.display = "block";
}


// Set Language Preference (en, fr)
function setPreferredLang(lang) {
	setCookie('language',lang,365); // update cookie with preferred language
}

// Get Language Preference (en, fr)
function getPreferredLang() {	
	// Retrieve language preference from cookie
	var getLanguageFromCookie = getCookie('language'); 
	// If cookie doesn't exist, default language is English
	if (getLanguageFromCookie!=null && getLanguageFromCookie!="") {
		return getLanguageFromCookie;
	}
	else {
		return "en";
	}		
}


/* ------------------------------------------------------------------------------  	*/
/* UI Events																		*/
/* ------------------------------------------------------------------------------  	*/


// Opens Content Window 
function openContentWindow(id) {
	var buttonObj = document.getElementById('button_'+id);
	var contentWindowObj = document.getElementById('contentWindow_' + id);
	$(contentWindowObj).fadeIn("slow"); // Show Content Window			
	buttonObj.style.display = "none"; // Hide Read More Button
}		

// Closes Content Window 
function closeContentWindow(id) {
	var buttonObj = document.getElementById('button_' + id);
	var contentWindowObj = document.getElementById('contentWindow_' + id);
	contentWindowObj.style.display = "none"; // Hide Content Window
	$(buttonObj).fadeIn("fast"); // Show Read More button
}

// Show Tooltip
function showToolTip(id) {
	ttObj = document.getElementById(id);
	/*$(ttObj).fadeIn("fast"); */
	ttObj.style.display = "block";
}

// Hide Tooltip
function hideToolTip(id) {
	ttObj = document.getElementById(id);
	ttObj.style.display = "none";	
	//$(ttObj).fadeOut("fast");
}				



/* ------------------------------------------------------------------------------  	*/
/* UTILITY FUNCTIONS																*/
/* ------------------------------------------------------------------------------  	*/

// Create Cookie
function setCookie(c_name,value,expiredays) {
	var exdate=new Date();
	exdate.setDate(exdate.getDate()+expiredays);
	document.cookie=c_name+ "=" +escape(value)+ ((expiredays==null) ? "" : ";expires="+exdate.toGMTString()) + ";path=/"; 
}

// Get Cookie Value
function getCookie(c_name) {
	if (document.cookie.length>0) {
		c_start=document.cookie.indexOf(c_name + "=");
		if (c_start!=-1) {
			c_start=c_start + c_name.length+1;
			c_end=document.cookie.indexOf(";",c_start);
			if (c_end==-1) c_end=document.cookie.length;
			return unescape(document.cookie.substring(c_start,c_end));
		}
	}
	return "";
}


// Replace decimal with comma (French formatting)
function makeFrDecimal(num) {
	return num.replace(/\./, ",");
}

// Go Back 
function goBack() {
	history.go(-1);
}

// Gets value from querystring parameter
function getQuerystring(key, default_) {
  if (default_==null) default_=""; 
  key = key.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regex = new RegExp("[\\?&]"+key+"=([^&#]*)");
  var qs = regex.exec(window.location.href);
  if(qs == null)
    return default_;
  else
    return qs[1];
} 


//  Open URL in parent window (if exists)													
function openPageInParent(url) {

	// Load URL into parent if still open
	if (window.opener && !window.opener.closed) {		
		window.opener.location.href = url;
		window.opener.focus();
	}
	// If parent is not open, open URL in new window
	else {
		var detailsWindow = window.open(url, 'details');
	}
	
}




/* ------------------------------------------------------------------------------  	*/
/* FONT SIZE SELECTION FUNCTIONALITY												*/
/* ------------------------------------------------------------------------------  	*/

// Updates font size selection menu
function updateFontSizeMenu() {
	
	var currentFontSize = getSelectedFontSizeFromCookie(); // get current font size from cookie		
	var menu = "";	
		
	// Create Menu
	menu += '<a href="javascript:setDefaultFontSize(\'small\');" title="Small/Petit"><img id="small_textIcon" src="'+baseFileURL()+'images/smText_' + ((currentFontSize == "small") ? "on" : "off") + '.gif" class="textSizeIcon" alt="Small/Petit"></a>';
	menu += '<a href="javascript:setDefaultFontSize(\'medium\');" title="Medium/Moyen"><img id="medium_textIcon" src="'+baseFileURL()+'images/medText_' + ((currentFontSize == "medium") ? "on" : "off") + '.gif" class="textSizeIcon" alt="Medium/Moyen"></a>';
	menu += '<a href="javascript:setDefaultFontSize(\'large\');" title="Large/Grand"><img id="large_textIcon" src="'+baseFileURL()+'images/bgText_' + ((currentFontSize == "large") ? "on" : "off") + '.gif" class="textSizeIcon" alt="Large/Grand"></a>';	

	// Output Menu to Screen
	document.getElementById('fontSizeMenu').innerHTML = menu;

}

// Get currently selected font size
function getSelectedFontSizeFromCookie() {

	// Retrieve current font size from cookie
	var fontSizeFromCookie = getCookie('fontSize');
	
	// If cookie doesn't exist, current fonsize is Small (default)
	if (fontSizeFromCookie!=null && fontSizeFromCookie!="") {
		return fontSizeFromCookie;
	}
	else {
		return "small";
	}
	
}

// Sets font size for page
function setDefaultFontSize(size) {
	setCookie('fontSize',size,365); // update cookie with selected font size
	changeFontSize(size); // override CSS with select font size
	updateFontSizeMenu(); // update menu
}

// Override CSS with global font size selected by user
function changeFontSize(size) {
	var oldClasses = eval("/large|medium|small/ig"); //sets key words to be eliminated
	var currentClass = document.body.className; //gets the current class names
	document.body.className = currentClass.replace(oldClasses, "") + " " + size; //eliminates key words from string, then adds new size
}


// Functionality for menu rollovers
function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) 
  //alert(x.src);
  //alert(x.oSrc);
  x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

// Replaces decimal with comma for french rates formatting
function makeFrDecimal(num) {
	return num.replace(/\./, ",");
}

// Event handler for sign-in drop down menu
function goSignIn() {
	var si = document.getElementById("signin");
	var idx = si.selectedIndex;
	var url = si.options[idx].value;
	window.location.href = url;
}

// Opener for Popup Windows
function popup(url,width,height) {
	popupWidth = (width == null) ? 500 : width;
	popupHeight = (height == null) ? 600 : height;	
	var newPopupWindow = window.open(url, null, 'scrollbars=1,resizable=1,width='+popupWidth+',height='+popupHeight);
}	

//V6 Popup Windows call
function customPopup(url, features) {
	window.open(url, '', features);
}


/* ------------------------------------------------------------------------------   */
/* LOCATOR FUNCTIONS																*/
/* ------------------------------------------------------------------------------   */

var addressLabel_en = "Enter Street, City or Postal Code";
var addressLabel_fr = "Rue, ville ou code postal";
var provinceLabel_en = "Province";
var provinceLabel_fr = "Province ou territoire";
var transitLabel_en = "Transit Number";
var transitLabel_fr = "Num\u00e9ro de domiciliation";


// Show/Hide Transit Option in Locator Search Form
function toggleTransit(toggle, lang) {
	var toggleObj = document.getElementById('transitInput');	
	if (toggle == "off") { toggleObj.value = (lang == "fr") ? transitLabel_fr : transitLabel_en; }
	toggleObj.disabled = ((toggle == "on" ? false : true));
	//toggleObj.className = ((toggle == "on" ? "" : "disabled"));
	toggleObj.style.display = ((toggle == "on" ? "block" : "none"));	
}

// Handle focus/blur states for Address field in Locator Search form
function initAddressInput(lang) {
	var addressObj = document.getElementById('addressInput');
	if (addressObj.value == ((lang == "fr") ? addressLabel_fr : addressLabel_en )) {
		addressObj.value = "";
	}
	else if (addressObj.value == "") {
		addressObj.value = ((lang == "fr") ? addressLabel_fr : addressLabel_en );
	}
}

// Handle focus/blur states for Transit field in Locator Search form
function initTransitInput(lang) {
	var transitObj = document.getElementById('transitInput');
	if (transitObj.value == ((lang == "fr") ? transitLabel_fr : transitLabel_en )) {
		transitObj.value = "";
	}
	else if (transitObj.value == "") {		
		transitObj.value = ((lang == "fr") ? transitLabel_fr : transitLabel_en );
	}
}

// Submit Locator Search and open results in Popup Window
function submitLocatorSearch(lang) {

	var searchVal = "";
	for (var i=0; i < document.getElementsByName('search').length; i++) {
		if (document.getElementsByName('search').item(i).checked) {
			searchVal = document.getElementsByName('search').item(i).value;
		}
	}
	
	var addressVal = document.getElementById('addressInput').value;
	var provinceVal = document.getElementById('provinceSelect').value;
	var transitVal = document.getElementById('transitInput').value;
	var openWeekendsVal = document.getElementById('openWeekends').checked;
	var languageVal = document.getElementById('lang').value;		
	var LocatorWindow = window.open(' https://locator.bmo.com/Default.aspx?search=' + searchVal + ((addressVal != eval("addressLabel_"+lang)) ? '&address='+addressVal : '') + ((provinceVal != eval("provinceLabel_"+lang)) ? '&province='+provinceVal : '') + ((document.getElementById('transitInput').disabled == false && transitVal != eval("transitLabel_"+lang)) ? '&transit='+transitVal : '' ) + (openWeekendsVal ? "&weekend=true" : "") + '&lang='+languageVal, 'locator', 'width=980,height=725,scrollbars=0,resizable=1,left=125,top=-25');
	
}

// Locator Popup (Handles all Locator Versions)
function openLocator(version, lang) {
	
	var locatorVer; // store query string variable needed to define locator version to display
	var langFlag; 	// store query string variable needed to define language	

	switch (version) {
		case 'branch': locatorVer = "bb"; break; 				// BMO Branch Locator
		case 'mortgage_specialist': locatorVer = "ms"; break; 	// Mortgage Specialist Locator
		case 'lending_specialist': locatorVer = "ils"; break; 	// Investment Lending Specialist Locator
		case 'financial_planner': locatorVer = "fp"; break; 	// Financial Planner Locator
		case 'investment_advisor': locatorVer = "ia"; break;	// Investment Advisor Locator
		case 'hpb': locatorVer = "hpb"; break;	// Investment Advisor Locator		
	}
	
	switch (lang) {
		case 'e': langFlag = "en"; break;	// English
		case 'f': langFlag = "fr"; break; 	// French
	}
	
	var LocatorWindow = window.open('https://locator.bmo.com/Default.aspx?t='+locatorVer+'&lang='+langFlag, 'locator', 'width=980,height=725,scrollbars=0,resizable=1,left=125,top=-25');
} 


/* ------------------------------------------------------------------------------   */
/* BMO.com Search																	*/
/* ------------------------------------------------------------------------------   */

var searchLabel_en = "Search BMO.com";
var searchLabel_fr = "Rechercher sur BMO.com";

// Handle focus/blur states for Search Input field 
function initSiteSearch(lang) {
	var siteSearchObj = document.getElementById('siteSearchInput');
	if (siteSearchObj.value == ((lang == "fr") ? searchLabel_fr : searchLabel_en )) {
		siteSearchObj.value = "";
	}
	else if (siteSearchObj.value == "") {		
		siteSearchObj.value = ((lang == "fr") ? searchLabel_fr : searchLabel_en );
	}
}
