// **** LEVEL 0: Base types management functions

var Platform={
	MSIE: navigator.userAgent.indexOf('MSIE ')>=0,
	WINDOWS: navigator.userAgent.indexOf('Windows')>=0,
	FIREFOX: navigator.userAgent.indexOf('Firefox')>=0,
	DOM: document.getElementById,
	IE4: document.all
}

// var TO_ISO={ '&#655533' : "'" }

// ---- String extended functions

function strLimit(s,l,w) {
 if (w) {
 	var p=s.indexOf(' ');
 	if ((p<0) || (p>w)) l=w;
 }
 if (s.length>l) s=s.substr(0,l-1) + '..';
 return s;
}

function strTrim(s) {
 if (!s) return '';
 s=s.replace(/^\s+|\s+$/g,'');
 return s;
}

function strRepeat(s,n) {
 var res='';
 while (n-->0) res+=s;
 return res;
}

function nl2br(s) { return s.replace(/\r?\n/g,'<br>'); }

function xParse(s,obj) {
 try {
 s=s.replace(/\$\{(.+?)\}/g, function (cero, uno) { with (obj) return eval(uno) } );
 // Warning, "_" added to the sencond member here:
 s=s.replace(/\$([a-z0-9_]+)\.([a-z0-9_]+)/ig, function (cero, uno, dos) { 
			return obj[uno]?obj[uno][dos]:null } );
 s=s.replace(/\$([a-z0-9_]+)/ig, function (cero, uno) { return obj[uno] || '' } );
 s=s.replace(/\$=\{(.+?)\}/g, function (cero, uno) { with (obj) return eval(uno); } );
 return s;
 } catch (e) {
 	alert('xParse!\n\n'+s);
 	return s;
 }
}

String.prototype.xParse=function (obj) { return xParse(this,obj); }
String.prototype.limit=function(l,w) { return strLimit(this,l,w); }
String.prototype.repeat=function (n) {  return strRepeat(this,n); }

function strAddWord(s,w) {
 if (s.indexOf(w)>=0) return s;
 if (w.search(/ $/)>=0) return w + (s || '');
 return s+=(s?' ':'')+w;
}

function strRmWord(s,w) {
 if (s.search(new RegExp('\\b'+w+'\\b'))<0) return s;
// w=new RegExp('^'+w+'\s*|\s*'+w+'\\b');
 w=new RegExp('(^| +)'+w+'( +|$)');
 return s.replace(w,' ').replace(/^ +| $/g,'');
}

String.prototype.trim=function () { return strTrim(this); }
String.prototype.nl2br=function () { return nl2br(this); }
String.prototype.addWord=function (w) { return strAddWord(this,w); }
String.prototype.rmWord=function (w) { return strRmWord(this,w); }

function xSplit(s,c1,c2) {
 var res=[];
 if (!s) return res;
 if (!c1) c1=';';
 if (!c2) c2=',';
 s=s.split(c1), res=[];
 for (var i=0; i<s.length; i++) {
	res[i]=s[i].split(c2);
 }
 return res;
}

function xImplode(v,c1,c2) {
 if (!c1) c1=';';
 if (!c2) c2=',';
 var res='';
 for (var i in v) {
	res+=(res?c1:'') + v[i].join(c2);
 }
 return res;
}

function s2o(s,c1,c2) {
 if (!c1) c1=',';
 s=s.split(c1);
 var res={ };
 for (var i=0; i<s.length; i++) {
	var key=i+1;
	res[key]=s[i];
 }
 return res;
}

function objSubSet(obj,idx) {
 if (typeof(idx)=='string') idx=idx.split(',');
 var res={ };
 for (var i=0; i<idx.length; i++) res[idx[i]]=obj[idx[i]];
 return res;
}

function serialize(obj) {
 var res='';
 for (var i in obj) res+=i+':='+obj[i]+'</>';
 return res;
}

function unserialize(s) {
 var res={ };
 s.replace(/([a-z][a-z0-9]*):=(.*?)<\/>/ig,function(cero,uno,dos) {
 	res[uno]=dos;
 	return '';
 	});
 return res;
}

function contains(s1,s2) { return (','+s1+',').indexOf(','+s2+',')>=0; }

function containsAll(s1,s2) {
 if (typeof(s2)=='string') s2=s2.split(',');
 s1=','+s1+',';
 for (var i=0; i<s2.length; i++)
	if (s1.indexOf(','+s2[i]+',')==-1) return false;
 return true;
}

function containsAny(s1,s2) {
 s1=','+s1+',';
 s2=s2.replace(/,/g,'|');
 s2=new RegExp(',('+s2+'),');
 return (s1.search(s2)>=0);
}

function expandULs(s,cName) {
 if (!cName) cName='faq';
 s=s.replace(/(((\n|^)\*.+)+)/g,function (cero) {
 		cero=cero.replace(/(?:\n|^)\*(.+)/g,'<li>$1');
 		return '<ul class='+cName+'>' + cero + '</ul>';
 	});
 return s;
}

function expandOLs(s) {
 s=s.replace(/(((\n|^)#.+)+)/g,function (cero) {
 		cero=cero.replace(/(?:\n|^)#(.+)/g,'<li>$1');
 		return '<ol class=faq>' + cero + '</ol>';
	});
 return s;
}

function txtMakeup(s) {
 s=s.replace(/\r/g,'');
 s=expandULs(s);
 s=expandOLs(s);
 s=s.replace(/\n\n/g,'<p>');
 s=s.replace(/([.:0-9])\n/g,'$1<br>');
 s=s.replace(/=>new(\d+)/g,'=>[news.html?id=$1]');
 s=s.replace(/=>(hotel|dmc|destination|congress)([0-9]+)/g,'=>[$1_det.html?id=$2]');
// s=s.replace(/\[(.+?)(?: (class=[a-z]+))?\]=>([-@a-z0-9\/.:?=]+)/gi,'<a href="$3" $2>$1</a>');
 s=s.replace(/=>([-@a-z0-9\/.:?=]+)/gi,'=>[$1]');
 s=s.replace(/\[(.+?)(?: (class=[a-z]+))?\]=>\[(.+?)\]/gi,'<a href="$3" $2>$1</a>');
 s=s.replace(/\[(https?:\/\/[^\s]+)\]/,'<a target=_blank href="$1">$1</a>');
 s=s.replace(/\[mailto:(.+?)\]/,'<a href="mailto:$1">$1</a>');
 if (s.search(/^https?:\/\/[^\s]+/)==0) s='<a target=_blank href="'+s+'">'+s+'</a>';
// s=s.replace(/[.:0-9]\n/g,'<br>');
 return s;
}

function objSort(obj,f) {
 var maux=[ ],m;
 for(var i in obj) {
	m=obj[i];
	if (f) m=m[f];
	maux.push({ id: i, v: m });
 }
 maux.sort(function(a,b) { return a.v<b.v?-1:a.v>b.v?1:0; });
 var res={ };
 for (var ID, i=0; i<maux.length; i++) res[ID=maux[i].id]=obj[ID];
 return res;
}

/*
function objSort2(obj,f) { // Maybe faster??
 var aux=[], elem, key;
 for(var i in obj) {
	elem=obj[i], key=f?elem[f]:elem;
	aux.push({ id: i, k: key, v: elem });
 }
 aux.sort(function(a,b) { return a.k<b.k?-1:a.k>b.k?1:0; });
 var res={ };
 for (var i=0; i<aux.length; i++) {
	elem=aux[i];
	res[elem.id]=elem.v;
 }
 return res;
}
*/

// **** LEVEL 1: AJAX management

function TAjaxRequest() {
 var req;
 if (window.XMLHttpRequest && !(window.ActiveXObject)) {
	req = new XMLHttpRequest();
	return req;
 }       
 // branch for IE/Windows ActiveX version
 try {
	req = new ActiveXObject("Msxml2.XMLHTTP");
 } catch(e) {
	req = new ActiveXObject("Microsoft.XMLHTTP");
 }
 return req;
}

function AJAX_call(url,callBack,isXML) {
 var ob=new TAjaxRequest();
 ob.onreadystatechange=function() {
 		if ((ob.readyState==4) && (ob.status==200)) {
 			var s=ob.responseText;
// 			var s=isXML ? ob.responseXML : ob.responseText;
 			callBack(s);
 		}
 }
 ob.open('GET',url);
 ob.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
 if (!Platform.MSIE) {
	ob.strictErrorChecking=false;
	ob.overrideMimeType('text/xml');
 }
 ob.send('');
 return ob;
}

function TXMLObj(s) {
 var obj={ };
 s=s.replace(/<([a-z][a-z0-9]+)>(.+?)<\/\1>/g, function (cero,uno,dos) { obj[uno]=dos; return ''; });
 return obj;
}

function selectionCallBack(s,callerLink) {
 var m;
 if (!(m=s.match(/<response>(.+)?<\/response>/))) return;
 var RESPONSE=TXMLObj(m[1]);
 var popup=getObj('popupSelection');
 if (!popup.origHTML) popup.origHTML=popup.innerHTML;
 var s=popup.origHTML.replace('$target',RESPONSE.target);
 popup.innerHTML=s;
 showPopUp(popup,myX(callerLink)-160,myY(callerLink)-20);
};

function doSelection(me) {
 var defaultSelectionCallBack=function(s) {
	var callerLink=me;
 	if (selectionCallBack)
 		selectionCallBack(s,me);
 	else
 		alert('OK!\n\nSupplier was added to your RFP');
 };
 AJAX_call(me.href+'&mode=notify',defaultSelectionCallBack);
 return false;
}

// **** LEVEL 2: Regexp & Search engine helper functions

function prepareRegExp(s) { return s.replace(/[aeiouáéíóú]/g,function (ch) { return ch; }); }

var TRANSVOCALS={ }
var VX='aáàäâeéèëêiíìïîoóòöôuúùüû';
var RVX=new RegExp('['+VX+']','ig');

function prepareSearch(s) {
 s=s.replace(/ /g,' ?');
 s=s.replace(/\./g,'\\.');
 s=s.replace(RVX, function(cero) { 
 	cero=cero.toLowerCase();
 	var p=Math.floor(VX.indexOf(cero)/5)*5;
 	return '[' + VX.substr(p,5) + ']';
 });
// find luxembourg in luxemburg
 s=s.replace(/(\[(oóòöô|uúùüû)\]){2,3}/g,'[oóòöôuúùüû]+',s);
 return s;
}

// **** LEVEL 3: Array functions for visual table effect methods

function moveRowUp(a,n) {
 var obj=a[n];
 a.splice(n,1);
 a.splice(n-1,0,obj);
 return a;
}

function xInput(v,n,s) {
 if (!s) s='Enter data..';
 var m=n & 0x3FF; n=n >> 10;
 var val=v[n][m] || '';
 if ( (val=prompt(s,val))!=null ) {
	val=val.trim();
	v[n][m]=val;
	return val;
 }
 return false;
}

// **** LEVEL 4: DOM & Browser management

var _DOMObjs={ };

function getObj(n) { return (_DOMObjs[n]) || (_DOMObjs[n]=document.getElementById(n)); }

function getObjContent(n,obj) {
 var o=getObj(n); if (!o) alert(n);
 var s=o.innerHTML;
 if (!o._initContent) o._initContent=s;
 if ((s) && (obj)) s=xParse(s,obj);
 return s;
}

function setObjContent(n,s,obj) {
 if ((s) && (obj)) s=xParse(s,obj);
 var Obj=getObj(n);
 Obj._prevContent=getObjContent(n);
 if (!Obj._firstContent) Obj._firstContent=s;
 return Obj.innerHTML=s;
}

function parseObjContent(n,obj) {
// if (!getObj(n)) alert(n);
 return setObjContent(n,(getObj(n)._initContent || getObjContent(n)),obj);
}

function getLinkObj(s) {
 var links=document.links;
 for (var i=0; i<links.length; i++) {
  var l=links[i];
  if ((l.id==s) || (l.name==s) || (l.hash==s)) return l;
 }
 return false;
}

function myX(me) {
 if (me.offsetX == null)
      me.offsetX=me.offsetParent?myX(me.offsetParent)+me.offsetLeft:0;
 return me.offsetX;
}

function myY(me) {
 if (me.offsetY == null)
      me.offsetY=me.offsetParent?myY(me.offsetParent)+me.offsetTop:0;
 return me.offsetY;
}

function TCookies(s) {
 if (!s) s=document.cookie;
 s+=';';
 var res={ };
 if (s) s=s.replace(/([a-z]+?)=(.+?);/ig,function(cero,uno,dos) { res[uno]=unescape(dos); return ''; });
 return res;
}

function getCookie(n) {
 if (!document.Cookies) document.Cookies=TCookies(document.cookie);
 return document.Cookies[n];
}

function TQueryString(s) {
 if (!s) s=location.search;
 var res={ };
 s=s.replace(/([a-z0_9]+)=([^&]+)/g,function (cero,uno,dos) { res[uno]=unescape(dos); return ''; });
 return res;
}

var QueryString=new TQueryString();

function addBookmark(t,u){
 if (!t) t='ABCevents.com';
 if (!u) u=location.href;
 u=u.replace(/bookmark=yes&?/,'');
 try {
	window.external.AddFavorite(u,t);
 } catch(e) {
 	window.sidebar.addPanel(t,u,'');
 }
 return false;
}

function getPageLang(def) {
 var res;
 if (res=location.pathname.match(/\/(en|es|de|fr|it)\//)) return res[1];
 return def || 'en';
}

var REFRESH_SESSION_TIME=60000*15; 
var REFRESH_SESSION_TIMER;

function updateSession(delayed) {
 if (delayed) return REFRESH_SESSION_TIMER=setTimeout('updateSession()',REFRESH_SESSION_TIME);
 var img=new Image();
 img.onload=function() { updateSession(1); };
 img.src='/apps/updsess.php?keep=1';
}

// **** LEVEL 5: Interface helper functions

function xAlert(msg,v) { alert(msg); return v; }

function xCheck(check,msg,v) {
 if (v==null) v=true;
 if (!check) { alert(msg); return false; }
 return v;
}

var DEFMSG={ 'notavail': 'Not available' }

function chkLink(me,msg) {
 if (me.href=='javascript:void(0)') return xAlert(msg || DEFMSG.notavail,false);
 var l=location.href.split('#');
 return me.href!=l[0];
}

function testLnk(url,me) {
 if (!url) return false;
 window.open(url);
 return false;
}

// **** LEVEL 6: Application environment protocol

function chainOnload(func) {
 var oldCall=window.onload;
 if (!oldCall) return window.onload=func;
 window.onload=function() { oldCall(); func(); }
}

// **** LEVEL 7: Special visual effects support

function setOpacity(obj,n) {
 if (!obj.style) return alert(obj) && false;
 if (n == null) n=obj.opac || 0;
 if (Platform.MSIE)
	obj.filters.alpha.opacity=n;
 else
	obj.style.MozOpacity=n*0.01;
 obj.opac=n;
}

var MOVER_FLAG=false;

function fadeIn(me) {
 if (MOVER_FLAG) { setTimeout(function() { fadeIn(me) }, 100); return false; }
 if ((me) && (typeof(me) == 'string')) me=getObj(me);
 if ((me) && (!me.fadeMark)) {
	me.fadeMark=1; // 1 => Fadding alone
	me.fadeLimit=me.getAttribute('fadeLimit')*1 || 100;
	me.fadeSpeed=me.getAttribute('fadeSpeed')*1 || 5;
	me.opac=0;
 }
 me.opac+=me.fadeSpeed;
 if (me.opac<=me.fadeLimit) {
	setOpacity(me);
	setTimeout(function() { fadeIn(me) },50);
	return;
 }
 var s;
 if (s=me.getAttribute('nextFadeEffect')) setTimeout('fadeIn("'+s+'")',100);
 if (s=me.getAttribute('nextFadeCall')) setTimeout(s,100);
}

function fadeMe(me) { fadeIn(me); return false; }

function expandObjWidth(me,w) {
 me.prevStatus={ 
 	position: me.style.position || 'relative', 
 	width: me.style.width || (me.clientWidth+'px')
 }
 if (w.toString().search(/[0-9]$/)>=0) w+='px';
 me.style.position='absolute';
 me.style.width=w;
 return false;
}

function restoreObjWidth(me) {
 me.style.position=me.prevStatus.position;
 me.style.width=me.prevStatus.width;
}

// **** LEVEL ?: Forms validation & management

/*
var CHARCODES={
	NUL:		0,
	BELL:		7,
	DEL:		8,
	TAB:		9,
	LF:		10,
	FF:		12,
	CR:		13,
	ESC:		27,
	SPC:		32,
	ADM:		33,
	DQUOT:		34,
	SHARP:		35,
	DOLLAR:		36,
	PERCENT:	37,
	AMP:		38,
	APOS:		39,
	BRACKET_OPEN:	40,
	BRACKET_CLOSE:	41,
	ASTERISK:	42,
	CROSS:		43,
	COMMA:		44,
	HYPHEN:		45,
	POINT:		46,
	SLASH:		47
};
*/
function getKeyCode(e) { return window.event ? window.event.keyCode : e.which; }
function getKeyChar(e) { return String.fromCharCode(getKeyCode(e)); }

function isNumDigit(ctl,e) {
 var ch=getKeyChar(e);
 return (ch<' ') || ('0123456789'.indexOf(ch)>=0);
}	

function isFloatDigit(ctl,e) {
 var ch=getKeyChar(e);
 return (ch<' ') || ('0123456789.'.indexOf(ch)>=0);
}	

function isAlphaDigit(ctl,e) {
 var ch=getKeyChar(e);
 return (ch<' ') || (ch.search(/^[a-z]/i)==0);
}	

function isAlNumDigit(ctl,e) {
 var ch=getKeyChar(e);
 return (ch<' ') || (ch.search(/^[a-z0-9]/i)==0);
}

function digitMatches(ctl,e,expr) {
 var ch=getKeyChar(e);
 return (ch<' ') || (ctl.value+ch).search(expr)>=0;
}

function lockCR(ctl,e) {
// Call with onkeypress="return lockCR(this,event)";
 var cod=getKeyCode(e);
 if (cod==-1) return true; // If none? let the key to pass through..
// var ch=String.fromCharCode(cod);
 if (cod==13) return false;
 return true;	
}

var CHECK_PATTERNS={
	asName: /^\w+( \w+)+$/,
	asEmail: /^\w[-.\w]+@[a-z0-9][-.a-z0-9]+\.[a-z]+$/i,
	asPhone: /^\+\d+( \d+)+$/,
	asURL: /^(http:\/\/)?[a-z0-9][-a-z0-9.]+\.[a-z]+(\/[\S]*)?$/i,
	asDateDMY: /^([01]\d|2[0-9]|3[01])[-\/](0\d|1[012])[-\/]\d\d\d\d$/,
	asDateYMD: /^\d\d\d\d[-\/](0\d|1[012])[-\/]\d\d$/,
	asInteger: /^\d+$/,
	asNumber: /^\d*(\.\d+)?$/,
	asNoEmpty: /^.+$/
}

function SELECT_getTextValue(me) { return me.options[me.selectedIndex].text; }

function validateValue(val,patt) {
 var PATTERN;
 if (patt.search(/^[a-z]/)==0) patt=patt.substr(0,1).toUpperCase()+patt.substr(1);
 if (PATTERN=CHECK_PATTERNS['as'+patt]) return val.search(PATTERN)==0;
 return true;
}

function getCheckValues(me) {
 if (!me) alert(me);
// if (me.type='checkbox') return me.checked ? me.value : '';
 var res=[], Obj;
 for (var i=0; i<me.length; i++) if (Obj=me[i]) if (Obj.checked) res.push(Obj.value);
 return res.join(',');
}

function getCheckTextValues(me) {
 var res=[], Obj;
 for (var i=0; i<me.length; i++) if (Obj=me[i]) if (Obj.checked) res.push(Obj.title);
 return res.join(',');
}

function validateCtl(me,check) {
 var OK, msg;
 if (!check) check=me.getAttribute('validateas');
 if (!check) switch(me.type) {
 	case 'checkbox':
// 			alert(me.type+'\n'+me.name+'\n'+me.form[me.name]+'\n'+me.length);
//			( me==me.form[me.name] ? )
			if (!me.form[me.name].length) OK=me.checked; else
 			OK=getCheckValues(me.form[me.name])!=''; break;
 	case 'radio':
 			OK=me.checked; break;
 			
 	default:	OK=(me.value!='');
 } else
	OK=validateValue(me.value,check);

 return OK;
}

function validateForm(me,sending) {
 var ELEMS=me.elements, fail, className;
 var reqMsg=me.getAttribute('reqFieldMsg');
 if (!reqMsg) reqMsg='Error!\nPlease, enter a proper value for field: "#FIELD#"';
 var warnMsg=me.getAttribute('warningFieldMsg');
 if (!warnMsg) warnMsg='It is recommended to provide proper a value for field: "#FIELD#"\n\nAre you sure to left it missing?';
 for (var i=0; i<ELEMS.length; i++) {
	var ctl=ELEMS[i];
//	fail=( (ctl.className=='req') || (ctl.className=='warn') ) && (!validateCtl(ctl)); // (ctl.value=='');
//	if (ctl.name=='N_DELEGS') alert(ctl.className.search(/^req/) + ': ' + validateCtl(ctl));
	fail=( (className=ctl.className) && (className=className.match(/^(req|warn)/)) ) && (!validateCtl(ctl)); // (ctl.value=='');
//	if (ctl.name=='N_DELEGS') alert(ctl.className.search(/^req/) + ': ' + fail);
	if ((!fail) && (checkExpr=ctl.getAttribute('check'))) with (ctl) {
		fail=!eval(checkExpr);
	}

//	if (className) className=className[1];
	if (fail) switch(className=className?className[1]:'') {

		case 'warn':	if (!confirm('Warning!\nIt is recommended to provide proper a value for field: "'+(ctl.title||ctl.name)+'"'+
					'\n\nAre you sure to left it missing?')) 
					ctl.focus();
				return false;

		case 'req':
		default:
				var msg=ctl.getAttribute('msgonfail'); 
				if (!msg) msg=reqMsg;
				alert(msg.replace('#FIELD#',ctl.title || ctl.name));
				ctl.focus();
				return false;
	}
 }

 if ((me.customValidate) || (me.customValidate=window[me.name+'_validate']))
	if (!me.customValidate(me,sending)) return false;

 if (sending) { me.submit(); return false; }
 return true;
}

function sortOptions(opts,fromIdx) { // Inspired by objSort()
 if (!fromIdx) fromIdx=0;
 var len=opts.length, aux=[];
 for(var i=fromIdx; i<len; i++) aux.push(opts[i]);
 opts.length=fromIdx;
 aux.sort(function(a,b) { return a.text<b.text?-1:a.text>b.text?1:0; });
 for (var i=0; i<aux.length; i++) opts.add(aux[i]);
 return opts;
}

// --- Form controls managenement

function TOption(v,s,p) {
 var o=new Option(s,v);
 if (p) p.options.add(o);
 return o;
}

function addOptsToCombo(ctl,objs,l) {
 var o;
 for (var i in objs) {
	if (l) {
		o=new Option(objs[i][l],objs[i].id);
	} else {
		o=new Option(objs[i],i);
	}
	ctl.options.add(o);
 }
 return false;
}

function addGroupOptsToCombo(ctl,objs,l,group) {
 if (!ctl.boundary) ctl.boundary=ctl.getAttribute('optionboundary');
 if (!ctl.boundary) ctl.boundary='-';
 var lastgroup=false;
 for (var i in objs) {
	var obj=objs[i];
	var o=new Option();
	if (lastgroup!=obj[group]) {
//		o.value=ctl.boundary;
//		o.text='--- '+obj[l]+' ---';
		o=new Option('--- '+obj[l]+' ---',ctl.boundary);
		o.className='separator';
		ctl.options.add(o);
		lastgroup=obj[group];
		continue;
	}
	if (l) o=new Option(obj[l],obj.id);
	ctl.options.add(o);
 }
 while (ctl.value==ctl.boundary) ctl.selectedIndex++;
 return false;
}

function fillCombo(ctl,objs,l,group) {
 ctl.options.length=0;
 if (!group)
	return addOptsToCombo(ctl,objs,l);
 else
	return addGroupOptsToCombo(ctl,objs,l,group);
}

function setCheckBox(ctl,val) { ctl.checked=(','+val+',').indexOf(','+ctl.value+',')>=0; }

function setCtl(ctl,val) {
// if (ctl.name.search(/^PAX1/)>=0) alert(ctl.name+': '+val);
 switch(ctl.type) {
	case 'file': return;
	case 'checkbox': setCheckBox(ctl,val); break;
	case 'radio': ctl.checked=ctl.value==val; break;
	case 'select-one': // setCombo(ctl,val); break; // setCombo() is now deprecated!!
 	default: 
//			alert(ctl.type);
//			try {
				ctl.value=val;
//			} catch (e) {
//			}
			
 }
}

function getCtlVal(ctl) { return ctl.value; }

function fillForm(me,obj) {
 var ELEMS=me.elements, fname,fval,m,onFillExpr;
 if (!obj) obj={ };
 for (var i=0; i<ELEMS.length; i++) {
	var ctl=ELEMS[i];
	fval=null;
	if (!(fname=ctl.getAttribute('fillas'))) {
		if ((ctl.value) && (m=ctl.value.match(/^=(.+)/))) {
//			alert(ctl.name+': ' + m[1]);
			fname=m[1];
		} else {
			if ((fname=ctl.name) && (fname.search(/\[\d+\]$/)>=0)) { fname='='+fname; }
		}
	}
	if (fname) {
		if (m=fname.match(/^=(.+)/)) {
			with (obj) fval=eval(m[1]);
//			if (ctl.name.search(/^PAX1/)>=0) alert(m[1]+': '+fval);
		} else {
			fname=fname.replace(/\[\]$/,'');
			fval=obj[fname] || obj[fname.toLowerCase()];
		}
	}
//	alert(ctl.name + ' - ' + obj[name]);
	if (fval!=null) setCtl(ctl,fval);
 }
}

function addCtlClass(ctl,s) { // Add a space trailing in s to prepend className
 if (!ctl.className0) ctl.className0=ctl.className;
 ctl.prevClassName=ctl.className;
 if (s.search(/ $/)>=0) return ctl.className=s + (ctl.className ? ' '+ctl.className : '');
 return ctl.className+=(ctl.className ? ' ' : '') + s;
}

function removeCtlClass(ctl,s) { return ctl.className=ctl.className.rmWord(s.replace(/^ +| +$/,'')); }

function iterateCtls(me,names,func) {
 names=names.split(',');
 for (var i=0, name, is_array; i<names.length; i++) {
 	name=names[i];
 	is_array=(name.search(/\[\]$/)>=0);
 	var ctl=me[name];
 	if (!ctl) continue;
 	if (!is_array) func(ctl);
 	for (var j=0; j<ctl.length; j++) func(ctl[j]);
 }	
 return false;
}

function setCtlStatus(me,names,s) {
 s=!s;
 iterateCtls(me,names,function(ctl) { ctl.disabled=s; });
 return false;
}

function enableCtls(me,names) { return setCtlStatus(me,names,1); }

function disableCtls(me,names) { return setCtlStatus(me,names,0); }

function addClass2Ctls(me,names,s) {
 iterateCtls(me,names,function(ctl) { addCtlClass(ctl,s); });
 return false;
}

function removeClassFromCtls(me,names,s) {
 iterateCtls(me,names,function(ctl) { removeCtlClass(ctl,s); });
 return false;
}

function setCtlClass(me,names,s,b) {
 if (b) addClass2Ctls(me,names,s); else removeClassFromCtls(me,names,s);
 return false;
}


function restoreCtlClass(me,names) {
 iterateCtls(me,names,function(ctl) { if (ctl.className0) ctl.className=ctl.className0; });
}

//**** LEVEL ?????: GUI Management

var currentPopUp=null;
var PopUpStack=[ ];

function pushPopUp() { if (currentPopUp) PopUpStack.push(currentPopUp); }

function showPopUp(n,x,y) {
 if (currentPopUp) currentPopUp.style.visibility='hidden';
 if (!n) {
 	if (oldPopUp=PopUpStack.pop()) return showPopUp(oldPopUp);
	return false;
 }
 var O=typeof(n)=='string'?getObj(n):n;
 if (x) O.style.left=x;
 if (y) O.style.top=y;
 O.style.visibility='visible';
 currentPopUp=O;
 return false;
}

var mouseX, mouseY, dragObj;

function mtrack(e) {
// use e.x & e.y on IE; 
// also window.event.clientX & window.event.clientY could be
// for MSIE, I have been window.event.x & window.event.y too..
// try also e.screenX & e.screenY (for NS)
 var lastX=mouseX, lastY=mouseY;
// mouseX=e.pageX; mouseY=e.pageY;
 mouseX=e.screenX; mouseY=e.screenY;
 if (dragObj) { 
	var dx=mouseX-lastX, dy=mouseY-lastY;
	dragObj.cx+=dx; dragObj.cy+=dy;
	dragObj.style.left=dragObj.cx;
	dragObj.style.top=dragObj.cy;
 }
}

function startDrag(me,e) {
 return;
// var s=''; for (var i in event) s+=i+'='+event[i]+'<br>'; w=window.open(); w.document.write(s);
 me.cx=parseInt(me.style.left);
 me.cy=parseInt(me.style.top);
 mtrack(e);
 dragObj=me;
 document.onmousemove=mtrack;
 document.onmouseup=stopDrag;
}

function stopDrag(e) {
 if (dragObj) dragObj=null;
 document.onmousemove=null;
}

// **** CSS management

function addClass(me,cn) {
 if (me.className.indexOf(cn)>=0) return;
 me.className=strAddWord(me.className,cn);
}

function rmClass(me,cn) {
 if (me.className.indexOf(cn)<0) return;
 me.className=strRmWord(me.className,cn);
}

function hoverMe(me) {
 if (me.origClass) return;
 me.origClass=me.className;
 me.className+=' hover';
}

function unhoverMe(me) {
 if (!me.origClass) return;
 me.className=me.origClass;
 me.origClass=null;
}

// **** LEVEL ??????: Auto generated HTML structures

function MkOptionList(opts,def) {
 var res='';
 for (var i in opts) res+='<option value="'+i+'"'+(i==def?' selected':'')+'>'+opts[i];
 return res;
}

function MkSelect(name,opts,def,xtra) {
 if (!xtra) xtra='';
 var res='<select id="'+name+'" name="'+name+'" '+xtra+'>' + MkOptionList(opts,def) + '</select>';
 return res;
}

function MkCheckList(name,ops,cw,cols,values) {
 if (!cw) cw=22;
 if (!cols) cols=2;
 var perc=Math.floor(100/cols);
 if (values) values=','+values+',';
 if (typeof(ops)=='string') { alert(name); ops=s2o(ops); }
 var l=Math.round(ops.length/2), op, checked='';
 var cells=[ '','','','','','','','','' ], n=0;
 for (var i in ops) {
 	if (values) checked= values.indexOf(','+i+',')>=0 ? 'CHECKED' : '';
	var op=ops[i];
	if (!op) op='FAIL??';
	var s='<input title="'+op+'" type=checkbox class=stdCheck name="'+name+'[]" value="'+i+'" '+checked+'> '+op+'<br>';
	if (op.length<=cw) {
		cells[n%cols]+=s;
		n++;
	} else
		cells[cols]+=s;
 }
 var s='<table width=100% border=0 cellspacing=0 cellpadding=2><tr>';
 for (var i=0; i<cols; i++) s+='<td valign=top width="'+perc+'%">' + cells[i];
 if (cells[cols]) s+='<tr><td colspan='+cols+' valign=top style="padding-top:0">'+cells[cols];
 s+='</table>';
 return s;
}

function MkCheckList2(name,ops,prefs,values) {
 var res='', cols=prefs.split(';'), checked='';
 for (var i=0; i<cols.length; i++) {
 	ncols=cols[i].split(',');
 	res+='<td valign=top align=left><table border=0 cellspacing=0 cellpadding=1 class=lineHeight11>';
 	for (var j=0; j<ncols.length; j++) {
 		var val=ncols[j], op=ops[val].replace('[','<br>[');
	 	if (values) checked= values.indexOf(','+val+',')>=0 ? 'CHECKED' : '';
// 		res+='<tr><td valign=top><input title="'+op+'" type=checkbox class=stdCheck name="'+name+'[]" value="'+val+'" '+checked+'><td valign=top style="line-height:14px"> '+op;
 		res+='<tr><td valign=top><input type=checkbox class=stdCheck name="'+name+'[]" value="'+val+'" '+checked+'><td valign=top style="line-height:14px"> '+op;
 	}
 	res+='</table>';
 }	
 res='<table width=100% border=0 cellspacing=0 cellpadding=0><tr>' + res + '</table>';
 return res;
}

// **** LEVEL: ???: Banners & advisory spaces management

var LANG=getPageLang('en');

function setFilePrefix(s,obj,prefix) {
 if (!s) return '';
 if (s.search(/^[0-9]+\.(gif|jpg)$/)==0)
 	s=prefix + obj.id + '-' + s;
 else if (s.search(/^[0-9]+-[0-9]+\.(gif|jpg)$/)==0)
 	s=prefix + obj.background;
 return s;
}

function TBannersMap(BANNERS,where) {
 this.current=null;
 this.whereShow=where || 'AdSpace1';
 this.BANNERS=BANNERS;
 this.countBanners=0;
 var prev, first=null, ixBanners=[ ];
 var regexp=new RegExp(LANG+'=([0-9]+\\.[a-z]+)','i');
 for (var i in BANNERS) {
	var obj=BANNERS[i];
	var m;
	if (m=obj.s.match(/(\d+)x(\d+)/)) {
		obj.width=m[1];
		obj.height=m[2];
	}
	if (obj.t) {
	 	obj.file='/files/banners/banner-'+i+'-1.'+obj.t;

	} else if (obj.f.search(/^HTML/)>=0) {
		obj.file=obj.f.replace(/\r?\n/g,'\n');
 		obj.file.replace(/^([a-z_]+)=(.+)/gm,function(cero,uno,dos) {
// 					alert(uno+'\n'+dos);
 					obj[uno]=dos;
 					return '';
 				});
 		if (obj.header_background) this.header_background=obj.header_background;	
 		if (!obj.layout) obj.layout='default';
 		if (obj.background) {
	 		if (obj.background.search(/^#[a-f0-9]+$/)==0) {
	 			if (obj.layout=='default') obj.layout+='_plain';
	 			if (!this.header_background) this.header_background=obj.background;
	 		} else
 				obj.background=setFilePrefix(obj.background,obj,'/files/banners/banner-');
 		}
 		if (obj.image) obj.image=setFilePrefix(obj.image,obj,'/files/banners/banner-');
 		if (!obj.color) obj.color='maroon';
 		if (!obj.title_color) obj.title_color=obj.color;
 		if (obj.color.search(/^#/)<0) obj.color='class=' + obj.color;
 		if (obj.title_color.search(/^#/)<0) obj.title_color='class=' + obj.title_color;
	 	obj.t='html';

	} else {
	 	obj.file='/files/banners/banner-'+i+'-';
	 	if (m=obj.f.match(regexp))
	 		obj.file+=m[1];
	 	else if (m=obj.f.match(/[0-9]+\.[a-z]+/))
	 		obj.file+=m[0];
	}
	obj.keepTime=obj.k;
 	if (!first) first=obj;
 	if (prev) prev.nextBanner=obj;
 	prev=obj;
 	ixBanners.push(obj);
 	this.countBanners++;
 }
 if (obj) obj.nextBanner=first;
 this.firstBanner=first;
 this.nextBanner=function(where) {
 	if (!where) where=this.whereShow;
 	if (!this.current) this.current=this.firstBanner;
// 	alert('-- ' + this.current.f);
	var s=getBannerHTML(this.current);
//	if (this.current.t=='html') alert(where+'\n---\n'+s);
	if (where) setObjContent(where,s);
	
	var obj=this.current;
	this.current=this.current.nextBanner;
	return obj;
 }
  if ((obj=getObj('AdSpaceHeader')) && (!obj.initialized)) {
 	obj.initialized=1;
 	if (this.header_background) getObj('AdSpaceHeaderTable').style.background=this.header_background;
 }
 return this;
}

var BannersMap;
var BannerTemplates={
	'default': '<div style="width:178px; height:300px; background: url($background) left top no-repeat">' +
 		'<div style="height: 250px; padding:0 5px" align=left>' +
 		'<a $class href="$u"><img align=center border=0 src="$image" style="margin-top: 5px; margin-bottom: 5px"></a><br>' +
 		'<div $color style="padding-bottom: 5px" align=center><b>$title</b></div><span $color>$text</span>' +
 		' <a href="$u" class="bold red">...+</a>' +
 		'</div>' +
 		'<div align=center style="padding-top: 4px"><a class=bannerBtn href="$u">$button_text</a></div>' +
 		'</div>',
	'default_plain': '<table border=0 cellspacing=0 cellpadding=0 width=178 height=300 style="background: $background">'+
		'<tr><td class=bar1st style="border-width: 0 2px">&nbsp;' +
		'<tr><td class=bar2nd style="border-width: 0 1px">&nbsp;' +
		'<tr><td valign=top style="padding: 1px 4px">' +
	 		'<div $color style="height: 250px" align=center>' +
	 		'<a $class href="$u"><img align=center border=0 src="$image" style="margin-top: 5px; margin-bottom: 5px"></a><br>' +
	 		'<b>$title</b><div style="padding-top: 5px">$text</div>' +
	 		' <a href="$u" class="bold red">...+</a>' +
	 		'</div>' +
 			'<div align=center style="padding-top: 4px"><a class=bannerBtn href="$u">$button_text</a></div>' +
		'<tr><td class=bar2nd style="border-width: 0 1px">&nbsp;' +
		'<tr><td class=bar1st style="border-width: 0 2px">&nbsp;' +
		'</table>',
	'CVB': '<div style="width:178px; height:260px; background: url($background) left top no-repeat">' +
		'<div $title_color style="padding-top: 5px" align=center><b>$title</b></div>' +
 		'<div style="height: 192px; padding:0 5px" align=center>' +
 		'<a $class href="$u"><img align=center border=0 src="$image" style="margin-top: 2px; margin-bottom: 5px"></a><br>' +
 		'<span $color>$text</span>' +
 		'</div>' +
 		'<div align=right style="padding: 2px 5px"><a href="$u" class="bold red px12">...+</a></div>' +

 		'<div align=center style="padding-top: 4px"><a class=bannerBtn href="$u">$button_text</a></div>' +
 		'</div>',

 	'DMC':  '<a href="$u"><img align=center border=0 src="$image" width=128 style="margin-bottom: 4px"></a><br>' +
			'<a class="bold darkgray" href="$u">$title</a><br>' +
			'<a class="bold white px11" href="$u">$text</a>' +
			'<br>'
}

function getBannerHTML(obj) {
// if (!obj) return '';
 if (obj.cacheHTML) return obj.cacheHTML;
 var m, btype, res;
 if (obj.t=='html') {
	if (!(res=BannerTemplates[obj.layout])) res=BannerTemplates['default'];
 	res=res.xParse(obj);
 	obj.cacheHTML=res;
 	if (QueryString.test) alert(res);
 	return res;
 }
 if (m=obj.file.match(/[a-z]+$/)) btype=m[0];
 switch(btype) {
	case 'swf':
		if (!obj.width) obj.width=460;
		if (!obj.height) obj.height=70;
		res='<table border=0 cellspacing=0 cellpadding=0 width=$width><tr><td height=$height><object border=0 classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0" width="$width" height="$height">' +
			'<param name=movie value="$file"><param name=quality value=high>' +
			'<embed border=0 src="$file" quality=high pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" width="$width" height="$height"></embed>' +
			'</object></table>';
		res=res.xParse(obj);	
		break;
	default:
		res='<a target=_blank href="$u"><img border=0 align=center src="$file"></a>'.xParse(obj);
 }
 obj.cacheHTML=res;
 return res;
}

function nextBanner(map) {
 if (!map) map=BannersMap;
// if (map==BannersMap2) alert(map.whereShow);
 var obj=map.nextBanner();
 if (map.countBanners>1) setTimeout(function () { nextBanner(map) }, obj.keepTime || 6000);
}

function startBanners() {
 if (!window.BANNERS) return false;
 if ((!document) || (!document.body)) {
 	setTimeout('startBanners()',1000);
 	return false;
 }
 var AdSpace=getObj('AdSpace1');
 if (!AdSpace) return false;
 var AdSpaceID=AdSpace.getAttribute('AdSpaceID');
 if (!AdSpaceID) return false;
// if (!BANNERS) return false;
 BannersMap=new TBannersMap(BANNERS);
 if (BannersMap.firstBanner) setTimeout('nextBanner()',1000);
}

// **** LEVEL ????: Ads-Audit extra support

function aa_referent(s) {
 var O=document.getElementById('aaImg');
 O.src=O.src.replace(/(?:@.+)?(&.*)$/,'@'+s+'$1');
}

// **** LEVEL ??????: Custom application interface

function sendFile(me,sLegend,sPrompt) {
 if (!sLegend) sLegend=me.getAttribute('dlglegend');
 if (!sPrompt) sPrompt=me.getAttribute('dlgprompt');
 setObjContent('sendFileLegend',sLegend);
 setObjContent('sendFilePrompt',sPrompt);
 showPopUp('sendFilePopUp',myX(me)-200,myY(me)-32);
 return false;
}

var activeFAQ;
var activeFAQModes=[ 'normal', 'bold' ];
var activeFAQMode=0;

function showFAQ(me,where) {
 if (typeof (me) == 'string') me=getObj(me);
 if (activeFAQ) activeFAQ.style.fontWeight=activeFAQModes[activeFAQMode];
 me.style.fontWeight=activeFAQModes[1-activeFAQMode];
 activeFAQ=me;
 var id=me.hash.substr(1);
 if (!where) where='faqAnswer';
 var content=getObjContent('divFaq_'+id);
 setObjContent(where,
      '<p class="title" style="margin:0">' + me.innerHTML + '<p style="margin-top:4px">' +
      content
	);
 getObj(where).scrollTop=0;
 me.blur();
 return false;
}

var FIRST_FAQ_ID;
var FAQIndex_SPLIT=false;

function getFAQIndex(Items,getcontents,sWhere) {
 var res='', contents='';
 if (sWhere) sWhere=",'" + sWhere + "'"; else sWhere='';
 for(var i in Items) {
	if (!FIRST_FAQ_ID) FIRST_FAQ_ID=i;
 	var obj=Items[i];
 	var question=obj.question;
 	if (FAQIndex_SPLIT) { question=question.split(':'); question=question[0]; }
 	res+='<a id=faqLnk'+obj.id+' href="#topic'+i+'" onclick="return swFAQ('+i+',this'+sWhere+')">' + question + '</a>';
 	if (getcontents) contents+='<p><a name="topic'+i+'"></a><b>'+ obj.question +'</b><br>'+txtMakeup(obj.answer);
 }
 if (getcontents) res={ index: res, contents: contents };
 return res;
}

var FAQIndexPlace,swCategCall;

function getXtdFAQIndex(Items,Categs,whereObj,which) {

 if (!swCategCall) swCategCall=function(n) { return getXtdFAQIndex(Items,Categs,whereObj,n); }

 var res='', contents='';
 for(var i in Items) {
	if (!FIRST_FAQ_ID) FIRST_FAQ_ID=i;
 	var obj=Items[i];
 	var cat=Categs[obj.cat];
// 	if (!cat) alert(i + ': ' +obj.cat);
 	if (cat.already) continue;
 	if (!cat.catIndex) cat.catIndex='';
  	var question=obj.question;
 	if (FAQIndex_SPLIT) { question=question.split(':'); question=question[0]; }
 	cat.catIndex+='<a href="#topic'+i+'" onclick="return swFAQ('+i+',this)">' + question + '&nbsp;</a>';
 }
// if (getcontents) res={ index: res, contents: contents };
 if (!which) for (var i in Categs) {
 	var cat=Categs[i];
 	cat.already=1;
 	res+='<a href="#cat'+i+'" onclick="return swCategCall('+i+')">' + cat.name + '</a>'; 
 } else {
 	var cat=Categs[which];
 	res+='<b>' + cat.name + '</b>'+
 		'&nbsp;&nbsp;[<a href="" class=maroon style="display:inline" onclick="swCategCall(); return false;">'+i18n('UpperLevel')+'</a>]' +
		'<br><div style="padding-left:5px">' + (cat.catIndex || '') + '</div>';
 }
 if (whereObj) {
 	FAQIndexPlace=whereObj;
 	whereObj.innerHTML=res;
 }
 return res;
}

function swFAQCateg(n) { return false; }

function getFAQHTML(n) {
 var obj=Items[n];
// if (QueryString.test==2) alert(txtMakeup(obj.answer));
 var res='<p class="title faqTitle" style="margin:0; padding-bottom:4px">' + obj.question + '</p><div>' + txtMakeup(obj.answer) + '<br><br></div>';
 return res;
}

BYPASS_swFAQ=false;

function swFAQ(n,me,sWhere) {
 if (BYPASS_swFAQ) return true;
 if (!me) me=getObj('faqLnk'+n);
 if (me) {
 	if (activeFAQ) activeFAQ.style.fontWeight=activeFAQModes[activeFAQMode]; // 'normal';
 	me.style.fontWeight=activeFAQModes[1-activeFAQMode]; // 'bold';
 	activeFAQ=me;
 }
 if (!sWhere) sWhere='FAQ_Contents';
 setObjContent(sWhere,getFAQHTML(n));
 return false;
}

function i18n(k) { return getObjContent('i18n_'+k); }

function checkLogin(v,s) {
 if ( (s) || (s=getObjContent('i18n_needLogin')) )
 	s=s.replace(/\\n/g,'\n');
 else 
 	s='This option is reserved for registered users.\n\nPlease enter your login and password or start the registration process.';
 return xCheck(window.LOGIN,s);
}

function checkBomLevel(s) {
 if ( (s) || (s=getObjContent('i18n_needLogin')) )
 	s=s.replace(/\\n/g,'\n');
 else 
 	s='This option is reserved for registered users.\n\nPlease enter your login and password or start the registration process.';
 return xCheck(window.LOGIN && window.LOGIN.bl>1,s);
}

function getWeatherLnk(obj) {
 var res='http://www.weather.com/search/enhanced?whatprefs=&what=WeatherLocalUndeclared&lswe=&lswa=WeatherLocalUndeclared&from=search_10day&where=';
 res+=obj.city + ', ' + obj.country;
 return res;
}

function getMapLnk(obj) {
 var m,codPost='',addr='';
 var res='http://maps.google.com/maps?oe=UTF-8&hl=en&tab=wl&q='; // C/ La enramada, 38670 La caleta, spain';

 var address=obj.address.replace(/\r?\n/g,' ');
 
 address=address.replace(/ B\.?P\.? \d+/,'');
 address=address.replace(/(\d+)-\d/,'$1');
 
/*
 if (codPost=row.codpost) {
 
 } else */ 
 if (m=address.match(/(.+?) - (\d{5,7}) -/)) { 
 	addr=m[1]; codPost=m[2] 
 } else {
	if (m=address.match(/(.+) s\/n/i)) addr=m[1];
	else if (m=address.match(/.+,? (km )?\d[-0-9]*/)) addr=m[0];
	else if (m=address.match(/^((Av.|Avda.|C\/|Calle) .+?) -/)) addr=m[1];
	else if (m=address.match(/\d+,? .+/)) addr=m[0];
 	
	if (m=address.match(/\d\d{4,6}/)) {
		codPost=m[0]; addr=address.replace(codPost,'').trim();
	} else if (m=address.match(/- (\d\d) (\d{3,5}) -/)) {
		codPost=m[1]+m[2]; addr=address.replace(m[0],'');
	}
 }

 codPost+=' ' + obj.city + ', ' + obj.country;
 if (addr) {
 	addr=addr.replace(new RegExp('( - )?'+obj.city,'i'),'').replace(obj.country,'').trim() + ', ';
 }
 addr+=codPost;
 res+=addr;
 return res;
}

function initLogin() {
 if (!window.LOGIN) LOGIN=null;
 if ((window.LOGIN) && (getObj('loginArea'))) {
 	if (window.ROW) {
 		if (!ROW.fax) ROW.fax=ROW.events_fax; // For meetingplanners
 		if (!ROW.phone) ROW.phone=ROW.events_phone; // For meetingplanners
 		if (LOGIN['class']=='meetingplanners') {
			if (!ROW.contact_name) ROW.contact_name=ROW.events_contact;
 			var aux=ROW.contact_name.split(/, +/); // ROW is meetingplanner record
	 		if (aux.length>1) {
 				ROW.contact_name=aux[1];
 				ROW.contact_surname=aux[0];
 			}
 			LOGIN.contact_name=ROW.contact_name;
 			LOGIN.contact_surname=ROW.contact_surname;
 			LOGIN.points='0';
 		}
 		if (!ROW.member_name) ROW.member_name=ROW.name;
		if (!ROW.name) ROW.name=ROW.member_name;
 		LOGIN.ROW=ROW;
 	}
	setObjContent('loginArea',getObjContent('loggedArea',LOGIN));
 }

// var pageId=location.pathname.match(/\/meetingplanner\/([a-z_]+)\.html/);
 var pageId=location.pathname.match(/\/(meetingplanner|planevent)\/([a-z0-9_]+)\.html/);
 document.pageId=pageId;
 if (pageId) {
//	if (pageId[1]=='index') pageId[1]='account';
	if ((window.LOGIN) && (pageId[1]=='planevent'))
		pageId='mpLnk_rfps';
	else {
		if (pageId[2]=='index') pageId[2]='account';
		pageId='mpLnk_'+pageId[2];
	}
	var mpLink=getObj(pageId);
	if (mpLink) {
		document.mpLink=mpLink;
	 	mpLink.className='active';
		mpLink.parentNode.active=1;
	}
 }
 var menus='account,office,points'.split(','), obj;
 for (var i=0; i<menus.length; i++) {
	var obj=getObj('mpMenu_'+menus[i]);
	if (!obj) { // alert('mpMenu_'+menus[i]);
			continue;
	}
	if (!obj.active) {
		obj.style.display='none';
		getObj('mpMenuTitle_'+menus[i]).className+=' closed';
	}
 }
 
 setTimeout('startBanners()',3000);
 updateSession(1);
 if (BOM_DOMAIN) setCustomToBOM0();
}

// **** LEVEL 9999: Start things!

function setCustomToBOM0() {
 var aux,aux2;
 document.title=document.title.replace('ABCevents','BestOfMice');
 if (aux=getObj('mainLogo')) aux.src='/images/logo-bom.gif';
 if (aux=getObj('secondaryLogo')) {
	aux.src='/images/logo-trans.gif'; aux.alt='ABCevents.com'; aux.parentNode.href='http://www.abcevents.com/';
 }
 if (aux=getObj('bomMenuNav1Holder')) aux.innerHTML=getObj('auxBomMenuNav1').innerHTML;
 if (aux=getObj('menuNav2')) aux.innerHTML='<br><br>'; // aux.parentNode.removeChild(aux);
 if (aux=getObj('captionMsg')) { aux.innerHTML=aux.getAttribute('bomContent') || 'Hosted Buyer Programme'; aux.height=20; }
 for (var i=0, langs='en,es,de,fr,it'.split(','); i<langs.length; i++)
	getObj('lngLnk_'+langs[i]).href+='meetingplanner/bom.html';
 if (aux=getObj('introText')) {
 	aux.prevHTML=aux.innerHTML;
 	if (aux2=getObj('altIntroText')) 
 		aux.innerHTML=aux2.innerHTML;
 	else if (aux2=aux.getAttribute('bomContent')) {
 		var m;
 		if (m=aux2.match(/^~(.+?)\/(.+)/)) aux2=aux.prevHTML.replace(new RegExp(m[1],'ig'),m[2]);
 		aux.innerHTML=aux2;
	} else
 		aux.innerHTML='<br>';
 }
 if ((window.setCustomToBOM) && ( (QueryString.t=='bom') || (location.pathname.indexOf('bom.html')>0)) ) setCustomToBOM();
}

var BOM_DOMAIN=location.hostname=='www.bestofmice.com'; 
chainOnload(initLogin);
