//-----------------------------------------------------------------//

function asiakastietojaMuutettu() {
  var kentannimi;
  if (arguments.length>0) {
    kentannimi = '_' + arguments[0];
  } else {
    kentannimi = '';
  }

  var kentat = new Array("nimi1", "nimi2",
                         "osoite11", "osoite12", "osoite13",
                         "tunnus1", "tunnus2",
                         "puhelin1", "puhelin2", "puhelin3",
                         "email");

  for (var i=0; i<kentat.length; i++) {
    var kentta = stringToObject("document.forms['form1'].", kentat[i], kentannimi);
    if (kentta && isElementChanged(kentta))
      return true;
  }

  return false;
}

//-----------------------------------------------------------------//

function asiakastiedotTyhjenna() {
  var kentannimi;
  var idkentta;
  if (arguments.length>0) {
    kentannimi = '_' + arguments[0];
    idkentta = stringToObject("document.forms['form1'].", arguments[0]);
  } else {
    kentannimi = '';
    idkentta = document.forms['form1'].kohdeid;
  }

  if (idkentta) {
    idkentta.value='';
  }

  var kentat = new Array("nimi1", "nimi2",
                         "osoite11", "osoite12", "osoite13",
                         "tunnus1", "tunnus2",
                         "puhelin1", "puhelin2", "puhelin3",
                         "email");

  for (var i=0; i<kentat.length; i++) {
    var kentta = stringToObject("document.forms['form1'].", kentat[i], kentannimi);
    if (kentta) {
      kentta.value = '';
      kentta.defaultValue = '';
    }
  }

  return false;
}

//-----------------------------------------------------------------//

function axEscape(str) {
	return escape(str).replace('+', '%2B');
}

function axNavigate(url) {
  if (document.all && isFormChanged()) {
    var kysymys="";
    kysymys =  "Are you sure you want to navigate away from this page?\n\n"
    kysymys += "----------------------------------------------------------------\n";
    kysymys += "Lomakkeen tiedot ovat muuttuneet!\n\n";
    kysymys += "Oletko varma, että haluat siirtyä pois sivulta tallentamatta muutoksia?\n";
    kysymys += "----------------------------------------------------------------\n\n";
    kysymys +=  "Press OK to continue, or Cancel to stay on the current page."
    if (!confirm(kysymys)) return false;
    isSubmitted=true;
  }
  location.href = url;
  return true;
}

//-----------------------------------------------------------------//
function checktimeempty(kentta, oletus) {
  var timekentta = document.forms['form1'].elements[kentta + '_time'];
  var datekentta = document.forms['form1'].elements[kentta + '_date'];
  if (timekentta && timekentta.value == '' && datekentta && datekentta.value!='') {
    timekentta.value = oletus;
  }
}

//-----------------------------------------------------------------//

function element_onfocus() {
  if (!window.classAdd) return;
  classAdd(this, "tekstikentta_aktiivinen");
  this.hasfocus = true;
  return true;
}
function element_onblur() {
  if (!window.classRemove) return;
  if (!this.hasmouseover) {
    classRemove(this, "tekstikentta_aktiivinen");
  }
  this.hasfocus = false;
  return true;
}

function element_onmouseover() {
  if (!window.classAdd) return;
  classAdd(this, "tekstikentta_aktiivinen");
  this.hasmouseover = true;
  return true;
}
function element_onmouseout() {
  if (!window.classRemove) return;
  if (!this.hasfocus) {
    classRemove(this, "tekstikentta_aktiivinen");
  }
  this.hasmouseover = false;
  return true;
}

//-----------------------------------------------------------------//

function getReportParam(s) {
  var p = "";
  var col = document.getElementsByName(s);
  if (col.length>0) {
    p = "&"+s+"=";
    p = p+col[0].value;
  }
  return p;
}
//-----------------------------------------------------------------//
function laskeErapvm(laskupvm,maksuaika,erapvm) {
  var era;
  era = parseDateFromStr(laskupvm.value);
  maksuaika = maksuaika.value*24*60*60*1000;
  tulos = new Date(era.getTime() + maksuaika);
  erapvm.value=tulos.getDate()+'.'+(tulos.getMonth()+1)+'.'+tulos.getFullYear();
}

//-----------------------------------------------------------------//
function laskeYhteensa(maara,ahinta,yhteensa,alv,alvpros) {
  var maara_arvo = parseFloat(maara.value.replace(',', '.'));
  var ahinta_arvo = parseFloat(ahinta.value.replace(',', '.'));
  var alvpros_arvo = parseFloat(alvpros.value.replace(',', '.'));
  var tulos = 0;
  if(!maara_arvo) {
    maara_arvo=0;
  }
  if(!ahinta_arvo) {
    ahinta_arvo=0;
  }
  if(!alvpros_arvo) {
    alvpros_arvo=0;
  }

  if (validNumber(maara.value)) {
    if (validNumber(ahinta.value)) {
      if (validNumber(alvpros.value)) {
        tulos = Math.round(maara_arvo*ahinta_arvo*100+(alvpros_arvo/100.00*maara_arvo*ahinta_arvo*100))/100 +"";
        yhteensa.value= tulos.replace('.', ',');

        tulos = Math.round(alvpros_arvo/100.00*maara_arvo*ahinta_arvo*100)/100 + "";
        alv.value= tulos.replace('.', ',');
      }
      else {
        alert('ALV-prosentti ei ole kelvollinen numero!');
        alvpros.focus();
        return false;
      }
    }
    else {
      alert('AHinta ei ole kelvollinen numero!');
      ahinta.focus();
      return false;
    }
  }
  else {
      alert('Määrä ei ole kelvollinen numero!');
      maara.focus();
      return false;
  }

  return false;
}

//-----------------------------------------------------------------//
function laskeALVAhinta(maara,ahinta,yhteensa,alv,alvpros) {
  var maara_arvo = parseFloat(maara.value.replace(',', '.'));
  var yhteensa_arvo = parseFloat(yhteensa.value.replace(',', '.'));
  var alvpros_arvo = parseFloat(alvpros.value.replace(',', '.'));
  var tulos = 0;
  var a =0;
  if(!maara_arvo) {
    maara_arvo=0;
  }
  if(!yhteensa_arvo) {
    yhteensa_arvo=0;
  }
  if(!alvpros_arvo) {
    alvpros_arvo=0;
  }

  if (validNumber(maara.value)) {
    if (validNumber(yhteensa.value)) {
      if (validNumber(alvpros.value)) {
        a=yhteensa_arvo/(1+alvpros_arvo/100);

        tulos = Math.round(a/maara_arvo*100)/100 +"";
        ahinta.value= tulos.replace('.', ',');

        tulos = Math.round((yhteensa_arvo-a)*100)/100 + "";
        alv.value= tulos.replace('.', ',');
      }
      else {
        alert('ALV-prosentti ei ole kelvollinen numero!');
        alvpros.focus();
        return false;
      }
    }
    else {
      alert('AHinta ei ole kelvollinen numero!');
      ahinta.focus();
      return false;
    }
  }
  else {
      alert('Määrä ei ole kelvollinen numero!');
      maara.focus();
      return false;
  }

  return false;
}



//-----------------------------------------------------------------//

function kohdeTiedotTyhjenna() {
  var kentannimi;
  var idkentta;
  if (arguments.length>0) {
    kentannimi = '_' + arguments[0];
    idkentta = stringToObject("document.forms['form1'].", arguments[0]);
  } else {
    kentannimi = '_kohde';
    idkentta = document.forms['form1'].kohdeid;
  }

  if (idkentta) {
    idkentta.value='';
  }

// Avux-päivitys 2009: tyhjennetään myös puhelinnumero. (eli str2)
if(document.forms['form1'].str2) {
	document.forms['form1'].str2.value='';
}

  var kentat = new Array("nimi1", "nimi2",
                         "osoite11", "osoite12", "osoite13",
                         "tunnus1", "tunnus2",
                         "puhelin1", "puhelin2", "puhelin3",
                         "email");

  for (var i=0; i<kentat.length; i++) {
    var kentta = stringToObject("document.forms['form1'].", kentat[i], kentannimi);
    if (kentta) {
      kentta.value = '';
      kentta.defaultValue = '';
    }
  }

  return false;
}
//-----------------------------------------------------------------//

function asukasTiedotTyhjenna() {
  var kentannimi;
  var idkentta;
  if (arguments.length>0) {
    kentannimi = '_' + arguments[0];
    idkentta = stringToObject("document.forms['form1'].", arguments[0]);
  } else {
    kentannimi = '_int1';
    idkentta = document.forms['form1'].int1;
  }

  if (idkentta) {
    idkentta.value='';
  }

  var kentat = new Array("nimi1", "nimi2",
                         "osoite11", "osoite12", "osoite13",
                         "tunnus1", "tunnus2",
                         "puhelin1", "puhelin2", "puhelin3",
                         "email");

  for (var i=0; i<kentat.length; i++) {
    var kentta = stringToObject("document.forms['form1'].", kentat[i], kentannimi);
    if (kentta) {
      kentta.value = '';
      kentta.defaultValue = '';
    }
  }

  return false;
}



//-----------------------------------------------------------------//

function maksajaTiedotTyhjenna() {
  document.forms['form1'].maksajaid.value=0;
  document.forms['form1'].maksajan_nimi.value='';
  document.forms['form1'].osoite1.value='';
  document.forms['form1'].osoite2.value='';
  return false;
}

//-----------------------------------------------------------------//


function taloTiedotTyhjenna() {
  var kentannimi;
  var idkentta;
  if (arguments.length>0) {
    kentannimi = '_' + arguments[0];
    idkentta = stringToObject("document.forms['form1'].", arguments[0]);
  } else {
    kentannimi = '_task_edit_talo';
    idkentta = document.forms['form1'].task_edit_taloid;
  }

  if (idkentta) {
    idkentta.value='';
  }

  var kentat = new Array("nimi1", "nimi2",
                         "osoite11", "osoite12", "osoite13",
                         "tunnus1", "tunnus2",
                         "puhelin1", "puhelin2", "puhelin3",
                         "email");

  for (var i=0; i<kentat.length; i++) {
    var kentta = stringToObject("document.forms['form1'].", kentat[i], kentannimi);
    if (kentta) {
      kentta.value = '';
      kentta.defaultValue = '';
    }
  }

  return false;
}

//-----------------------------------------------------------------//


function tyoListaTaloTiedotTyhjenna() {
  var kentannimi;
  var idkentta;
  if (arguments.length>0) {
    kentannimi = '_' + arguments[0];
    idkentta = stringToObject("document.forms['form1'].", arguments[0]);
  } else {
    kentannimi = '_task_list_talo';
    idkentta = document.forms['form1'].task_list_taloid;
  }

  if (idkentta) {
    idkentta.value='';
  }

  var kentat = new Array("nimi1", "nimi2",
                         "osoite11", "osoite12", "osoite13",
                         "tunnus1", "tunnus2",
                         "puhelin1", "puhelin2", "puhelin3",
                         "email");

  for (var i=0; i<kentat.length; i++) {
    var kentta = stringToObject("document.forms['form1'].", kentat[i], kentannimi);
    if (kentta) {
      kentta.value = '';
      kentta.defaultValue = '';
    }
  }

  return false;
}

//-----------------------------------------------------------------//


function raportitTaloTiedotTyhjenna() {
  var kentannimi;
  var idkentta;
  if (arguments.length>0) {
    kentannimi = '_' + arguments[0];
    idkentta = stringToObject("document.forms['form1'].", arguments[0]);
  } else {
    kentannimi = '_raportit_talot';
    idkentta = document.forms['form1'].raportit_talotid;
  }

  if (idkentta) {
    idkentta.value='';
  }

  var kentat = new Array("nimi1", "nimi2",
                         "osoite11", "osoite12", "osoite13",
                         "tunnus1", "tunnus2",
                         "puhelin1", "puhelin2", "puhelin3",
                         "email");

  for (var i=0; i<kentat.length; i++) {
    var kentta = stringToObject("document.forms['form1'].", kentat[i], kentannimi);
    if (kentta) {
      kentta.value = '';
      kentta.defaultValue = '';
    }
  }

  return false;
}


//-----------------------------------------------------------------//

function tyontekijaTiedotTyhjenna() {
  var kentannimi;
  var idkentta;
  if (arguments.length>0) {
    kentannimi = '_' + arguments[0];
    idkentta = stringToObject("document.forms['form1'].", arguments[0]);
  } else {
    kentannimi = '_tyontekija';
    idkentta = document.forms['form1'].tyontekijaid;
  }

  if (idkentta) {
    idkentta.value='';
  }

  var kentat = new Array("nimi1", "nimi2",
                         "osoite11", "osoite12", "osoite13",
                         "tunnus1", "tunnus2",
                         "puhelin1", "puhelin2", "puhelin3",
                         "email");

  for (var i=0; i<kentat.length; i++) {
    var kentta = stringToObject("document.forms['form1'].", kentat[i], kentannimi);
    if (kentta) {
      kentta.value = '';
      kentta.defaultValue = '';
    }
  }

  return false;
}


//-----------------------------------------------------------------//

function catchEnter(button, event) {
  if(!event) {
    event = window.event;
  }

  var nKeyCode = (document.layers) ? keyStroke.which : event.keyCode;

  if(nKeyCode == 13) {
    if (button) {
      button.click();
    }
    return false;
  }
  return true;
}


//-----------------------------------------------------------------//

function catchToday(name, date_format) {
  var kentta = null;
  if (window.event && (window.event.keyCode == 116 || window.event.keyCode == 84)) {
    kentta = stringToObject("document.forms['form1'].", name, "_date");
    if (kentta) {
      kentta.value = getDate(date_format);
    }
    kentta = stringToObject("document.forms['form1'].", name, "_time");
    if (kentta) {
      kentta.value = getTime();
    }
    return false;
  }
  return true;
}


//-----------------------------------------------------------------//

function checkCalendarEvent(kohde, calobj, muoto) {
  if (window.event) {
    var myEvent = new eventType(event);

    if (myEvent.shift) {
      kohde.value = getDate(muoto);
      return false;
    }
  }
  calobj.select(kohde, kohde.name, muoto);
  return false;
}
//-----------------------------------------------------------------//

function checkBasicFields() {
  if (!checkTimeFields()   || !checkMemoFields()    || !checkDateFields()) {
    return false;
  }
  return true;
}

//-----------------------------------------------------------------//

function checkCountyFilled() {
  if (document.forms['form1'].kuntaid && document.forms['form1'].kuntaid.value == 0) {
    alert("Kuntaa ei ole valittu. Valitse kunta.");
    document.forms['form1'].kuntaid.focus();
    return false;
  }
  return true;
}

//-----------------------------------------------------------------//

function checkDateFields() {
  for (var i=0; i<dateFields.length; i++) {
    if (dateFields[i].value != '' && !isDate(dateFields[i].value, dateFields_format[i])) {
      muoto = dateFields_format[i].replace('d', 'pp').replace('M', 'kk').replace('yyyy', 'vvvv');
      alert("'" + dateFields[i].value + "' ei ole hyväksytyn muotoinen päivämäärä. Tarkista päivämäärän muoto (" + muoto + ").")
      dateFields[i].focus();
      dateFields[i].select();
      return false;
    }
  }
  return true;
}

//-----------------------------------------------------------------//

function checkDateInput(dateField) {
  var str = dateField.value;
  var new_str = "";
  var numerot = "1234567890";
  var kk_erotin = false;
  var vuosi_erotin = false;

  var date = new Date();
  var month = date.getMonth() + 1;
  var yy = date.getYear();
  var year = (yy < 1000) ? yy + 1900 : yy;

  for(var i=0; i < str.length; i++) {
    if (numerot.indexOf(str.charAt(i)) == -1) {
      new_str += ".";
      if (!kk_erotin) {
        kk_erotin = true;
      } else {
        vuosi_erotin = true;
      }
    } else {
      new_str += str.charAt(i);
    }
  }

  if(!kk_erotin && new_str.length > 0) {
    new_str += "." + month;
  }
  if(!vuosi_erotin && new_str.length > 0) {
    new_str += "." + year;
  }

  dateField.value = new_str;
}

//-----------------------------------------------------------------//

function checkRadioButtons(rb) {
	for (var i=0; i < rb.length; i++){
		if (rb[i].checked){
			return true;
		}
	}
	return false;
}

//-----------------------------------------------------------------//

function checkResourceEvent(tyoid, evt) {
	if (!evt) {
		evt = window.event;
	}

  var myEvent = new eventType(evt);

  if (myEvent.shift) {
		valitseTyo(tyoid);
		return false;
  }

  else {
  	return true;
  }
}

//-----------------------------------------------------------------//

function checkSovittuFilled() {
  if (document.forms['form1'].sovittu_date && document.forms['form1'].sovittu_date.value == "") {
    alert("Sovittu/toivottu-aika on syötettävä. Syötä aika.");
    document.forms['form1'].sovittu_date.focus();
    return false;
  }
  return true;
}

//-----------------------------------------------------------------//

function checkTimeFields() {
  if (typeof(timeFields) != "undefined") {
    for (var i=0; i<timeFields.length; i++) {
      if (timeFields[i]['field'].value != "" && !validTime(timeFields[i]['field'].value)) {
        timeFields[i]['field'].focus();
        timeFields[i]['field'].select();
        return false;
      }
    }
  }
  return true;
}

//-----------------------------------------------------------------//

function checkTimeInput(timeField) {
  var str = timeField.value;
  var new_str = "";
  var numerot = "1234567890";
  var erotin = false;

  for(var i=0; i < str.length; i++) {
    if (numerot.indexOf(str.charAt(i)) == -1) {
      new_str += ":";
      erotin = true;
    } else {
      new_str += str.charAt(i);
    }
  }

  if(!erotin && new_str.length > 0) {
    new_str += ":00";
  }

  timeField.value = new_str;
}

//-----------------------------------------------------------------//

function checkWorkerFilled() {
  if (document.forms['form1'].tekijaid && (document.forms['form1'].tekijaid.value == 0 || document.forms['form1'].tekijaid.value == '')) {
    alert("Tekijää ei ole valittu. Valitse tekijä.");
    if (document.forms['form1'].nimi1_tekijaid) {
      document.forms['form1'].nimi1_tekijaid.focus();
    }
    return false;
  }
  return true;
}

//-----------------------------------------------------------------//

function classAdd(el, cName) {
  if (!el) return;

  if (el.className == null || el.className == '') {
    el.className = cName;
  } else if (!classExists(el, cName)) {
    el.className += " "+cName;
  }
}

//-----------------------------------------------------------------//

function classExists(el, cName) {
  if (!el) return false;
  var list = el.className.split(" ");
  for (var i = 0; i < list.length; i++) {
    if (list[i] == cName) {
      return true;
    }
  }

  return false;
}

//-----------------------------------------------------------------//

function classRemove(el, cName) {
  if (!el || el.className == null) return;

  var newList = new Array();
  var curList = el.className.split(" ");
  for (var i = 0; i < curList.length; i++) {
    if (curList[i] != cName) {
      newList.push(curList[i]);
    }
  }
  el.className = newList.join(" ");
}

//-----------------------------------------------------------------//

function confirmDelete() {
  return confirm("Poistetaanko varmasti?");
}

//-----------------------------------------------------------------//

function countTextarea(kentta, maxpituus) {
  var herjadiv = document.getElementById(kentta.name + "_pituusvaroitus");
  var herjainput = stringToObject("document.forms['form1'].", kentta.name, "_varoitus_poistettava");

  if (maxpituus - (kentta.value.length) < 0 ){
    if (herjainput) {
      herjainput.value = kentta.value.length - maxpituus;
    }
    if (herjadiv) {
      classRemove(herjadiv, "piilossa");
    }
  } else {
    if (herjainput) {
      herjainput.value = '';
    }
    if (herjadiv) {
      classAdd(herjadiv, "piilossa");
    }
  }
}

//-----------------------------------------------------------------//

function dateDifference(str1, str2) {
  date1 = parseDateFromStr(str1);
  date2 = parseDateFromStr(str2);

  var diff = date2 - date1;

  return diff;
}

//-----------------------------------------------------------------//

function disableEnableSubmitButtons(disableStatus) {
  var colButtons = document.getElementsByTagName("INPUT");
  var iLen = colButtons.length;
  for (var i=0;i<iLen;i++) {
    var oButton = colButtons[i];
    if (oButton.type == "submit" || oButton.type == "reset") {
      oButton.disabled = disableStatus;
    }
  }
}

//-----------------------------------------------------------------//
function disableEnableByTagName(disableStatus, tag) {
  var list = document.getElementsByTagName(tag);
  var iLen = list.length;
  for (var i=0;i<iLen;i++) {
    var item = list[i];
    item.disabled = disableStatus;
    item.readonly = disableStatus;
    if (disableStatus) {
      classAdd(item, "lukittu");
    } else {
      classAdd(item, "lukittu");
    }
    if (tag=='IMG') {
      if (item.src.indexOf('clock')>0) classAdd(item, "piilossa");
      if (item.src.indexOf('calendar')>0) classAdd(item, "piilossa");
    }
  }
}

function disableEnableInputs(disableStatus) {
  disableEnableByTagName(disableStatus, "INPUT");
  disableEnableByTagName(disableStatus, "TEXTAREA");
  disableEnableByTagName(disableStatus, "SELECT");
  disableEnableByTagName(disableStatus, "IMG");

}

//-----------------------------------------------------------------//

function forcedSearchAdd(sButton) {
  var exists = false;
  for (var i=0; i<forcedSearchButtons.length; i++) {
    if (forcedSearchButtons[i] == sButton) {
      exists = true;
      break;
    }
  }
  if (!exists) {
    forcedSearchButtons[forcedSearchButtons.length] = sButton;
    classAdd(sButton, "pakollinenhaku");
    disableEnableSubmitButtons(true);
  }
}

//-----------------------------------------------------------------//

function forcedSearchRemove(sButton) {
  for (var i=0; i<forcedSearchButtons.length; i++) {
    if (forcedSearchButtons[i].name == sButton.name) {
      classRemove(sButton, "pakollinenhaku");
      removeArrayElement(i, forcedSearchButtons);
    }
  }
  if(forcedSearchButtons.length == 0) {
    disableEnableSubmitButtons(false);
  }
}

//-----------------------------------------------------------------//

function getDate() {
  if (arguments.length>0) {
    date_format = arguments[0];
  } else {
    date_format = 'd.M.yyyy';
  }

  var date = new Date();
  var d  = date.getDate();
  var day = d;
  var m = date.getMonth() + 1;
  var month = m;
  var yy = date.getYear();
  var year = (yy < 1000) ? yy + 1900 : yy;


  return (date_format.replace('d', day).replace('M', month).replace('yyyy', year));
}
//-----------------------------------------------------------------//

function getDayofweek(dateStr) {
  var datePat = /^(\d{1,2})(.)(\d{1,2})\2((\d{2}){1,2})$/;
  var matchArray = dateStr.match(datePat);
  var error = " ei kelpaa päiväksi. (muoto=pp.kk.vvvv)"
  if (matchArray == null) {
    return '';
  }

  day = matchArray[1];
  month = matchArray[3];
  year = matchArray[4];
  d = new Date();
  d.setDate(day);
  d.setMonth(month-1);
  d.setYear(year);
  s = '';
  switch( d.getDay() ) {
     case 0: s = 'Sunnuntai'; break;
     case 1: s = 'Maanantai'; break;
     case 2: s = 'Tiistai'; break;
     case 3: s = 'Keskiviikko'; break;
     case 4: s = 'Torstai'; break;
     case 5: s = 'Perjantai'; break;
     case 6: s = 'Lauantai'; break;
  }
  return s;
}


//-----------------------------------------------------------------//

function getKuntaValue() {
  if (document.forms['form1'].kuntaid) {
    return document.forms['form1'].kuntaid.value;
  }

  return "0";
}

//-----------------------------------------------------------------//

function getMouseXY(e) {
  if (window && document && document.body) {
    if (document.all) {
      window.mousepos_X = event.clientX + document.body.scrollLeft
      window.mousepos_Y = event.clientY + document.body.scrollTop
    } else {
      window.mousepos_X = e.pageX
      window.mousepos_Y = e.pageY
    }
    if (window.mousepos_X < 0) window.mousepos_X = 0;
    if (window.mousepos_Y < 0) window.mousepos_Y = 0;
  }
  return true;
}

//-----------------------------------------------------------------//

function getTime() {
  var time = new Date();
  var h  = time.getHours();
  var hour = h;
  var m = time.getMinutes();
  var min = (m < 10) ? '0' + m : m;

  return (hour + ":" + min);
}

//-----------------------------------------------------------------//

function getTyyppiValue() {
  if (document.forms['form1'].tyyppiid) {
    return document.forms['form1'].tyyppiid.value;
  }
  return "0";
}

//-----------------------------------------------------------------//

function getWeek(year,month,day){
  //lets calc weeknumber the cruel and hard way :D
  //Find JulianDay
  var a = Math.floor((14-(month))/12);
  var y = year+4800-a;
  var m = (month)+(12*a)-3;
  // (gregorian calendar)
  var jd = day + Math.floor(((153*m)+2)/5) + (365*y) + Math.floor(y/4) - Math.floor(y/100) + Math.floor(y/400) - 32045;
  //
  //now calc weeknumber according to JD
  var d4 = (jd+31741-(jd%7))%146097%36524%1461;
  var L = Math.floor(d4/1460);
  var d1 = ((d4-L)%365)+L;
  NumberOfWeek = Math.floor(d1/7) + 1;
  return NumberOfWeek;
}

//-----------------------------------------------------------------//

function errorIgnore() {
  window.onerror = errorShow;
  return true;
}
function errorShow() {
  return false;
}

//-----------------------------------------------------------------//

function eventType(evt) {
  if (document.layers) { // Netscape
    this.shift = (evt.modifiers & Event.SHIFT_MASK)
    this.alt = (evt.modifiers & Event.ALT_MASK)
    this.control = (evt.modifiers & Event.CONTROL_MASK)
  } else { // IE & Mozilla
    if (!evt) {
      evt = window.event;
    }
    this.shift = (evt.shiftKey)
    this.alt = (evt.altKey)
    this.control = (evt.ctrlKey)
  }
}

//-----------------------------------------------------------------//

function isElementChanged(ele) {
  var isEleChanged = false;
  var x;
  switch (ele.type) {

    case "text" :
      if (ele.value != ele.defaultValue) {
        if (window.debug) {
          alert("Tekstikenttä: " + ele.name + "\nNyk. arvo: " + ele.value + "\nOletus: " + ele.defaultValue);
        }
        return true;
      }
    break;

    case "hidden" :
      if (ele.value != ele.defaultValue) {
        if (window.debug) {
          alert("Piilotettu kenttä: " + ele.name + "\nNyk. arvo: " + ele.value + "\nOletus: " + ele.defaultValue);
        }
        return true;
      }
    break;

    case "password" :
      if (ele.value != ele.defaultValue) {
        if (window.debug) {
          alert("Salasanakenttä: " + ele.name + "\nNyk. arvo: " + ele.value + "\nOletus: " + ele.defaultValue);
        }
        return true;
      }
    break;

    case "textarea" :
      if (ele.value != ele.defaultValue) {
        if (window.debug) {
          alert("Memo-kenttä: " + ele.name + "\nNyk. arvo: " + ele.value + "\nOletus: " + ele.defaultValue);
        }
        return true;
      }
    break;

    case "radio" :
      if (ele.checked != ele.defaultChecked) {
        if (window.debug) {
          alert("Radiobutton: " + ele.name + "\nNyk. arvo: " + ele.checked + "\nOletus: " + ele.defaultChecked);
        }
        return true;
      }
    break;

    case "select-one" :
      for (x=0 ; x <ele.length; x++) {
        if ( ele.options[x].selected != ele.options[x].defaultSelected) {
          if (window.debug) {
            var oletus='undefined';
            for (var i=0 ; i <ele.length; i++) {
              if (ele.options[i].defaultSelected) {
                oletus = ele.options[i].text;
                break;
              }
            }
            alert("Valintalista: " + ele.name + "\nNyk. arvo: " + ele.options[x].text + "\nOletus: " + oletus);
          }
          return true;
        }
      }
    break;

    case "select-multiple" :
      for (x =0 ; x <ele.length; x++ ) {
        if ( ele.options[x].selected != ele.options[x].defaultSelected ) {
          if (window.debug) {
            alert("Menulista: " + ele.name);
          }
          return true;
        }
      }
    break;

    case "checkbox" :
      if ( ele.checked != ele.defaultChecked ) {
        if (window.debug) {
          alert("Checkbox: " + ele.name + "\nNyk. arvo: " + ele.checked + "\nOletus: " + ele.defaultChecked);
        }
        return true;
      }
    break;

    default:
      return false;
    break;
  }
  return false;
}

//-----------------------------------------------------------------//

function isFormChanged() {
  var i;
  var ax_form  = document.forms['form1'];
  var rtnVal = false;
  if (ax_form) {
    var frm = ax_form;
    if (frm.elements[0]) {
      var ele = frm.elements;

      for (i=0; i < ele.length; i++) {
        if (ele[i].type) {
          if (isElementChanged(ele[i])) {
            rtnVal = true;
//            alert(ele[i].name);
            if (!window.debug) {
              break;
            }
          }
        }
      }
    }
  }
  return rtnVal;
}

//-----------------------------------------------------------------//

function leikepoyta(txt) {
  if (window.clipboardData) {
    window.clipboardData.setData("Text", txt);
    alert("Seuraava teksti kopioitiin leikepöydälle:\n\n" + txt);
  } else {
    alert("Selaimesi ei osaa kopioida tietoa suoraan leikepöydälle.\nKopioi tieto sivulta käsin.");
  }
}

//-----------------------------------------------------------------//

function navigateAway() {
  var kysymys = "";
  kysymys  = "----------------------------------------------------------------\n";
  kysymys += "Lomakkeen tiedot ovat muuttuneet!\n\n";
  kysymys += "Oletko varma, että haluat siirtyä pois sivulta tallentamatta muutoksia?\n";
  kysymys += "----------------------------------------------------------------";

  // Kysytään poistumisvarmistus, mikäli lomakkeen tiedot ovat muuttuneet,
  // eikä poistuta submit-napin kautta
  if (isFormChanged() && isSubmitted == false) {
    return kysymys;
  }
}

// ------------------------------------------------------------//
function noteBeginResize(evt) {
  var t;
  var diffpos = 0;
  if (!document.all) {
    startpos = evt.screenY + diffpos;
    t = evt.target;
  } else {
    startpos = event.clientY + diffpos;
    t = event.srcElement;
  }

  window.dragobject = document.getElementById(t.id.substring(0, t.id.length-3));
  window.elementheight = parseInt(t.offsetTop - window.dragobject.offsetTop);

  window.dragging = true;
  return false;
}

// ------------------------------------------------------------//
function noteEndResize(evt) {
  window.dragging = false;
  window.dragobject = null;
  return false;
}

// ------------------------------------------------------------//
function noteResize(evt) {
  if (window.dragobject) {

    if (window.dragging) {
      if (!document.all)
         currentpos = evt.screenY;
      else
         currentpos = event.clientY;

      diffpos = startpos-currentpos;
      if (elementheight - diffpos > 50) {
        window.dragobject.style.height = elementheight - diffpos + "px";
      }
    }
  }
}

//-----------------------------------------------------------------//

function open_window(name, page, width, height, e) {

  if (!e && window.event) e = window.event;
  if (e) {
    var myEvent = new eventType(e);

    if (myEvent.shift) {
      var time = new Date();
      name += "_" + time.getHours() + time.getMinutes() + time.getSeconds();
    }
  }

  if (!name.closed && name.location) {
    if (window.focus) {
      name.focus();
    }
  } else {

    window.onerror = errorIgnore;
    var newwindow = window.open(page, name, 'toolbar=no,location=no,directories=no,status=yes,menubar=no,scrollbars=yes,resizable=yes,width='+width+',height='+height+',left=20,top=20');
    window.onerror = errorShow;

    if (!newwindow.opener) newwindow.opener = self;

    newwindow.name = name;
  }

  if (window.focus) {
    newwindow.focus();
  }

  // Always return false.
  // No need to follow the link when open_window is called
  return false;
}

//-----------------------------------------------------------------//

function parseDateFromStr(str) {
  var day, month, year;
  var tmpdate = new Date();

  if (!validDate(str)) {
    return false;
  }
  //parse date
  var datePat = /^(\d{1,2})(.)(\d{1,2})(.)((\d{2}){1,2})$/;
  var matchArray = str.match(datePat);
  day = parseInt(matchArray[1]);
  month = parseInt(matchArray[3]);
  year = parseInt(matchArray[5]);

  tmpdate.setYear(year);
  tmpdate.setMonth(month-1);
  tmpdate.setDate(day);

  return tmpdate;
}

//-----------------------------------------------------------------//

function parseTimeFromStr(str) {
  var hour, min, sec;
  var tmpdate = new Date();

  if (!validTime(str)) {
    return false;
  }
  //parse time
  var timePat = /^(\d{1,2})(:)(\d{1,2})(((:)\d{2}){0,1})$/;
  var matchArray = str.match(timePat);
  hour = parseInt(matchArray[1]);
  min = parseInt(matchArray[3]);
  sec = parseInt(matchArray[5]);

  if (isNaN(sec)) {
    sec = 0;
  }

  tmpdate.setHours(hour);
  tmpdate.setMinutes(min);
  tmpdate.setSeconds(sec);

  return tmpdate;
}

//-----------------------------------------------------------------//

function removeArrayElement(elementnr, array) {
  while (elementnr < array.length) {
    array[elementnr] = array[elementnr + 1];
    elementnr++
  }
  array.length = array.length-1;
}

//-----------------------------------------------------------------//

function stringToObject() {
  var tmp='';
  var object = null;
  for (var i=0; i<arguments.length; i++) {
    tmp += arguments[i];
  }
  object = eval(tmp);
  return object;
}

//-----------------------------------------------------------------//

function setInputStyles() {
  // Set additional styles to some inputs
  var inputs = document.body.getElementsByTagName("INPUT");

  for (var i=0; i < inputs.length; i++) {
    if (inputs[i].type == "text" || inputs[i].type == "password") {
      // lisää tekstikentille css-tyyli
      classAdd(inputs[i], "tekstikentta");

      // Käsittele tekstikentää, kun siihen tulee focus ja kun se poistuu
      inputs[i].onfocus = element_onfocus;
      inputs[i].onblur  = element_onblur;

      // Käsittele tekstikentää, kun siihen hiiri tulee päälle ja kun se poistuu
      inputs[i].onmouseover = element_onmouseover;
      inputs[i].onmouseout  = element_onmouseout;
    }
  }

  // Set additional styles to textareas
  var memos = document.body.getElementsByTagName("TEXTAREA");

  for (var i=0; i < memos.length; i++) {
    // lisää tekstikentille css-tyyli
    classAdd(memos[i], "tekstikentta");

    // Käsittele tekstikentää, kun siihen tulee focus ja kun se poistuu
    memos[i].onfocus = element_onfocus;
    memos[i].onblur  = element_onblur;

    // Käsittele tekstikentää, kun siihen hiiri tulee päälle ja kun se poistuu
    memos[i].onmouseover = element_onmouseover;
    memos[i].onmouseout  = element_onmouseout;
  }
}

//-----------------------------------------------------------------//

function setPrintProperties(event) {
  if (factory.object) {

    var tulostindialogi = true;
    if (window.event) {
      var myEvent = new eventType(event);
      if (myEvent.shift) {
        tulostindialogi = false;
      }
    }

    factory.printing.header = "";
    factory.printing.footer = "";

    factory.printing.portrait = true;

    factory.printing.leftMargin   = 0;
    factory.printing.rightMargin  = 0;
    factory.printing.topMargin    = 0;
    factory.printing.bottomMargin = 0;

    factory.printing.Print(tulostindialogi);
  } else {
    if (confirm("Selaimesi ei tue marginaalien piilottamista, tulostetaanko sivu normaalisti?")) {
      self.print();
    }
  }

  // Palautetaan false, eli ei seurata linkkiä
  return false;
}

//-----------------------------------------------------------------//

function setSelectValue(list, value, oletus) {
  for (var x=0 ; x <list.length; x++) {
    if (list.options[x].value == value) {
      list.options[x].selected = true;
      if (oletus) {
        list.options[x].defaultSelected = true;
      }
      return true;
    }
  }
  list.options[0].selected = true;
  if (oletus) {
    list.options[0].defaultSelected = true;
  }
}

//-----------------------------------------------------------------//

function tekijatiedotTyhjenna() {
  var kentannimi;
  var idkentta;
  if (arguments.length>0) {
    kentannimi = '_' + arguments[0];
    idkentta = stringToObject("document.forms['form1'].", arguments[0]);
  } else {
    kentannimi = '_tekijaid';
    idkentta = document.forms['form1'].tekijaid;
  }

  if (idkentta) {
    idkentta.value='';
  }

  var kentat = new Array("nimi1", "rakenneid", "puhelin1", "email");

  for (var i=0; i<kentat.length; i++) {
    var kentta = stringToObject("document.forms['form1'].", kentat[i], kentannimi);
    if (kentta) {
      kentta.value = '';
      kentta.defaultValue = '';
    }
  }

  return false;
}

//-----------------------------------------------------------------//



//-----------------------------------------------------------------//

function validDate(dateStr) {
  var day, month, year;
  var datePat = /^(\d{1,2})(.)(\d{1,2})(.)(\d{4})$/;
  var matchArray = datePat.exec(dateStr);
  var error = " ei kelpaa päiväksi. (muoto=pp.kk.vvvv)"
  if (matchArray == null) {
    alert(dateStr + error);
    return false;
  }

  day = parseInt(matchArray[1]);
  month = parseInt(matchArray[3]);
  year = parseInt(matchArray[5]);

  if (month < 1 || month > 12) {
    alert(dateStr + error);
    return false;
  }
  if (day < 1 || day > 31) {
    alert(dateStr + error);
    return false;
  }
  if ((month==4 || month==6 || month==9 || month==11) && day==31) {
    alert(dateStr + error);
    return false;
  }
  if (month == 2) {
    var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
    if (day>29 || (day==29 && !isleap)) {
      alert(dateStr + error);
      return false;
    }
  }

  return true;
}

//-----------------------------------------------------------------//

function validInteger(inpString) {
   if (inpString == '') return false;
   return /^[-+]?\d+$/.test(inpString);
}

// ------------------------------------------------------------//

function validNumber(inpString) {
   if (inpString == '') return false;
   return /^[-+]?\d+([\.,]\d+)?$/.test(inpString);
}

// ------------------------------------------------------------//

function validTime(timeStr) {
  var hour, min, sec;
  var timePat = /^(\d{1,2})(:)(\d{1,2})(((:)\d{2}){0,1})$/;
  var matchArray = timeStr.match(timePat);
  var error = " ei kelpaa kellonajaksi. (muoto=tt:mm[:ss])"
  if (matchArray == null) {
    alert(timeStr + error);
    return false;
  }

  hour = matchArray[1];
  min = matchArray[3];
  sec = matchArray[4];

  if (hour < 0 || hour > 23) {
    alert(timeStr + error);
    return false;
  }
  if (min < 0 || min > 59) {
    alert(timeStr + error);
    return false;
  }
  if (sec < 0 || sec > 59) {
    alert(timeStr + error);
    return false;
  }

  return true;
}

// ------------------------------------------------------------//

function viimeinenPaiva(kentta) {
  date = new Date();
  kentta.value = '31.12.' + date.getFullYear();
}

// ------------------------------------------------------------//
function CheckMark(no, mark) {
  var m=new Array(31)
  m[0]='0'; m[1]='1'; m[2]='2'; m[3]='3'; m[4]='4'; m[5]='5';
  m[6]='6'; m[7]='7'; m[8]='8'; m[9]='9'; m[10]='A'; m[11]='B';
  m[12]='C'; m[13]='D'; m[14]='E'; m[15]='F'; m[16]='H'; m[17]='J';
  m[18]='K'; m[19]='L'; m[20]='M'; m[21]='N'; m[22]='P'; m[23]='R';
  m[24]='S'; m[25]='T'; m[26]='U'; m[27]='V'; m[28]='W'; m[29]='X';
  m[30]='Y';
  res = no%31;
  mark = mark.toUpperCase();
  if (mark != m[res]) {
    return false;
  }
  return true;
}

function SotuCheck(sotu) {
  //accept empty and only date
  if (sotu.length == 0) {
    return true;
  }
  if (sotu.length == 6) {
    dd = parseInt(sotu.substr(0,1) + sotu.substr(1,1), 10);
    mm = parseInt(sotu.substr(2,1) + sotu.substr(3,1), 10);
    yy = parseInt(sotu.substr(4,1) + sotu.substr(5,1), 10);
    return validDate(sotu.substr(0,2)+'.'+sotu.substr(2,2)+'.19'+sotu.substr(4,2));
  }
  if (sotu.length != 11) {
    return false;
  }
  if (sotu.substr(6,1) != '-' && sotu.substr(6,1) != '+' && sotu.substr(6,1) != '=')  {
    return false;
  }
  dd = parseInt(sotu.substr(0,1) + sotu.substr(1,1), 10);
  mm = parseInt(sotu.substr(2,1) + sotu.substr(3,1), 10);
  yy = parseInt(sotu.substr(4,1) + sotu.substr(5,1), 10);
  no = dd * 10000000 + mm * 100000 + yy * 1000;
  no = no + parseInt(sotu.substr(7,1) + sotu.substr(8,1) + sotu.substr(9,1), 10);
  mark = sotu.substr(10,1);
  if (!CheckMark(no, mark)) {
    return true;
  }
  return true;
}

//-----------------------------------------------------------------//
function LTrim(str)
/*
   PURPOSE: Remove leading blanks from our string.
   IN: str - the string we want to LTrim
*/
{
   var whitespace = new String(" \t\n\r");

   var s = new String(str);

   if (whitespace.indexOf(s.charAt(0)) != -1) {
      // We have a string with leading blank(s)...

      var j=0, i = s.length;

      // Iterate from the far left of string until we
      // don't have any more whitespace...
      while (j < i && whitespace.indexOf(s.charAt(j)) != -1)
         j++;

      // Get the substring from the first non-whitespace
      // character to the end of the string...
      s = s.substring(j, i);
   }
   return s;
}

//-----------------------------------------------------------------//
function RTrim(str)
/*
   PURPOSE: Remove trailing blanks from our string.
   IN: str - the string we want to RTrim

*/
{
   // We don't want to trip JUST spaces, but also tabs,
   // line feeds, etc.  Add anything else you want to
   // "trim" here in Whitespace
   var whitespace = new String(" \t\n\r");

   var s = new String(str);

   if (whitespace.indexOf(s.charAt(s.length-1)) != -1) {
      // We have a string with trailing blank(s)...

      var i = s.length - 1;       // Get length of string

      // Iterate from the far right of string until we
      // don't have any more whitespace...
      while (i >= 0 && whitespace.indexOf(s.charAt(i)) != -1)
         i--;


      // Get the substring from the front of the string to
      // where the last non-whitespace character is...
      s = s.substring(0, i+1);
   }

   return s;
}

//-----------------------------------------------------------------//
function Trim(str)
/*
   PURPOSE: Remove trailing and leading blanks from our string.
   IN: str - the string we want to Trim

   RETVAL: A Trimmed string!
*/
{
   return RTrim(LTrim(str));
}

//-----------------------------------------------------------------//
function Tulosta(what)
{
 var time = new Date();

MyWindow=window.open(

what,
'MyWindow'+"_" + time.getHours() + time.getMinutes() + time.getSeconds(),
'toolbar=no,location=yes,directories=yes,status=yes,menubar=yes,scrollbars=yes,resizable=yes,left=50,top=30, width=680, height=540');

MyWindow.focus();



return false;
}

// ------------------------------------------------------------//

function ax_mousemove(evt) {
  noteResize(evt);
  if (window.init_run) {
    tooltip_MouseMove(evt);
  } else {
    getMouseXY(evt);
  }
}

function ax_mouseup(evt) {
  noteEndResize(evt);
}

document.onmousemove = ax_mousemove;
document.onmouseup = ax_mouseup;


function taytaPaivat() {
  var viimeinen;
  var isleap = (document.forms['form1'].new_vuosi.value % 4 == 0 && (document.forms['form1'].new_vuosi.value % 100 != 0 || document.forms['form1'].new_vuosi.value % 400 == 0));
  if(document.forms['form1'].new_kuukausi.value==1 || document.forms['form1'].new_kuukausi.value==3
  || document.forms['form1'].new_kuukausi.value==5|| document.forms['form1'].new_kuukausi.value==7
  || document.forms['form1'].new_kuukausi.value==8|| document.forms['form1'].new_kuukausi.value==10
  || document.forms['form1'].new_kuukausi.value==12) {
    viimeinen=31;
  }
  if (document.forms['form1'].new_kuukausi.value==4 || document.forms['form1'].new_kuukausi.value==6
  || document.forms['form1'].new_kuukausi.value==9 || document.forms['form1'].new_kuukausi.value==11) {
    viimeinen=30;
  }
  if (document.forms['form1'].new_kuukausi.value==2 && isleap) {
    viimeinen=29;
  }
  else if (document.forms['form1'].new_kuukausi.value==2 && !isleap)
  {
    viimeinen=28;
  }

  document.forms['form1'].alku_date.value=
    '1.'+document.forms['form1'].new_kuukausi.value+'.'+
    document.forms['form1'].new_vuosi.value;
  document.forms['form1'].loppu_date.value=
    viimeinen+'.'+document.forms['form1'].new_kuukausi.value+'.'+
    document.forms['form1'].new_vuosi.value;
  return true;
}
