Jupp sobivat javascripti atribuutide kasutuseks
Allikas: Lambda
// ====== on load calls =====
function standardOnload(pagename) {
initHighlight();
markFields();
showErrorMessages();
setValidationHandlers();
setMenuChangeHandler();
}
function safeHTMLstr(str)
{
str=str.replace(/\\/g,' ')
str=str.replace(/\'/g,' ')
str=str.replace(/"/g,' ')
return str
}
function initHighlight() {
if (!document.getElementsByTagName){ return; }
var allfields = document.getElementsByTagName("input");
// loop through all input tags and add events
for (var i=0; i<allfields.length; i++){
var field = allfields[i];
if (((field.getAttribute("type") == "text") ||
(field.getAttribute("type") == "password")) && !field.getAttribute("readonly")) {
field.onfocus = function () {this.style.backgroundColor = '#FFFF99';}
field.onblur = function () {this.style.backgroundColor = '#FFFFFF';}
}
}
var allfields = document.getElementsByTagName("textarea");
for (var i=0; i<allfields.length; i++){
var field = allfields[i];
if (!field.getAttribute("readonly")) {
field.onfocus = function () {this.style.backgroundColor = '#FFFF99';}
field.onblur = function () {this.style.backgroundColor = '#FFFFFF';}
}
}
var allfields = document.getElementsByTagName("select");
for (var i=0; i<allfields.length; i++){
var field = allfields[i];
field.onfocus = function () {this.style.backgroundColor = '#FFFF99';}
field.onblur = function () {this.style.backgroundColor = '#FFFFFF';}
}
}
function setValidationHandlers() {
if(!document.getElementsByTagName || !document.getElementById) return false;
var formCollection = document.getElementsByTagName('input');
var formCollectionLength = formCollection.length;
for (i=0; i<formCollectionLength; i++) {
dt = formCollection[i].getAttribute('datatype');
if (dt == "date" || dt=="nofuturedate" || dt=="nopastdate") {
formCollection[i].onkeydown = vld_kpv;
} else if (dt == "estik") {
formCollection[i].onkeyup = debug_ik;
}
else if (dt == "period") {
formCollection[i].onkeydown = vld_period;
}
//mf = formCollection[i].getAttribute('mustfill');
}
}
function setMenuChangeHandler() {
// kui dokus on olemas mainForm ja MenuNavigationForm siis pane viimasele
// onSubmit() handler kylge mis kontrollib kas mainFormis on muudatusi
// ja kui on siis kysib kas on vaja salvestada
mainF = document.forms.mainForm;
navForm = document.forms.MenuNavigationForm;
if (!mainF || !navForm)
return true;
OnMenuNavigate = confirmChanged;
}
function markFields() {
var e;
try {
for (var i=0;i<errFields.length;i++) {
e=document.getElementsByName(errFields[i][0]);
for(var j=0;j<e.length;j++) {
if (j==0) e[j].focus();
e[j].style.backgroundColor = 'yellow';
}
}
} catch(err) {
}
}
// ==== checking and errors ====
function fieldCheck(tablename) { // tablename is actually not used when calling!
/*
checks all the fields in the form, several special attributes are used that describe how field should
behave.
nicename - name of the field that is shown to user in error messages/other fialogs
mustfill - element must have some kind of value
condfill - element should have some kind of value, if not then we ask user if he really wants to continue
datatype - type of the field
date - date in DD.MM.YYYY format
int - integer
nonegint - positive integer
estzip - estonian postal zip code
estik - estonian ID code, tag that uses this should have also ref_bt_field and ref_gender_field that contain values of the birthday and gender fieldnames respectivelly
email - email address (FIXME: implement)
*/
if (!document.getElementsByTagName){ return; }
var htmlobs = new Array()
var textfields = document.getElementsByTagName("input");
var areafields = document.getElementsByTagName("textarea");
var selectfields = document.getElementsByTagName("select");
htmlobs.push(textfields,areafields,selectfields);
var tablenamepref;
var field;
var fname;
var nfname;
var tname;
var notempty;
var datatype;
var condfill;
var condfill_c = false; // when user tells us he wants to save even though some condfill fields are unfilled
// then we set this to true so we wouldn't ask it again for each field
var val;
var condfld;
if ('function' == typeof window.localPreFieldCheck) // localPreFieldCheck if it exists sets up data (like mustfills etc)
if (!window.localPreFieldCheck()) // for this global fieldCheck(), should return true if ok
return false;
if (tablename!=null && tablename!='') tablenamepref=tablename+'_';
else tablenamepref=null;
for (var j=0; j<htmlobs.length; j++) {
for (var i=0; i<htmlobs[j].length; i++){
field=htmlobs[j][i]
fname=field.name;
if (tablenamepref!=null && fname!=null && fname.search(tablenamepref)!=0) {
continue;
}
notempty=field.getAttribute('mustfill');
condfill=field.getAttribute('condfill');
//alert("Fname="+fname+" condfill="+condfill);
datatype=field.getAttribute('datatype');
val=field.value;
//alert(fname+'|'+notempty+'|'+datatype+'|'+val);
if ((notempty=='yes' || condfill=='yes') && (val==null || val=='') && !condfill_c) {
nfname=field.getAttribute('nicename');
if (nfname==null || nfname=='') {
for(var l=0;l<document.getElementsByTagName('label').length;l++) {// mihkel added labels here
if(document.getElementsByTagName('label')[l].htmlFor==field.id) {
nfname=document.getElementsByTagName('label')[l].firstChild.nodeValue;
break;
}
}
if (nfname == null || nfname == '')
nfname = fname;
}
//alert('VƤli '+nfname+' tuleb tƤita!');
if (condfill == 'yes') {
// field is not absolutelly mandatory, we just must ask if user really wants to save data
// when this is not filled
condfld=document.getElementById('condfill_ok');
if (condfld && condfld!=null) {
condfld.value='0';
}
if (confirm('Kohustuslik vƤli '+nfname+' on tƤitmata. Kas oled kindel, et soovid salvestada?')) {
condfill_c = true;
}
} else {
alert('VƤli '+nfname+' tuleb tƤita!');
}
if (!condfill_c) { // removed by tanel: && condfill
field.onfocus = function () {this.style.backgroundColor = 'yellow';}
field.focus();
return false;
}
}
if (datatype=="date" && val.length > 0) {
if (!checkDate(field)) {
field.focus();
return false;
}
} else if (datatype=="nofuturedate" && val.length > 0) {
if (!checkDate(field)) {
field.focus();
return false;
}
} else if (datatype=="nopastdate" && val.length > 0) {
if (!checkNopastDate(field)) {
field.focus();
return false;
}
} else if ((datatype == "int" || datatype == "nonegint") && val.length > 0) {
var intValue = parseInt(val, 10);
nfname = field.getAttribute('nicename');
var strIbuf = ''+intValue;
// length check is needed for cases like 28tere that will be converted to int as 28
if (isNaN(intValue) || (strIbuf.length != val.length)) {
alert('VƤli '+nfname+' peab olema tƤisarv!');
field.focus();
return false;
}
if (datatype == "nonegint" && intValue < 0) {
nfname = field.getAttribute('nicename');
alert('VƤli '+nfname+' peab olema mittenegatiivne tƤisarv!');
field.focus();
return false;
}
} else if (datatype == "estzip" && val.length > 0) {
tmp_ival = parseInt(val, 10);
nfname = field.getAttribute('nicename');
if (val.length != 5 || isNaN(tmp_ival)) {
alert('VƤli '+nfname+' peab olema eesti postiindeksi formaadis (5 kohaline tƤisarv)');
field.focus();
return false;
}
} else if (datatype == "estik" && val.length > 0) {
var birthdate_field_name = field.getAttribute('ref_bt_field');
var gender_field_name = field.getAttribute('ref_gender_field');
var bt_field = document.getElementsByName(birthdate_field_name)[0];
var gender_field = document.getElementsByName(gender_field_name)[0];
var ikcheck_retval = false;
if (bt_field) {
ikcheck_retval = check_isikukood(field, bt_field, gender_field, false)
if (ikcheck_retval == false)
return false
} else {
alert("Sul on defineeritud väli tüübiga estik. Defineeri sellele ka ref_bt_field ja ref_gender_field atribuudid, mis sisaldavad antud isikukoodiga seotud sünniaja ja soo väljade nimesid, muidu ei saa automaatsed kontrollid täismahus toimida.");
}
}
}
}
if ('function' == typeof window.localFieldCheck) {
return window.localFieldCheck();
}
else {
return true;
}
}
function showErrorMessages() {
try {
if (errorMessages!='') {
if(errorMessages!='probleem')
alert("Viga: "+errorMessages);
return false;
} else {
return true;
}
} catch(err) {
}
}
function check_isikukood(ik_field, birthdate_field, gender_field, mustfill) {
var kood = ik_field.value;
var koodNiceName = ik_field.getAttribute('nicename');
var res = false;
var msg = "";
kood=trim(kood);
if (kood.length == 0 && !mustfill)
return true;
if (kood.length != 11) {
msg = koodNiceName + ": vale pikkus";
alert(msg);
ik_field.focus();
return false;
}
var year = parseInt(kood.substring(1,3), 10);
var monthS = kood.substring(3,5);
var dayS = kood.substring(5,7);
if (monthS.substring(0,1) == '0') {
monthS = monthS.substring(1,2);
}
if (dayS.substring(0,1) == '0') {
dayS = dayS.substring(1,2);
}
var month = parseInt(monthS, 10);
var day = parseInt(dayS, 10);
var century = parseInt(kood.substring(0,1), 10);
//alert("yearS="+kood.substring(1,3)+" monthS="+monthS+" dayS="+dayS)
//alert("year="+year+" month="+month+" day="+day);
var ik_gender;
if (isNaN(year) || isNaN(month) || isNaN(day) || isNaN(century)) {
alert(koodNiceName + ": vale sugu või sünniaeg isikukoodis");
ik_field.focus();
return false;
}
if (century == 1 || century == 2)
year = 1800 + year;
else if (century == 3 || century == 4)
year = 1900 + year;
else if (century == 5 || century == 6)
year = 2000 + year;
else {
msg = koodNiceName + ": vale sugu või sünniaja sajand";
alert(msg);
ik_field.focus();
return false;
}
if (!checkDate2(day, month, year)) {
msg = koodNiceName + ": vale sünniaeg isikukoodis";
alert(msg);
ik_field.focus();
return false;
} else if (parseInt(kood.substring(10,11), 10) != kontrollsumma(kood.substring(0,10))) {
msg = koodNiceName + ": vale kontrollsumma!";
alert(msg);
ik_field.focus();
return false;
}
if (gender_field) {
if (century % 2)
ik_gender = 'M';
else
ik_gender = 'N';
if (gender_field.value && gender_field.value != 'X' && gender_field.value != ik_gender) {
msg = koodNiceName + ": sugu ei ühildu väljaga " + gender_field.getAttribute('nicename') ;
alert(msg);
gender_field.focus();
return false
} else if (!gender_field.value) {
gender_field.value = ik_gender;
}
}
if (birthdate_field) {
var ikISObdate = year.toString() + "-";
if (month < 10)
ikISObdate += "0";
ikISObdate += month + "-";
if (day < 10)
ikISObdate += "0";
ikISObdate += day;
if (birthdate_field.value) {
if (checkDate(birthdate_field)) {
var ISObdtate = isoDateFromEstonian(birthdate_field.value);
//alert(ikISObdate);
//alert(ISObdtate);
if (ikISObdate!= ISObdtate) {
msg = koodNiceName + ": sünniaeg ei ühildu väljaga " + birthdate_field.getAttribute('nicename') ;
alert(msg);
birthdate_field.focus();
return false
}
}
} else { // birthday has no value
birthdate_field.value = estonianDateFromISO(ikISObdate);
}
} // has birthday field attached
return true;
}
function checkField(theField) {
var val = theField.value;
var niceName = theField.getAttribute('nicename');
if (!val || val.length== 0) {
alert("Viga: " + niceName + " sisestamata");
return false;
}
return true;
}
function check_isikukood_or_regkood(isfyysiline, ik_field, birthdate_field, gender_field, mustFill) {
if (isfyysiline)
return check_isikukood(ik_field, birthdate_field, gender_field, mustFill);
else {
return checkRegkood(ik_field, mustFill);
}
}
function checkRegkood(codeField, mustFill)
{
if (!mustFill && codeField.value.length == 0) {
return true;
}
if (codeField.value.length != 8 || !isInteger(codeField.value)) {
alert("Ƅriregistri kood peab olema 8 kohaline number");
return false;
}
return true;
}
var dtCh= ".";
var minYear=1900;
var maxYear=2100;
function isInteger(s){
var i;
for (i = 0; i < s.length; i++){
// Check that current character is number.
var c = s.charAt(i);
if (((c < "0") || (c > "9"))) return false;
}
// All characters are numbers.
return true;
}
function stripString(s) { // strips leading and trailing whitespaces
if (!s)
return s;
var i;
var white = " \t\r\n";
var start = -1;
var end = -1;
var c;
// Search through string's characters one by one.
// If character is not in bag, append to returnString.
for (i = 0; i < s.length; i++){
c = s.charAt(i);
if (white.indexOf(c) == -1) {
start = i;
break;
}
}
for (i=s.length; i >= 0; i--) {
c = s.charAt(i);
if (white.indexOf(c) == -1) {
end = i+1;
break;
}
}
if (end > start && end > -1 && start > -1)
return s.substring(start, end);
else
return "";
}
function stripCharsInBag(s, bag){
var i;
var returnString = "";
// Search through string's characters one by one.
// If character is not in bag, append to returnString.
for (i = 0; i < s.length; i++){
var c = s.charAt(i);
if (bag.indexOf(c) == -1) returnString += c;
}
return returnString;
}
function daysInFebruary (year){
// February has 29 days in any year evenly divisible by four,
// EXCEPT for centurial years which are not also divisible by 400.
return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
}
function DaysArray(n) {
for (var i = 1; i <= n; i++) {
this[i] = 31
if (i==4 || i==6 || i==9 || i==11) {this[i] = 30}
if (i==2) {this[i] = 29}
}
return this
}
function checkDateOrDateInterval(dateField)
{
var dtStr = dateField.value;
var nicename = dateField.getAttribute('nicename');
var pos1 = dtStr.indexOf("-");
var dtStr1;
var dtStr2;
if (pos1 >= 0) {
dtStr1 = stripString(dtStr.substring(0,pos1));
dtStr2 = stripString(dtStr.substring(pos1+1));
//alert("Esimene pool on |"+ dtStr1 + "|");
//alert("Teine pool on |" + dtStr2 + "|");
var normalized1 = checkDateInternal(dtStr1, nicename, false, true);
var normalized2 = checkDateInternal(dtStr2, nicename, false, true);
if (!normalized1|| !normalized2) {
alert(nicename + ": kuupƤevade vahemik peab olema kujul pp.kk.aaaa-pp.kk.aaaa");
return false;
}
var isoDate1 = isoDateFromEstonian(normalized1);
var isoDate2 = isoDateFromEstonian(normalized2);
if (isoDate2 < isoDate1) {
alert(nicename + ": kuupƤeva vahemiku lƵppkuupƤev ei tohi olla vƤiksem kui alguskuupƤev");
return false;
}
if (normalized1 != dtStr1 || normalized2 != dtStr2) {
var normalizedInterval = normalized1 + "-" + normalized2;
dateField.value = normalizedInterval;
}
return true;
}
else
return checkDate(dateField);
}
function checkDate(dateField) {
var dtStr = dateField.value;
var nicename = dateField.getAttribute('nicename');
// dtstr = value, so that we can call it
return checkDateInternal(dtStr, nicename, dateField, true); // true = do alert
}
function checkNofutureDate(dateField) {
var dtStr = dateField.value;
var nicename = dateField.getAttribute('nicename');
var normalized1 = checkDateInternal(dtStr, nicename, dateField, true);
if (!normalized1) {
return false;
}
//alert('in checkNofutureDate from '+dtStr+' normalized1 '+normalized1)
var isoDate1 = isoDateFromEstonian(normalized1);
/*
var today = new Date();
var tyear = today.getFullYear();
var tmonth = today.getMonth() + 1;
if (tmonth<10) tmonth="0"+tmonth;
var tday = today.getDate();
if (tday<10) tday="0"+tday;
var curdate=tday+"."+tmonth+"."+tyear
var normalized2 = checkDateInternal(curdate, nicename, false, true);
*/
var normalized2=document.getElementById('currentdate');
if (!normalized2 || normalized2=='' || normalized2==null) return normalized1;
normalized2=normalized2.value;
if (normalized2==null || normalized2=='') return normalized1;
var isoDate2 = isoDateFromEstonian(normalized2);
//alert('isoDate2 '+isoDate2+' isoDate1 '+isoDate1+' nicename '+nicename)
if (isoDate2 < isoDate1) {
alert(nicename + ": see kuupƤev ei tohi olla tulevikus");
return false;
} else {
//alert('normalized1 '+normalized1)
return normalized1;
}
}
function checkNopastDate(dateField) {
var dtStr = dateField.value;
var nicename = dateField.getAttribute('nicename');
var normalized1 = checkDateInternal(dtStr, nicename, dateField, true);
if (!normalized1) {
return false;
}
var isoDate1 = isoDateFromEstonian(normalized1);
/*
var today = new Date();
var tyear = today.getFullYear();
var tmonth = today.getMonth() + 1;
if (tmonth<10) tmonth="0"+tmonth;
var tday = today.getDate();
if (tday<10) tday="0"+tday;
var curdate=tday+"."+tmonth+"."+tyear
var normalized2 = checkDateInternal(curdate, nicename, false, true);
*/
var normalized2=document.getElementById('currentdate');
if (!normalized2 || normalized2=='' || normalized2==null) return normalized1;
normalized2=normalized2.value;
if (normalized2==null || normalized2=='') return normalized1;
var isoDate2 = isoDateFromEstonian(normalized2);
if (isoDate2 > isoDate1) {
alert(nicename + ": see kuupƤev ei tohi olla minevikus");
return false;
} else {
return normalized1;
}
}
function checkDateInternal(dtStr, nicename, dateField, doAlert) {
var dtStr2 = dtStr;
//alert(dtStr);
//alert(nicename);
var daysInMonth;
var pos1,pos2;
var strDay,strMonth,strYear;
var month, day, year;
var normalize = false;
var normalizedDate;
var datatype;
if (dateField) {
datatype=dateField.getAttribute('datatype');
if (!datatype || datatype=='') datatype="date";
} else {
datatype="date";
}
daysInMonth = DaysArray(12)
if (!dtStr)
return true;
pos1=dtStr.indexOf(dtCh)
if (pos1 >= 0) {
pos2=dtStr.indexOf(dtCh,pos1+1)
if (pos2 == -1) {
if (doAlert)
alert(nicename + ": kuupƤeva formaat peab olema : pp.kk.aaaa")
return false
}
strDay =dtStr.substring(0,pos1);
strMonth=dtStr.substring(pos1+1,pos2);
strYear=dtStr.substring(pos2+1);
if (strYear.length != 4 || strDay.length != 2 || strMonth.length != 2)
normalize = true;
} else if (dtStr.length == 6 || dtStr.length == 8) {
normalize = true;
strDay = dtStr.substring(0,2);
strMonth =dtStr.substring(2,4);
if (dtStr.length == 8)
strYear = dtStr.substring(4,8);
else
strYear = dtStr.substring(4,6);
} else {
if (doAlert)
alert(nicename + ": kuupƤeva formaat peab olemaa : pp.kk.aaaa");
return false;
}
var today = new Date();
var thisYear = today.getFullYear();
strYr = strYear;
month = parseInt(strMonth, 10);
day = parseInt(strDay, 10);
year = parseInt(strYear, 10);
if (strMonth.length<1 || month<1 || month>12){
if (doAlert)
alert(nicename + ": kuu peab olema 1...12 aga on " + strMonth);
return false;
}
if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month]){
if (doAlert)
alert(nicename + ": pƤev ei vasta kuu pƤevade arvule");
return false;
}
if (year < 100) {
if (datatype=='nopastdate' || (year < (thisYear - 2000) + 10))
year = 2000 + year;
else
year = 1900 + year;
}
if (year < minYear || year > maxYear){
if (doAlert)
alert(nicename + ": aasta peab olema vahemikus "+minYear+" kuni "+maxYear)
return false
}
if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false){
if (doAlert)
alert(nicename + ": sisesta Ƶige kuupƤev")
return false;
}
if (normalize) { // if datefield given then will normalize
normalizedDate = "";
if (day < 10)
normalizedDate = "0";
normalizedDate = normalizedDate + day + ".";
if (month < 10)
normalizedDate += "0";
normalizedDate = normalizedDate + month + "." + year;
if (dateField)
dateField.value = normalizedDate;
return normalizedDate;
}
return dtStr2
}
function checkDate2(day, month, year) {
var d = parseInt(day, 10);
var m = parseInt(month, 10);
var y = parseInt(year, 10);
if (isNaN(d) || isNaN(m) || isNaN(y))
return false;
if (m < 1 || m > 12)
return false;
return true;
}
function is_valid_range(aasta1,kuu1,paev1,aasta2,kuu2,paev2)
// Kontrollida, et 1. kuupaev oleks varasem kui 2. kuupaev.
// Teame, et kuupaevad ise on korrektsed (is_valid_date() on true).
{
if (aasta1 < aasta2) return true;
if (aasta1 > aasta2) return false;
// Aastad on samad
// Kui siin parseInt ei pane, siis vordleb kui stringe ja 2 > 11 !
if (parseInt(kuu1) < parseInt(kuu2)) return true;
if (parseInt(kuu1) > parseInt(kuu2)) return false;
// Kuud on samad
if (parseInt(paev1) < parseInt(paev2)) return true;
return false;
}
function is_valid_fromto(kuupaev1, kuupaev2)
// Kontrollida, et 1. kuupaev oleks varasem voi sama kui 2. kuupaev.
// Teame, et kuupaevad ise on korrektsed (is_valid_date() on true).
{
arr = kuupaev1.split('.');
paev1 = parseInt(arr[0],10);
kuu1 = parseInt(arr[1],10);
aasta1 = parseInt(arr[2],10);
arr = kuupaev2.split('.');
paev2 = parseInt(arr[0],10);
kuu2 = parseInt(arr[1],10);
aasta2 = parseInt(arr[2],10);
return is_valid_range(aasta1,kuu1,paev1,aasta2,kuu2,paev2);
}
function keyhandler(e, keycodes, func) {
// allows you to easily call some function
// when one of the keys in the keycodes list is pressed
// keycodes list should be string consisting of keynumbers separated by ,
// i.e. "38,12"
// func should be a callable function
// e is a event
if(window.event) { // IE
c = e.keyCode
} else if(e.which) {// Netscape/Firefox/Opera
c = e.which
}
var keyarray = keycodes.split(",");
for (i=0; i<keyarray.length; i++) {
if (c == parseInt(keyarray[i], 10)) {
func();
return true;
}
}
return true;
}
/* kontrollib, kas antud aasta, kuu ja pƤev sobivad kokku */
function kas_on_kpv(aasta,kuu,paev) {
var kuud = new Array(31,29,31,30,31,30,31,31,30,31,30,31);
rc = true;
if(kuu != null && !isNaN(kuu))
rc &= kuu > 0 && kuu <= 12;
if(paev != null && !isNaN(paev))
{
rc &= paev > 0 && paev <= 31;
if(kuu != null && !isNaN(kuu))
{
rc &= paev <= kuud[kuu-1];
if(paev == 29 && kuu == 2)
rc &= (aasta % 4 == 0 && (aasta % 100 != 0 || aasta % 400 == 0)); // liigaasta
}
}
if(aasta != null && !isNaN(aasta))
{
rc &= aasta >= 1000 && aasta <= 9999;
}
return rc;
}
function isoDateFromEstonian(vestDate) { // This function assumes normalized estonian date mm.dd.yyyy, 10 characters
if (!vestDate || vestDate=="" || vestDate.length<10) return "";
else return vestDate.substring(6,10) + "-" + vestDate.substring(3,5) + "-" + vestDate.substring(0,2);
}
function estonianDateFromISO(visoDate) { // This function assumes normalized iso date 10 characters
if (!visoDate || visoDate=="" || visoDate.length<10) return "";
else return visoDate.substring(8,10) + "." + visoDate.substring(5,7) + "." + visoDate.substring(0,4);
}
function isoDateDiffInDays(isoDate1, isoDate2) {
//alert(parseInt(isoDate1.substring(0,4))-1900);
var utc1 = Date.UTC(parseInt(isoDate1.substring(0,4), 10)-1900, parseInt(isoDate1.substring(5,7), 10) -1, parseInt(isoDate1.substring(8,10), 10), 1);
var utc2 = Date.UTC(parseInt(isoDate2.substring(0,4), 10)-1900, parseInt(isoDate2.substring(5,7), 10) -1, parseInt(isoDate2.substring(8,10), 10), 1 );
//alert(utc1 + " " + utc2);
var diff = ((utc1 - utc2) / 1000) / 3600 / 24 ;
var res = parseInt(diff.toString(), 10);
//alert(res);
return res;
}
function isoCurrentDate() {
var today = new Date();
var year = today.getYear();
var month = today.getMonth() + 1;
var day = today.getDate();
if (year < 1900)
year += 1900;
var isoDate = year + "-";
if (month < 10)
isoDate += "0";
isoDate += month + "-";
if (day < 10)
isoDate += "0";
isoDate += day;
return isoDate;
}
function estonianCurrentDate() {
return estonianDateFromISO(isoCurrentDate());
}
function ageFromISOBirthDate(birthdate) { // assume correct iso birthdate
var today = new Date();
var tyear = today.getYear();
var tmonth = today.getMonth() + 1;
var tday = today.getDate();
if (tyear < 1900)
tyear += 1900;
var byear = parseInt(birthdate.substring(0,4), 10);
var bmonth = parseInt(birthdate.substring(5,7), 10);
var bday = parseInt(birthdate.substring(8,10), 10);
var age = tyear - byear - 1;
if (tmonth > bmonth || (tmonth == bmonth && tday >= bday))
age++;
return age;
}