/*Copyright (C) 2006 Michał "Torn" Strzałkowski*/
function output(ID){
var capaVal,toleVal,minTempVal,maxTempVal,toleChangeVal,capaDriftVal,tempCoefVal,voltVal
var plErrorMsg="Nieznany kod kondensatora",plDescInput="Wpisz oznaczenie z kondensatora:&nbsp;",plDescCapa="Pojemność:&nbsp;"
var plDescTole="Tolerancja:&nbsp;",plDescTemp="Zakres temperatur:&nbsp;",plDescToleChange="Maksymalna zmiana pojemności w zakresie temperatur:&nbsp;"
var plDescCapaDrift="Maksymalny dryft pojemności:&nbsp;",plDescTempCoef="Zakres współczynika temperatury:&nbsp;",plDescVolt="Napięcie pracy:&nbsp;"
var enErrorMsg="Unknown capacitor code",enDescInput="Enter capacitor code:&nbsp;",enDescCapa="Capacitance value:&nbsp;"
var enDescTole="Tolerance:&nbsp;",enDescTemp="Temperature range:&nbsp;",enDescToleChange="Maximum capacitance change over temperature:&nbsp;"
var enDescCapaDrift="Maximum capacitance drift:&nbsp;",enDescTempCoef="Maximum range of temperature coefficient:&nbsp;",enDescVolt="DC working voltage:&nbsp;"
var lang
this.ID=ID
this.cls=clearOutput
this.setCapaValue=setValue
this.setToleValue=setTole
this.setMinTempValue=setMinTemp
this.setMaxTempValue=setMaxTemp
this.setToleChangeValue=setToleChange
this.setCapaDriftValue=setCapaDrift
this.setTempCoefValue=setTempCoef
this.setVoltValue=setVolt
this.print=setOutput
this.setLang=setLangValue
this.getErrorMsg=getError
this.getDesc=desc
function setValue(value){capaVal=value}
function setTole(value){toleVal=value}
function setMinTemp(value){minTempVal=value}
function setMaxTemp(value){maxTempVal=value}
function setToleChange(value){toleChangeVal=value}
function setCapaDrift(value){capaDriftVal=value}
function setTempCoef(value){tempCoefVal=value}
function setVolt(value){voltVal=value}
function desc(){var out;if(lang.toLowerCase()=="pl"){out=plDescInput}else if(lang.toLowerCase()=="en"){out=enDescInput}
return out}
function setLangValue(value){lang=value;if(document.getElementById("desc")){setDesc()}this.cls()}
function getError(){var out;if(lang.toLowerCase()=="pl"){out=plErrorMsg}else if(lang.toLowerCase()=="en"){out=enErrorMsg}
return out}
function clearOutput(){if(document.getElementById(this.ID)){document.getElementById(this.ID).innerHTML=""}}
function multiplier(val){var out;out = val+"pF ="+val/1000+"nF ="+val/1000000+"&#181;F";return out}
function setOutput(){
var output
this.cls()
if(lang.toLowerCase()=="pl"){
if(capaVal){output=plDescCapa+multiplier(capaVal)+"<br>"}
if(toleVal){output+=plDescTole+toleVal+"<br>"}
if(minTempVal&&maxTempVal){output+=plDescTemp+minTempVal+"&#186;C"+" &#126; "+maxTempVal+"&#186;C<br>"}
if(toleChangeVal){output+=plDescToleChange+toleChangeVal+"<br>"}
if(capaDriftVal){output+=plDescCapaDrift+capaDriftVal+"<br>"}
if(tempCoefVal){output+=plDescTempCoef+tempCoefVal+"<br>"}
if(voltVal){output+=plDescVolt+voltVal+"V<br>"}}
else if(lang.toLowerCase()=="en"){
if(capaVal){output=enDescCapa+multiplier(capaVal)+"<br>"}
if(toleVal){output+=enDescTole+toleVal+"<br>"}
if(minTempVal&&maxTempVal){output+=enDescTemp+minTempVal+"&#186;C"+" &#126; "+maxTempVal+"&#186;C<br>"}
if(toleChangeVal){output+=enDescToleChange+toleChangeVal+"<br>"}
if(capaDriftVal){output+=enDescCapaDrift+capaDriftVal+"<br>"}
if(tempCoefVal){output+=enDescTempCoef+tempCoefVal+"<br>"}
if(voltVal){output+=enDescVolt+voltVal+"V<br>"}}
document.getElementById(this.ID).innerHTML=output
this.setCapaValue(null);this.setToleValue(null);this.setMinTempValue(null);this.setMaxTempValue(null)
this.setToleChangeValue(null);this.setCapaDriftValue(null);this.setTempCoefValue(null);this.setVoltValue(null)
}
}
function setDesc(){document.getElementById("desc").innerHTML=IO.getDesc()}
function Error(){document.getElementById(IO.ID).innerHTML=IO.getErrorMsg()}
function parseCapaCode(textValue){
var noSpcTextValue = ""
for(var i=0;i<textValue.length;i++){if(textValue.charAt(i)==' '){continue}noSpcTextValue+=textValue.charAt(i)}
if(noSpcTextValue.length==1){Error()}
else if(noSpcTextValue.length==2){twoDigitsCode(noSpcTextValue)}
else if(noSpcTextValue.length==3){threeSignCode(noSpcTextValue)}
else if(noSpcTextValue.length==4){fourSignCode(noSpcTextValue)}
else if(noSpcTextValue.length==5){Error()}
else if(noSpcTextValue.length==6){sixSignCode(noSpcTextValue)}
else if(noSpcTextValue.length==7){Error()}
else if(noSpcTextValue.length==8){mil123ShortCode(noSpcTextValue)}
else if(noSpcTextValue.length>=9&&noSpcTextValue.length<11){Error()}
else if(noSpcTextValue.length==12){parseMilCode(noSpcTextValue)}
else if(noSpcTextValue.length==13){mil19978NoErPinCode(noSpcTextValue)}
else if(noSpcTextValue.length==14){Error()}
else if(noSpcTextValue.length==15){
if(noSpcTextValue.charAt(0).toUpperCase()=='M')
{mil123PinCode(noSpcTextValue)}else{mil19978ErPinCode(noSpcTextValue)}}
else if(noSpcTextValue.length==16){
if(noSpcTextValue.charAt(0).toUpperCase()=='J'){
noSpcTextValue=noSpcTextValue.slice(1,noSpcTextValue.length)
mil123PinCode(noSpcTextValue)}
else if(noSpcTextValue.charAt(15).toUpperCase()=='J'){
noSpcTextValue=noSpcTextValue.slice(0,noSpcTextValue.length-1)
mil123PinCode(noSpcTextValue)}
else{mil123NoPinCode(noSpcTextValue)}}
else if(noSpcTextValue.length==18){
if(noSpcTextValue.slice(0,3).toUpperCase()=='JAN'){
noSpcTextValue=noSpcTextValue.slice(3,noSpcTextValue.length)
mil123PinCode(noSpcTextValue)}
else if(noSpcTextValue.slice(15,noSpcTextValue.length).toUpperCase()=='JAN'){
noSpcTextValue=noSpcTextValue.slice(0,noSpcTextValue.length-3)
mil123PinCode(noSpcTextValue)}
else{mil123LongNoPinCode(noSpcTextValue)}}
return false;
}
function twoDigitsCode(textValue){
if(!isNaN(textValue)){IO.setCapaValue(textValue);IO.print()}else{var x=letterAndDigit(textValue);(x!=-1)?(IO.setCapaValue(x),IO.print()):Error()}
return (0)
}
function threeSignCode(val){
if(!isNaN(val)){var multiplier=val.charAt(val.length-1),val=val.slice(0,val.length-1),x=threeDigitCode(val,multiplier);
(x!=-1)?(IO.setCapaValue(x),IO.print()):Error()}
else if(isNaN(val.charAt(0))){(val.charAt(0).toUpperCase()=='N'||val.charAt(0).toUpperCase()=='P'||val.charAt(0).toUpperCase()=='U')?twoDigitsAndLetterCode(val):smdThreeSignCode(val)}
else if(isNaN(val.charAt(1))){(val.charAt(1).toUpperCase()=='N'||val.charAt(1).toUpperCase()=='P'||val.charAt(1).toUpperCase()=='U')?twoDigitsAndLetterCode(val):smdThreeSignCode(val)}
else if(isNaN(val.charAt(2))){(val.charAt(2).toUpperCase()=='N'||val.charAt(2).toUpperCase()=='P'||val.charAt(2).toUpperCase()=='U')?twoDigitsAndLetterCode(val):smdThreeSignCode(val)}
return(0)
}
function fourSignCode(textValue){
var tolerance=textValue.charAt(textValue.length-1),multiplier=textValue.charAt(textValue.length-2),textValue=textValue.slice(0,textValue.length-2)
var x=threeDigitCode(textValue, multiplier),y=toleCode(tolerance);
(x!=-1&&y!=-1)?(IO.setCapaValue(x),IO.setToleValue(y),IO.print()):Error()
}
function sixSignCode(textValue){
var capaValue=textValue.slice(0,2),multiplier=textValue.charAt(2),minTempCode=textValue.charAt(3),maxTempCode=textValue.charAt(4),toleChangeCode=textValue.charAt(5)
var i,x,y,z
x=threeDigitCode(capaValue, multiplier)
switch(minTempCode.toUpperCase()){
case 'Z':i="+10";break
case 'Y':i="-30";break
case 'X':i="-55";break
default:i=-1}
switch(maxTempCode){
case '2':y="+45";break
case '4':y="+65";break
case '5':y="+85";break
case '6':y="+105";break
case '7':y="+125";break
default:y=-1}
switch(toleChangeCode.toUpperCase()){
case 'A':z="+1.0%";break
case 'B':z="&#177;1.5%";break
case 'C':z="&#177;2.2%";break
case 'D':z="&#177;3.3%";break
case 'E':z="&#177;4.7%";break
case 'F':z="&#177;7.5%";break
case 'P':z="&#177;10.0%";break
case 'R':z="&#177;15.0%";break
case 'S':z="&#177;22.0%";break
case 'T':z="+22%, -33%";break
case 'U':z="+22%, -56%";break
case 'V':z="+22%, -82%";break
default:z=-1}
(x!=-1&&i!=-1&&y!=-1&&z!=-1)?(IO.setMinTempValue(i),IO.setMaxTempValue(y),IO.setToleChangeValue(z),IO.setCapaValue(x),IO.print()):Error()
}
function threeDigitCode(val, multiplier){
var out;
if(!isNaN(val)&&!isNaN(multiplier)){
switch (multiplier){
case '0':out=val;break
case '1':out=val*10;break
case '2':out=val*100;break
case '3':out=val*1000;break
case '4':out=val*10000;break
case '5':out=val*100000;break
case '6':
case '7':return (-1);break
case '8':out=val/100;break
case '9':out=val/10}
}else{return (-1)}
return out;
}
function toleCode(tolerance){
var out
switch (tolerance.toUpperCase()){
case 'B':out="&#177; 0.10pF";break
case 'C':out="&#177; 0.25pF";break
case 'D':out="&#177; 0.5pF";break
case 'E':out="&#177; 0.5%";break
case 'F':out="&#177; 1%";break
case 'G':out="&#177; 2%";break
case 'H':out="&#177; 3%";break
case 'J':out="&#177; 5%";break
case 'K':out="&#177; 10%";break
case 'M':out="&#177; 20%";break
case 'N':out="&#177; 0.05%";break
case 'P':out="+100%, -0%";break
case 'Z':out="+80%, -20%";break
default:out=-1}
return out
}
function letterAndDigit(textValue){
var out;
if(textValue.length==2){var value=textValue.charAt(0),multiplier=textValue.charAt(1)}else{Error()}
switch(value){
case 'A':out=1.0;break
case 'B':out=1.1;break
case 'C':out=1.2;break
case 'D':out=1.3;break
case 'E':out=1.5;break
case 'F':out=1.6;break
case 'G':out=1.8;break
case 'H':out=2;break
case 'J':out=2.2;break
case 'K':out=2.4;break
case 'L':out=2.7;break
case 'M':out=3;break
case 'N':out=3.3;break
case 'P':out=3.6;break
case 'Q':out=3.9;break
case 'R':out=4.3;break
case 'S':out=4.7;break
case 'T':out=5.1;break
case 'U':out=5.6;break
case 'V':out=6.2;break
case 'W':out=6.8;break
case 'X':out=7.5;break
case 'Y':out=8.2;break
case 'Z':out=9.1;break
case 'a':out=2.5;break
case 'b':out=3.5;break
case 'd':out=4;break
case 'e':out=4.5;break
case 'f':out=5;break
case 'm':out=6;break
case 'n':out=7;break
case 't':out=8;break
case 'y':out=9;break
default:out=-1}
if(out==-1){return out}
switch(multiplier){
case '0':out=out*1;break
case '1':out=out*10;break
case '2':out=out*100;break
case '3':out=out*1000;break
case '4':out=out*10000;break
case '5':out=out*100000;break
case '6':out=out*1000000;break
case '7':out=out*10000000;break
case '8':out=out*100000000;break
case '9':out=out*1000000000;break
default:out=-1}
return out
}
function parseMilCode(textValue){
var characCodeText=textValue.charAt(4),voltCodeText=textValue.charAt(5),capaValText=textValue.slice(6,9)
var toleCodeText=textValue.charAt(9),tempCodeText=textValue.charAt(10)
var i,j,x,y,z
i=milCharacCode(characCodeText),j=milVoltCode(voltCodeText),x=milCapaCode(capaValText),y=toleCode(toleCodeText)
z=eiaMilTempCode(tempCodeText);
(i!=-1&&j!=-1&&x!=-1&&y!=-1&&z!=-1)?(IO.setVoltValue(j),IO.setToleValue(y),IO.setCapaValue(x),IO.print()):Error()
}
function milCharacCode(chChar){
var out
switch(chChar.toUpperCase()){
case 'B':IO.setCapaDriftValue("-");IO.setTempCoefValue("-");out=1;break
case 'C':IO.setCapaDriftValue("&#177;(0.5% + 0.1pF)");IO.setTempCoefValue("&#177; 200 ppm/&#402;C");out=1;break
case 'D':IO.setCapaDriftValue("&#177;(0.3% + 0.1pF)");IO.setTempCoefValue("&#177; 100 ppm/&#402;C");out=1;break
case 'E':IO.setCapaDriftValue("&#177;(0.1% + 0.1pF)");IO.setTempCoefValue("&#177; -20 &#126; +100 ppm/&#402;C");out=1;break
case 'F':IO.setCapaDriftValue("&#177;(0.05% + 0.1pF)");IO.setTempCoefValue("&#177; 0 &#126; +70 ppm/&#402;C");out=1;break
default:out=-1}
return out
}
function eiaMilTempCode(tempVal){
switch(tempVal.toUpperCase()){
case 'M':IO.setMinTempValue("-55");IO.setMaxTempValue("70");out=1;break
case 'N':IO.setMinTempValue("-55");IO.setMaxTempValue("85");out=1;break
case 'O':IO.setMinTempValue("-55");IO.setMaxTempValue("125");out=1;break
case 'P':IO.setMinTempValue("-55");IO.setMaxTempValue("150");out=1;break
default:out=-1}
return out
}
function milCapaCode(capaVal){
var out=capaVal.slice(0,2),mulitiplier
if(!isNaN(out)){
multiplier=capaVal.charAt(2)
switch(multiplier){
case '0':out=out*1;break
case '1':out=out*10;break
case '2':out=out*100;break
case '3':out=out*1000;break
case '4':out=out*10000;break
case '5':out=out*100000;break
case '6':out=out*1000000;break
case '7':out=out*10000000;break
case '8':out=out*100000000;break
case '9':out=out*1000000000;break
default:out=-1}
}else{out=-1}
return out
}
function milVoltCode(val){
var out
switch(val.toUpperCase()){
case 'A':out=100;break
case 'B':out=250;break
case 'C':out=300;break
case 'D':out=500;break
case 'E':out=600;break
case 'F':out=1000;break
case 'G':out=1200;break
case 'H':out=1500;break
case 'J':out=2000;break
case 'K':out=2500;break
case 'L':out=3000;break
case 'M':out=4000;break
case 'N':out=5000;break
case 'P':out=6000;break
case 'Q':out=8000;break
case 'R':out=10000;break
case 'S':out=12000;break
case 'T':out=15000;break
case 'U':out=20000;break
case 'V':out=25000;break
case 'W':out=30000;break
case 'X':out=35000;break
default:out=-1}
return out
}
function smdThreeSignCode(val){
var x=val.charAt(0),y=val.charAt(1),z=val.charAt(2)
var capaVal,voltVal, voltCode
if(isNaN(x)){(!isNaN(y)&&!isNaN(z))?(capaVal="0."+y+z,voltCode=x):(capaVal=-1,voltCode=-1)} 
else if(isNaN(y)){(!isNaN(x)&&!isNaN(z))?(capaVal=x+"."+z,voltCode=y):(capaVal=-1,voltCode=-1)} 
else if(isNaN(z)){(!isNaN(x)&&!isNaN(y))?(capaVal=x+""+y,voltCode=z):(capaVal=-1,voltCode=-1)}
if(voltCode==-1){voltVal=-1}else{
switch(voltCode.toUpperCase()){
case 'C':voltVal=6.3;break
case 'D':voltVal=10;break
case 'E':voltVal=16;break
case 'F':voltVal=25;break
case 'G':voltVal=40;break
case 'H':voltVal=63;break
default:voltVal=-1}
}
(capaVal!=-1&&voltVal!=-1)?(IO.setVoltValue(voltVal),IO.setCapaValue(capaVal*1000000),IO.print()):Error()
}
function mil123PinCode(textValue){
var voltCodeText=textValue.charAt(9),capaValText=textValue.slice(10,13),toleCodeText=textValue.charAt(13)
var x,y,z
x=mil123PinVoltCode(voltCodeText),y=mil123CapaCode(capaValText),z=toleCode(toleCodeText);
(x!=-1&&y!=-1&&z!=-1)?(IO.setVoltValue(x),IO.setToleValue(z),IO.setCapaValue(y),IO.print()):Error()
}
function mil123PinVoltCode(val){
var out
switch(val.toUpperCase()){
case 'A':out=25;break
case 'B':out=50;break
case 'C':out=100;break
case 'D':out=200;break
case 'E':out=500;break
case 'K':out=150;break
case 'L':out=300;break
case 'M':out=400;break
default:out=-1}
return out
}
function mil123CapaCode(val){
var out,mulitiplier
if(!isNaN(val)){
out=val.slice(0,2)
multiplier=val.charAt(2)
switch(multiplier){
case '0':out=out*1;break
case '1':out=out*10;break
case '2':out=out*100;break
case '3':out=out*1000;break
case '4':out=out*10000;break
case '5':out=out*100000;break
case '6':out=out*1000000;break
case '7':out=out*10000000;break
case '8':out=out*100000000;break
case '9':out=out*1000000000;break}
}else{var x=val.charAt(0);var y=val.charAt(1);var z=val.charAt(2)
if(isNaN(x)){(isNaN(y)||isNaN(z))?out=-1:out="0."+y+z} 
else if(isNaN(y)){(isNaN(x)||isNaN(z))?out=-1:out=x+"."+z} 
else if(isNaN(z)){(isNaN(x)||isNaN(y))?out=-1:out=x+y}
}
return out
}
function mil123NoPinCode(val){
var capaVal=val.slice(4,7),toleVal=val.charAt(7)
var x,y
x=mil123CapaCode(capaVal)
y=toleCode(toleVal);
(x!=-1&&y!=-1)?(IO.setToleValue(y),IO.setCapaValue(x),IO.print()):Error()
}
function mil123ShortCode(val){
var capaVal=val.slice(4,7),toleVal=val.charAt(7)
var x,y
x=mil123CapaCode(capaVal)
y=toleCode(toleVal);
(x!=-1&&y!=-1)?(IO.setToleValue(y),IO.setCapaValue(x),IO.print()):Error()
}
function mil123LongNoPinCode(val){
var capaVal=val.slice(0,3),toleVal=val.charAt(3),voltVal=val.slice(4,7)
var x,y,z
x=mil123CapaCode(capaVal)
y=toleCode(toleVal);
(!isNaN(voltVal))?z=1:z=-1
(x!=-1&&y!=-1&&z!=-1)?(IO.setToleValue(y),IO.setCapaValue(x),IO.setVoltValue(voltVal),IO.print()):Error()
}
function mil19978ErPinCode(val){
var characVal=val.charAt(7),voltVal=val.charAt(8),capaVal=val.slice(9,12),toleVal=val.charAt(12)
var i,x,y,z
i=mil19978CharacCode(characVal)
x=mil19978VoltCode(voltVal);
(!isNaN(capaVal))?y=mil123CapaCode(capaVal):y=-1
z=toleCode(toleVal);
(i!=-1&&x!=-1&&y!=-1&&z!=-1)?(IO.setVoltValue(x),IO.setCapaValue(y),IO.setToleValue(z),IO.print()):Error()
}
function mil19978NoErPinCode(val){
var characVal=val.charAt(6),voltVal=val.charAt(7),capaVal=val.slice(8,11),toleVal=val.charAt(11)
var i,x,y,z
i=mil19978CharacCode(characVal)
x=mil19978VoltCode(voltVal);
(!isNaN(capaVal))?y=mil123CapaCode(capaVal):y=-1
z=toleCode(toleVal);
(i!=-1&&x!=-1&&y!=-1&&z!=-1)?(IO.setVoltValue(x),IO.setCapaValue(y),IO.setToleValue(z),IO.print()):Error()
}
function mil19978CharacCode(val){
var out
switch (val.toUpperCase()){
case 'E':IO.setMinTempValue("-65");IO.setMaxTempValue("85");out=1;break
case 'F':
case 'G':IO.setMinTempValue("-55");IO.setMaxTempValue("85");out=1;break
case 'K':IO.setMinTempValue("-65");IO.setMaxTempValue("125");out=1;break
case 'M':IO.setMinTempValue("-65");IO.setMaxTempValue("85");out=1;break
case 'P':IO.setMinTempValue("-65");IO.setMaxTempValue("65");out=1;break
case 'Q':IO.setMinTempValue("-55");IO.setMaxTempValue("125");out=1;break
case 'T':IO.setMinTempValue("-65");IO.setMaxTempValue("170");out=1;break
case 'V':IO.setMinTempValue("-55");IO.setMaxTempValue("125");out=1;break
default:out=-1}
return out
}
function mil19978VoltCode(val){
var out
switch(val.toUpperCase()){
case 'Z':out=30;break
case 'A':out=50;break
case 'B':out=100;break
case 'C':out=200;break
case 'D':out=300;break
case 'E':out=400;break
case 'F':out=600;break
case 'G':out=1000;break
case 'H':out=1500;break
case 'J':out=2000;break
case 'K':out=2500;break
case 'L':out=3000;break
case 'M':out=4000;break
case 'N':out=5000;break
case 'P':out=6000;break
case 'R':out=7500;break
case 'S':out=10000;break
case 'T':out=12500;break
case 'U':out=15000;break
default:out=-1}
return out
}
function twoDigitsAndLetterCode(val){
var out,multi,x=val.charAt(0),y=val.charAt(1),z=val.charAt(2)
if(isNaN(x)){(isNaN(y)||isNaN(z))?(out=-1,multi=-1):(out="0."+y+z,multi=x)} 
else if(isNaN(y)){(isNaN(x)||isNaN(z))?(out=-1,multi=-1):(out=x+"."+z,multi=y)} 
else if(isNaN(z)){(isNaN(x)||isNaN(y))?(out=-1,multi=-1):(out=x+y,multi=z)}
if(out!=-1&&multi!=-1){
if(multi.toUpperCase()=='P'){IO.setCapaValue(out),IO.print()}
else if(multi.toUpperCase()=='N'){IO.setCapaValue(out*1000),IO.print()}
else if(multi.toUpperCase()=='U'){IO.setCapaValue(out*1000000),IO.print()}
}else{Error()}
}
IO=new output('Output')