// JavaScript Document

// Algebra: ggd en kgv (v1.1)
function gcd(a,b){while(a!=b){if(a>b){a=a-b}else{b=b-a}}return a}function lcm(a,b){return a*b/gcd(a,b)}
// Algebra: priemgetal of niet (v1.1)
function isPrime(c){var p=true;c=parseInt(c);var v=Math.ceil(Math.sqrt(c));if(c<=1){p=false}if(c==2){p=true}if(c>2){if(c%2==0){p=false}else{for(var x1=3;x1<=v;x1+=2){if(c%x1==0){p=false;break}}}}if(p){return c=true}else{return c=false}}
// Algebra: zeef van Eratosthenes (v1.5)
function primes(b,c){if(c<b){c=c+b;b=c-b;c=c-b};var a=new Array();for(var x=0;x<=c;x++){a[x]=true}a[0]=false;a[1]=false;var p=2;a[p]=true;var prime=new Array();prime[0]=0;if((p>=b)&&(p<=c)){prime.push(p)}var i=2;while(p*i<=c){a[p*i]=false;i++}p++;while(p<=c){i=2;while(p*i<=c){a[p*i]=false;i++}if(p>=b){prime.push(p)}p+=2;while(a[p]==false){p+=2}}prime.shift();return prime}
// Algebra: fibonacci (v1.3)
function fibonacci(c){return Math.round((Math.pow(1+Math.sqrt(5),c-1)-Math.pow(1-Math.sqrt(5),c-1))/(Math.pow(2,c-1)*Math.sqrt(5)))}
// Algebra: logaritme base 10 v1.5)
function log10(c){return Math.log(c)/2.3025850929940456840179914546844}
// Algebra: randomLowHight (v1.3)
function randomLowHigh(l,h){if(l>h){l=l+h;h=l-h;l=l-h};var m=now2ms();var y;for(var x=-1;x<=m%100;x++){y=Math.floor(Math.random()*(h-l+1))+l;}return y} // low and high walue included
// Algebra: randomList (v1.5)
function randomList(a,b){if(a>b){a=a+b;b=a-b;a=a-b};var l=new Array(0);var r=new Array(0);for(var i=0;i<b-a+1;i++){l[i]=1};var g=randomLowHigh(0,b-a);for(var i=0;i<b-a+1;i++){while(l[g]==0){g=randomLowHigh(0,b-a)}l[g]--;r[i]=g+a;g=randomLowHigh(0,b-a)}return r}
// Algebra: even, oneven ? (v1.3)
function isEven(x){return x%2==0?true:false}
function isOdd(x){return x%2==0?false:true}
// Algebra: greatest and lowest (v1.3)
function greatest(){var g=arguments[0];for(var x=0;x<arguments.length;x++){g=g>arguments[x]?g:arguments[x]}return g}
function lowest(){var g=arguments[0];for(var x=0;x<arguments.length;x++){g=g<arguments[x]?g:arguments[x]}return g}
// Algebra: gemiddelde (v1.3)
function mean(){var m=0;for(var a=0;a<arguments.length;a++){m+=parseFloat(arguments[a])}return m/arguments.length}
// Algebra: gemiddelde van een array (v1.5)
function average(x){var av=0;for(var y=0;y<x.length;y++){av+=x[y]}return av/x.length}
// Algebra: populatie (met argumenten) en population (met lijst) (v1.5)
function populatie(){var m=0;var n=0;for(var a=0;a<arguments.length;a++){m+=parseFloat(arguments[a])}for(var a=0;a<arguments.length;a++){n+=Math.pow((arguments[a]-m/arguments.length),2)}return Math.sqrt(n/arguments.length)}
function population(x){var av=0;n=0;for(var y=0;y<x.length;y++){av+=x[y]}for(var a=0;a<x.length;a++){n+=Math.pow((x[a]-av/x.length),2)}return Math.sqrt(n/x.length)}
// Algebra: stdDev (met argurmenten) en stdAv (met lijst)  (v1.5)
function stdDev(){var m=0;var n=0;for(var a=0;a<arguments.length;a++){m+=parseFloat(arguments[a])}for(var a=0;a<arguments.length;a++){n+=Math.pow((arguments[a]-m/arguments.length),2)}return Math.sqrt(n/(arguments.length-1))}
function stdAv(x){var av=0;n=0;for(var y=0;y<x.length;y++){av+=x[y]}for(var a=0;a<x.length;a++){n+=Math.pow((x[a]-av/x.length),2)}return Math.sqrt(n/(x.length-1))}

//function mean(x){alert("waarden: "+x)}
//====================================================

// Conversies: temperatuursconversies (v1.1)
function c2d(c){return (100-c)*(3/2)}function c2f(c){return c*1.8+32}function c2k(c){return c+273.15}function c2n(c){return c*33/100};function c2ra(c){return c*1.8+491.67}function c2re(c){return c*(4/5)}function c2ro(c){return c*(21/40)+7.5}
function d2c(d){return 100-d*(2/3)}function d2f(d){return 212-d*6/5}function d2k(d){return 373.15-d*(2/3)}function d2n(d){return 33-d*11/50}function d2ra(d){return 671.67-d*(6/5)}function d2re(d){return 80-d*(8/15)}function d2ro(d){return 60-d*(7/20)}
function f2c(f){return (f-32)/1.8}function f2d(f){return (212-f)*5/6}function f2k(f){return ((f-32)/1.8)+273.15}function f2n(f){return (f-32)*11/60}function f2ra(f){return f+459.67}function f2re(f){return (f-32)*(4/9)}function f2ro(f){return (f-32)*(7/24)+7.5}
function k2c(k){return k-273.15}function k2d(k){return (373.15-k)*(3/2)}function k2f(k){return (k-273.15)*1.8+32}function k2n(k){return (k-273.15)*33/100}function k2ra(k){return k*(9/5)}function k2re(k){return (k-273.15)*(4/5)}function k2ro(k){return (k-273.15)*(21/40)+7.5}
function n2c(n){return n*100/33}function n2d(n){return (33-n)*50/11}function n2f(n){return n*60/11+32}function n2k(n){return n*100/33+273.15}function n2ra(n){return n*60/11+491.67}function n2re(n){return n*80/33}function n2ro(n){return n*35/22+7.5}
function ra2c(ra){return (ra-491.67)/1.8}function ra2d(ra){return (671.67-ra)*(5/6)}function ra2f(ra){return ra-459.67}function ra2k(ra){return ra*(5/9)}function ra2n(ra){return (ra-491.67)*11/60}function ra2re(ra){return (ra-491.67)/2.25}function ra2ro(ra){return (ra-491.67)*(7/24)+7.5}
function re2c(re){return re*(5/4)}function re2d(re){return (80-re)*(15/8)}function re2f(re){return re*(9/4)+32}function re2k(re){return re*(5/4)+273.15}function re2n(re){return re*33/80}function re2ra(re){return re*2.25+491.67}function re2ro(re){return re*(21/32)+7.5}
function ro2c(ro){return (ro-7.5)*(40/21)}function ro2d(ro){return (60-ro)*(20/7)}function ro2f(ro){return (ro-7.5)*(24/7)+32}function ro2k(ro){return (ro-7.5)*(40/21)+273.15}function ro2n(ro){return (ro-7.5)*22/35}function ro2ra(ro){return (ro-7.5)*(24/7)+491.67}function ro2re(ro){return (ro-7.5)*(32/21)}
// Conversies: engelse lengtematen (v1.4)
function inch2mile(c){return c/63360}function inch2chain(c){return c/792}function inch2yard(c){return c/36}function inch2feet(c){return c/12}
function feet2mile(c){return c/5280}function feet2chain(c){return c/66}function feet2yard(c){return c/3}function feet2inch(c){return c*12}
function yard2mile(c){return c/1760}function yard2chain(c){return c/22}function yard2feet(c){return c*3}function yard2inch(c){return c*36}
function chain2mile(c){return c/80}function chain2yard(c){return c*22}function chain2feet(c){return c*66}function chain2inch(c){return c*792}
function mile2chain(c){return c*80}function mile2yard(c){return c*1760}function mile2feet(c){return c*5280}function mile2inch(c){return c*63360}
// Conversies: lengtematen, engels naar metrisch (v1.4)
function mile2mm(c){return c*1609344}function chain2mm(c){return c*20116.8}function yard2mm(c){return c*914.4}function feet2mm(c){return c*304.8}function inch2mm(c){return c*25.4}
function mile2m(c){return c*1609.344}function chain2m(c){return c*20.1168}function yard2m(c){return c*.9144}function feet2m(c){return c*.3048}function inch2m(c){return c*.0254}
function mile2km(c){return c*1.609344}function chain2km(c){return c*.0201168}function yard2km(c){return c*.9144e-3}function feet2km(c){return c*.3048e-3}function inch2km(c){return c*.0254e-3}
// Conversies: lengtematen, metrisch naar engels (v1.4)
function mm2mile (c){return c/1609344}function mm2chain (c){return c/20116.8}function mm2yard (c){return c/914.4}function mm2feet (c){return c/304.8}function mm2inch (c){return c/25.4}
function m2mile (c){return c/1609.344}function m2chain (c){return c/20.1168}function m2yard (c){return c/.9144}function m2feet (c){return c/.3048}function m2inch (c){return c/.0254}
function km2mile (c){return c/1.609344}function km2chain (c){return c/.0201168}function km2yard (c){return c/.9144e-3}function km2feet (c){return c/.3048e-3}function km2inch (c){return c/.0254e-3}
// Conversies: lengtematen, metrisch lengtematen (v1.4)
function mc2mm(c){return c*1e-3}function mc2m(c){return c*1e-6}function mc2km(c){return c*1e-9}
function cm2mm(c){return c*1e1}function cm2m(c){return c*1e-2}function cm2km(c){return c*1e-5}
function dm2mm(c){return c*1e2}function dm2m(c){return c*1e-1}function dm2km(c){return c*1e-4}
function dam2mm(c){return c*1e4}function dam2m(c){return c*1e1}function dam2km(c){return c*1e-2}
function hm2mm(c){return c*1e5}function hm2m(c){return c*1e2}function hm2km(c){return c*1e-1}

function mm2mc(c){return c*1e3}function m2mc(c){return c*1e6}function km2mc(c){return c*1e9}
function mm2cm(c){return c*1e-1}function m2cm(c){return c*1e2}function km2cm(c){return c*1e5}
function mm2dm(c){return c*1e-2}function m2dm(c){return c*1e1}function km2dm(c){return c*1e4}
function mm2dam(c){return c*1e-4}function m2dam(c){return c*1e-1}function km2dam(c){return c*1e2}
function mm2hm(c){return c*1e-5}function m2hm(c){return c*1e-2}function km2hm(c){return c*1e1}
// Conversies: maya getallen (v1.4)
function maya(m){if(m<=25599999999){var mg=""; var mgt="";for(var x=1;x<=8;x++){mg="";if(m%20<10){mg+=" 0"+m%20}else{mg+=" "+m%20}mgt=mg+mgt;m=Math.floor(m/20);}return trim(mgt);}else{return "Not defined !!"}}
//====================================================

// Datum en Tijd: schrikkeljaar of niet ? (v1.1)
function isLeapYear(x){if(x>=1582){return((x%400==0)||(x%4==0)&&(x%100!=0))?true:false;}else{return false}} // vanaf gregoriaanse kalender 1582
// Datum en Tijd: dag v/h jaar / dagen tot eind huidig jaar (v1.3)
function dayOfYear(){var n=new Date();n.setYear(n.getFullYear());n.setMonth(0);n.setDate(1);return 1+Math.round(Math.abs(now2ms()-n.getTime())/864e5)}//zero-based
function days2End(){return isLeapYear(thisFullYear())?366-dayOfYear():365-dayOfYear()} // nog grondig testen, schrikkeljaar niet inbegrepen !!!
// Datum en Tijd: this date (v1.3)
function thisSecond(){var n=new Date();var s=n.getSeconds();return s<10?"0"+s:""+s;}
function thisMinute(){var n=new Date();var m=n.getMinutes();return m<10?"0"+m:""+m}
function thisHour(){var n=new Date();var h=n.getHours();return h<10?"0"+h:""+h;}
function thisDate(){var n=new Date();var d=n.getDate();return d<10?"0"+d:""+d;}
function thisDay(){var n=new Date();var d=n.getDay();return d}
function thisMonth(){var n=new Date();var m=n.getMonth();return m<10?"0"+m:""+m}
function thisFullYear(){var n=new Date();var y=n.getFullYear();return y}
// Datum en tijd: zet dag-nummer om in woorden in welbepaalde taal (v1.4)
function transDay(d,l){switch(l){
	case"de":x=new Array("Sonntag","Mondag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag");break;
	case"en":x=new Array("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday");break;
	case"es":x=new Array("Domingo","Lunes","Martes","Miercoles","Jueves","Viernes","Sabato");break;
	case"fr":x=new Array("Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samdi");break;
	case"ir":x=new Array("De Domhnaigh","De Luain","De Mairt","De Ceadaoin","Deardaoin","De hAoine","De Sathairn");break; // Iers
	case"it":x=new Array("Domenica","Lunedi","Martedi","Miercoledi","Giovedi","Venerdi","Sabato");break;
	case"nl":x=new Array("Zondag","Maandag","Dinsdag","Woensdag","Donderdag","Vrijdag","Zaterdag");break;
	case"pt":x=new Array("Domingo","Segunda-feira","Terca-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sabado");break; // Portugees
	case"tr":x=new Array("Pazar","Pazartesi","Sali","Carsamba","Persembe","Cuma","Cumartesi");break; // turks
	default:x=new Array("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday");break}
	return x[d]}
// Datum en tijd: zet maand-nummer om in woorden in welbepaalde taal (v1.4)
function transMonth(d,l){switch(l){
	case"de":x=new Array("Januar","Februar","Marz","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember");break;
	case"en":x=new Array("January","February","March","April","May","June","July","August","September","Oktober","November","December");break;
	case"es":x=new Array("enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","deciembre");break;
	case"fr":x=new Array("janvier","fevrier","mars","avril","mai","juin","juillet","aout","septembre","oktobre","novembre","decembre");break;
	case"ir":x=new Array("Eanair","Feabhra","Marta","Aibrean","Bealtaine","Meitheamh","Luil","Lunasa","Mean Fomhair","Deireadh Fomhair","Samheim","Nollaig");break; // Iers
	case"it":x=new Array("gennaio","febbrario","marzo","aprile","maggio","guigno","luglio","agosto","settembre","ottobre","novembre","dicembre");break;
	case"nl":x=new Array("januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december");break;
	case"pt":x=new Array("Janeiro","Fevereiro","Marco","Abril","Maio","Junho","Julho","Agosto","Setembro","De outubro","Novembro","Dezembro");break; // Portugees
	case"tr":x=new Array("Ocak","Subat","Mart","Nisan","Mayis","Haziran","Temmuz","Agustos","Eylul","Ekim","Kasim","Aralik");break; // Turks
	default:x=new Array("January","February","March","April","May","June","July","August","September","Oktober","November","December");break}
	return x[d]}
// Datum en tijd: aantal dagen tussen twee data (v1.4)
function diffDays(d1,d2){var day1=new Date(d1.substr(3,2)+"/"+d1.substr(0,2)+"/"+d1.substr(6,4));var day2=new Date(d2.substr(3,2)+"/"+d2.substr(0,2)+"/"+d2.substr(6,4));return Math.ceil((day2.getTime()-day1.getTime())/864e5)}
// Datum en tijd: op welke dag? (v1.4)
function whichDay(d,l){return transDay(new Date(d.substr(3,2)+"/"+d.substr(0,2)+"/"+d.substr(6,4)).getDay(),l);}
//====================================================

// Fysica: elektriciteit weerstanden (v1.1)
function series(r){var rst=0;for(var a=0;a<arguments.length;a++){rst+=parseFloat(arguments[a]);}return rst;}
function parallel(r){var rpt=0;for(var a=0;a<arguments.length;a++){rpt+=1/parseFloat(arguments[a]);}return 1/rpt;}
//====================================================

// Meetkunde: oppervlakte en inhoud regelmatige veelvlakken (v1.1)
function oppTetraeder(r){return Math.pow(r,2)*Math.sqrt(3)} // tetraëder = viervlak bestaande uit 4 gelijkzijdige driehoeken
function volTetraeder(r){return Math.pow(r,3)*Math.SQRT2/12}
function oppHexaeder(r){return 6*Math.pow(r,2)}//6-vlak
function volHexaeder(r){return Math.pow(r,3)}//6-vlak
function oppOctaeder(r){return Math.pow(r,2)*2*Math.sqrt(3)} // 8-vlak
function volOctaeder(r){return Math.pow(r,3)*Math.SQRT2/3} // 8-vlak
function oppDodecaeder(r){return 3*Math.sqrt(25+10*Math.sqrt(5))*Math.pow(r,2)}// 12-vlak
function volDodecaeder(r){return (15+7*Math.sqrt(5))*Math.pow(r,2)/4}// 12-vlak
function oppIcosaeder(r){return 5*Math.sqrt(3)*Math.pow(r,2)}// 20-vlak
function volIcosaeder(r){return 5*(3+Math.sqrt(5))*Math.pow(r,3)/12} //20-vlak
// Meetkunde: omtrek en oppervlakte (vierhoeken) (v1.3)
function omtVierkant(z){return 4*z}function oppVierkant(z){return z*z}
function omtRuit(d1,d2){return pythagoras(d1,d2)*2}function oppRuit(d1,d2){return d1*d2/2}
function omtVlieger(d1,d2,d3){return pythagoras(d1,2*d2)+pythagoras(d1,2*d3)}function oppVlieger(d1,d2,d3){return d1*(d2+d3)/2} // v1.4
function omtRechthoek(b,h){return 2*(b+h)}function oppRechthoek(b,h){return b*h}
function omtParallellogram(b1,b2,h){return (b1+pythagoras(b2,h))*2}function oppParallellogram(b,h){return b*h}
function omtTrapezium(b1,b2,b3,h){return b1+b2+pythagoras(b3,h)+pythagoras(b1-b2-b3,h)}
function oppTrapezium(b1,b2,h){return (b1+b2)*h/2}
function omtRegVeelhoek(n,z){return n*z}function oppRegVeelhoek(n,z){return n*z*Math.tan(Math.PI*(n-2)/(2*n))}
// Meetkunde: omtrek en oppervlakte (veelhoekenvlakken) (v1.4)
function omtVeelhoek(n,z){return n*z}function oppVeelhoek(n,z){return (Math.tan(Math.PI/2-Math.PI/n))*(n/4)*(z*z)}
// Meetkunde: stelling van Pythagoras (v1.3)
function pythagoras(c1,c2){return Math.sqrt(Math.pow(c1,2)+Math.pow(c2,2))}
// Meetkunde: drie zijden, een cirkel (v1.3)
function abc2r(a,b,c){return (a*b*c)/(4*opp3hZ(a,b,c))} // drie zijden bepalen een driehoek, wat is de straal van de omschreven cirkel => abc2r(a,b,c)
// Meetkunde: omtrek en oppervlakte driehoeken (v1.3)
	//R3h=rechthoekige driehoek
	//W3h=Willekeurige driehoek
	//3hZ=driehoek met enkel de zijden
function omtR3h(b,h){return b+h+pythagoras(b,h)}
function omtW3h(b1,b2,h){return b1+pythagoras(b1+b2,h)+pythagoras(b2,h)}
function oppDriehoek(b,h){return b*h/2}
function opp3hZ(a,b,c){if((a==gF3(a,b,c)&&(b+c>=a))||(b==gF3(a,b,c)&&(a+c>=b))||(c==gF3(a,b,c)&&(a+b>=c))){var p=(a+b+c)/2;return Math.sqrt(p*(p-a)*(p-b)*(p-c))}else{return -1}}
// Meetkunde: cirkel en bol (v1.4)
function omtCirkel(r){return 2*r*Math.PI}function oppCirkel(r){return Math.PI*r*r}
function oppBol(r){return 4*Math.PI*r*r}function volBol(r){return Math.PI*Math.pow(r,3)*4/3}
//====================================================

// Stringbewerkingen: spaties voor en na weglaten (v1.1)
function trim(value){value=value.replace(/^\s+/,'');value=value.replace(/\s+$/,'');return value;}
//Stringbewerking: zet cijfers om in woorden in welbepaalde taal (v1.4)
function transDigit(d,l){var g=""+parseInt(d);var x2=g.length;var r="";for(x1=0;x1<x2;x1++){d=g.substr(x1,1);switch(l){
	case"du":x=new Array("null","ein","zwei","drei","vier","fumf","sechs","sieben","acht","neun");break;
	case"en":x=new Array("zero","one","two","three","four","five","six","seven","eight","nine");break;
	case"es":x=new Array("zero","uno","dos","tres","cuatro","cinco","seis","siete","ocho","nueve");break;
	case"fr":x=new Array("zero","un","deux","trois","quatre","cinq","six","sept","huit","neuf");break;
	case"nl":x=new Array("nul","een","twee","drie","vier","vijf","zes","zeven","acht","negen");break;
	case"tr":x=new Array("sifir","bir","iki","uc","dort","bes","alti","yedi","sekiz","dukoz");break; // Turks
	default:x=new Array("zero","one","two","three","four","five","six","seven","eight","nine");break}r+=x[d]+" ";}r=trim(r);
	return r}
//====================================================

// Kleurtechnieken v1.2)
function colorGradient(begin,einde,aantal){var tussenkleuren="";var begin_r=HexToR(begin);var begin_g=HexToG(begin);var begin_b=HexToB(begin);var einde_r=HexToR(einde);var einde_g=HexToG(einde);var einde_b=HexToB(einde);aantal++;for(var x4=0;x4<=aantal;x4++){tussenkleuren+="#"+RGBtoHex(parseInt(begin_r)+(parseInt(einde_r)-parseInt(begin_r))/aantal*x4,parseInt(begin_g)+(parseInt(einde_g)-parseInt(begin_g))/aantal*x4,parseInt(begin_b)+(parseInt(einde_b)-parseInt(begin_b))/aantal*x4);}return tussenkleuren;}
function selectColor(cstr,pos){return cstr.substr(pos*7,7)}
function colorMix(b_color,e_color){if(b_color.substring(0,1)=="#"){b_color=b_color.substr(1)}if(e_color.substring(0,1)=="#"){e_color=e_color.substr(1)}var a=parseInt(b_color,16);var b=parseInt(e_color,16);var c=(a^b).toString(16).toUpperCase();while(c.length<6){c="0"+c;}return "#"+c;}
//====================================================

// Enkele hulp-functies
function now2ms(){var t=new Date();return t.getTime()}
function todayDateLong(l){var t=new Date();var y=t.getFullYear();var m=t.getMonth();var dt=t.getDate();var d=t.getDay();return days(d,l)+" "+dt+" "+mnds(m,l)+" "+y}
function todayDateShort(t){t=new Date();var y=t.getFullYear();var m=t.getMonth()+1;var d=t.getDate();m=m<10?"0"+m:""+m;d=d<10?"0"+d:""+d;return d+"-"+m+"-"+y}
function todayTime(t){t=new Date();var h=t.getHours();var m=t.getMinutes();var s=t.getSeconds();h=h<10?"0"+h:""+h;m=m<10?"0"+m:""+m;s=s<10?"0"+s:""+s;return h+":"+m+":"+s}
function todayDateTimeLong(l){return todayDateLong(l)+"   "+todayTime()}
function todayDateTimeShort(t){return todayDateShort()+"   "+todayTime()}
function todayDateReverse(){t=new Date();var y=t.getFullYear();var m=t.getMonth()+1;var d=t.getDate();m=m<10?"0"+m:""+m;d=d<10?"0"+d:""+d;return y+"-"+m+"-"+d}
function delayDate(x)
{
	t=new Date();
	t.setTime(t.getTime()+x*24*60*60*1000);
	var y=t.getFullYear();
	var m=t.getMonth()+1;
	var d=t.getDate();
	m=m<10?"0"+m:""+m;
	d=d<10?"0"+d:""+d;
	return y+"-"+m+"-"+d
}

