//MHELPERS.JS: MAYETIC GLOBAL HELPERS - b020	if (typeof mvbJS_mvHelpers == 'undefined'){	var mvLanguagePrefix = "fr";	var BROWSER_ERROR_QP_MODE = 0;	var BROWSER_ERROR_NO_HDLR = 1;	var BROWSER_ERROR_MC_HDLR = 2;	function mvAddHelpers_void() {}	if (typeof mvAddHelpers=='undefined') var mvAddHelpers = mvAddHelpers_void;	var MV_JSFILE_HELPERS 	= "js_mvhelpers"; //this file			var MV_JSFILE_DEFS 		= "js_mvDefs"; //server-specific	var MV_JSFILE_LANGUAGE 	= "js_mvLanguage"; //language-specific	var MV_JSFILE_CUSTOMIZE	= "js_mvCustomize"; //user-customizable JS file		var mvbDynamicLanguage = true; //so a mvLanguage_xx file is included - if false, mvLanguage is included	var mvbBetaVersion = false;	var mvbBetaVersionIcon = false;	var mvbJS_mvHelpers = true;	var mvbDebugMode = false;	var mvbAlertMode = false;	var mvnErrorMode = BROWSER_ERROR_QP_MODE;		// DEBUGGING PURPOSE - TO BE REMOVED IN RELEASE MODE	mvbDebugMode = true;	mvnErrorMode = BROWSER_ERROR_MC_HDLR;		var mvQP2=false;	var mvQP3=false;	var mvQP6=false;	var mvQP7=false;	var mvnQP=7;		//set mvQPx variables according to h_BuildNumber	if (typeof (h_BuildNumber)!='undefined') {		if (h_BuildNumber.indexOf('2')==0) mvQP2=true; else		if (h_BuildNumber.indexOf('35')==0) mvQP6=true; else 		if (h_BuildNumber.indexOf('7')==0) mvQP7=true; else mvQP3=true;	}	else		mvQP6 = true; //by default	if (mvQP2) mvnQP=2; else	if (mvQP3) mvnQP=3; else	if (mvQP6) mvnQP=6;	///////////////////////////////////////	// MV HELPERS			var MV_LNTYPE_VIEW 		= 1;	var MV_LNTYPE_AGENT 	= 2;	var MV_LNTYPE_IMAGE 	= 3;	var MV_LNTYPE_PAGE 		= 4;	var MV_LNTYPE_FORM 		= 5;	var MV_LNTYPE_JSLIB		= 6; // only available in Domino 6 and later	var MV_LNTYPE_DOC 		= 7;		//////////////		var mvbNetscapeBrowser = (navigator.appName.substring(0,3) == "Net");	var mvbInternetExplorer = (navigator.appName == "Microsoft Internet Explorer");	var mvbIsIE = (navigator.userAgent.indexOf("MSIE") != -1);	// True when the browser is an IE one	var mvMainRsrcPath = "../../../main.nsf/";	var mvQPOldRsrcPath="../../../$resources.nsf/h_ResourcesByName/";	var mvQP6RsrcPath="../../../../../qphtml/skins/default/"; // specific QP6 or higher	var mvQPRsrcPath = mvQP6RsrcPath; 	if (mvnQP<6) mvQPRsrcPath = mvQPOldRsrcPath; // if QP2 or QP3, change to mvQPOldRsrcPath	var mvsIncludedJSNames = [];	var mciCurrentUserAccess = (mvQP7?currentUserAccess:Iu);	var mcsUserCanonicalName = (mvQP7?haiku.canonicalName:haiku.TT);	var mcsUserLoginName = haiku.loginName;	var mcsUserName = haiku.userName;	var mcsUserAbbrevName = haiku.AbbrevUserName;		// used for Firefox usage: eval(str), str being like 'rgb(x,y,z)'	function rgb(red, green, blue) {		var rgbcolor='';		var hexdigit='0123456789abcdef';		rgbcolor += hexdigit.charAt(Math.floor(red / 16));		rgbcolor += hexdigit.charAt(red % 16);		rgbcolor += hexdigit.charAt(Math.floor(green / 16));		rgbcolor += hexdigit.charAt(green % 16);		rgbcolor += hexdigit.charAt(Math.floor(blue / 16));		rgbcolor += hexdigit.charAt(blue % 16);		return '#'+rgbcolor.toUpperCase();	}			function mc_serverURL(){			var sPath = window.location.pathname;			var nPos = window.location.href.indexOf(sPath);			return  window.location.href.substr(0, nPos)	}		function mc_httpURLProtocol() {		if (location.protocol.indexOf("https")==0) return "https";		return "http";	}		///////////////////////////	// Mayoo chat management	var chatWindowQP=null;	// called from stlinks.js openIM function	function mcht_qpurl() { return mc_currentRoomURL();}	// difference= QP SERVER LOCATION for HTML files	// so when calling this function, even with IE, sametime HTML files from sametime server are not used anymore	function mcht_initSTLinksAppletParameters() {		 if (haiku.IsSametimeAwarenessAvailable) {			 setSTLinksURL (h_SameTimeServerUrlLocation + "/sametime/stlinks", mvLanguagePrefix,"/sametime/stlinks" ); }	}		// uncomment for more complex sametime customization	/*	function mcht_qpPageURL(nameHTML) { 		//if  sametime customization needed, specify chat HTML path or name 		//for instance using inside main.nsf forms...		return nameHTML;	}	*/		//to use as overwrite the default QP 'Chat' link	function mc_openPeopleOnline () {		var windowUrl = Lh(self) + '/frm_mChat?ReadForm'; 		chatWindowQP = open(windowUrl, "SameTime" + haiku.placeId,"width=330,height=330,resizable=yes,scrollbars=yes,top=100,left=100"); 	}		///////////////////////////	// qp7 helper functions		function  mcqp7_currentRoomDBName() {if (currentRoom && currentRoom.roomNsf) return currentRoom.roomNsf; return "main.nsf"}	///////////////////////////	// general helper functions		function mc_currentRoomDBName() {	return (mvQP7?mcqp7_currentRoomDBName():currentRoom.IW);}	function mc_currentRoomURL() {	return (mvQP7?getAbsoluteRoomURL(self):Lh(self)+"/../"+currentRoom.IW);}	function mc_mainRoomURL() {	return (mvQP7?buildUrl("Main.nsf"):Lh(self)+"/../main.nsf");}	function mc_loginName() { return mcsUserLoginName;}	function mc_abbrevUserName() { return mcsUserAbbrevName;}	function mc_userName() { return mcsUserName;}	function mc_canonicalName() { return mcsUserCanonicalName;}	function mvUserRights() { return mciCurrentUserAccess;}	function mvUserIsManager() { return mciCurrentUserAccess>5;}	function mvUserIsAuthor() { return mciCurrentUserAccess>4;}	function mvUserIsEditor() { return mciCurrentUserAccess>3;} //QP7 usage	function mvUserIsReader() { return mciCurrentUserAccess==2;}	function mvUserMoreThanReader() { return mciCurrentUserAccess>2;}	function mvIsNewDoc() { return h_IsNewDoc == 1;}	function mvIsInEditMode() { return h_isBeingEdited == 1;}	function mvIsPublishedPage() { return h_IsPublished == 1;}	function mvIsAnonym() { return mc_userName()=='Anonymous';}		function mvIsPageAuthor() {		if (mvIsInEditMode()) return false;		if (mvIsAnonym()) return false;		if (typeof h_Authors=='undefined') return false;		var susr=mc_canonicalName().toLowerCase();		var sauthors=h_Authors.toLowerCase();		return sauthors.indexOf(susr)!=-1;	}		function mvURLProtocol() {	if (location.protocol.indexOf("https")==0) return "https://";	return "http://";}	function mvIsHttpsURLProtocol() {return mvURLProtocol()=="https://";	}		function mc_isUserPage() { 		if (h_Type!=0) return false;		if (typeof h_SystemName=='undefined') return true; 		switch (h_SystemName) {			case "" :			case "h_Welcome" :			case "h_PageLibraryInstructions" :			return true;			break;		default: break;		}			return false;	}		function mvIsWinPlatform() {		var sPlatform = navigator.platform;		sPlatform = sPlatform.toLowerCase();		var iExtEnd = sPlatform.indexOf("win");		return (iExtEnd != -1);	}	//27/08/07 - b011	function mvIsWinVista() {		return (navigator.appVersion.indexOf("Windows NT 6.0") != -1 ? true : false);	}		function mvOSPlatform() {		if (mvIsWinPlatform()) return "win";		if (mvIsMacPlatform()) return "mac";		if (mvIsUnixPlatform()) return "unix";		return "unknown";	}			function mvOSBinExtension(sOS) {		if (sOS=="win") return ".exe";		if (sOS=="mac") return ".bin"; //.dmg?		if (sOS=="unix") return ".tar.gz"; //.tar.gz? .rpm ?		return "";	}		function mvIsMacPlatform() {		var sPlatform = navigator.platform;		sPlatform = sPlatform.toLowerCase();		var iExtEnd = sPlatform.indexOf("mac");		return (iExtEnd != -1);	}			function mvIsUnixPlatform() {		var sPlatform = navigator.platform;		sPlatform = sPlatform.toLowerCase();		var iExtEnd = sPlatform.indexOf("unix");		return (iExtEnd != -1);	}			//QP vars redefined	var mvbIsNewDoc = mvIsNewDoc();	var mvbEditMode = mvIsInEditMode();	var mvbOffline = (mvQP7?drF_isOffline():si());	var mPlaceName=(mvQP7?TopRoom:HP);	var mPlaceTitle=(mvQP7?topRoom.roomTitle:HP);				var mvbIsMACOS = mvIsMacPlatform();	var mvbIsWin = mvIsWinPlatform();	var mvbIsUnix = mvIsUnixPlatform();	var mvsOSPlatform = mvOSPlatform();	////////////////////		function mvInit() {		// note: function mvInit() called at the end of this same file				if (mvbDebugMode && mvnErrorMode!=BROWSER_ERROR_QP_MODE)			window.onerror = (mvnErrorMode==BROWSER_ERROR_MC_HDLR?mvErrorHandlerDetailed: mvErrorHandlerStd);		mvIncludeJSName(MV_JSFILE_HELPERS) //just include JS resource name of this file in list of them - to avoid to include it again		// needed js file embedding					mvAddMainResource(MV_JSFILE_DEFS);		mvAddMainResource(MV_JSFILE_CUSTOMIZE);				var mvLanguageJSFile = MV_JSFILE_LANGUAGE;		if (mvbDynamicLanguage) mvLanguageJSFile = mvLanguageJSFile+"_"+ mvLanguageVersion();		mvAddMainResource(mvLanguageJSFile);	}		////////////////////		// JS insertion management - allows not to insert two times a JS resource coming from main.nsf	function mvIncludeJSName(s){		s=s.toLowerCase();		if (s.indexOf('pge_')==0) s = s.substr(4) //remove pge_ prefix		if (s.indexOf('frm_')==0) s = s.substr(4) //remove frm_ prefix		if (s.indexOf('js_')==0) s = s.substr(3) //remove js_ prefix		var nind1 = s.indexOf('?');if (nind1!=-1) s = s.substring(0,nind1) //remove ?xxx suffix		var nind2 = s.indexOf('.');if (nind2!=-1) s = s.substring(0,nind2) //remove .xxx suffix		var n = mvsIncludedJSNames.length;		var zz;		for (zz = 0;zz<n;zz++) if (mvsIncludedJSNames[zz]==s) return false;		mvsIncludedJSNames[n] = s;		return true;	}	function mvNotesURL(s,nType,bFromCurrentLocation) {		var sSuffix='';		if (!nType) nType = mvNotesType(s);		var nind=s.lastIndexOf('?');		if (nind!=-1) s=s.substring(0,nind);			//use of Notes Page instead of JavaScript Library if Domino version less than 6		if (nType == MV_LNTYPE_JSLIB && mvnQP<6) {			if (s.toLowerCase().indexOf('js_')==0) s = s.substr(3) //remove js_ prefix			if (s.toLowerCase().lastIndexOf('.js')!=s.length-3) s = s+'.js';//add .js suffix			nType = MV_LNTYPE_PAGE;			//mvAlert('['s+'] JavaScript Library usable only with Domino6 or later!'); 		}			if (nType == MV_LNTYPE_VIEW) sSuffix = '?OpenView'; else		if (nType == MV_LNTYPE_AGENT) sSuffix = '?OpenAgent'; else		if (nType == MV_LNTYPE_IMAGE) sSuffix = '?OpenImageResource'; else		if (nType == MV_LNTYPE_PAGE) sSuffix = '?OpenPage'; else		if (nType == MV_LNTYPE_FORM) sSuffix = '?ReadForm'; else		if (nType == MV_LNTYPE_DOC) sSuffix = '?OpenDocument'; else		if (nType == MV_LNTYPE_JSLIB) sSuffix = '?OpenJavaScriptLibrary'; else			;		return (bFromCurrentLocation ? Lh(self)+'/' : mvMainRsrcPath)+s+sSuffix;	}		////////////////////	function mvErrorHandlerNone() { return true;}	function mvErrorHandlerStd() { return false;}	function mvErrorHandlerDetailed(msg,urlerr,linenumber) { alert("error:msg:"+msg+"\nurl:"+urlerr+"\nline number:"+linenumber); return true;}			//QP2 & QP6 compatible (but not optimized in QP6)		function mvQPOldRsrc(name) { return mvQPOldRsrcPath+name+'/$FILE/'+name+'?OpenElement';} 			function mvQPRsrc(name) { return mvQPRsrcPath+name;}			function mvAddJSResource(jsName) {		// now check if not already included		if (mvIncludeJSName(jsName+"[online]")) {			document.writeln('<script src="'+mvRsrcPath+jsName+'.js">'); 			document.writeln('<\/script>');		}	}	function mvAddJS(s) {		if (s == null) return;		if (mvIncludeJSName(s))			document.writeln('<script src="'+s+'"><\/script>'); 	}		// returns supposed Notes resource type according to mv naming conventions	function mvNotesType(s) {		if (s == null) return null;		var sl=s.toLowerCase();		var nl=s.length;		if (sl.indexOf('pge_')==0) return MV_LNTYPE_PAGE; //by convention, pge_xx is supposed to be a page		if (sl.indexOf('frm_')==0) return MV_LNTYPE_FORM; //by convention, frm_xx is supposed to be a form		if (sl.indexOf('js_')==0) 	return MV_LNTYPE_JSLIB; //by convention, js_xx is supposed to be a JavaScript Library - usable only in Domino6 or later		if (sl.lastIndexOf('.js')==nl-3) return MV_LNTYPE_PAGE; //by convention xx.js is supposed to be a page		if (sl.lastIndexOf('.gif')==nl-4) return MV_LNTYPE_IMAGE; //by convention xx.gif is supposed to be an image			var nind=sl.lastIndexOf('?');		if (nind!=-1) {			sl=sl.substring(nind+1);			if (sl=='openpage') return MV_LNTYPE_PAGE;			if (sl=='readform') return MV_LNTYPE_FORM;			if (sl=='openjavascriptlibrary') return MV_LNTYPE_JSLIB;			if (sl=='openview') return MV_LNTYPE_VIEW;			if (sl=='openagent') return MV_LNTYPE_AGENT;			if (sl=='openimageresource') return MV_LNTYPE_IMAGE;			if (sl=='opendocument') return MV_LNTYPE_DOC;		}		return null;	}	function mvAddMainResource(s,nType) {		if (s == null) return;		if (mvIncludeJSName(s))			document.writeln('<script src="'+mvNotesURL(s,nType)+'"><\/script>'); 	}		function mvResource(Name) {	return mvRsrcPath+Name+'/$FILE/'+Name+'?OpenElement';}		function mc_xml_syncRequest(url) {		var xmldoc=null;		var xhr_object = null;   		if (window.XMLHttpRequest) // Firefox   			xhr_object = new XMLHttpRequest();   		else if(window.ActiveXObject) // Internet Explorer   			xhr_object = new ActiveXObject("Microsoft.XMLHTTP");   		else return null;				if (typeof xhr_object.overrideMimeType!='undefined')			xhr_object.overrideMimeType("text/xml");							xhr_object.open("GET", url, false);   //sync		xhr_object.send(null);   					if(xhr_object.readyState == 4)			xmldoc=xhr_object.responseXML;		return xmldoc;	}		function mc_xml_members(urlparms) { 		var url='../../../contacts1.nsf/h_Memberslist?ReadViewEntries';		if (urlparms) url+='&'+urlparms; else url+='&Count=-1'		return mc_xml_syncRequest(url)	}		function tgif(){ return mvQPRsrc('transparent.gif');}	function bulletgif(){ return mvQPOldRsrc('hdefaultroundbullet.gif');}	function mvsp(w,h){ var hpart=''; if (h!=0) hpart=' height='+h;document.write('<img src="'+tgif()+'" width='+w+hpart+' alt="" border="0">');}	function mvspl(w,h){var hpart=''; if (h!=0) hpart=' height='+h;document.write('<img src="'+tgif()+'" width='+w+hpart+' alt="" border="0" align="left">');}	//b005	function mjsGetStyle(el,styleProp) {		var oStyle = document.getElementById(el);		var currentVal ="";		if (window.getComputedStyle)					currentVal = window.getComputedStyle(oStyle,null).getPropertyValue(styleProp);			else if (oStyle.currentStyle)					currentVal  = eval('oStyle.currentStyle.' + styleProp);				return currentVal .toUpperCase();	}	function mjsStyleBkcolor(el){		var lprop=(mvbIsIE?'backgroundColor':'background-color');		var lval= mjsGetStyle(el,lprop);		if (lval=="TRANSPARENT") lval="";		if (!mvbIsIE && lval!='') lval = eval(lval);		return lval;	}	function mjsStyleColor(el){		var lprop=(mvbIsIE?'color':'color');		var lval= mjsGetStyle(el,lprop);		if (!mvbIsIE && lval!='') lval = eval(lval);		return lval;	}		function mvIsYes(s, defYesValue) { 		if (s==null) return false;		var sl = s.toLowerCase();		return (sl==mvYesL) || (defYesValue && (sl == defYesValue.toLowerCase()));	}		function mvIsNo(s, defNoValue) { 		if (s==null) return false;		var sl = s.toLowerCase();		return (sl==mvNoL) || (defNoValue && (sl == defNoValue.toLowerCase()));	}		//string compare with ignore case	function mvEqualsIgnoreCase(s,v) { 		if (s==null) return (v==null);		if (v==null) return false;		return (s.toLowerCase()== v.toLowerCase());	}		function lineTR(nbcolspan,height) {	return '<TR><TD'+(nbcolspan? ' colspan='+nbcolspan: ' ')+'><img border="0" src="../qphtml/attachments/transparent.gif" width="1" height="'+height+'"></TD></TR>'}	function dcw_lineTR(nbcolspan,height) {	dcw(lineTR(nbcolspan,height))}	function dcw(a) {document.write(a)}	function mvSetYes(field) { if (field) field.value = mvYes;}	function mvSetNo(field) { if (field) field.value = mvNo;}	function mvSetField(field, bYes) { if (field) field.value = (bYes ? mvYes : mvNo);}		// Get the name for h_Originator - Idem @Name in Notes	function mvUserOriginator() { return bO(h_Originator);}	function mvAlert(sMsg) { if (mvbAlertMode) alert(sMsg);}		// in Gecko (Firefox, Mozilla), attachmentupload name changed	// retrieve QP plugin (Netscape families) upload attachement object	function mvPluginGetUploadAttachment(theForm){		var uObj = null;		if (theForm==null) return null;		if (!mvbNetscapeBrowser) return null; //else IE ==> activeX, not plugin;		if (typeof h_ClientBrowser=="undefined") return null;		if (!h_ClientBrowser.isGecko() && typeof theForm.HaikuUploadAttachment!= "undefined") uObj = theForm.HaikuUploadAttachment; 		if (h_ClientBrowser.isGecko() && typeof theForm.HaikuUploadAttachment0!= "undefined") uObj = theForm.HaikuUploadAttachment0; 		return uObj;	}	function dg2str(n) { return ((n<10)?"0"+n:n);}		function mvDateAsString(datep, bHour, bMin, bSec){		var bBrowserFullYear = false;		//alert('date:'+datep.toLocaleString());		if (navigator.appVersion.substring(0,1) > 3) bBrowserFullYear = true; //b007		var weekDayNumber = datep.getDay(); //0=Dim		var dayNumber = datep.getDate();		var monthNumber = datep.getMonth();		var yearNumber = 0;		var hour = 0;		var min = 0;		var sec = 0;		if (bHour) hour=datep.getHours();		if (bMin) min=datep.getMinutes();		if (bSec) hour=datep.getSeconds();		if (bBrowserFullYear) yearNumber = datep.getFullYear(); else yearNumber = datep.getYear();		return mvDateFormat(weekDayNumber, dayNumber, monthNumber, yearNumber,hour,min,sec);	}			function mvTodayAsString(){		var today = new Date;		return mvDateAsString(today);	}		// language version helpers	function mvLanguageVersion () { return mvLanguagePrefix;}	function mvIsFrenchVersion () { return mvLanguagePrefix == 'fr';}	function mvIsEnglishVersion () { return mvLanguagePrefix == 'en';}	function mvIsSpanishVersion () { return mvLanguagePrefix == 'sp';}		function mvImgFile(sFile){		var sSkinName=h_CurrentSkinName;		if (sSkinName.indexOf('c_')==0) sSkinName=sSkinName.substring(2);		return mvMainRsrcPath+'$defaultview/'+sSkinName+'/$FILE/'+sFile+'?OpenElement&1108135396';	}		function mvImgTag(sFile,sTagSuffix){document.write('<img src="'+mvImgFile(sFile)+'"'+sTagSuffix+'>');}	/////////////////////////////////		//S.A. 19/08/05 - same as mvAddMainResource, buf for CSS (not JS) files- C.G. 22/08/05 integration	function mvAddMainResourceCss(s,nType){		if (s == null) return;		if (mvIncludeJSName(s))    			document.writeln('<link rel="stylesheet" type="text/css" href="'+mvNotesURL(s,nType)+'">'); 	}	// Beta version display on Discussion, Weblog, Poll pages...	function mvBetaVersionCheck(){		if (mvbBetaVersion){			var sBetaText =  '<span class="betaText">(beta version)</span>'; 			if (mvbBetaVersionIcon) 				sBetaText= '<img src="'+mvNotesURL("Beta.gif")+'" alt="Beta">'     			document.write(sBetaText);		}	}		//S.A. 19/08/05 - added a new Function mvPageInit() - - C.G. 22/08/05 integration	//normally called from the beginning of each mv Page main function (i.e. mvDiscussionPage())	function mvPageInit(){		mvBetaVersionCheck() ;		mvAddMainResourceCss("pge_mVGlobalStyles.css") 	}	/////////////////////////////////		// initializations on JS embedding	mvInit();	/////////////////////////////////	// styles & CSS usage with javascript	// ugly workaround for missing support for selectorText in Netscape6/Mozilla	// call onLoad() or before you need to do anything you would have otherwise used	// selectorText for.	var ugly_selectorText_workaround_flag = false;	var allStyleRules;		// code developed using the following workaround (CVS v1.15) as an example.	// http://lxr.mozilla.org/seamonkey/source/extensions/xmlterm/ui/content/XMLTermCommands.js	function ugly_selectorText_workaround() {		if((navigator.userAgent.indexOf("Gecko") == -1) ||		   (ugly_selectorText_workaround_flag)) {			return; // we've already been here or shouldn't be here		}		var styleElements = document.getElementsByTagName("style");		for(var i = 0; i < styleElements.length; i++) {			var styleText = styleElements[i].firstChild.data;			// this should be using match(/\b[\w-.]+(?=\s*\{)/g but ?= causes an			// error in IE5, so we include the open brace and then strip it			allStyleRules = styleText.match(/\b[\w-.]+(\s*\{)/g);		}			if (allStyleRules && allStyleRules.length) {			for(var i = 0; i < allStyleRules.length; i++) {				// probably insufficient for people who like random gobs of 				// whitespace in their styles				allStyleRules[i] = allStyleRules[i].substr(0, (allStyleRules[i].length - 2));			}		}		ugly_selectorText_workaround_flag = true;	}	// setStyleById: given an element id, style property and 	// value, apply the style.	// args:	//  i - element id	//  p - property	//  v - value	//	function setStyleById(i, p, v) {		var n = document.getElementById(i);		n.style[p] = v;	}		// getStyleById: given an element ID and style property	// return the current setting for that property, or null.	// args:	//  i - element id	//  p - property	function getStyleById(i, p) {		var n = document.getElementById(i);		var s = eval("n.style." + p);			// try inline		if((s != "") && (s != null)) {			return s;		}			// try currentStyle		if(n.currentStyle) {			var s = eval("n.currentStyle." + p);			if((s != "") && (s != null)) {				return s;			}		}				// try styleSheets		var sheets = document.styleSheets;		if(sheets.length > 0) {			// loop over each sheet			for(var x = 0; x < sheets.length; x++) {				// grab stylesheet rules				var rules = (mvbIsIE?sheets[x].rules:sheets[x].cssRules);					if(rules.length > 0) {					// check each rule					for(var y = 0; y < rules.length; y++) {						var z = rules[y].style;						// selectorText broken in NS 6/Mozilla: see						// http://bugzilla.mozilla.org/show_bug.cgi?id=51944						ugly_selectorText_workaround();						if(allStyleRules) {							if(allStyleRules[y] == i) {								return z[p];							}									} else {							// use the native selectorText and style stuff							if(((z[p] != "") && (z[p] != null)) ||							   (rules[y].selectorText == i)) {								return z[p];							}						}					}				}			}		}		return null;	}	// setStyleByClass: given an element type and a class selector,	// style property and value, apply the style.	// args:	//  t - type of tag to check for (e.g., SPAN)	//  c - class name	//  p - CSS property	//  v - value		function setStyleByClass(t,c,p,v){		var elements;		if(t == '*') {			// '*' not supported by IE/Win 5.5 and below			elements = (mvbIsIE ? document.all : document.getElementsByTagName('*'));		} else {			elements = document.getElementsByTagName(t);		}		for(var i = 0; i < elements.length; i++){			var node = elements.item(i);			for(var j = 0; j < node.attributes.length; j++) {				if(node.attributes.item(j).nodeName == 'class') {					if(node.attributes.item(j).nodeValue == c) {						eval('node.style.' + p + " = '" +v + "'");					}				}			}		}	}	// getStyleByClass: given an element type, a class selector and a property,	// return the value of the property for that element type.	// args:	//  t - element type	//  c - class identifier	//  p - CSS property	function getStyleByClass(t, c, p) {		// first loop over elements, because if they've been modified they		// will contain style data more recent than that in the stylesheet		var elements;		var lastval=null;		if(t == '*') {			// '*' not supported by IE/Win 5.5 and below			elements = (mvbIsIE) ? document.all : document.getElementsByTagName('*');		} else {			elements = document.getElementsByTagName(t);		}		for(var i = 0; i < elements.length; i++){			var node = elements.item(i);			for(var j = 0; j < node.attributes.length; j++) {				if(node.attributes.item(j).nodeName == 'class') {						if(node.attributes.item(j).nodeValue == c) {						//alert('cname:'+node.attributes.item(j).nodeValue+' c:'+c);						var theStyle = eval('node.style.' + p);						//alert('thestyle:'+theStyle);						if((theStyle != "") && (theStyle != null)) {							return theStyle;						}					}				}			}				}		// if we got here it's because we didn't find anything		// try styleSheets		var sheets = document.styleSheets;					if(sheets.length > 0) {			// loop over each sheet			for(var x = 0; x < sheets.length; x++) {				// grab stylesheet rules				var rules = (mvbIsIE?sheets[x].rules:sheets[x].cssRules);				if(rules && rules.length > 0) {					// check each rule					for(var y = 0; y < rules.length; y++) {						var z = rules[y].style;						// selectorText broken in NS 6/Mozilla: see						// http://bugzilla.mozilla.org/show_bug.cgi?id=51944						ugly_selectorText_workaround();						//alert('allStyleRules:'+allStyleRules);						if(allStyleRules) {							//alert('allStyleRules[y]:'+allStyleRules[y]);							if((allStyleRules[y] == c) ||							   (allStyleRules[y] == (t + "." + c))) {								return z[p];							}									} else {							//some features  does not work:							//FFX: selectorText could be some kinfd of xxx, yyy, {...} 							//so todo=compare with possible extracted text from that format							//FFX: all selectorText are in lowercase														//alert('rules[y].selectorText :'+rules[y].selectorText);							// use the native selectorText and style stuff								var s1=rules[y].selectorText.toLowerCase();								var c1=c.toLowerCase();								var c2= (t + "." + c).toLowerCase();								if (s1==c1 || s1==c2) {								//alert(s1==c1?'c1:'+c:'seltext:'+rules[y].selectorText);							if((z[p] != "") && (z[p] != null)) {								/*						   ((rules[y].selectorText == c) ||							    (rules[y].selectorText == (t + "." + c)))) {*/							    //alert('ok:'+z[p]);								//if (mvbIsIE) return z[p];								lastval=z[p];								}							}						}					}				}			}		}				return lastval;	}	// setStyleByTag: given an element type, style property and 	// value, and whether the property should override inline styles or	// just global stylesheet preferences, apply the style.	// args:	//  e - element type or id	//  p - property	//  v - value	//  g - boolean 0: modify global only; 1: modify all elements in document	function setStyleByTag(e, p, v, g) {		if(g) {			var elements = document.getElementsByTagName(e);			for(var i = 0; i < elements.length; i++) {				elements.item(i).style[p] = v;			}		} else {			var sheets = document.styleSheets;			if(sheets.length > 0) {				for(var i = 0; i < sheets.length; i++) {					var rules = sheets[i].cssRules;					if(rules.length > 0) {						for(var j = 0; j < rules.length; j++) {							var s = rules[j].style;							// selectorText broken in NS 6/Mozilla: see							// http://bugzilla.mozilla.org/show_bug.cgi?id=51944							ugly_selectorText_workaround();							if(allStyleRules) {								if(allStyleRules[j] == e) {									s[p] = v;								}										} else {								// use the native selectorText and style stuff								if(((s[p] != "") && (s[p] != null)) &&								   (rules[j].selectorText == e)) {									s[p] = v;								}							}							}					}				}			}		}	}	// getStyleByTag: given an element type and style property, return	// the property's value	// args:	//  e - element type	//  p - property	function getStyleByTag(e, p) {		var sheets = document.styleSheets;		if(sheets.length > 0) {			for(var i = 0; i < sheets.length; i++) {				var rules = sheets[i].cssRules;				if(rules.length > 0) {					for(var j = 0; j < rules.length; j++) {						var s = rules[j].style;						// selectorText broken in NS 6/Mozilla: see						// http://bugzilla.mozilla.org/show_bug.cgi?id=51944						ugly_selectorText_workaround();						if(allStyleRules) {							if(allStyleRules[j] == e) {								return s[p];							}									} else {							// use the native selectorText and style stuff							if(((s[p] != "") && (s[p] != null)) &&							   (rules[j].selectorText == e)) {								return s[p];							}						}						}				}			}		}			// if we don't find any style sheets, return the value for the first		// element of this type we encounter without a CLASS or STYLE attribute		var elements = document.getElementsByTagName(e);		var sawClassOrStyleAttribute = false;		for(var i = 0; i < elements.length; i++) {			var node = elements.item(i);			for(var j = 0; j < node.attributes.length; j++) {				if((node.attributes.item(j).nodeName == 'class') ||				   (node.attributes.item(j).nodeName == 'style')){				   sawClassOrStyleAttribute = true;				}			}			if(! sawClassOrStyleAttribute) {				return elements.item(i).style[p];			}		}	}}