function GraphItRPM(frm, val)
{
  frm.radOutput.value = val;
  
  iFrmLen = frm.elements.length;
  flgSubmit = false;

  for (i = 0; i < iFrmLen; i++)
  {
    sFldName = frm[i].name;
    iPos = sFldName.indexOf('_');

    if (iPos > 0)
      sFld = sFldName.substr(0, iPos);
    else
      sFld = sFldName;
    
    if (sFld == 'cbRPMRUNID')
    {
      if (frm[i].checked)
      {
        flgSubmit = true;
        break;
      }
    }
  }
  
  if (flgSubmit)
    frm.submit();
  else
    alert('Select at least one RPM graph');
}

function GraphItSpeed(frm, val)
{
  frm.radOutput.value = val;
  
  iFrmLen = frm.elements.length;
  flgSubmit = false;

  for (i = 0; i < iFrmLen; i++)
  {
    sFldName = frm[i].name;
    iPos = sFldName.indexOf('_');

    if (iPos > 0)
      sFld = sFldName.substr(0, iPos);
    else
      sFld = sFldName;
    
    if (sFld == 'cbSpeedRUNID')
    {
      if (frm[i].checked)
      {
        flgSubmit = true;
        break;
      }
    }
  }
  
  if (flgSubmit)
    frm.submit();
  else
    alert('Select at least one speed graph');
}

function CalcRpmFromSpeed(iSpeed, frm, fld)
{
  iPos = fld.indexOf("_");
  iFldNum = fld.substr((fld.length - (fld.length - iPos)));

  dGearRatio = frm.Gear_Ratio.value;
  dFinalDrive = frm.Gear_Final.value;
  
  if ( ((dGearRatio.length != 0) && (!isNaN(dGearRatio))) && ((dFinalDrive.length != 0) && (!isNaN(dFinalDrive))))
  {
    iCircumference = CalcTyreCircumference(frm);
    if (iCircumference > 0)
    {
      iRpm = Math.round(((dGearRatio * dFinalDrive) * ((iSpeed / 60) / iCircumference) * 1000000));
      eval("frm.RPM" + iFldNum + ".value = iRpm;");
    }
  }
}

function CalcSpeedFromRpm(iRpm, frm, fld)
{
  iPos = fld.indexOf("_");
  iFldNum = fld.substr((fld.length - (fld.length - iPos)));
  
  dGearRatio = frm.Gear_Ratio.value;
  dFinalDrive = frm.Gear_Final.value;
  
  if ( ((dGearRatio.length != 0) && (!isNaN(dGearRatio))) && ((dFinalDrive.length != 0) && (!isNaN(dFinalDrive))))
  {
    iCircumference = CalcTyreCircumference(frm);
    if (iCircumference > 0)
    {
      iSpeed = Math.round(  ((((iCircumference / (dGearRatio * dFinalDrive)) * iRpm) * 60) / 1000000) );
      eval("frm.SPEED" + iFldNum + ".value = iSpeed;");
    }
  }
}

function CalcTyreCircumference(frm)
{
  iTyreWidth   = frm.TyreWidth.value;
  iTyreProfile = frm.TyreProfile.value;
  iRimSize     = frm.RimSize.value;
    
  if ( ((iTyreWidth != 0) && (iTyreWidth.length > 0)) && ((iTyreProfile != 0) && (iTyreProfile.length > 0)) && ((iRimSize != 0) && (iRimSize.length > 0)) )
  {
    iSideWall = iTyreWidth * (iTyreProfile / 100);
    iDiameter = iRimSize * 25.4;
    iDiameter = iDiameter + (iSideWall * 2);
    iCircumference = iDiameter * 3.1416;
  }
  else
  {
    iCircumference = 0;
  }
  
  return iCircumference;
}

function DefaultSpeedValues(frm)
{
  iStart = parseInt(frm.Start_km.value);
  iInc = parseInt(frm.Inc_km.value);
  iMax = parseInt(frm.Max_km.value);
  iVal = 0;
  
  if (isNaN(iStart) || isNaN(iInc) || isNaN(iMax))
  {
    alert("Enter number values only");
  }
  else
  {
    if ((iStart == 0) || (iInc == 0) || (iMax == 0))
    {
      alert("Enter values");
    }
    else
    {
      if (iStart > iMax)
      {
        alert("Start value must be less than max value");
      }
      for (i = 0; i < 50; i++)
      {
        iVal = (iInc * i) + iStart;
        
        if (iVal <= iMax)
          eval('frm.SPEED_'+(i+1)+'.value = '+parseInt(iVal)+';');
        else
          break;
      }
    }
  }
}

function ResetSpeedValues(frm)
{
  for (i = 0; i < 50; i++)
    eval('frm.SPEED_'+(i+1)+'.value = 0;');
}

function ConvertPower(frm, fld, power)
{
  for (i = 0; i < frm.radPower.length; i++)
    if (frm.radPower[i].checked)
      sUnit = frm.radPower[i].value;
  
  if (sUnit == 'HP')
  {
    fPower = Math.round(parseFloat(power) * 0.7457);
    frm[fld].value = fPower;
  }
}

function ValidateLoginForm(frm) {
  var sErrors = "";
  var sUser = frm.user.value;
  var sPword = frm.pwd.value;

  var reString = "^[\\w-_\.]{1,1}[\\w-_\.]{0,11}$";
  
  var regex = new RegExp(reString);
  if (!regex.test(sUser))
    sErrors = sErrors + "Invalid username\n"
  
  if (!regex.test(sPword))
    sErrors = sErrors + "Invalid password\n"

  if (sErrors.length > 0)
    alert(sErrors);
  else
    frm.submit();
}

function ValidateResetForm(frm) {
  var sErrors = "";
  var sUser = frm.user.value;
  var sOldPword = frm.oldpwd.value;
  var sNewPword = frm.newpwd.value;

  var reString = "^[\\w-_\.]{1,1}[\\w-_\.]{0,11}$";
  
  var regex = new RegExp(reString);
  if (!regex.test(sUser))
    sErrors = sErrors + "Invalid user name\n"
  
  if (!regex.test(sOldPword))
    sErrors = sErrors + "Invalid old password\n"
    
  if (!regex.test(sNewPword))
    sErrors = sErrors + "Invalid old password\n"

  if (sErrors.length > 0)
    alert(sErrors);
  else
    frm.submit();
}

function ValidateGraphForm(frm)
{
  sErrors = "";
  iCountRows = 0;

  if (frm.CARID.value == 0)
    sErrors = sErrors + "\nNo car selected";
  
  if (frm.DESCR.value.length == 0)
    sErrors = sErrors + "\nNo description entered";


  if (sErrors.length == 0) {
    for (i = 1; i <= 50; i++) {
      eval('iRPM = frm.RPM_'+i+'.value;');
      eval('iSpeed = frm.SPEED_'+i+'.value;');
      eval('iPower = frm.POWER_'+i+'.value;');

      if (isNaN(iRPM) || isNaN(iSpeed) || isNaN(iPower)) {
        sErrors = sErrors + '\nEnter numbers only';
        eval('frm.RPM_'+i+'.focus();');
        break;
      }
      
      if (((iRPM != 0) || (iSpeed != 0)) && (iPower == 0)) {
        sErrors = sErrors + '\nMissing power figure';
        eval('frm.POWER_'+i+'.focus();');
        break;
      } else {
        if ((iRPM != 0) || (iSpeed != 0)) {
          iCountRows ++;
        }
      }
    }
  }

  if ((sErrors.length == 0) && (iCountRows < 2))
    sErrors = sErrors + '\nEnter at least two rows of data';

  if (sErrors.length > 0)
    alert(sErrors);
  else
    frm.submit();
}

function Relabel(frm, val) {

  for (i = 1; i <= 50; i++) {
    objTD = document.getElementById('LABEL_'+i);
    objTD.innerHTML = val;
  }
}

function ResetDropDown(frm, fld, val, style) {
  switch(fld) {
    case 'make':
      url = 'include/create_dd.php?fldsrc='+fld+'&fldtgt=model&style='+style+'&val='+val;
      spanid = 'ddModel';
      update_panel(spanid, url);
    case 'model':
      url = 'include/create_dd.php?fldsrc='+fld+'&fldtgt=type&style='+style+'&val='+val;
      spanid = 'ddType';
      update_panel(spanid, url);
    case 'type':
      url = '';
      spanid = '';
      break;
  }
}

function update_panel(spanid, url) {
  set_loading(spanid);
  update_page(spanid, url);
}

function set_loading(spanid) {
  var obj = document.getElementById(spanid);
  obj.innerHTML = '<img src="images/loading.gif" border="0" alt="loading" height="16" width="16">';
}

function update_page(spanid, url) {
  var xmlHttp = GetXmlHttpObject();
  if (xmlHttp == null) {
    alert ("Browser does not support HTTP Request");
    return;
  }

  xmlHttp.onreadystatechange = function() {
    if (typeof(xml_state_changed) != 'undefined') { xml_state_changed (xmlHttp, spanid); }
  }
  
  xmlHttp.open("GET",url,true);
  xmlHttp.send(null);
}

function xml_state_changed(xmlHttp, spanid) {
  if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete") {
    document.getElementById(spanid).innerHTML = xmlHttp.responseText;
  }
}

function GetXmlHttpObject() {
  var objXMLHttp = null
  if (window.XMLHttpRequest)
  {
    objXMLHttp = new XMLHttpRequest()
  }
  else if (window.ActiveXObject)
  {
    objXMLHttp = new ActiveXObject("Microsoft.XMLHTTP")
  }
  return objXMLHttp
}

function ValidateSignUpForm(frm)
{
  var sErrors = "";
  var sUser = frm.user_id.value;
  var sPword = frm.pword.value;
  var sEmail = frm.email.value;

  var reEmail = "^[\\w-_\.]*[\\w-_\.]\@[\\w]+[\.]{1,1}[\\w.]+[\\w]$";
  var reString = "^[\\w-_\.]{1,1}[\\w-_\.]{0,11}$";
  
  var regex = new RegExp(reString);
  if (!regex.test(sUser))
    sErrors = sErrors + "Invalid user name\n"
  
  if (!regex.test(sPword))
    sErrors = sErrors + "Invalid password\n"

  regex = new RegExp(reEmail);
  if (!regex.test(sEmail))
    sErrors = sErrors + "Invalid email address\n";
    
  if (sErrors.length > 0)
    alert(sErrors);
  else
    frm.submit();
}

function ValidateForgetForm(frm)
{
  var sErrors = "";
  var sUser = frm.user.value;
  var sEmail = frm.email.value;

  var reString = "^[\\w-_\.]{1,1}[\\w-_\.]{0,11}$";
  var reEmail = "^[\\w-_\.]*[\\w-_\.]\@[\\w]+[\.]{1,1}[\\w.]+[\\w]$";
  
  var regex = new RegExp(reString);
  if (!regex.test(sUser))
    sErrors = sErrors + "Invalid user name\n"
  
  var regexEmail = new RegExp(reEmail);
  if (!regexEmail.test(sEmail))
    sErrors = sErrors + "Invalid email address\n"

  if (sErrors.length > 0)
    alert(sErrors);
  else
    frm.submit();
}

function ValidateContactForm(frm)
{
  var sErrors = "";
  var sName = frm.name.value;
  var sUser = frm.username.value;
  var sEmail = frm.email.value;
  var sSubject = frm.subject.value;
  var sContent = frm.content.value;

  var reString = "^[\\w-_\.]{1,1}[\\w-_\.]{0,29}$";
  var reEmail = "^[\\w-_\.]*[\\w-_\.]\@[\\w]+[\.]{1,1}[\\w.]+[\\w]$";
  
  var regex = new RegExp(reString);
  if (!regex.test(sName))
    sErrors = sErrors + "Invalid name\n";

  if (sUser.length > 0) {
    if (!regex.test(sUser)) {
      sErrors = sErrors + "Invalid username\n";
    }
  }
  
  var regexEmail = new RegExp(reEmail);
  if (!regexEmail.test(sEmail))
    sErrors = sErrors + "Invalid email address\n";
    
  if (!regex.test(sSubject))
    sErrors = sErrors + "Invalid subject\n";
  
  if (sContent.length == 0)
    sErrors = sErrors + "Enter your enquiry\n";

  if (sErrors.length > 0)
    alert(sErrors);
  else
    frm.submit();
}

function ValidateCarForm(frm)
{
  var sErrors = "";
  var sMake = frm.make.value;
  var sModel = frm.model.value;
  var sType = frm.type.value;
  var sEngine = frm.engine.value;
  var sTurbo = frm.turbo.value;
  var sTurboNbr = frm.turbo_nbr.value;
  var sMods = frm.mods.value;
  
  var sOtherMake = frm.new_make.value;
  var sOtherModel = frm.new_model.value;
  var sOtherType = frm.new_type.value;
  var sOtherEngine = frm.new_engine.value;
  var sOtherTurbo = frm.new_turbo.value;
  
  var reMake = "^[\\w]{1,1}[\\w]{0,19}$";
  var reModel = "^[\\w]{1,1}[\\w ]{0,49}$";
  var reType = "^[\\w-_\.]{1,1}[\\w-_\.]{0,49}$";
  var reEngine = "^[\\w]{1,1}[\\w]{0,11}$";
  var reTurbo = "^[\\w-_\.]{1,1}[\\w-_\.]{0,19}$";
  var reMods = "^[\\w]{1,1}[\\w-_\.\",\r\n ]{0,255}$";
  
  if (sMake == 'ALL') {
    var regexMake = new RegExp(reMake);
    if (!regexMake.test(sOtherMake))
      sErrors = sErrors + "Invalid Make.\n"
  }
  if (sModel == 'ALL') {
    var regexModel = new RegExp(reModel);
    if (!regexModel.test(sOtherModel))
      sErrors = sErrors + "Invalid Model.\n"
  }
  if (sType == 'ALL') {
    var regexType = new RegExp(reType);
    if (!regexType.test(sOtherType))
      sErrors = sErrors + "Invalid Type.\n"
  }
  if (sEngine == 'ALL') {
    var regexEngine = new RegExp(reEngine);
    if (!regexEngine.test(sOtherEngine))
      sErrors = sErrors + "Invalid Engine.\n"
  }
  if (sTurbo == 'ALL') {
    var regexTurbo = new RegExp(reTurbo);
    if (!regexTurbo.test(sOtherTurbo))
      sErrors = sErrors + "Invalid Compressor.\n"
  }
  
  var regexMods = new RegExp(reMods);
  if (!regexMods.test(sMods))
    sErrors = sErrors + "Invalid Modifications.\n"

  if (sErrors.length > 0)
    alert("Error\n" + sErrors);
  else
    frm.submit();
}

function InitCarForm(frmname) {
  var frm = document.forms[frmname];
  var classOff = 'DarkGrey';
  var classOn = 'MedGrey';
  
  var fMake = frm.make;
  var fModel = frm.model;
  var fType = frm.type;
  var fEngine = frm.engine;
  var fTurbo = frm.turbo;
  var fTurboNbr = frm.turbo_nbr;
  var fMods = frm.mods;
  
  var fNewMake = frm.new_make;
  var fNewModel = frm.new_model;
  var fNewType = frm.new_type;
  var fNewEngine = frm.new_engine;
  var fNewTurbo = frm.new_turbo;
  
  if (fMake.value != 'ALL') {
    fMake.disabled = false;
    fNewMake.disabled = true;
    fNewMake.className = classOff;
  } else {
    fNewMake.disabled = false;
    fNewMake.className = classOn;
  }
  
  if (fModel.value != 'ALL') {
    fModel.disabled = false;
    fNewModel.disabled = true;
    fNewModel.className = classOff;
  } else {
    fNewModel.disabled = false;
    fNewModel.className = classOn;
  }
  
  if (fType.value != 'ALL') {
    fType.disabled = false;
    fNewType.disabled = true;
    fNewType.className = classOff;
  } else {
    fNewType.disabled = false;
    fNewType.className = classOn;
  }
  
  if (fEngine.value != 'ALL') {
    fEngine.disabled = false;
    fNewEngine.disabled = true;
    fNewEngine.className = classOff;
  } else {
    fNewEngine.disabled = false;
    fNewEngine.className = classOn;
  }
  
  if (fTurbo.value != 'ALL') {
    fTurbo.disabled = false;
    fNewTurbo.disabled = true;
    fNewTurbo.className = classOff;
  } else {
    fNewTurbo.disabled = false;
    fNewTurbo.className = classOn;
  }
}

function ResetOtherFields(frm, fld, val) {
  var classOff = 'DarkGrey';
  var classOn = 'MedGrey';
  eval('var newfld = frm.new_'+fld+';');
  
  if (val == 'ALL') {
    newfld.disabled = false;
    newfld.className = classOn;
  } else {
    newfld.value = '';
    newfld.disabled = true;
    newfld.className = classOff;
  }
}

function ResetAddCarDropDown(frm, fld, val, style) {
  switch(fld) {
    case 'make':
      url = 'include/create_dd.php?fldsrc='+fld+'&fldtgt=model&style='+style+'&val='+val;
      spanid = 'ddModel';
      update_panel(spanid, url);
      ResetOtherFields(frm, 'model', 'ALL');
    case 'model':
      url = 'include/create_dd.php?fldsrc='+fld+'&fldtgt=type&style='+style+'&val='+val;
      spanid = 'ddType';
      update_panel(spanid, url);
      ResetOtherFields(frm, 'type', 'ALL');
    case 'type':
      url = '';
      spanid = '';
      break;
  }
}

function HelpWin(set, nbr) {
  var url = "help.php?set="+set+"&nbr="+nbr;
  var helpwin = window.open(url, "Help", "menubar=0,location=0,status=0,scrollbars=1,resizable=0,width=400,height=200");
}
