function calcPoncho(){

var p =document.ponchoForm;
var shoulderDrop = 1;

/* make sure the toggle doesn't fill with letters! 
Should be redundant: coding of HTML page should also give text box and toggles different names.
*/

// figure out alpha, beta.

var tanAlpha = divide(p.mainRowIn.value, 2*p.mainStIn.value);
var alpha = Math.atan(tanAlpha);
var alphaDeg = alpha * 180/Math.PI;

//p.alpha.value= justRound(alpha);
p.alphaDeg.value=justRound(alphaDeg);

// reference: slant if shoulder dart is alpha
var min2alpha = Math.PI/2 - 2*alpha;
var min2alphaDeg = min2alpha * 180/Math.PI;

//p.min2alpha.value= justRound(min2alpha);
//p.min2alphaDeg.value=justRound(min2alphaDeg);

// for nice shoulder shaping.
var two;
var one; 
var three; 

if(19 < min2alphaDeg){two=2; one = 1; }else{two=1 ; one = 2;}
three =  (two+1);
six = 2*three;

p.two1.value = two;
//p.two2.value = two;
p.two3.value = two;
//p.two4.value = two;
//p.three.value=three;
p.six.value=six;

// slant if I increase shoulder twice as fast so one side has gamma
// so increase 2 every row. 
var tanDelta = divide(p.mainRowIn.value,one*p.mainStIn.value);
var delta = Math.atan(tanDelta);
var deltaDeg = delta * 180/Math.PI;

p.deltaDeg.value =justRound(deltaDeg);
// Shoulder angle-------------------
var beta 	= Math.PI/2 - alpha - delta;
var betaDeg	 =90-alphaDeg-deltaDeg;

p.betaDeg.value=justRound(betaDeg);

// Calculate neck stitches.
p.neckStitches.value = 2*Math.round(mult(p.neckWidth.value,p.mainStIn.value)/2);
p.pickUp.value      = 2*Math.round(mult(p.neckWidth.value,p.weltStIn.value)/2);
p.pickUp.value = Math.min(p.neckStitches.value,p.pickUp.value);

//p.neckStitches2.value = p.neckStitches.value;

p.halfNeckStitches.value = Math.round(mult(p.neckWidth.value,p.mainStIn.value)/2);

// shoulder design. 
var designHalfShoulder = divide(p.shoulderWidth.value,2);
var angleHalfShoulder = designHalfShoulder/Math.cos(alpha);

// I need the shoulder increase to be a multiple of 3-- on on inside, two on outside.
var tentativeShoulderStitches = Math.round(mult(angleHalfShoulder,p.mainStIn.value));
var shouldInc = sub(tentativeShoulderStitches, p.halfNeckStitches.value);

var neckIncTimes = Math.max(Math.ceil(shouldInc/three),1);

p.neckIncTimes.value = neckIncTimes;

var shoulderRows = 2*neckIncTimes+2;
p.totalShoulderRows.value=2*neckIncTimes+2;
shouldInc = three*neckIncTimes; 

p.shoulderHalfStitches.value = shouldInc + eval(p.halfNeckStitches.value);
p.shoulderStitches.value = 2*eval(p.shoulderHalfStitches.value);
//p.shoulderStitches2.value = p.shoulderStitches.value;

// do second shoulder increse region which is 1/2 as fast and takes 1/2 as many rows. 
var oneRow, twoRows; 


if(two == 2){ oneRow = 1; twoRows=2; } 
else{ oneRow=3;  twoRows=4; };

//alert('two=' + two +'oneRow' + oneRow + 'twoRows'+ twoRows);

p.oneRow.value = oneRow;
p.twoRows.value= twoRows; 

var secondNeckIncTimes = Math.floor(neckIncTimes/2);
var secondShoulderRows = shoulderRows+two*secondNeckIncTimes;
p.finalTotalShoulderRows.value = secondShoulderRows
p.neckIncTimes2.value = secondNeckIncTimes;
p.finalShoulderStitches.value = add(p.shoulderStitches.value, 4*secondNeckIncTimes);
p.finalShoulderHalfStitches.value = Math.floor(p.finalShoulderStitches.value/2);

var finalShoulderWidth = divide(p.finalShoulderStitches.value,p.mainStIn.value);
// Now find shaping to hem
//----------------Height is dictated by diagonal length and gauge.-
p.height.value = mult(p.diagonalLength.value, Math.cos(alpha)); 
p.ribRows.value = Math.max(2*Math.round(mult(p.hemWelt.value,p.weltRowIn.value)/2),4);

var realHemHeight = divide( p.ribRows.value,p.weltRowIn.value);
    p.hemWelt.value = realHemHeight;
    p.hemWelt2.value = p.hemWelt.value;

var mainHeight = eval(p.height.value)-realHemHeight;

var realHeightToShoulder=divide( p.finalTotalShoulderRows.value,p.mainRowIn.value);
var realToHeightForIncrease = mainHeight-realHeightToShoulder

var totalShapeRows = 2 * Math.round(mult(realToHeightForIncrease,p.mainRowIn.value)/2 );
p.totalBodyRows.value = totalShapeRows;

p.cumRow1.value = add(p.totalBodyRows.value, p.finalTotalShoulderRows.value);
p.length1.value = divide(p.cumRow1.value,p.mainRowIn.value);
p.cumStitches1.value =add(totalShapeRows,p.finalShoulderStitches.value);

p.totalBodyStitches.value = totalShapeRows;
//p.totalRows.value = totalShapeRows+eval(p.finalTotalShoulderRows.value)+eval(p.ribRows.value);

// hem stuff
p.totalRows.value = add(p.cumRow1.value,p.ribRows.value);
p.height.value = justRound(p.height.value);

    // reduce if necessary.
    var reducFact = divide(p.weltStIn.value,p.mainStIn.value); 
    var reduc = mult(  p.cumStitches1.value, reducFact)

    var HemStitches=0;
    
     if(reducFact <0.96 ){
	    HemStitches = Math.round(reduc) }
	   
     else { HemStitches = p.cumStitches1.value  } 
     
     
    
p.redHemStitches.value =  eval(p.cumStitches1.value)-HemStitches;  


// neck shaping
p.neckRows.value = Math.max(Math.round(mult(p.neckWelt.value,p.weltRowIn.value)),4);
    p.neckWelt.value = divide(p.neckRows.value,p.weltRowIn.value);

// fill table
p.neckWidthTable.value = p.neckWidth.value
p.neckStitchesTable.value=p.neckStitches.value

p.shoulderStitchesTable.value=p.shoulderStitches.value
p.shoulderStitches2Table.value = p.finalShoulderStitches.value;
p.hemStitchesTable.value = p.cumStitches1.value;
p.hemStitches.value= HemStitches;


p.hemWidthTable.value = divide(p.hemStitchesTable.value,p.mainStIn.value);
p.hemWidth.value =p.hemWidthTable.value;
p.hemWidthGarterTable.value =divide(p.hemStitches.value,p.weltStIn.value);

p.shoulderAngledWidth1.value = divide(p.shoulderStitches.value,p.mainStIn.value);
p.shoulderAngledWidth2.value = divide(p.finalShoulderStitches.value,p.mainStIn.value);

p.shoulderRows1.value=shoulderRows;
p.finalTotalShoulderRowsTable.value = p.finalTotalShoulderRows.value
p.toHemRowsTable.value = p.cumRow1.value;

p.shoulderHeight1.value=divide(p.shoulderRows1.value,p.mainRowIn.value);
p.shoulderHeight2.value=divide(p.finalTotalShoulderRowsTable.value,p.mainRowIn.value);
p.hemLengthTable.value = justRound(mainHeight);
p.heightTable.value=p.height.value;
//realHeightToShoulder

// set words up.
p.weltStName2.value = p.weltStName.value;
p.weltStName3.value = p.weltStName.value;

p.mainStName2.value = p.mainStName.value;
p.neckWelt2.value = p.neckWelt.value;

}