
function CalculateFraction(){
number=counter.number.value;
var cnt=0;
n1=counter.N1.value;
if (n1=="" || n1<1){cnt=cnt+1}
n2=counter.N2.value;
if (n2=="" || n2<1){cnt=cnt+1}
n3=counter.N3.value;
if (n3=="" || n3<1){cnt=cnt+1}
n4=counter.N4.value;
if (n4=="" || n4<1){cnt=cnt+1}
d1=counter.D1.value;
if (d1=="" || d1<1){cnt=cnt+1}
d2=counter.D2.value;
if (d2=="" || d2<1){cnt=cnt+1}
d3=counter.D3.value;
if (d3=="" || d3<1){cnt=cnt+1}
d4=counter.D4.value;
if (d4=="" || d4<1){cnt=cnt+1}

if (number==2 && cnt>4){alert("Please fill in both numerators and denominators with a non-zero number!");counter.N1.focus();return false}
if (number==3 && cnt>2){alert("Please fill in all 3 numerators and denominators with a non-zero number!");counter.N3.focus();return false}
if (number==4 && cnt>0){alert("Please fill in all 4 numerators and denominators with a non-zero number!");counter.N4.focus();return false}

sel=counter.Asign.selectedIndex;
if (sel==0)	//add
{if (number==2)
{fracN=parseInt(n1*d2)+parseInt(n2*d1);
fracD=d1*d2}
else 
if (number==3)
{fracN=parseInt(n1*d2*d3)+parseInt(n2*d1*d3)+parseInt(n3*d1*d2);
fracD=d1*d2*d3}
else
if (number==4)
{fracN=parseInt(n1*d2*d3*d4)+parseInt(n2*d1*d3*d4)+parseInt(n3*d1*d2*d4)+parseInt(n4*d1*d2*d3);
fracD=d1*d2*d3*d4}}

if (sel==1)	//subtract
{if (number==2)
{fracN=(n1*d2)-(n2*d1);
fracD=d1*d2}
else 
if (number==3)
{fracN=(n1*d2*d3)-(n2*d1*d3)-(n3*d1*d2);
fracD=d1*d2*d3}
else
if (number==4)
{fracN=(n1*d2*d3*d4)-(n2*d1*d3*d4)-(n3*d1*d2*d4)-(n4*d1*d2*d3);
fracD=d1*d2*d3*d4}}

if (sel==2)	//divide
{if (number==2)
{fracN=(n1*d2);
fracD=d1*n2}
else 
if (number==3)
{fracN=(n1*d2*d3);
fracD=d1*n2*n3}
else
if (number==4)
{fracN=n1*d2*d3*d4;
fracD=d1*n2*n3*n4}}

if (sel==3)	//multiply
{if (number==2)
{fracN=n1*n2;
fracD=d1*d2}
else 
if (number==3)
{fracN=n1*n2*n3;
fracD=d1*d2*d3}
else
if (number==4)
{fracN=n1*n2*n3*n4;
fracD=d1*d2*d3*d4}}

if (fracN<0 || fracD<0){sign=" -"}else{sign=" "}

for (n=2; n<=Math.min(Math.abs(fracD),Math.abs(fracN)); n++)
{if (Math.abs(fracN)%n==0 && Math.abs(fracD)%n==0)
{fracN=fracN/n;fracD=fracD/n}
while (Math.abs(fracN)%n==0 && Math.abs(fracD)%n==0)
{fracN=fracN/n;fracD=fracD/n}
}
var remd=Math.abs(fracN)%Math.abs(fracD);
var whlnum=parseInt(Math.abs(fracN)/Math.abs(fracD))
if (remd==0 && whlnum>0)
{Results=whlnum;
results.innerHTML="Results==>> "+sign+Results}
else if (remd==0 && whlnum==0)
{Results="0";
results.innerHTML="Results==>> "+Results}
else if (whlnum==0)
{Results=remd+"/"+fracD;
results.innerHTML="Proper Fraction==>> "+sign+Results}
else
{Results=whlnum+" "+remd+"/"+fracD;
results.innerHTML="Mixed Fraction==>> "+sign+Results}
if (whlnum>0 && remd>0)
{Vulfrac=(whlnum*fracD)+remd;
vulfrac.innerHTML="Improper Fraction==>> "+sign+Vulfrac+"/"+fracD}
else
{vulfrac.innerHTML=""}

var denom=new Array(number);
var denom1=new Array(number);
denom[1]=d1;denom1[1]=d1;
denom[2]=d2;denom1[2]=d2;
denom[3]=d3;denom1[3]=d3;
denom[4]=d4;denom1[4]=d4;
var max=0; 
var max1=0;
var lcm1=1;
var hcf1=1;
for (y=1; y<=number; y++)
{if (denom[y]>max)
{max=denom[y]}}
max1=max;

//lcm
for (x=2; x<=max; x++){
tot=0;
for (y=1; y<=number; y++){ 
if (denom[y]%x==0){tot+=1; denom[y]=denom[y]/x}
}
if (tot>0){lcm1=lcm1*x; x=x-1}
}
for (y=1;y<=number; y++)
{if (denom[y]>1)
{lcm1=lcm1*denom[y]}}
lcm.innerHTML="Lowest Common Multiple (LCM)==>> "+Comma(lcm1);

//hcf
for (x=2; x<=max1; x++){
tot=0;
for (y=1; y<=number; y++){ 
if (denom1[y]%x==0){tot+=1}
}
if (tot==number){hcf1=hcf1*x; max1=max1/x;
for (a=1; a<=number; a++)
{denom1[a]=denom1[a]/x}
x=x-1;
	}
}
if (hcf1>1)
{hcf.innerHTML="Highest Common Factor (HCF)==>> "+Comma(hcf1)}
else
{hcf.innerHTML=""}

if (whlnum>0 && remd>0)
{comment.innerHTML="<br><fieldset><u><span style='color:#000000'>How to convert mixed fraction</span> "+whlnum+" "+remd+"/"+fracD+" to an improper fraction</span></u>==>><br> Whole number "+whlnum+" is multiplied by denominator "+fracD+":"+whlnum+"x"+fracD+" ="+whlnum*fracD+". Add the numerator "+remd+" to that and we get "+parseInt((whlnum*fracD)+remd)+". Put this over the denominator and we get "+parseInt((whlnum*fracD)+remd)+"/"+fracD+".</fieldset><br><fieldset><u><span style='color:#000000'>How to convert improper fraction "+fracN+"/"+fracD+" to a mixed fraction</span></u>==>><br>Find a number when multiplied by the denominator ("+fracD+") that is equal to, or less than the numerator ("+fracN+"). "+parseInt(whlnum+1)+" is too high because this gives "+parseInt(whlnum+1)*fracD+". If we try "+whlnum+" we multiply "+whlnum+" by "+fracD+" and get "+whlnum*fracD+". Subtract this from "+fracN+" and we get "+remd+". Put them all together and we have "+whlnum+" "+remd+"/"+fracD+".</fieldset>"}
else
{comment.innerHTML=""}
}

function selectSign(){
amount=counter.number.value;
number=counter.number.value;
if (number=="2"){number="Two"}
if (number=="3"){number="Three"}
if (number=="4"){number="Four"}
sel=counter.Asign.selectedIndex;
vulfrac.innerHTML="";
results.innerHTML="";
comment.innerHTML="";
if (sel==0)
{counter.buttn.value="Add "+number+" Fractions";
if (amount==2)
{E1.innerHTML=" / ";sign1.innerHTML=" + ";E2.innerHTML=" / ";sign2.innerHTML="";E3.innerHTML="";sign3.innerHTML="";E4.innerHTML=""}
if (amount==3)
{E1.innerHTML=" / ";sign1.innerHTML=" + ";E2.innerHTML=" / ";sign2.innerHTML=" + ";E3.innerHTML=" / ";sign3.innerHTML="";E4.innerHTML=""}
if (amount==4)
{E1.innerHTML=" / ";sign1.innerHTML=" + ";E2.innerHTML=" / ";sign2.innerHTML=" + ";E3.innerHTML=" / ";sign3.innerHTML=" + ";E4.innerHTML=" / "}}

if (sel==1)
{counter.buttn.value="Subtract "+number+" Fractions";
if (amount==2)
{E1.innerHTML=" / ";sign1.innerHTML=" - ";E2.innerHTML=" / ";sign2.innerHTML="";E3.innerHTML="";sign3.innerHTML="";E4.innerHTML=""}
if (amount==3)
{E1.innerHTML=" / ";sign1.innerHTML=" - ";E2.innerHTML=" / ";sign2.innerHTML=" - ";E3.innerHTML=" / ";sign3.innerHTML="";E4.innerHTML=""}
if (amount==4)
{E1.innerHTML=" / ";sign1.innerHTML=" - ";E2.innerHTML=" / ";sign2.innerHTML=" - ";E3.innerHTML=" / ";sign3.innerHTML=" - ";E4.innerHTML=" / "}}

if (sel==2)
{counter.buttn.value="Divide "+number+" Fractions";
if (amount==2)
{E1.innerHTML=" / ";sign1.innerHTML=" &divide; ";E2.innerHTML=" / ";sign2.innerHTML="";E3.innerHTML="";sign3.innerHTML="";E4.innerHTML=""}
if (amount==3)
{E1.innerHTML=" / ";sign1.innerHTML=" &divide; ";E2.innerHTML=" / ";sign2.innerHTML=" &divide; ";E3.innerHTML=" / ";sign3.innerHTML="";E4.innerHTML=""}
if (amount==4)
{E1.innerHTML=" / ";sign1.innerHTML=" &divide; ";E2.innerHTML=" / ";sign2.innerHTML=" &divide; ";E3.innerHTML=" / ";sign3.innerHTML=" &divide; ";E4.innerHTML=" / "}}

if (sel==3)
{counter.buttn.value="Multiply "+number+" Fractions";
if (amount==2)
{E1.innerHTML=" / ";sign1.innerHTML=" &times; ";E2.innerHTML=" / ";sign2.innerHTML="";E3.innerHTML="";sign3.innerHTML="";E4.innerHTML=""}
if (amount==3)
{E1.innerHTML=" / ";sign1.innerHTML=" &times; ";E2.innerHTML=" / ";sign2.innerHTML=" &times; ";E3.innerHTML=" / ";sign3.innerHTML="";E4.innerHTML=""}
if (amount==4)
{E1.innerHTML=" / ";sign1.innerHTML=" &times; ";E2.innerHTML=" / ";sign2.innerHTML=" &times; ";E3.innerHTML=" / ";sign3.innerHTML=" &times; ";E4.innerHTML=" / "}}
}

function showBoxes(){
numr=counter.number.value;
if (numr<2){alert ("Number should be 2 or greater");counter.number.select();return false}
if (numr>4){alert ("Number should be 4 or less");counter.number.select();return false}

if (numr==2){
counter.N1.style.visibility = 'visible';
counter.D1.style.visibility = 'visible';
counter.N2.style.visibility = 'visible';
counter.D2.style.visibility = 'visible';
counter.N3.style.visibility = 'hidden';
counter.D3.style.visibility = 'hidden'; 
counter.N4.style.visibility = 'hidden';
counter.D4.style.visibility = 'hidden'; 
counter.FS3.style.visibility = 'hidden';
counter.FS4.style.visibility = 'hidden';
selectSign();
counterN1.focus()} 

if (numr==3)
{counter.N1.style.visibility = 'visible';
counter.D1.style.visibility = 'visible';
counter.N2.style.visibility = 'visible';
counter.D2.style.visibility = 'visible'; 
counter.N3.style.visibility = 'visible';
counter.D3.style.visibility = 'visible';
counter.FS3.style.visibility = 'visible';
counter.N4.style.visibility = 'hidden';
counter.D4.style.visibility = 'hidden';
counter.FS4.style.visibility = 'hidden'; 
selectSign();
counterN1.focus()}

if (numr==4)
{counter.N1.style.visibility = 'visible';
counter.D1.style.visibility = 'visible';
counter.N2.style.visibility = 'visible';
counter.D2.style.visibility = 'visible'; 
counter.N3.style.visibility = 'visible';
counter.D3.style.visibility = 'visible'; 
counter.N4.style.visibility = 'visible';
counter.D4.style.visibility = 'visible';
counter.FS3.style.visibility = 'visible';
counter.FS4.style.visibility = 'visible'; 
selectSign();
counterN1.focus()}
}

function select_area()
{counter.number.select()}

function select_area1()
{counter.N1.select()}

function select_area2()
{counter.D1.select()}

function select_area3()
{counter.N2.select()}

function select_area4()
{counter.D2.select()}

function select_area5()
{counter.N3.select()}

function select_area6()
{counter.D3.select()}

function select_area7()
{counter.N4.select()}

function select_area8()
{counter.D4.select()}

function addbookmark()
{if (document.all)
{window.external.AddFavorite(document.location,document.title)}
}

function Comma(number) {
number = 
number = '' + number;
if (number.length > 3) {
var mod = number.length % 3;
var output = (mod > 0 ? (number.substring(0,mod)) : '');
for (i=0 ; i < Math.floor(number.length / 3); i++) {
if ((mod == 0) && (i == 0))
output += number.substring(mod+ 3 * i, mod + 3 * i + 3);
else
output+= ',' + number.substring(mod + 3 * i, mod + 3 * i + 3);
}
return (output);
}
else return number;
}

var clockID=0
function UpdateClock()
{
if (clockID)
{clearTimeout(clockID);
clockID = 0;}

var H,M,S,Mth,Day,AMPM,Yr
var tDate = new Date();
Day=tDate.getDate()
if (Day<10)
{Day="0"+Day;}

Mth=tDate.getMonth()+1
if (Mth==1){Mth="Jan"}
if (Mth==2){Mth="Feb"}
if (Mth==3){Mth="Mar"}
if (Mth==4){Mth="Apr"}
if (Mth==5){Mth="May"}
if (Mth==6){Mth="Jun"}
if (Mth==7){Mth="Jul"}
if (Mth==8){Mth="Aug"}
if (Mth==9){Mth="Sep"}
if (Mth==10){Mth="Oct"}
if (Mth==11){Mth="Nov"}
if (Mth==12){Mth="Dec"}

Yr=tDate.getFullYear()

H=tDate.getHours();
if (H>11)
{AMPM="pm";}
else
{AMPM="am";}

if (H>12)
{H=H-12;}

if (H<10)
{H="0"+H;}

M=tDate.getMinutes()
if (M<10)
{M="0"+M;}

S=tDate.getSeconds()
if (S<10)
{S="0"+S;}

theTime.innerHTML = Day + " " + Mth + " " + Yr + "::"
+ H + ":" + M + ":" + S + AMPM;
clockID = setTimeout("UpdateClock()",1000);
}

function StartClock() {
clockID = setTimeout("UpdateClock()",500);
}

function KillClock() {
if (clockID)
 {clearTimeout(clockID);
 clockID = 0;}
}
