var formRadioToUncheck;

//inicjuje pola komunikatów w formularzu
function initAlerts() {
  if(formRegAlerts != undefined) {
    var divs = document.getElementsByTagName('div');
    for(var i = 0; i < divs.length; i++)
      for(var j = 0; j < 2*Math.floor(formRegAlerts.length/2); j+=2)
        if(divs[i].className == formRegAlerts[j])
          divs[i].innerHTML = formRegAlerts[j+1];
  }
}

//zwraca wartość dla wybranego radio lub false jeżeli niewybrane
function radioValue(fldName, getText) {
  var currentForm = document.forms['formReg'];
  var v = false;
  if(currentForm.elements[fldName].length) {
    for(var i = 0; i < currentForm.elements[fldName].length; i++)
      if(currentForm.elements[fldName][i].checked)
        if(getText != undefined && getText)
          v = currentForm.elements[fldName][i].title;
        else
          v = currentForm.elements[fldName][i].value;
  } else {
    if(currentForm.elements[fldName].checked)
      if(getText != undefined && getText)
        v = currentForm.elements[fldName].title;
      else
        v = currentForm.elements[fldName].value;
  }
  return getText!=undefined?v:obligatoryValue(fldName, v);
}

//zwraca wartości dla wybranych checkboxów lub false jeżeli niewybrane
function checkboxValue(fldName, getText) {
  var currentForm = document.forms['formReg'];
  var v = "|";
  if(currentForm.elements[fldName].length == undefined) {
    if(currentForm.elements[fldName].checked) {
      if(getText != undefined && getText)
        v = "|<br />" + currentForm.elements[fldName].title;
      else
        v = currentForm.elements[fldName].value;
    }
  } else {
    for(var i = 0; i < currentForm.elements[fldName].length; i++)
      if(currentForm.elements[fldName][i].checked) {
        if(getText != undefined && getText)
          v += "<br />" + currentForm.elements[fldName][i].title;
        else
          v += currentForm.elements[fldName][i].value + "|";
      }
  }
  return getText!=undefined?(v=="|"?false:(getText?v.substr(7):v)):obligatoryValue(fldName, v=="|"?false:v);
}

//zwraca wartość dla wybranego selecta lub false jeżeli niewybrany
function selectValue(fldName, getText) {
  var currentForm = document.forms['formReg'];
  var v = false;
  if(currentForm.elements[fldName][currentForm.elements[fldName].selectedIndex].value != "")
    if(getText != undefined && getText)
      v = currentForm.elements[fldName][currentForm.elements[fldName].selectedIndex].text;
    else
      v = currentForm.elements[fldName][currentForm.elements[fldName].selectedIndex].value;
  return getText!=undefined?v:obligatoryValue(fldName, v);
}

//zwraca wartość dla wybranego input text lub false jeżeli pusty
function textValue(fldName, getText) {
  var currentForm = document.forms['formReg'];
  var v = false;
  if(currentForm.elements[fldName].value.length != 0)
    v = currentForm.elements[fldName].value;
  return getText!=undefined?v:obligatoryValue(fldName, v);
}

//zwraca wartość dla wybranego textarea lub false jeżeli pusty
function textareaValue(fldName, getText) {
  var currentForm = document.forms['formReg'];
  var v = false;
  if(currentForm.elements[fldName].value.length != 0)
    v = currentForm.elements[fldName].value;
  return getText!=undefined?v:obligatoryValue(fldName, v);
}

//zwraca false jeśli pole jest obowiązkowe i puste
function obligatoryValue(fldName, v) {
  var currentForm = document.forms['formReg'];
  var o = currentForm.elements[fldName];
  if(o.length != undefined)
    o = o[0];
  while(o = getOuterTag(o, 'div'))
    if(o.className.indexOf('obligatory') == 0) {
      if(!v)
        return false;
    } else if(o.className.indexOf('optional') == 0) {
      break;
    }
  if(v != false) {
    try {
      if(!eval(fldName+'RE').test(v))
        return false;
    } catch(ex) {}
    try {
      if(!eval(fldName+'Validate(""+"'+v+'");'))
        return false;
    } catch(ex) {}
  }
  return true;
}

//zwraca wartość pola do podsumowania
function fieldValue(t, getText) {
  if(t != undefined && t.name != undefined) {
    if(t.tagName.toLowerCase() == "input") {
      if(t.type.toLowerCase() == "radio")
        return radioValue(t.name, getText);
      else if(t.type.toLowerCase() == "checkbox")
        return checkboxValue(t.name, getText);
      else if(t.type.toLowerCase() == "text")
        return textValue(t.name, getText);
    } else if(t.tagName.toLowerCase() == "select") {
      return selectValue(t.name, getText);
    } else if(t.tagName.toLowerCase() == "textarea") {
      return textareaValue(t.name, getText);
    }
  }
}

//sprawdza czy jest wypełnione pole obowiązkowe
function checkField(t) {
  var o;
  if(t != undefined && t.name != undefined) {
    var valid = true;
    if(t.tagName.toLowerCase() == "input") {
      if(t.type.toLowerCase() == "radio")
        valid = radioValue(t.name);
      else if(t.type.toLowerCase() == "checkbox")
        valid = checkboxValue(t.name);
      else if(t.type.toLowerCase() == "text")
        valid = textValue(t.name);
    } else if(t.tagName.toLowerCase() == "select") {
      valid = selectValue(t.name);
    } else if(t.tagName.toLowerCase() == "textarea") {
      valid = textareaValue(t.name);
    }
    if(!valid) {
      o = t;
      while(o = getOuterTag(o, 'div'))
        if(o.className.indexOf('obligatory') == 0) {
          if(fieldValue(t, true)) {
            o.className = 'obligatory error';
          } else {
            o.className = 'obligatory missing';
          }
          break;
        } else if(o.className.indexOf('optional') == 0) {
          o.className = 'optional error';
          break;
        }
    } else {
      o = t;
      while(o = getOuterTag(o, 'div'))
        if(o.className.indexOf('obligatory') == 0) {
          o.className = 'obligatory';
          break;
        } else if(o.className.indexOf('optional') == 0) {
          o.className = 'optional';
          break;
        }
    }
  }
}

//sprawdza czy są widoczne jakiekolwiek błędy
function checkAndSubmit(t) {
  var currentForm = document.forms['formReg'];
  var elementNames = '|';
  for(var i = 0; i < currentForm.elements.length; i++)
    if(elementNames.indexOf('|'+currentForm.elements[i].name+'|' != -1)) {
      elementNames += currentForm.elements[i].name+'|';
      checkField(currentForm.elements[i]);
    }
  var v = true;
  var divs = document.getElementsByTagName("div");
  for(var i = 0; i < divs.length; i++)
    if(divs[i].className.indexOf(' missing') > 0 || divs[i].className.indexOf(' error') > 0)
      v = false;
  if(v)
    currentForm.submit();
  else if(t)
    alert(t);
}

//odznacza radio
function radioUncheck(o) {
  formRadioToUncheck = o;
  if(o.checked)
    setTimeout('formRadioToUncheck.checked = false;', 100);
}

//odznacza radia z innych hoteli
function radioHotel(o) {
var keepDates = false;
  radioUncheck(o);
  if(!o.checked) {
    keepDates = true;
    for(var i = 0; i < o.form.elements.length; i++) {
      switch(o.form.elements[i].name) {
        case 'hotelDay':
        case 'hotelBreakfast':
        case 'hotelFoodFull':
          if(o.form.elements[i].value != o.value)
            o.form.elements[i].checked = false;
          break;
      }
    }
  } else {
    for(var i = 0; i < o.form.elements.length; i++)
      if(o.form.elements[i] != o && o.form.elements[i].checked)
        keepDates = true;
  }
  if(o.name.substr(0, 8) == 'hotelDay') {
    if(document.getElementById('roommateBlock')) {
      if(o.name == 'hotelDayDouble')
        document.getElementById('roommateBlock').className = '';
      else
        document.getElementById('roommateBlock').className = 'hidden';
    }
    for(var i = 0; i < o.form.elements.length; i++)
      if(o.form.elements[i] != o && o.form.elements[i].name.substr(0, 8) == 'hotelDay')
        o.form.elements[i].checked = false;
  }
  if(keepDates) {
    o.form.elements['hotelDateIn'].disabled = false;
    o.form.elements['hotelDateOut'].disabled = false;
  } else {
    o.form.elements['hotelDateIn'].disabled = true;
    o.form.elements['hotelDateOut'].disabled = true;
  }
}
