// ---------------------------------------------------- TARKISTALOMAKE-FUNKTIO
function tarkistaLomake(napinNimi, arvosteluTyyppi, palautteenKohdeId) {

  var virheilmoitukset = [];

  // Jos ei ole annettu tyyppiä, yritetään päätellä.
  if (arvosteluTyyppi == '') {
    if (haeOlio('ta_yleisarvosana_tahdet') != null)
      arvosteluTyyppi = 'tuote';
    else if (haeOlio('ta_ostaminen_tahdet') != null)
      arvosteluTyyppi = 'kauppa';
  }

  // Valitaan mitkä arvostelu syötteet tarkistetaan.
  switch (arvosteluTyyppi) {
    case 'tuote':
      tarkistaTuoteArvostelunKentat(virheilmoitukset);
      break;
    case 'kauppa':
      tarkistaKauppaArvostelunKentat(virheilmoitukset);
      break;   
  }

  // Valitaan mitkä kirjautumiskentät tarkistetaan.
  switch (napinNimi) {
    case 'tallenna':
      break;
    case 'muokkaa':
      break;
    case 'luoJaTallenna':
      tarkistaLuoJaTallennaKentat(virheilmoitukset);
      break;
    case 'kirjauduJaTallenna':
      tarkistaKirjauduJaTallennaKentat(virheilmoitukset);
      break;
    case 'tallennaKirjautumaton':
      tarkistaKirjautumatonKentat(virheilmoitukset);
      break;    
  }

  var kaikkiOk = true;
  for (var i = 0; i < virheilmoitukset.length; i++)
    if (virheilmoitukset[i].onArvo == false)
      kaikkiOk = false;

  if (!kaikkiOk) {
    korostaVirheet(virheilmoitukset);
    raportoiVirheet(palautteenKohdeId, virheilmoitukset);
  }

  return kaikkiOk;

}

// --------------------------------------- TARKISTALUOJATALLENNAKENTAT-FUNKTIO
function tarkistaLuoJaTallennaKentat(virheilmoitukset) {

  virheilmoitukset[virheilmoitukset.length] =
    new puuttuvaArvo("arvo_puuttuu_luo_email", "Sähköpostiosoite puuttuu.",
      onArvo(haeOlionIdIdnLoppuosallaJaElementtiTyypilla('_CreateUserStepContainer_Email', 'input')));

  virheilmoitukset[virheilmoitukset.length] =
    new puuttuvaArvo("arvo_puuttuu_luo_salasana", "Salasana puuttuu.",
      onArvo(haeOlionIdIdnLoppuosallaJaElementtiTyypilla('_CreateUserStepContainer_Password', 'input')));

  virheilmoitukset[virheilmoitukset.length] =
    new puuttuvaArvo("arvo_puuttuu_luo_salasanauudelleen", "Salasana uudelleen puuttuu.",
      onArvo(haeOlionIdIdnLoppuosallaJaElementtiTyypilla('_CreateUserStepContainer_ConfirmPassword', 'input')));

  virheilmoitukset[virheilmoitukset.length] =
    new puuttuvaArvo("arvo_puuttuu_luo_nimimerkki", "Nimimerkki puuttuu.",
      onArvo(haeOlionIdIdnLoppuosallaJaElementtiTyypilla('_CreateUserStepContainer_UserName', 'input')));

  virheilmoitukset[virheilmoitukset.length] =
    new puuttuvaArvo("arvo_puuttuu_luo_salasanavastaus", "Salasanavastaus puuttuu.",
      onArvo(haeOlionIdIdnLoppuosallaJaElementtiTyypilla('_CreateUserStepContainer_Answer', 'input')));

  virheilmoitukset[virheilmoitukset.length] =
    new puuttuvaArvo("arvo_puuttuu_luo_kayttoehdot", "Käyttöehtojen hyväksyntä puuttuu.",
      onHyvaksytty(haeOlionIdIdnLoppuosallaJaElementtiTyypilla('_CreateUserStepContainer_kayttoehdot', 'input')));

}

// ---------------------------------- TARKISTAKIRJAUDUJATALLENNAKENTAT-FUNKTIO
function tarkistaKirjauduJaTallennaKentat(virheilmoitukset) {
  
  virheilmoitukset[virheilmoitukset.length] =
    new puuttuvaArvo("arvo_puuttuu_kirjaudu_email", "Sähköpostiosoite puuttuu.",
      onArvo(haeOlionIdIdnLoppuosallaJaElementtiTyypilla('_loginKontrolli_kirjautuminen_UserName', 'input')));

  virheilmoitukset[virheilmoitukset.length] =
    new puuttuvaArvo("arvo_puuttuu_kirjaudu_salasana", "Salasana puuttuu.",
      onArvo(haeOlionIdIdnLoppuosallaJaElementtiTyypilla('_loginKontrolli_kirjautuminen_Password', 'input')));

}

// --------------------------------------- TARKISTAKIRJAUTUMATONKENTAT-FUNKTIO
function tarkistaKirjautumatonKentat(virheilmoitukset) {

  virheilmoitukset[virheilmoitukset.length] =
    new puuttuvaArvo("arvo_puuttuu_nimimerkki", "Nimimerkki puuttuu.", onArvo('nimimerkki'));

  virheilmoitukset[virheilmoitukset.length] =
    new puuttuvaArvo("arvo_puuttuu_sahkoposti", "Sähköpostiosoite ei ole kelvollinen.",
      onKelvollinenSahkoposti('sahkopostiosoite'));

}

// ------------------------------------- TARKISTATUOTEARVOSTELUNKENTAT-FUNKTIO
function tarkistaTuoteArvostelunKentat(virheilmoitukset) {

  virheilmoitukset[virheilmoitukset.length] = 
    new puuttuvaArvo("arvo_puuttuu_yleisarvosana", "Yleisarvonsana puuttuu.", onArvo('ta_yleisarvosana_tahdet'));

  virheilmoitukset[virheilmoitukset.length] =
    new puuttuvaArvo("arvo_puuttuu_sanallinen", "Sanallinen arvostelu puuttuu.", onArvo('sanallinenarvio'));

}

// ------------------------------------ TARKISTAKAUPPAARVOSTELUNKENTAT-FUNKTIO
function tarkistaKauppaArvostelunKentat(virheilmoitukset) {

  virheilmoitukset[virheilmoitukset.length] =
    new puuttuvaArvo("arvo_puuttuu_ostaminen", "Ostamisen arvostelu puuttuu.", onArvo('ta_ostaminen_tahdet'));

  virheilmoitukset[virheilmoitukset.length] =
    new puuttuvaArvo("arvo_puuttuu_asiakaspalvelu", "Asiakaspalvelun arvostelu puuttuu.", onArvo('ta_asiakaspalvelu_tahdet'));

  virheilmoitukset[virheilmoitukset.length] =
    new puuttuvaArvo("arvo_puuttuu_toimitus", "Toimituksen arvostelu puuttuu.", onArvo('ta_toimitus_tahdet'));

  virheilmoitukset[virheilmoitukset.length] =
    new puuttuvaArvo("arvo_puuttuu_fiilis", "Fiiliksen arvostelu puuttuu.", onArvo('ta_fiilis_tahdet'));

  virheilmoitukset[virheilmoitukset.length] =
    new puuttuvaArvo("arvo_puuttuu_sanallinen", "Sanallinen arvostelu puuttuu.", onArvo('sanallinenarvio'));

}

// --------------------------------------------------- RAPORTOIVIRHEET-FUNKTIO
function raportoiVirheet(palautteenKohdeId, virheilmoitukset) {

  var virheilmoitus = '';

  for (var i = 0; i < virheilmoitukset.length; i++)
    if (virheilmoitukset[i].onArvo == false)
      virheilmoitus = virheilmoitus + virheilmoitukset[i].virheIlmoitus + '<br/>';

  muokkaaElementinSisalto(palautteenKohdeId, virheilmoitus);

}

// ---------------------------------------------------- KOROSTAVIRHEET-FUNKTIO
function korostaVirheet(virheilmoitukset) {

  for (var i = 0; i < virheilmoitukset.length; i++)
    muokkaaElementinCssLuokkaa(virheilmoitukset[i].id, !virheilmoitukset[i].onArvo);

}

// ------------------------------------------------------------ ONARVO-FUNKTIO
function onArvo(elementinId) {

  var elementti = haeOlio(elementinId)

  if (elementti == null)
    return false;

  if (elementti.value.length < 1)
    return false;

  return true;

}

// ------------------------------------------------------ ONHYVAKSYTTY-FUNKTIO
function onHyvaksytty(elementinId) {

  var elementti = haeOlio(elementinId)

  if (elementti == null)
    return false;

  if (elementti.checked == 1)
    return true;

  return false;

}

// ------------------------------------------- ONKELVOLLINENSAHKOPOSTI-FUNKTIO
function onKelvollinenSahkoposti(elementinId) {

  var elementti = haeOlio(elementinId)

  if (elementti == null)
    return false;

  if (elementti.value.length < 1)
    return false;

  if (elementti.value.length > 256)
    return false;

  var filter = /^[_a-z+0-9-]+(\.[_a-z+0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$/;
  if (filter.test(elementti.value))
    return true;

  return false;

}

// ---------------------------------------- MUOKKAAELEMENTINCSSLUOKKAA-FUNKTIO
function muokkaaElementinCssLuokkaa(elementinID, korosta) {

  var elementti = haeOlio(elementinID);

  if (elementti == null)
    return false;

  if (korosta) {
    if (elementti.className.indexOf("tav") < 0)
      elementti.className = elementti.className + " tav";
  }
  else
    elementti.className = elementti.className.replace(/tav/g, "");

}

// ------------------------------------------------------- PUUTTUVAARVO-LUOKKA
// id = kenttä jota korostetaan osoittamaan puuttuvan arvon paikka
// virheIlmoitus = submit napin yhteydessä esitettävä teksti
// onArvo = inputilla on arvo
function puuttuvaArvo(id, vihreIlmoitus, onArvo) {
  this.id = id;
  this.virheIlmoitus = vihreIlmoitus;
  this.onArvo = onArvo;
}
