function trim(s) 

{

	var n = s.length;

	var x = 0;

	while (n > 0 && s.charAt(n - 1) == " ")

		n--;

	while (n > x && s.charAt(x) == " ")	

		x++;

	return s.substr(x, n - x);

}



function shift(a) // not native in iemac)

{

	if (a.length)

	{

		var r = a[0];

		for (var n = 1;n < a.length; n++)

			a[n - 1] = a[n];

		a.length = a.length - 1;

		return r;

	}

	else return null;

}



function setSelect(sl, code, def) 

{

	for (var n = 0; n < sl.options.length; n++)

		if (code == sl.options[n].value)

		{

		  sl.selectedIndex = n;

		  return;

		}

	if (def == null || def < 0 || def >= sl.options.length)

	  sl.selectedIndex = -1;

	else

	  sl.selectedIndex = def;

}



function _findTag(o, tag, klass)

{

  if (o.className) {

    var ka = o.className.toLowerCase().split(' ');

    for(var n=0; n<ka.length; n++)

      if (trim(ka[n]) == klass)

      //{ tag.push(o); break; }

      { tag[tag.length]=o; break; }

  }

  if (o.childNodes)

    for(n=0;n<o.childNodes.length;n++)

      _findTag(o.childNodes[n], tag, klass);

}



function findTag(klass)

{

  var tag = [];

  _findTag(document.body, tag, klass.toLowerCase());

  if (tag.length==0) return null;

  if (tag.length==1) return tag[0];

  return tag;

}



function OpenPopUp(url,winwidth,winheight,options) 

{

	if (!options) options = "toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbar=yes,scrollbars=yes,resizable=no,copyhistory=no";

  var w=window.open(url,'popup_'+winwidth+'_'+winheight,options+',width='+winwidth+',height='+winheight);

  w.focus(); DemoWindow=w;

}

function LoadPage(page)

{

	if (page) location.href = page;

}



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++) 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_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];}

}



function MM_findObj(n, d) { //v4.0

  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 && document.getElementById) x=document.getElementById(n); return x;

}



function MM_nameOf(o) {

  if (o.tagName) return o.name; else return MM_nameOf(o[0]);

}



function MM_valueOf(o) {

  if (o.tagName) return trim(o.value); 

  else if (o[0].type=='radio') {

    for(var i=0;i<o.length;i++)	if(o[i].checked) return trim(o[i].value);	return "";}

	else {

		var val="";	i=0; while (o[i])	{

			if (val) val+=","; val+= MM_valueOf(o[i]); i++;}

		return trim(val);	}

}



function MM_validateForm() { //v4.0

  var i,p,q,nm,test,num,min,max,errors='',args=MM_validateForm.arguments;

  for (i=0; i<(args.length-2); i+=3) { test=args[i+2]; val=MM_findObj(args[i]);

		if (val) { nm=MM_nameOf(val).replace(/_/g, ' '); while (nm.substr(0,1)==' ') nm=nm.substr(1);

		if ((val=MM_valueOf(val))!="") {

      if (test.indexOf('isEmail')!=-1) { p=val.indexOf('@');

        if (p<1 || p==(val.length-1)) errors+='- '+nm+' must contain an e-mail address.\n';

      } else if (test!='R') { num = parseFloat(val);

        if (isNaN(val)) errors+='- '+nm+' must contain a number.\n';

        if (test.indexOf('inRange') != -1) { p=test.indexOf(':');

          min=test.substring(8,p); max=test.substring(p+1);

          if (num<min || max<num) errors+='- '+nm+' must contain a number between '+min+' and '+max+'.\n';

    } } } else if (test.charAt(0) == 'R') errors += '- '+nm+' is required.\n'; }

  } if (errors) alert('The following error(s) occurred:\n'+errors);

  document.MM_returnValue = (errors == '');

  return document.MM_returnValue;

}



function MM_jumpMenu(targ,selObj,restore){ //v3.0

  eval(targ+".location='"+selObj.options[selObj.selectedIndex].value+"'");

  if (restore) selObj.selectedIndex=0;

}



function MM_jumpMenuGo(selName,targ,restore){ //v3.0

  var selObj = MM_findObj(selName); if (selObj) MM_jumpMenu(targ,selObj,restore);

}



function MM_callJS(jsStr) { //v2.0

  return eval(jsStr)

}



function __onKeyup()

{

	if (event.srcElement.type == "textarea") __Autosize(event.srcElement);

}



function __Autosize(o, min, max)

{

	var scrollHeight = o.scrollHeight;

	var autosize = o.getAttribute("autosize");

	if (autosize != null)

	{

		if (min == null) min = o.autosizemin;

		if (max == null) max = o.autosizemax;

		if ((min == null) || (max == null))

			if (autosize != "") // parse and test

			{

				var bounds = autosize.split(",");

				for (var n = 0; n < 2; n++)

				{

					if (n >= bounds.length)

					  //bounds.push("");

					  bounds[bounds.length]="";

					bounds[n] = parseInt(bounds[n]);

					if (isNaN(bounds[n]) || (bounds[n] < 0))

					  bounds[n] = null;

				}

				if (min != null) bounds[0] = null;

				if (max != null) bounds[1] = null;

				if ((bounds[0] != null) || (bounds[1] != null)) // test

				{

					var save = o.value;

					o.value = "";

					var h1 = o.scrollHeight;

					o.value = "\r\n";

					var h2 = o.scrollHeight;

					o.value = save;

					var x1 = h2 - h1;

					var x0 = h1 - x1;

					if ((min == null) && (bounds[0] != null))

						min = bounds[0] * x1 + x0;

					if ((max == null) && (bounds[1] != null))

						max = bounds[1] * x1 + x0;

				}

			}

		o.autosizemin = min;

		o.autosizemax = max;

		if (min && (scrollHeight < min)) scrollHeight = min;

		if (max && (scrollHeight > max)) scrollHeight = max;

		o.style.height = (scrollHeight - 2).toString() + "px"; 

		if (typeof __Resize == "function") __Resize();

	}

}



function __AutosizeInit(o)

{

  if (o && o.type == "textarea") __Autosize(o);

  if (o.childNodes)

		for (var n = 0; n < o.childNodes.length; n++)

			__AutosizeInit(o.childNodes[n]);

}



function Autosize()

{

	document.onkeyup=__onKeyup;

	__AutosizeInit(document.body);

}



function GetCmxCookies()

{

	var cookies = new Object();

	var allcookies = document.cookie;

	if (allcookies != "")

	{

		var start = allcookies.indexOf("cmx=");

		if (start != -1)

		{

			start += 4;

			var end = allcookies.indexOf(';', start);

			if (end == -1) end = allcookies.length;

			cmxcookie = allcookies.substring(start, end);

			var a = cmxcookie.split('&');

			for (var i = 0; i < a.length; i++) 

			{

				a[i] = a[i].split('=');

				cookies[a[i][0]] = unescape(a[i][1]);

			}

		}

	}

	return cookies;

}



function SetCmxCookies(cookies)

{

	cmxcookie = ""

	for (var prop in cookies)

		if ((prop.charAt(0) != '$') && (typeof cookies[prop] != "function"))

		{

			if (cmxcookie) cmxcookie += "&";

			cmxcookie += prop + '=' + escape(cookies[prop]);

		}

	cmxcookie = "cmx=" + cmxcookie;

	var date = new Date();

	date.setFullYear(date.getFullYear() + 1);

	cmxcookie += "; expires=" + date.toGMTString();

	cmxcookie += ";%20path=/index.html";

	document.cookie = cmxcookie;

}



function GetCookies()

{

}



function GetCookieList()

{

	return [];

}



function FindFormField(name)

{

	for (var n = 0; n < document.forms.length; n++)

	{

		var form = document.forms[n];

		for (var m = 0; m < form.elements.length; m++)

			if (form.elements[m].name == name)

				return form.elements[m];

	}

	return null;

}



function DoCookies(getCookies, cookieList)

{

	var cookies = GetCmxCookies();

	if (getCookies)

		for (var n = 0; n < cookieList.length; n += 2)

		{

			var field = FindFormField(cookieList[n]);

			if (field) field.value = cookies[cookieList[n+1]] || "";

		}

	else

	{

		for (var n = 0; n < cookieList.length; n += 2)

		{

			var field = FindFormField(cookieList[n]);

			if (field) cookies[cookieList[n+1]] = field.value;

		}

		SetCmxCookies(cookies);

	}

}



function QueryString(name)

{

	var re = new RegExp("(?:\\?|&)" + name + "\\=([^&]*)(?:&|$)","i");

	var q = location.search.match(re);

	return q ? unescape(q[1]) : null;

	/*

	var a = unescape(location.search.substring(1)).split('&');

	name += '=';

	var nlen = name.length;

	for (var n = 0; n < a.length; n++)

		if (a[n].substr(0, nlen) == name)

			return a[n].substr(nlen);

	return null;

	*/

}



function Validate(formname)

{ 

	var ok = true;

	fn = "DoValidate_" + formname;

  if (eval("typeof " + fn) == "function") ok = eval(fn + "()");

  if (ok && (typeof OnSubmitContactForm == "function")) ok = OnSubmitContactForm(formname) != false;

  if (ok) DoCookies(false, GetCookieList());

	return ok;

}



var IsStaging = false;

					

function __b2t(o1,o2,o3)

{

	o1=document.getElementById(o1);

	o2=document.getElementById(o2);

	var b1=o2.offsetTop-o1.offsetTop;

	if (o3)

	{

		o3=document.getElementById(o3);

		var b2=o3.offsetTop+o3.offsetHeight;

		if (b2>b1) b1=b2

	}

	o1.style.height=b1+"px";

}



function __t2b(o1)

{

  o1=document.getElementById(o1);

  var top = 0;

  for (var n=1; n < arguments.length; n++)

  {

		var o = document.getElementById(arguments[n]);

		if (o)

		{

			var t = o.offsetTop+o.offsetHeight;

			if (t > top) top = t;

		}

  }

  o1.style.top=top+"px";

}



function _onLoad(print)

{

	Autosize();

	GetCookies();

	if (typeof onLoad == "function")

	  onLoad();

	if (__onLoad.fns)

	  for (var n=0;n<__onLoad.fns.length;n++)

		{

			var fn = __onLoad.fns[n];

			if (typeof fn == "function") __onLoad.fns[n]();

			else eval(fn);

		}

	if (print)

		window.print();

}



function __onLoad(fn)

{

	if (!__onLoad.fns) __onLoad.fns = [];

	__onLoad.fns[__onLoad.fns.length]=fn;

}



function FixCheckboxFields(form)

{

	// so unchecked box will be sent

  fields = [];

  for (var n = 0; n < form.length; n++)

  {

    var field = form[n];

    if (field.type == "checkbox"

      && !field.checked)

      if (form[field.name].length && form[field.name].type != "select-one") // an array

      {

				var a = form[field.name];

				if (a[0] == field) // only do if first entry

				{

					for (var m = 1; m < a.length; m++)

						if (a[m].type != "checkbox" || a[m].checked)

							break

					if (m >= a.length) // all unchecked checkboxes

						fields[fields.length] = field.name;

				}

      }

      else fields[fields.length] = field.name;

  }

  for (var n = 0; n < fields.length; n++)

  {

		var done = false;

		try

		{	

			var e = document.createElement("INPUT");

			e.type = "hidden"; // fails macie

			e.name = fields[n];

			e.value = "";

			form.appendChild(e);

			done = true;

		} 

		catch(e) {}

		if (!done) 

		{

			if (form[fields[n]].length) field = form[fields[n]][0];

			else field = form[fields[n]];

			field.style.position = "relative";

			field.style.left = "-1000px";

			field.checked = true;

			field.value = "";

		}

	}

}



function setValue(o, value, noradio)

{

	if (o)

		if (o.length && o.type != "select-one") // array

		{

			var v = null;

			var v1 = value;

			var pass2needed = 0; // 0 = not needed, 1 = a true checkbox, 2 = a subsequent true radio

			for (var n = -1; n < o.length; n++)

			{

				var field = n < 0 ? null : o[n];

				if (field)

				{

					setValue(field, v);

					if (field.type == "checkbox" || field.type == "radio")

						if (field.value == v)

							switch (pass2needed)

							{

								case 0:

									if (field.type == "checkbox") pass2needed = 1;

									break;

								case 1:

									if (field.type == "radio") pass2needed = 2;

									break;

							}

						else continue;

				}

				var pos = value.indexOf(',');

				if (pos < 0)

				{

					v = value;

					value = "";

				}

				else

				{

					v = value.substr(0, pos);

					value = value.substr(pos + 1);

				}

			}

			if (pass2needed == 2 && !noradio)

				setValue(o, v1, true);

		}

		else switch (o.type)

		{

			case "checkbox":

			case "radio":

				if (o.type != "radio" || !noradio)

					o.checked = value == o.value;

				break;

				

			case "text":

			case "textarea":

			case "password":

				o.value = value || "";

				break;

				

			case "select-one":

				setSelect(o, value);

				break;

		}

}



function _normalizeUrl(url)

{

  var dot = url.lastIndexOf('.');

  var slash = url.lastIndexOf('index.html');

  if (dot <= slash)

  {

		if (url.charAt(url.length - 1) != 'index.html')

			url += 'index.html';

			url += "index.html";

  }

  return url;

}



function cmxPrint()

{

	if (QueryString("_cmxprint") != null)

		window.print();

	else

	{

		var url = _normalizeUrl(location.href);

		url += (url.indexOf('?') >= 0) ? '&' : '?';

		url += "_cmxprint=1";

		window.open(url, "_blank").moveBy(40, 40);

	}

}



function cmxDownload(file)

{

	var url = "/download.cm?";

	if (location.protocol == "index.html")

	{

		var pos = location.pathname.indexOf('index.html', 1);

		if (pos >= 0)

			url += "sitecode=" + location.pathname.substr(1, pos - 1) + '&';

	}

	url += "file=" + file;

	location.href = url;

}



function _registration(pg, folder, signOut)

{

	var wind = window.parent || window;

  var thisPage = wind.location.pathname.toLowerCase();

  var sitecode = "";

  if (wind.location.protocol == "index.html")

  {

		var pos = thisPage.indexOf('index.html', 1);

		if (pos >= 0)

		{

			sitecode = thisPage.substr(1, pos - 1);

			thisPage = thisPage.substr(pos);

		}

  }

  if (folder.toLowerCase() + '/' == thisPage.substr(0, folder.length + 1))

  { // registration folder, transfer page parameter

		var page = _pageQuery();

		if (page)	pg += '?page=' + page;

  }

  else pg += "?page=" + thisPage;

  if (wind.location.protocol == "index.html")

		if (signOut)

			pg += "&sitecode=" + sitecode;

		else

			pg = '/' + sitecode + pg;

  wind.location.href = pg;

}



function Register(folder)

{

	_registration(folder + "/default.php", folder, false);

}



function SignIn(folder, signOut)

{

	_registration(signOut ? "/SignOut.cm" : 

		folder + "/Sign_In.html", folder, signOut);

}



function javascript(s)

{

	var e, a = s.match(/^javascript\s*:\s*(.*)$/,'i');

	if (a)

	  try { return eval(a[1]); }

	  catch (e) { return ""; }

	else

	  return s;

}



function RadioIndex(o)

{

	for (var n = o.length - 1; n >= 0; n--)

	  if (o[n].checked) break;

	return n;

}



function RadioSet(o, inx)

{

	if (isString(inx))

	{

		inx = inx.toLowerCase();

		for (var n = o.length - 1; n >= 0; n--)

		  if (o[n].value.toLowerCase() == inx) break;

		inx = n;

	}

	for (var n = o.length - 1; n >= 0; n--)

	  o[n].checked = n == inx;

}



function RadioValue(o)

{

	var n = RadioIndex(o);

	return (n >= 0) ? o[n].value : null;

}


