var age, bppos;
mthnames = new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec");
majpds   = new Array("Sun", "Moon", "Mars", "Mercury", "Saturn", "Jupiter", "Rahu", "Venus", "Sun", "Moon", "Mars", "Mercury", "Saturn", "Jupiter", "Rahu");
majpdlen = new Array(6, 15, 8, 17, 10, 19, 12, 21, 6, 15, 8, 17, 10, 19, 12, 21);
minpds   = new Array("Venus", "Sun", "Moon", "Mars", "Mercury", "Saturn", "Jupiter", "Rahu", "Venus", "Sun", "Moon", "Mars", "Mercury", "Saturn", "Jupiter");
fmstrength= new Array(0, 8, 0, 0, 8, 4, 0, 4);
tmstrength= new Array(4, 12, 4, 12, 12, 8, 12, 8);
fm2strength= new Array(0, 120, 0, 0, 80, 76, 0, 84);
tm2strength= new Array(24, 180, 32, 204, 120, 152, 144, 168);
var fyear, fmth, fday;
var daybeg, dayend, yrbeg, yrend;

// Find Planet in majpds array
function findMajPos(bp) {
  for (i=0; i<8; i++) {
    if (majpds[i] == bp) 
      break;
  }
  return (i);
}

function calcAge(bd, cd) {
  var byr   = bd.getFullYear(); // birthdate
  var bmo   = bd.getMonth() + 1;
  var bdy   = bd.getDate();     
  var cyr   = cd.getFullYear(); // comparison date
  var cmo   = cd.getMonth() + 1;
  var cdy   = cd.getDate();

  var age = cyr - byr;
  if ((cmo < bmo) || ((cmo == bmo) && (cdy < bdy))) {
    age -= 1;
  }
  return (age);
}

// Calculate Minor Period
function calcMinPd(age) {
  var remainder = (age + 1) % 8;
  // find birth planets position in array minpds
  minpos  = bppos + remainder;
  var mpl = minpds[minpos]
  return (mpl);
}

function getDasa(bp) {
  parent.main_frame.document.getElementById('dasaname').innerText = document.getElementById('name_id').value;
  parent.main_frame.document.getElementById('selpd_id').innerHTML = "<span style=\"color:red\">Click a planetary pd to see when it's strongest.<\/span>" 
  if (year < 100 || year > 9892 || adbc == "BC") {
  var dasa = "<table id='dasatable' cellspacing='5' cellpadding='0'>\n" + 
		   "<tr>\n" + 
			"<td style='width:165; color:#cb0017'>" + 
			  "Period listing unavailable for dates prior to 100 AD or after 9892 AD." +
			"<\/td>\n" +
		   "<\/tr>\n" +
		 "<\/table>";
  parent.main_frame.document.getElementById('curpd_id').innerHTML="&nbsp";
  return (dasa);
  }

  var now    = new Date();
  var bd     = new Date(year, month-1, date);
  var cd     = new Date(bd);
  var curage = calcAge(bd, now);
  var repeat = (Math.ceil(curage / 108)) <= 0 ? 1 : Math.ceil(curage / 108);
  bppos      = findMajPos(bp);
  var dasa = "<table id='dasatable' cellspacing='0' cellpadding='0'>\n";
  var lastdasa = bp;

  for (a=0; a<repeat; a++) {            // Repeat Major periods for birth dates older than 108 years 
  for (i=bppos; i < bppos+8; i++) {     // Loop through all Major periods starting with Birth Planet
    for (j=0; j < majpdlen[i]; j++) {   // Loop for number of years indicated by Major Period
      wrkage = calcAge(bd, cd);         // Calc age for year being processed in loop
      majpl = majpds[i];                // Major Period lord for age being processed
      minpl = calcMinPd(wrkage);        // Minor Period lord for age being processed


	// Insert blank line when maj period changes
	if (majpl != lastdasa) {  
	  lastdasa = majpl;
	  dasa += "<tr>\n" +
			"<td colspan='3'>" + "&nbsp;" + "<\/td>\n" +
		    "<\/tr>\n";
	 }

	// Set current Maj/Min period lords
      if (curage == wrkage) {
	  curmajpd = majpl; 
	  curminpd = minpl;
	  parent.main_frame.document.getElementById('curpd_id').innerHTML="&nbsp;Current Period: " + 
												"<span style='color:#cb0017; font-weight:bold; font-size:8pt'>\n" +
												 curmajpd.toString().substring(0,2) + 
												 "-" + 
												 curminpd.toString().substring(0,2) +
												 "<\/span>";
	  dasa += "<tr>\n" + 
			"<td style='width:55px; font-weight:bold; color:#cb0017; font-size:8pt'>" + 
			  "<a href='javascript:void(0)\;\' style='text-decoration:none' onClick='parent.left_frame.pdStrength(this)\;'>" +
			  (majpl.toString().substring(0,2) + "-" + 
			  minpl.toString().substring(0,2) + 
			  "<\/a>" +
			"<\/td>\n" + 
			"<td style='width:90px'>" + 
			  mthnames[cd.getMonth()] + " " + cd.getDate() + " " + cd.getFullYear()) + 
			"<\/td>\n" + 
			"<td style='width:25px' align='right'>" + 
			  wrkage + 
			"<\/td>\n" + 
		    "<\/tr>\n";
      }
	else {
	  dasa += "<tr>\n" + 
			"<td style='width:55px'>" + 
			  "<a href='javascript:void(0)\;\' style='text-decoration:none' onClick='parent.left_frame.pdStrength(this)\;'>" +
			  (majpl.toString().substring(0,2) + "-" + 
			  minpl.toString().substring(0,2) + 
			  "<\/a>" +
			"<\/td>\n" + 
			"<td style='width:90px'>" + 
			  mthnames[cd.getMonth()] + " " + cd.getDate() + " " + cd.getFullYear()) + 
			"<\/td>\n" + 
			"<td style='width:25px' align='right'>" + 
			  wrkage + 
			"<\/td>\n" + 
		    "<\/tr>\n";
	}
	cd.setFullYear(cd.getFullYear() + 1);
    }
  }
  }
  dasa += "<\/table>";
  return (dasa);
}


// Find period planet in major periods array
//
function findPlanet(planet) {
  for (i=0; i<8; i++) {
    if (majpds[i].toString().substring(0,2) == planet) 
      break;
  }
  return (i);
}


// Calculate when a period is in strength
//
function pdStrength(inobj) {
  var majmin = inobj.parentNode.parentNode.cells[0].innerText; 
  var fdate  = inobj.parentNode.parentNode.cells[1].innerText;
  fdate = trim(fdate.toString());
  var i=0;
  var j=0;
  var maj = majmin.toString().substring(0,2);
  var min = majmin.toString().substring(3,5);
  var majstart;
  var majpos, minpos;

  if (majmin != "") {
    majpos = findPlanet(maj);
    minpos = findPlanet(min);
  }
  else {
    return false;
  }

  oTable = parent.main_frame.document.getElementById('dasatable');
  for (i=0; i<999999; i++) {
    if (oTable.rows[i].cells[0].innerText.toString().substring(0,2) == maj && (oTable.rows[i].rowIndex + 21) >= inobj.parentNode.parentNode.rowIndex) {
	majstart = oTable.rows[i].cells[1].innerText;
      break;
    }
  }
  getMthDayYr(majstart);
  var start = new Date(fyear, fmth+parseFloat(fm2strength[majpos]), fday);
  var end   = new Date(fyear, fmth+parseFloat(tm2strength[majpos]), fday-1);
  parent.main_frame.document.getElementById('selpd_id').innerHTML = "<span style=\"color:#cb0017\"><b>" + maj + "<\/b><\/span> major is strongest from<br>" + 
						mthnames[start.getMonth()] + " " + start.getDate() + " " + start.getFullYear() +
						"  to " + mthnames[end.getMonth()] + " " + end.getDate() + " " + end.getFullYear() + "<br>";


  getMthDayYr(fdate);
  var start = new Date(fyear, fmth+parseFloat(fmstrength[minpos]), fday);
  var end   = new Date(fyear, fmth+parseFloat(tmstrength[minpos]), fday-1);
  parent.main_frame.document.getElementById('selpd_id').innerHTML += "<span style=\"color:#cb0017\"><b>" + majmin + "<\/b><\/span> minor is strongest from<br>" + 
						mthnames[start.getMonth()] + " " + start.getDate() + " " + start.getFullYear() +
						"  to " + mthnames[end.getMonth()] + " " + end.getDate() + " " + end.getFullYear();

  return true;
}


function getMthDayYr(fdate) {
  var i=0;
  var j=0;

  for (i=0; i<fdate.length; i++) {
    if (fdate.toString().charAt(i) == " ") {
	break;
    }
  }
  for (j=i+1; j<fdate.length; j++) {
    if (fdate.toString().charAt(j) == " ") {
	break;
    }
  }
  daybeg = i+1;
  dayend = j;
  yrbeg  = j+1;
  yrend  = fdate.length;

  fyear = parseFloat(fdate.toString().substring(yrbeg,yrend));
  fmth  = fdate.toString().substring(0,3);
  for (i=0; i<12; i++) {
    if (mthnames[i] == fmth)
	break;
  }
  fmth  = i;
  fday  = parseFloat(fdate.toString().substring(daybeg,dayend));

  return (true);
}


function trim(instr) {
  return instr.replace(/^\s+/,'').replace(/\s+$/,'');
}
