var AJAX_URL_TEST  = 'AjaxURL';
var AJAX_CODE_TEST = 'AjaxCODE';


// ************************
// ***   SWITCH EVENT   ***
// ************************


function GoToEventHomePage(inID) {
	xmlGet('http://www.BrickFair.com/ajax/SwitchEvent.asp?EventID=' + inID, SwitchEvent3);
}
function SwitchEvent3() {
	document.location = '/';
}
function SwitchEvent(inID) {
	// SUBMIT QUERY...
	xmlGet('http://www.BrickFair.com/ajax/SwitchEvent.asp?EventID=' + inID, SwitchEvent2);
}
function SwitchEvent2() {
	RefreshMe(true);
}



// ****************
// ***   AJAX   ***
// ****************



var AjaxResponseHandler;
var AjaxReqObj;

function xmlPost(url, toSend, responseHandler) {
   AjaxResponseHandler = responseHandler;
   xmlOpen("POST", url, toSend);
}
function xmlGet(url, responseHandler) {
   AjaxResponseHandler = responseHandler;
   xmlOpen("GET", url, null);
}
function xmlOpen(method, url, toSend) {
    if (window.XMLHttpRequest) {
        // browser has native support for XMLHttpRequest object
        AjaxReqObj = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
        // try XMLHTTP ActiveX (Internet Explorer) version
        AjaxReqObj = new ActiveXObject("Microsoft.XMLHTTP");
    }

    if(AjaxReqObj) {
        AjaxReqObj.onreadystatechange = KeepTrying;
        AjaxReqObj.open(method, url, true);
        AjaxReqObj.setRequestHeader("content-type","application/x-www-form-urlencoded");
        AjaxReqObj.send(toSend);
    } else {
        alert('Your browser does not seem to support XMLHttpRequest.');
    }
}
function KeepTrying() {
   //alert('readyState = ' + AjaxReqObj.readyState + '\nstatus = ' + AjaxReqObj.status);
   if ((AjaxReqObj.readyState == 4) && (AjaxReqObj.status == 200)) {
      if (AjaxResponseHandler) {
         AjaxResponseHandler();
      }
   }
   return;
}
function getNode(parent, tagName) {
    var i;
    var max = parent.childNodes.length;

    // Check each child node
    for(i = 0; i < max; i++) {
        if(parent.childNodes[i].tagName) {
            if(parent.childNodes[i].tagName.toUpperCase() == tagName.toUpperCase()) {
                // We found a matching child node; return it.
                return parent.childNodes[i];
            }
        }
    }
    // One was not found; return null
    return null;
}
function getNodesWithKey(parent, tagName, key) {
    var i;
    var cellNodes = parent.getElementsByTagName(tagName);
    var max = cellNodes.length;

    // Check each cell node for the specified value for
    // the 'key' attribute
    for(i = 0; i < max; i++) {
        if(cellNodes[i].getAttribute('key') == key) {
            // We found a matching cell node; return it.
            return cellNodes[i];
        }
    }
    // One was not found; return null
    return null;
}

var AJAX_TARGET;
function AjaxThat(inURL, inTarget) {
	// MEMORIZE WHAT WE'RE WORKING ON...
	AJAX_TARGET = inTarget;

	// URL...
	inURL = 'http://www.BrickFair.com/ajax/' + inURL
	if (inURL.indexOf('?') > 0) {
		inURL = inURL + '&';
	} else {
		inURL = inURL + '?';
	}
	inURL = inURL + 'Target=' + AJAX_TARGET;

	// DEBUG?...
	if (String(window.location).indexOf(AJAX_URL_TEST) > 0) {
		if (!confirm('THIS DEBUGGING MESSAGE PROMPTED BY CODE "' + AJAX_URL_TEST + '" IN THE URL:\n\ninURL:\n\n' + inURL)) return;
	}

	// DO IT...
	xmlGet(inURL, AjaxThat2);
}
function AjaxThat2() {
	// VARS...
	var tResult;
	var tCode;

	// GET RESULTS...
	tResult = ReadHtmlTagStr('RESULT', AjaxReqObj.responseText);
	tCode   = ReadHtmlTagStr('CODE',   AjaxReqObj.responseText);

	// SHOW RESULT...
	SetInnerHtml(AJAX_TARGET, tResult);

	// CLEAR STUFF...
	AJAX_TARGET = '';

	// DEBUG?...
	if (String(window.location).indexOf(AJAX_CODE_TEST) > 0) if (!confirm('THIS DEBUGGING MESSAGE PROMPTED BY CODE "' + AJAX_CODE_TEST + '" IN THE URL.\n\nNOW EXECUTING THE FOLLOWING CODE:\n\n' + tCode)) return;
	// ANY CODE?...
	if (tCode != '') eval(tCode);
}




// *******************************
// ***   ALT LINKS   ***
// *******************************



function ShowAltLink(sText) {
	ShowAltLink(sText);
}

function ShowAltLink(sText) {
   var sLinks = sText.split(',');
   var pos;
   var letter;
   var linkText;
   var linkID;
   
   document.write('<ul class="AltKeys">');
   // FOR EACH LINK...
   for (var x = 0; x < sLinks.length; x++) {
      // DEFAULT...
      letter = '';
      linkText = sLinks[x];

      // FIND DOT...
      pos = sLinks[x].indexOf('.');

      if (pos > -1) {
         // LINK LETTER...
         letter = sLinks[x].charAt(pos + 1);
         // CLEAN LINK...
         linkText = sLinks[x].substring(0, pos) + '<u>' + letter + '</u>' + sLinks[x].substring(pos + 2, sLinks[x].length);
         linkID = 'href_' + sLinks[x].substring(0, pos) + letter + sLinks[x].substring(pos + 2, sLinks[x].length);
			linkID = linkID.replace(' ', '_');
         // linkID = href_Save, for example
         sLinks[x] = sLinks[x].substring(0, pos) + sLinks[x].substring(pos + 1, sLinks[x].length);
      }

      // SHOW AND TELL...
      letter = letter.toUpperCase();
      document.write('<li><a id=' + linkID + ' accesskey="' + letter + '" tabindex=-1 title="' + sLinks[x] + '." href="javascript:DoSomething(\'' + letter + '\');" >' + linkText + '</a></li>');
   }
   document.write('</ul>');
}



// *******************************
// ***   CLOSE WINDOW   ***
// *******************************



function CloseWindowNow(bRefresh) {
   // REFRESH CALLER...
   if (window.top.opener) {
		if (window.top.opener.RefreshMe) {
			window.top.opener.RefreshMe(bRefresh);
		}
	}
   window.top.close();
}
function CloseWindowSoon(iSeconds, bRefresh) {
   iSeconds = iSeconds * 1000
   setTimeout('CloseWindowNow(' + bRefresh + ')', iSeconds);
}
function CloseAndResubmitCallerForm() {
   if (window.opener) {
		if (window.opener.document.frmMain) {
			window.opener.document.frmMain.submit();
		}
	}
   window.close();
}



// *******************************
// ***   COOKIES   ***
// *******************************


function setCookie(NameOfCookie, value, expiredays) {
   var ExpireDate = new Date();
   var NewCookie;
   if (!(expiredays >= -1)) { expiredays = 120; }
   ExpireDate.setTime(ExpireDate.getTime() + (expiredays * 24 * 3600 * 1000));
   NewCookie = NameOfCookie + '=' + escape(value);
   NewCookie = NewCookie + '; expires=' + ExpireDate.toGMTString();
   //NewCookie = NewCookie + '; domain=.BrickFair.com';
   NewCookie = NewCookie + '; path=/';
   document.cookie = NewCookie;
}
function getCookie(NameOfCookie, inDefault) {
   var begin;
   var end;
   
   if (document.cookie.length > 0) {
      begin = document.cookie.indexOf(NameOfCookie+"=");
      if (begin != -1) {
         begin += NameOfCookie.length+1;
         end = document.cookie.indexOf(";", begin);
         if (end == -1) {
            end = document.cookie.length;
         }
         return unescape(document.cookie.substring(begin, end));
      }
   }
   return inDefault;
}
function deleteCookie(NameOfCookie) {
   setCookie(NameOfCookie, 0, -1);
}
function testCookie() {
   setCookie('Testing', 2, 1);
   var answer = getCookie('Testing', -1);
   deleteCookie('Testing');
   return (answer == 2);
}



// *******************************
// ***   FOCUS OBJ   ***
// *******************************



function ClickOnlyHref(Clear1, Clear2) {
   // REQUIRES THE DOCUMENT TO HAVE HREF LINKS NUMBERED
   // LIKE href1, href2, href3, etc.

   var h1 = document.getElementById('href1');
   var h2 = document.getElementById('href2');

   // IF HREF1 EXISTS BUT HREF2 DOES NOT, THEN CLICK HREF1...
   if ((h1) && !(h2)) {
      // Check for .Click() function because FireFox doesn't have that(?)
      if (eval(h1.click)) { h1.click(); }
      return;
   }

   // OTHERWISE, CLEAR OUT THE OTHER PAGES...
   // Do this 1st, so that Clear2 is always the Frame3 window, if needed...
   if (!Clear2) {
      Clear2 = Clear1;
      Clear1 = null;
   }

   var wind;
   var loc;
   if (Clear1) {
      wind = eval('parent.' + Clear1);
      loc = new String(wind.location);
      if (loc.indexOf('BlankWithLogo.htm') < 0) {
         wind.location = '../BlankWithLogo.htm';
      }
   }
   if (Clear2) {
      wind = eval('parent.' + Clear2);
      loc = new String(wind.location);
      if (loc.indexOf('Blank.htm') < 0) {
         wind.location = '../Blank.htm';
      }
   }
}
function FocusFirstHref() {
   // REQUIRES THE DOCUMENT TO HAVE HREF LINKS NUMBERED
   // LIKE href1, href2, href3, etc.

   var h1 = document.getElementById('href1');
   if (h1) {
      h1.focus();
   }
   return;
}
function FocusObj(inID) {
	FocusObj(inID);
}
function FocusObj(inID) {
   var h1 = document.getElementById(inID);
   if (h1) {
      h1.focus();
      if (h1.select) {
         h1.select();
         return true;
      }
   }
}



// *******************************
// ***   INNER HTML   ***
// *******************************



function SetInnerHtml(inObj, inStr) {
   if ('*' + inObj.id + '*' == '*undefined*') {
      inObj = document.getElementById(inObj);
   }
   if (!inObj) {
      return false;
   }
   inObj.innerHTML = inStr;
   return true;
}
function AddInnerHtml(inObj, inStr) {
	SetInnerHtml(inObj, GetInnerHtml(inObj) + inStr);
	return;
}
function GetInnerHtml(inObj) {
   if ((inObj != '[object]') && (inObj != '[object HTMLDivElement]') && (inObj != '[object HTMLSpanElement]')) {
      inObj = document.getElementById(inObj);
   }
   if (!inObj) {
      return '[Error]';
   }
   return inObj.innerHTML;
}
function ReadHtmlTagStr(inTag, inText) {
   var Tag1 = '<'  + inTag + '>';
   var Tag2 = '</' + inTag + '>';
   var xx1 = inText.indexOf(Tag1) + Tag1.length;
   var xx2 = inText.indexOf(Tag2);
   if ((xx1 == 0) || (xx2 == 0) || (xx2 < xx1)) {
      return '';
   }
   return inText.substring(xx1, xx2);
}




// *******************************
// ***   POPUP WINDOW   ***
// *******************************



function PopUpWindow(inFile, bShowStatus, inWindowName, inWidth, inHeight) {
   // Must -- I mean MUST -- use RELATIVE directory in order for this to work!  Cannot use "http://www..."
   if (!inWidth)  { inWidth  = 0; }
   if (!inHeight) { inHeight = 0; }
   if (inWidth  == 0) { inWidth  = 300; }
   if (inHeight == 0) { inHeight = 300; }

   var settings;
   if (bShowStatus) {
      settings = '';
   } else {
      settings = 'scrollbars=yes,toolbar=no,directories=no,menubar=no,resizable=yes,dependent=yes,width=' + inWidth + ',height=' + inHeight + ',left=10;top=10';
   }
   if (inWindowName == null) {
      inWindowName = 'Help_Popup';
   }
	
	var WIN = self.open(inFile, inWindowName, settings);

	// ENSURE POPUP WORKED...
	if (!WIN) {
		alert('Pop-up blocked!\n\nBrickFair tried to show you a pop-up window, but your browser blocked it :(\n\nPlease alter your browser settings to accept pop-up windows from www.BrickFair.com.');
	}
}
function PopDownWindow(inPage) {
   var callerDoc = window.opener;
   if (callerDoc) {
      callerDoc.location = inPage;
	}
   CloseWindowNow(false);
   return;
}



// *******************************
// ***   SHOW HIDE   ***
// *******************************



// All the damn options...
var isNS4 = (document.layers) ? true : false;
var isIE4 = (document.all && !document.getElementById) ? true : false;
var isIE5 = (document.all && document.getElementById) ? true : false;
var isNS6 = (!document.all && document.getElementById) ? true : false;
var isNS = (isNS4 || isNS6);
var isIE = (isIE4 || isIE5);

function ShowHideB(object, YesNo) {
	ShowHide(object, YesNo);
}
function ShowHide(object, YesNo) {
   var IsVis = YesNo ? 'block' : 'none';
   if (isNS4) {
      document.layers[object].display = IsVis;
   } else if (isIE4) {
      document.all[object].style.display = IsVis;
   } else if (isNS6 || isIE5 || isFirefox()) {
      var elm = document.getElementById(object);
      if (elm) {
         elm.style.display = IsVis;
      }
   }
}
function IsVisible(inObID) {
	if (!document.getElementById(inObID)) return;

	// DO IT...
   if (isNS4) {
      return (document.layers[inObID].display != 'none');
   } else if (isIE4) {
      return (document.all[inObID].style.display != 'none');
   } else if (isNS6 || isIE5) {
      var elm = document.getElementById(inObID);
      return (elm.style.display != 'none');
   }
   return false;
}



// *******************************
// ***   SIZE WINDOW   ***
// *******************************



function SizeWindowToBody() {
   var WinUp;
   var WinAcross;
   var DocUp;
   var DocAcross;
   var ScrollAcross;
   var ScrollUp;
   var TotLoopCount;
   var MAXLOOPCOUNT = 70;
   var INCREASEBY = 18;

   // FOCUS THIS WINDOW...
   window.focus();

   // MAKE SMALLER...
   window.resizeTo(450, 300);

   // MAKE WIDER UNTIL DONE...
   TotLoopCount = 0;
   WinAcross = window.screen.width;
   ScrollAcross = window.document.body.scrollWidth;
   do {
      TotLoopCount = TotLoopCount + 1;
      window.resizeBy(INCREASEBY, 0);
      DocAcross = window.document.body.clientWidth;
   }
   while ((DocAcross < WinAcross) && (DocAcross < ScrollAcross) && (TotLoopCount < MAXLOOPCOUNT))

   // MAKE TALLER UNTIL DONE...
   TotLoopCount = 0;
   WinUp = window.screen.height - 120;
   ScrollUp = window.document.body.scrollHeight;
   do {
      TotLoopCount = TotLoopCount + 1;
      window.resizeBy(0, INCREASEBY);
      DocUp = window.document.body.clientHeight;
   }
   while ((DocUp < WinUp) && (DocUp < ScrollUp) && (TotLoopCount < MAXLOOPCOUNT))

   // ONE LAST TIME FOR SAFETY...   
   window.resizeBy(INCREASEBY, INCREASEBY);
}



// *******************************
// ***   SWAP IMAGE   ***
// *******************************



function SwapImage(Button) {
   if (Button.src.lastIndexOf('-Off') > 0) {
      Button.src = Button.src.substring(0, Button.src.lastIndexOf('-O')) + '-On.gif';
   } else {
      Button.src = Button.src.substring(0, Button.src.lastIndexOf('-O')) + '-Off.gif';
   }
}


// *******************************
// ***   REFRESH ME   ***
// *******************************

function RefreshMe(bRefresh) {
	if (bRefresh) {
		document.location = document.location;
	}
}


// ***********************
// ***   FAUX POP-UP   ***
// ***********************


function ShowBox(evt, boxName, objFocus) {
	// VARS...
	var x, y;
	var box = document.getElementById(boxName);
	var IE = false;

	// BROWSER SNIFFER...
	if (navigator.appName == "Microsoft Internet Explorer") {
		IE = true;
	}
	
	if (evt == null) {
		x = 100;
		y = 100;
	} else if (IE) {
		x = evt.clientX + document.body.scrollLeft;
		y = evt.clientY + document.body.scrollTop;
	} else {
		x = evt.pageX;
		y = evt.pageY;
	}
	
	// ADJUST...
	x = x - 15;
	y = y - 45;
	if (x < 0) x = 15;
	if (y < 0) y = 15;

	// SET LOCATION...
	box.style.left = x + 'px';
	box.style.top = y + 'px';

	// SHOW IT...
	ShowHide(boxName, true);
	FocusObj(objFocus);
	return;
}

function GetEventX(evt) {
	// VARS...
	var IE = false;

	// BROWSER SNIFFER...
	if (navigator.appName == "Microsoft Internet Explorer") {
		IE = true;
	}
	
	if (evt == null) {
		return 100;
	} else if (IE) {
		return evt.clientX + document.body.scrollLeft;
	} else {
		return evt.pageX;
	}
}
function GetEventY(evt) {
	// VARS...
	var IE = false;

	// BROWSER SNIFFER...
	if (navigator.appName == "Microsoft Internet Explorer") {
		IE = true;
	}
	
	if (evt == null) {
		return 100;
	} else if (IE) {
		return evt.clientY + document.body.scrollTop;
	} else {
		return evt.pageY;
	}
}
function ShowFauxC(evt, inURLc) {
	// SHOWS FAUX POP-UP WINDOW.
	// CALLS AJAX PAGE TO RETRIEVE DATA (BASED ON URL), BUT DOES NOT ATTACH TO ANY INPUT TEXT BOX.  SIMPLY SHOWS POP-UP.
	// ASSUMES BASE HREF IS /AJAX/ FOLDER.
	
	// VARS...
	var xMax;
	var yMax;
	var x1;
	var y1;
	var y2;
	var box;
	var bGoUp;
	var bGoLeft;

	// CLEAR IT...
	SetInnerHtml('divFauxDropdown', '');
	
	// POSITION...
	x1 = GetEventX(evt);
	y1 = GetEventY(evt);

	// ENSURE FITS ON PAGE...
	xMax = f_clientWidth() + f_scrollLeft();
	yMax = f_clientHeight() + f_scrollTop();

	// SET STARTING LOCATION BASED ON DATA-RECIPIENT...
	box = document.getElementById('divFauxDropdown');
	
	// GOING UP/DOWN, LEFT RIGHT...
	bGoLeft = (x1 >= (xMax * .8));
	bGoUp = (y1 >= (yMax * .8));
	
	// ASSIGN LEFT/RIGHT...
	if (bGoLeft) {
		//From the RIGHT...
		box.style.left = '';
		box.style.right = xMax - x1 + 'px';
	} else {
		// From the LEFT...
		box.style.left = x1 + 'px';
		box.style.right = '';
	}
	// ASSIGN TOP/BOTTOM...
	y2 = y1;
	y2 = y2 + f_scrollTop();

	if (bGoUp) {
		//From the BOTTOM...
		box.style.top = '';
		box.style.bottom = yMax - y2 + 'px';
	} else {
		// From the TOP...
		box.style.top = y1 + 'px';
		box.style.bottom = '';
	}

	// GET LIST...
	var url = '/ajax/' + inURLc;
	xmlGet(url, FauxDropdownResult);
}
function FauxDropdownResult() {
	// FILL TEXT...
	var ttt = ReadHtmlTagStr('RESULT', AjaxReqObj.responseText);
	var box = document.getElementById('divFauxDropdown');
	if (ttt == '') {
		ShowHide('divFauxDropdown', false);
		return;
	}
	SetInnerHtml('divFauxDropdown', ttt);

	// SHOW IT...
	ShowHide('divFauxDropdown', true);
}



// *************************************************
// EXCELLENT FUNCTION GRAB LEFT, TOP, WIDTH & HEIGHT
// REGARDLESS OF BROWSER BRAND.
// *************************************************



function f_clientWidth() {
	return f_filterResults (
		window.innerWidth ? window.innerWidth : 0,
		document.documentElement ? document.documentElement.clientWidth : 0,
		document.body ? document.body.clientWidth : 0
	);
}
function f_clientHeight() {
	return f_filterResults (
		window.innerHeight ? window.innerHeight : 0,
		document.documentElement ? document.documentElement.clientHeight : 0,
		document.body ? document.body.clientHeight : 0
	);
}
function f_scrollLeft() {
	return f_filterResults (
		window.pageXOffset ? window.pageXOffset : 0,
		document.documentElement ? document.documentElement.scrollLeft : 0,
		document.body ? document.body.scrollLeft : 0
	);
}
function f_scrollTop() {
	return f_filterResults (
		window.pageYOffset ? window.pageYOffset : 0,
		document.documentElement ? document.documentElement.scrollTop : 0,
		document.body ? document.body.scrollTop : 0
	);
}
function f_filterResults(n_win, n_docel, n_body) {
	var n_result = n_win ? n_win : 0;
	if (n_docel && (!n_result || (n_result > n_docel)))
		n_result = n_docel;
	return n_body && (!n_result || (n_result > n_body)) ? n_body : n_result;
}



function TryAutoLogon() {
	var id = getCookie('AfolID', 0);
	window.status = 'AfolID: ' + id;
	if (id != 0) {
		PopUpWindow('/pop/AutoLogon.asp?AfolID=' + id);
	}
}




// **********************
// ***   OTHER CRAP   ***
// **********************



function PauseJava(ms) {
	var date = new Date();
	var curDate = null;
	do {
		curDate = new Date();
	} while (curDate-date < ms);
}

function ListObjAttributes(inObj, inMatchStr, inMax) {
	// VARS...
	var s = '';
	var c = 0;
	var att;
	var v;
	var MAX = 8;
	if (inMax == undefined) inMax = MAX;
	if (inMax < 1) inMax = MAX;
	if (inMatchStr != undefined) 	inMatchStr = inMatchStr.toLowerCase();
	
	for(att in inObj) {
		if (inObj[att] != null) {
			v = String(inObj[att]).toLowerCase();
			//if (!confirm(v)) return;
			if ((inMatchStr == null) || (v.indexOf(inMatchStr) > 0) || (att.indexOf(inMatchStr) > 0)) {
				s = s + att + ' = ' + v + '\n';
			c = c + 1;
			}
		}
		if (c == inMax) {
			if (!confirm(s)) { return; }
			s = '';
			c = 0;
		}
	}
}
function calculateOffsetLeft(inObj) {
	return AddUpOffset(inObj, 'offsetLeft');
}
function calculateOffsetTop(inObj) {
	return AddUpOffset(inObj, 'offsetTop');
}
function AddUpOffset(zOBJ, attr) {
	var pixels = 0;
	while(zOBJ) {
		pixels += zOBJ[attr]; 
		zOBJ = zOBJ.offsetParent;
	}
	return pixels;
}


function SwapCreatorName(inBox, inNick, inName) {
	var cur = GetInnerHtml(inBox);
	//alert('current: ' + cur + '\ninNick: ' + inNick + '\ninName: ' + inName);
	if (cur == inNick) {
		SetInnerHtml(inBox, inName);
	} else {
		SetInnerHtml(inBox, inNick);
	}
}


function LoadSponsor() {
	var url = '/ajax/SponsorLoad.asp';
	xmlGet(url, ShowSponsor);
}
function ShowSponsor() {
	var pp;
	var Name;
	var Tag;
	var Target;
	var Title;
	var Href;
	
	// GET SPONSORS...
	for (pp = 1; pp <= 2; pp++) {
		Name   = ReadHtmlTagStr('NAME' + pp,   AjaxReqObj.responseText);
		Tag    = ReadHtmlTagStr('TAG' + pp,    AjaxReqObj.responseText);
		Target = ReadHtmlTagStr('TARGET' + pp, AjaxReqObj.responseText);
		Title  = ReadHtmlTagStr('TITLE' + pp,  AjaxReqObj.responseText);
		Href   = ReadHtmlTagStr('HREF' + pp,   AjaxReqObj.responseText);

		if (Name   != '') {
			ShowHide('divSponsor' + pp, true);
			//document.getElementById('divSponsor' + pp).background = '#FFF url(../images/events/<% =oEvent.EventID %>/Sponsor' + pp + '.jpg) no-repeat';

			if (Tag    != '') SetInnerHtml('divSponsoredBy' + pp, Tag);
			if (Target != '') document.getElementById('aSponsor' + pp).target = Target;
			if (Title  != '') document.getElementById('aSponsor' + pp).title = Title;
			if (Href   != '') document.getElementById('aSponsor' + pp).href = Href;
		}
	}
}

