function GetKey(e)
{
  if (window.event) return window.event.keyCode;
  else if (e) return e.which;
  else return null;
}

function ValidatedSubmit(textfield)
{
  if (textfield.form.onsubmit) {
    if (textfield.form.onsubmit()) textfield.form.submit();
  } else textfield.form.submit();
}

function SubmitForm(textfield, e)
{
  if (GetKey(e) == 13) {
    ValidatedSubmit(textfield);
    return false;
  } else return true;
}

function Trim(s)
{
  var i = 0;
  var l = s.length - 1;
  while ((i <= l) && (s.charCodeAt(i) <= 32)) i++;
  if (i > l) return('')
  else {
    while (s.charCodeAt(l) <= 32) l--;
	return(s.substring(i, l + 1));
  }
}

function TestAlphaLow(k)
{
  return((k >= 97) && (k <= 122));
}

function TestAlpha(k)
{
  return(((k >= 65) && (k <= 90)) || ((k >= 97) && (k <= 122)));
}

function TestAlphaEx(k)
{
  return(((k >= 65) && (k <= 90)) || ((k >= 97) && (k <= 122)) || (k == 45) || (k == 32) || (k == 192) || (k = 222));
}

function TestDigit(k)
{
  return((k >= 48) && (k <= 57));
}

function InputAlpha(textfield, e)
{
  var k=GetKey(e);
  if (k == 13) {
    ValidatedSubmit(textfield);
    return false;
  } else if (TestAlpha(k)) return true;
  else return false;
}

function InputAlphaEx(textfield, e)
{
  var k=GetKey(e);
  if (k == 13) {
    ValidatedSubmit(textfield);
    return false;
  } else if (TestAlphaEx(k)) return true;
  else return false;
}

function InputAlphaUp(textfield, e)
{
  var k=GetKey(e);
  if (k == 13) {
    ValidatedSubmit(textfield);
    return false;
  } else if (TestAlphaLow(k)) {
    if (window.event) window.event.keyCode=k-32;
    return true;
  } else if (TestAlpha(k)) return true;
  else return false;
}

function InputAlphaNumericUp(textfield, e)
{
  var k=GetKey(e);
  if (k == 13) {
    ValidatedSubmit(textfield);
    return false;
  } else if (TestAlphaLow(k)) {
    if (window.event) window.event.keyCode=k-32;
    return true;
  } else if ((TestAlpha(k)) || (TestDigit(k))) return true;
  else return false;
}

function InputLogin(textfield, e)
{
  var k=GetKey(e);
  if (k == 13) {
    ValidatedSubmit(textfield);
    return false;
  } else if ((TestAlpha(k)) || (TestDigit(k)) || (k == 95)) return true;
  else return false;
}

function InputName(textfield, e)
{
  var k=GetKey(e);
  if (k == 13) {
    ValidatedSubmit(textfield);
    return false;
  } else if ((TestAlpha(k)) || (TestDigit(k)) || (k == 45) || (k == 32) || (k == 192) || (k = 222)) return true;
  else return false;
}

function InputInteger(textfield, e)
{
  var k=GetKey(e);
  if (k == 13) {
    ValidatedSubmit(textfield);
    return false;
  } else if (TestDigit(k)) return true;
  else return false;
}

function InputFloat(textfield, e)
{
  var k=GetKey(e);
  if (k == 13) {
    ValidatedSubmit(textfield);
    return false;
  } else if ((TestDigit(k)) || ((k == 46) && (textfield.value.indexOf('.') < 0))) return true;
  else return false;
}

function InputFloatFull(textfield, e)
{
  var k=GetKey(e);
  if (k == 13) {
    ValidatedSubmit(textfield);
    return false;
  } else if ((TestDigit(k)) || ((k == 46) && (textfield.value.indexOf('.') < 0)) || ((k == 45) && (textfield.value.indexOf('-') < 0))) return true;
  else return false;
}

function CheckInteger(textfield)
{
  if (textfield.value.indexOf(',') >= 0) return false;
  var a=parseInt(textfield.value,10);
  if (isNaN(a)) return false;
  return((a >= 0) && (a <= 2147483647));
}

function CheckFloat(textfield)
{
  if (textfield.value.indexOf(',') >= 0) return false;
  var a=parseFloat(textfield.value);
  if (isNaN(a)) return false;
  return(a >= 0);
}

function CheckFloatFull(textfield)
{
  if (textfield.value.indexOf(',') >= 0) return false;
  var i=-1;
  do {
    i=textfield.value.indexOf('-',i+1);
    if (i>0) return false;
  } while (i>=0);
  var a=parseFloat(textfield.value);
  if (isNaN(a)) return false;
  return(true);
}

function ValidateDomain(s)
{
  var c;
  if (!s) return(false);
  if (s.length == 0) return(false);
  for (var i = 0; i < s.length; i++) {
    c = s.charAt(i);
    if ((c == '\~') || (c == '\`') || (c == '\@') || (c == '\#') || (c == '\$') || (c == '\%') || (c == '\^') ||
      (c == '\&') || (c == '\*') || (c == '\(') || (c == '\)') || (c == '\ ') || (c == '\=') || (c == '\+') ||
      (c == '\\') || (c == '\|') || (c == '\[') || (c == '\]') || (c == '\{') || (c == '\}') || (c == '\;') ||
      (c == '\:') || (c == '\'') || (c == '\"') || (c == '\,') || (c == '\<') || (c == '\>') || (c == '\/') ||
      (c == '\?')) return(false);
  }
  return(true);
}

function ValidateUserName(s)
{
  var c;
  if (!s) return(false);
  if (s.length == 0) return(false);
  for (var i = 0; i < s.length; i++) {
    c = s.charAt(i);
    if ((c == '\(') || (c == '\)') || (c == '\ ') || (c == '\\') || (c == '\[') || (c == '\]') || (c == '\;') ||
      (c == '\:') || (c == '\"') || (c == '\,') || (c == '\<') || (c == '\>') || (c == '\/')) return(false);
  }
  return(true);
}

function CheckEmail(textfield)
{
  var n, s;
  n = textfield.value.indexOf('@');
  if (n > 0)
    if (ValidateUserName(textfield.value.substring(0, n))) {
      s = textfield.value.substring(n + 1, textfield.value.length);
      n = s.indexOf('.');
      if ((n > 0) && (n < (s.length - 1)))
        if (ValidateDomain(s))
          return(true);
    }
  return(false);
}

function CheckString(textfield)
{
  var space_count=0;
  for (var i=0;i<textfield.value.length;i++) if (textfield.value.charAt(i) == ' ') space_count++;
  return(space_count < textfield.value.length);
}

function CheckLogin(textfield)
{
  var k;
  for (var i=0;i<textfield.value.length;i++) {
    k = textfield.value.charCodeAt(i);
    if (!((TestAlpha(k)) || (TestDigit(k)) || (k == 95))) return(false);
  }
  return(true);
}

function CheckName(textfield)
{
  var k;
  for (var i=0;i<textfield.value.length;i++) {
    k = textfield.value.charCodeAt(i);
    if (!((TestAlpha(k)) || (TestDigit(k)) || (k == 45) || (k == 32) || (k == 192) || (k = 222))) return(false);
  }
  return(true);
}

function HighlightField(SpanRef, NoHighlight)
{
  if (NoHighlight) SpanRef.className="";
  else SpanRef.className="attention";
}

function ShowAlert(NoAlert)
{
  if (!NoAlert) alert('Some of values you have entered are incorrect. All names of incorrect values highlighted in red.');
}

function CheckIntegerField(FieldName, AcceptsNull)
{
  var res=false, FieldRef, SpanRef;
  eval('SpanRef=document.all.s_'+FieldName);
  eval('FieldRef=document.all.'+FieldName);
  if (FieldRef.value.length == 0) res=AcceptsNull;
  else res=CheckInteger(FieldRef);
  HighlightField(SpanRef, res);
  return(res);
}

function CheckIntegerNoZeroField(FieldName, AcceptsNull)
{
  var res=false, FieldRef, SpanRef;
  eval('SpanRef=document.all.s_'+FieldName);
  eval('FieldRef=document.all.'+FieldName);
  if (FieldRef.value.length == 0) res=AcceptsNull;
  else {
    res=CheckInteger(FieldRef);
	if (res) res=(FieldRef.value != 0);
  }
  HighlightField(SpanRef, res);
  return(res);
}

function CheckKeyField(FieldName, AcceptsNull)
{
  var res=false, FieldRef, SpanRef;
  eval('SpanRef=document.all.s_'+FieldName);
  eval('FieldRef=document.all.'+FieldName);
  if (FieldRef.value.length == 0) res=AcceptsNull;
  else {
    res=CheckInteger(FieldRef);
	if (res) res=(AcceptsNull || (FieldRef.value != 0));
  }
  HighlightField(SpanRef, res);
  return(res);
}

function CheckFloatField(FieldName, AcceptsNull)
{
  var res=false, FieldRef, SpanRef;
  eval('SpanRef=document.all.s_'+FieldName);
  eval('FieldRef=document.all.'+FieldName);
  if (FieldRef.value.length == 0) res=AcceptsNull;
  else res=CheckFloat(FieldRef);
  HighlightField(SpanRef, res);
  return(res);
}

function CheckFloatFullField(FieldName, AcceptsNull)
{
  var res=false, FieldRef, SpanRef;
  eval('SpanRef=document.all.s_'+FieldName);
  eval('FieldRef=document.all.'+FieldName);
  if (FieldRef.value.length == 0) res=AcceptsNull;
  else res=CheckFloatFull(FieldRef);
  HighlightField(SpanRef, res);
  return(res);
}

function CheckFloatNoZeroField(FieldName, AcceptsNull)
{
  var res=false, FieldRef, SpanRef;
  eval('SpanRef=document.all.s_'+FieldName);
  eval('FieldRef=document.all.'+FieldName);
  if (FieldRef.value.length == 0) res=AcceptsNull;
  else {
    res=CheckFloat(FieldRef);
	if (res) res=(FieldRef.value != 0);
  }
  HighlightField(SpanRef, res);
  return(res);
}

function CheckPercentIntegerField(FieldName, AcceptsNull)
{
  var res=false, FieldRef, SpanRef;
  eval('SpanRef=document.all.s_'+FieldName);
  eval('FieldRef=document.all.'+FieldName);
  if (FieldRef.value.length == 0) res=AcceptsNull;
  else {
    res=CheckInteger(FieldRef);
	if (res) res=((FieldRef.value >= 0) && (FieldRef.value <= 100));
  }
  HighlightField(SpanRef, res);
  return(res);
}

function CheckPercentFloatField(FieldName, AcceptsNull)
{
  var res=false, FieldRef, SpanRef;
  eval('SpanRef=document.all.s_'+FieldName);
  eval('FieldRef=document.all.'+FieldName);
  if (FieldRef.value.length == 0) res=AcceptsNull;
  else {
    res=CheckFloat(FieldRef);
	if (res) res=((FieldRef.value >= 0) && (FieldRef.value <= 100));
  }
  HighlightField(SpanRef, res);
  return(res);
}

function CheckPercentFloatNoZeroField(FieldName, AcceptsNull)
{
  var res=false, FieldRef, SpanRef;
  eval('SpanRef=document.all.s_'+FieldName);
  eval('FieldRef=document.all.'+FieldName);
  if (FieldRef.value.length == 0) res=AcceptsNull;
  else {
    res=CheckFloat(FieldRef);
	if (res) res=((FieldRef.value > 0) && (FieldRef.value <= 100));
  }
  HighlightField(SpanRef, res);
  return(res);
}

function CheckEmailField(FieldName, AcceptsNull)
{
  var res=false, FieldRef, SpanRef;
  eval('SpanRef=document.all.s_'+FieldName);
  eval('FieldRef=document.all.'+FieldName);
  if (FieldRef.value.length == 0) res=AcceptsNull;
  else res=CheckEmail(FieldRef);
  HighlightField(SpanRef, res);
  return(res);
}

function CheckStringField(FieldName, AcceptsNull)
{
  var res=false, FieldRef, SpanRef;
  eval('SpanRef=document.all.s_'+FieldName);
  eval('FieldRef=document.all.'+FieldName);
  if (FieldRef.value.length == 0) res=AcceptsNull;
  else res=CheckString(FieldRef);
  HighlightField(SpanRef, res);
  return(res);
}

function CheckStringFieldLen(FieldName, AcceptsNull, Len)
{
  var res=false, FieldRef, SpanRef;
  eval('SpanRef=document.all.s_'+FieldName);
  eval('FieldRef=document.all.'+FieldName);
  if (FieldRef.value.length == 0) res=AcceptsNull;
  else {
    res=CheckString(FieldRef);
	if (res) res=(FieldRef.value.length<=Len);
  }
  HighlightField(SpanRef, res);
  return(res);
}

function CheckStringFieldFixedLen(FieldName, Len)
{
  var res=false, FieldRef, SpanRef;
  eval('SpanRef=document.all.s_'+FieldName);
  eval('FieldRef=document.all.'+FieldName);
  res = (FieldRef.value.length == Len);
  if (res) res=CheckString(FieldRef);
  HighlightField(SpanRef, res);
  return(res);
}

function CheckLoginField(FieldName, AcceptsNull)
{
  var res=false, FieldRef, SpanRef;
  eval('SpanRef=document.all.s_'+FieldName);
  eval('FieldRef=document.all.'+FieldName);
  if (FieldRef.value.length == 0) res=AcceptsNull;
  else res=CheckLogin(FieldRef);
  HighlightField(SpanRef, res);
  return(res);
}

function CheckNameField(FieldName, AcceptsNull)
{
  var res=false, FieldRef, SpanRef;
  eval('SpanRef=document.all.s_'+FieldName);
  eval('FieldRef=document.all.'+FieldName);
  if (FieldRef.value.length == 0) res=AcceptsNull;
  else res=CheckName(FieldRef);
  HighlightField(SpanRef, res);
  return(res);
}

function CheckCodeField(FieldName, AcceptsNull)
{
  var res=false, FieldRef, SpanRef;
  eval('SpanRef=document.all.s_'+FieldName);
  eval('FieldRef=document.all.'+FieldName);
  if (FieldRef.value.length == 0) res=AcceptsNull;
  else res=((CheckInteger(FieldRef)) && (FieldRef.value.length == 3));
  HighlightField(SpanRef, res);
  return(res);
}

function CheckPhoneField(FieldName, AcceptsNull)
{
  var res=false, FieldRef1, FieldRef2, FieldRef3, SpanRef;
  eval('SpanRef=document.all.s_'+FieldName);
  eval('FieldRef1=document.all.'+FieldName+'1');
  eval('FieldRef2=document.all.'+FieldName+'2');
  eval('FieldRef3=document.all.'+FieldName+'3');
  if ((FieldRef1.value.length == 0) && (FieldRef2.value.length == 0) && (FieldRef3.value.length == 0)) res=AcceptsNull;
  else res=((CheckInteger(FieldRef1)) && (CheckInteger(FieldRef2)) && (CheckInteger(FieldRef3)) &&
    (FieldRef1.value.length == 3) && (FieldRef2.value.length == 3) && (FieldRef3.value.length == 4));
  HighlightField(SpanRef, res);
  return(res);
}

function CheckPostalCodeField(FieldName, AcceptsNull)
{
  var res=false, FieldRef1, FieldRef2, SpanRef;
  eval('SpanRef=document.all.s_'+FieldName);
  eval('FieldRef1=document.all.'+FieldName+'1');
  eval('FieldRef2=document.all.'+FieldName+'2');
  if ((FieldRef1.value.length == 0) && (FieldRef2.value.length == 0)) res=AcceptsNull;
  else {
    res=((FieldRef1.value.length == 3) && (FieldRef2.value.length == 3));
	if (res) res=((TestAlpha(FieldRef1.value.charCodeAt(0))) &&
      (TestDigit(FieldRef1.value.charCodeAt(1))) && (TestAlpha(FieldRef1.value.charCodeAt(2))) &&
	  (TestDigit(FieldRef2.value.charCodeAt(0))) && (TestAlpha(FieldRef2.value.charCodeAt(1))) &&
	  (TestDigit(FieldRef2.value.charCodeAt(2))));
	if (res) {
	  FieldRef1.value=FieldRef1.value.toUpperCase();
	  FieldRef2.value=FieldRef2.value.toUpperCase();
	}
  }
  HighlightField(SpanRef, res);
  return(res);
}

function CheckPostalCode5NField(FieldName, AcceptsNull)
{
  var res=false, FieldRef, SpanRef;
  eval('SpanRef=document.all.s_'+FieldName);
  eval('FieldRef=document.all.'+FieldName+'3');
  if (FieldRef.value.length == 0) res=AcceptsNull;
  else {
    res=(FieldRef.value.length == 5);
	if (res) res=((TestDigit(FieldRef.value.charCodeAt(0))) &&
      (TestDigit(FieldRef.value.charCodeAt(1))) && (TestDigit(FieldRef.value.charCodeAt(2))) &&
	  (TestDigit(FieldRef.value.charCodeAt(3))) && (TestDigit(FieldRef.value.charCodeAt(4))));
  }
  HighlightField(SpanRef, res);
  return(res);
}

function GetXCoord(el)
{
  var i = el.offsetLeft;
  var p = el.offsetParent;
  while (p) {
    i += p.offsetLeft;
	p = p.offsetParent;
  }
  return(i);
}

function GetYCoord(el)
{
  var i = el.offsetTop;
  var p = el.offsetParent;
  while (p) {
    i += p.offsetTop;
	p = p.offsetParent;
  }
  return(i);
}

function MouseOver(mi)
{
  mi.className="menu-highlight";
  if (mi.id == "MenuItem1") {
    if (document.all.NewCarsMenu) {
      document.all.NewCarsMenu.style.posLeft=GetXCoord(document.all.MenuItem1);
      document.all.NewCarsMenu.style.posTop=GetYCoord(document.all.MenuItem1)+document.all.MenuItem1.offsetHeight;
      document.all.NewCarsMenu.style.visibility="visible";
    }
  } else if (mi.id == "MenuItem2") {
    if (document.all.UsedCarsMenu) {
      document.all.UsedCarsMenu.style.posLeft=GetXCoord(document.all.MenuItem2);
      document.all.UsedCarsMenu.style.posTop=GetYCoord(document.all.MenuItem2)+document.all.MenuItem2.offsetHeight;
      document.all.UsedCarsMenu.style.visibility="visible";
    }
  } else if (mi.id == "MenuItem3") {
    if (document.all.NewListingsMenu) {
      document.all.NewListingsMenu.style.posLeft=GetXCoord(document.all.MenuItem3);
      document.all.NewListingsMenu.style.posTop=GetYCoord(document.all.MenuItem3)+document.all.MenuItem3.offsetHeight;
      document.all.NewListingsMenu.style.visibility="visible";
    }
  } else if (mi.id == "MenuItem4") {
    if (document.all.UserMenu) {
      document.all.UserMenu.style.posLeft=GetXCoord(document.all.MenuItem4)+document.all.MenuItem4.offsetWidth-document.all.UserMenu.offsetWidth;
      document.all.UserMenu.style.posTop=GetYCoord(document.all.MenuItem4)+document.all.MenuItem4.offsetHeight;
      document.all.UserMenu.style.visibility="visible";
    }
  }
}

function MouseOut(mi)
{
  mi.className="menu-normal";
  if (document.all.NewCarsMenu) document.all.NewCarsMenu.style.visibility="hidden";
  if (document.all.NewListingsMenu) document.all.NewListingsMenu.style.visibility="hidden";
  if (document.all.UsedCarsMenu) document.all.UsedCarsMenu.style.visibility="hidden";
  if (document.all.UserMenu) document.all.UserMenu.style.visibility="hidden";
}

function MouseClick(mi)
{
  if (window.event.srcElement.id.indexOf("MenuItemLink") == 0) return;
  var i=mi.id.substr(8,mi.id.length-8);
  if (document.all["MenuItemLink"+i]) document.all["MenuItemLink"+i].click();
}

function CopyToClipboard(s)
{
  document.copy_form.copy_area.value=s;
  r=document.copy_form.copy_area.createTextRange();
  r.select();
  r.execCommand('Copy');
}

function SetFocus()
{
  var is_visible, el;
  if (document.form1)
    for (var i=0;i<document.form1.elements.length;i++)
      with (document.form1.elements[i])
	    if ((type == 'text') || (type == 'textarea') || (type == 'file') || (type == 'password')) {
		  is_visible = true;
		  el = parentElement;
		  while (el) {
		    if ((el.style) && (el.style.display) && (el.style.display == 'none')) {
			  is_visible = false;
			  break;
			}
		    el = el.parentElement;
		  }
		  if (is_visible) {
            focus();
		    break;
		  }
		}
}

function CancelForm()
{
  if (confirm('Are you sure you want to cancel filling out this form and back to the previous page?'))
    history.back();
}

function ClearForm()
{
  if (confirm('Are you sure you want to clear all form values?'))
    for (var i=0;i<document.form1.elements.length;i++)
      with (document.form1.elements[i])
        if ((type == 'text') || (type == 'textarea') || (type == 'file') || (type == 'password')) value='';
	    else if (type == 'select-one') if (options.length > 0) selectedIndex=0;
}

function UpdateMenus()
{
  if (document.all.NewCarsMenu && document.all.MenuItem1) {
    document.all.NewCarsMenu.style.posLeft=GetXCoord(document.all.MenuItem1);
    document.all.NewCarsMenu.style.posTop=GetYCoord(document.all.MenuItem1)+document.all.MenuItem1.offsetHeight;
  }
  if (document.all.UsedCarsMenu && document.all.MenuItem2) {
    document.all.UsedCarsMenu.style.posLeft=GetXCoord(document.all.MenuItem2);
    document.all.UsedCarsMenu.style.posTop=GetYCoord(document.all.MenuItem2)+document.all.MenuItem2.offsetHeight;
  }
  if (document.all.NewListingsMenu && document.all.MenuItem3) {
    document.all.NewListingsMenu.style.posLeft=GetXCoord(document.all.MenuItem3);
    document.all.NewListingsMenu.style.posTop=GetYCoord(document.all.MenuItem3)+document.all.MenuItem3.offsetHeight;
  }
  if (document.all.UserMenu && document.all.MenuItem4) {
    document.all.UserMenu.style.posLeft=GetXCoord(document.all.MenuItem4)+document.all.MenuItem4.offsetWidth-document.all.UserMenu.offsetWidth;
    document.all.UserMenu.style.posTop=GetYCoord(document.all.MenuItem4)+document.all.MenuItem4.offsetHeight;
  }
}

window.onload=new Function("SetFocus();UpdateMenus();");