// JavaScript Document


function addFraction()
{

	var a1;	//whole part X register
	var b1;	//numerator part X register
	var c1;	//denominator part X register
	var a2;	//whole part Y register
	var b2;	//numerator part Y register
	var c2;	//denominator part Y register

	var ans_is_neg = 'no';
	
	//if is called if X register is a whole number
	if(numberArray[0].type != 'fraction')
	{
		a1 = numberArray[0].decimalValue;
		b1 = 0;
		c1 = 1;
		a2 = numberArray[1].wholePart;
		b2 = numberArray[1].numerator;
		c2 = numberArray[1].denominator;
	}
	else
	{
		//if is called if Y register is a whole number
		if(numberArray[1].type != 'fraction')
		{
			a1 = numberArray[0].wholePart;
			b1 = numberArray[0].numerator;
			c1 = numberArray[0].denominator;
			a2 = numberArray[1].decimalValue;
			b2 = 0;
			c2 = 1;
		}
		else
		{
			a1 = numberArray[0].wholePart;
			b1 = numberArray[0].numerator;
			c1 = numberArray[0].denominator;
			a2 = numberArray[1].wholePart;
			b2 = numberArray[1].numerator;
			c2 = numberArray[1].denominator;
		}
	}
	//alert('a1 = '+a1 +' a2 = '+a2);
	
	var a1_is_neg = 'no';
	var a2_is_neg = 'no';
	
	if(a1 < 0)
	{//alert('lets dance');
		a1 = a1 * -1;
		a1_is_neg = 'yes';
	}
	
	if(a2 < 0)
	{
		a2 = a2 * -1;
		a2_is_neg = 'yes';
	}

	if(a1 == 0 && b1 < 0)
	{//alert('lets dance');
		b1 = b1 * -1;
		a1_is_neg = 'yes';
	}
	
	if(a2 == 0 && b2 < 0)
	{//alert('lets dance');
		b2 = b2 * -1;
		a2_is_neg = 'yes';
	}
	
	var b_temp;
	var c_temp  = c1 * c2;
	
//alert('a1_is_neg = '+a1_is_neg +' a2_is_neg = '+a2_is_neg);

	if(a1_is_neg == 'yes' && a2_is_neg == 'no')
	{//alert('whoya');
		b_temp = (-1 * (a1 * c1 + b1) * c2) + ((a2 * c2 + b2) * c1);		
	}//end if
	else
	{
		if(a1_is_neg == 'no' && a2_is_neg == 'yes')
		{
			b_temp = ((a1 * c1 + b1) * c2) + (-1 * (a2 * c2 + b2) * c1);
		}//end if
		else
		{
			if(a1_is_neg == 'yes' && a2_is_neg == 'yes')
			{
				b_temp = -1 * (((a1 * c1 + b1) * c2) + ((a2 * c2 + b2) * c1));
			}//end if
			else
			{
				b_temp = ((a1 * c1 + b1) * c2) + ((a2 * c2 + b2) * c1);
			}//end else
		}//end else
	}//end else
	
	if(b_temp < 0)
	{
		ans_is_neg = 'yes';
		b_temp = b_temp * -1;
	}
	
	//if is called if result is equal to zero
	if(b_temp == 0)
	{
		numberArray[0].flag = 'none';
		numberArray[0].type = 'whole';
		numberArray[0].decimalValue = 0;
		numberArray[0].wholePart = 0;
		numberArray[0].numerator = 0;
		numberArray[0].denominator = 1;
	}
	else
	{
		var temp_b_Holder = b_temp;

		reduction = findReductionFactor(temp_b_Holder, b_temp,c_temp);
	
		b_temp = b_temp/reduction;
		c_temp = c_temp/reduction;

		numberArray[0].wholePart = Math.floor(b_temp / c_temp);
		numberArray[0].numerator = b_temp % c_temp;
		numberArray[0].denominator = c_temp;
		numberArray[0].flag = 'none';
		numberArray[0].type = 'fraction';
		numberArray[0].decimalValue = (numberArray[0].wholePart * numberArray[0].denominator + numberArray[0].numerator)/	numberArray[0].denominator;
	}//end else
	
	
	if(ans_is_neg == 'yes')
	{
		if(numberArray[0].wholePart == 0)
		{
			numberArray[0].numerator = -1 * numberArray[0].numerator;
			
		}//end if
		else
		{
			numberArray[0].wholePart = -1 * numberArray[0].wholePart;
		}
		
		numberArray[0].decimalValue = -1 * numberArray[0].decimalValue;
	}
	
	if(numberArray[0].numerator == 0)
	{
		numberArray[0].stringValue = numberArray[0].wholePart;
		numberArray[0].type = 'whole';
	}//end if
	else
	{
		if(numberArray[0].wholePart == 0)
		{
			numberArray[0].stringValue = numberArray[0].numerator + '/' + numberArray[0].denominator;
		}//end if
		else
		{
			numberArray[0].stringValue = numberArray[0].wholePart + '_| ' + numberArray[0].numerator + '/' + numberArray[0].denominator;
		}//end else
	}//end else	
//alert('whole part = ' +numberArray[0].wholePart);
//alert('numerator = ' +numberArray[0].numerator);
//alert('denominator = ' +numberArray[0].denominator);

}
		


function findReductionFactor(temp_b_Holder, temp_b,temp_c)
{
	var stopNumber;
	var i = 1;

	if(temp_b > temp_c)
	{
		stopNumber = Math.floor(temp_c / 2);
	}
	else
	{
		stopNumber = Math.floor(temp_c / 2);
	}
	
	do
	{
		i++;
		if((temp_b % i == 0) && (temp_c % i == 0))
		{
			temp_b = temp_b / i;
			temp_c = temp_c / i;

			return findReductionFactor(temp_b_Holder, temp_b,temp_c);
		}	
	}
	while(i < stopNumber);

	return (temp_b_Holder / temp_b);
}
