
/*
 *
 * MODIFICATION HISTORY:
 * -------------------------------------------------------------
 * Date        Name       Comments
 * 12/01/2006  Mary S.   Changed AUM figures as per Ashley
 * 11/01/2006  Mary S.   Changed AUM figures as per Ashley
 * 10/31/2006  Mary S.   Changed AUM figures as per Ashley
 * 10/02/2006  Mary S.   Changed AUM figures as per Ashley
 * 09/05/2006  Mary S.   Changed AUM figures as per Ashley
 * 08/01/2006  Mary S.   Changed AUM figures as per Ashley
 * 07/26/2006  Mary S.   Changed AUM figures as per Ashley
 * 07/5/2006  Mary S.   Changed AUM figures as per Paula
 * 06/1/2006  Mary S.   Changed AUM figures as per Susan
 * 05/5/2006  Mary S.   Changed AUM figures as per Anne
 * 05/1/2006  Mary S.   Changed AUM figures as per Bob
 * 04/3/2006  Mary S.   Changed AUM figures as per Nina
 * 03/2/2006  Mary S.   Changed AUM figures as per Nina
 * 02/1/2006  Mary S.   Changed AUM figures as per Nina
 * 1/27/2006  Mary S.   Changed AUM figures as per Nina
 * 1/23/2006  Mary S.   Changed AUM figures as per Nina
 * 10/03/2005  Marty L.   Changed AUM figures as per Nina
 * 09/01/2005  Marty L.   Changed AUM figures as per Nina
 * 08/01/2005  Paul A.    Changed AUM figures as per Nina
 * 07/25/2005  Marty L.   Changed AUM figures as per Nina
 * 06/01/2005  Marty L.   Changed AUM figures as per Nina
 * 05/25/2005  Paul A.    Added 'glossaryDefinition(filename)' for the closed end funds project.
                          We need to inventory where we popup glossary terms to determine how to 
                          best remove this file from shareholder scripts.
 * 05/20/2005  Paul A.    Added 'openProductDetailsFundsNopopup(theForm)' for the closed end funds project.
                          If this works we will need to remove this function from the shareholder scripts file.
 * 05/03/2005  Marty L.   Changed figures as per Nina
 * 05/02/2005  Marty L.   Changed figures as per Nina
 * 04/11/2005  Paul A.    Added new function called 'parseNameValueString' received from Aspi Engineer.
                          It parses a string containing name-value pairs into a hashmap.
 * 02/07/2005  Mike A.    Added footnote functions called 
                         'FundPerformanceDisclaimer'
                         'CollegeAdvantageDisclaimer'
                         'TaxSmartEquityDisclaimer'
                         'ShareholderDisclaimer'
 * 03/02/2005  Marty L.   Updated 'myAUM' as per Nina
 * 02/01/2005  Marty L.   Updated 'myAUM' as per Nina
 * 10/26/2004  Marty L.   Updated 'myAUM' as per Paula
 * 10/01/2004  Marty L.   Updated 'myAUM' information for data as of 9/30.
 * 05/06/2004  Paul A.    Added function called 'myAUM'- Assets Under Management function created by Marty Lund
 * 05/05/2004  Paul A.    Added function called 'printVersion'- it was in specific site js files but should be shared
 * 04/21/2004  Paul A.    Added new function called 'myPopUp'- an all-purpose popup that you can pass a height, width and url
 * 05/17/2004  Mike A.    Added new function called 'openPayroll'- a customized popup for total compensation (intranet) that you can pass a height, width and url 
 * 10/12/2005  Mike A.    Added NetTracker scripts 
 */

var browserVersion = parseInt(navigator.appVersion);
var isIE = navigator.appName.indexOf("Microsoft") != -1;
var agent = navigator.userAgent.toLowerCase();
var isMac = agent.indexOf("mac") != -1;

// *********************************************************************************
// Display share class definition on daily pricing and distributions page.  This is a Glossary term.
// *********************************************************************************

  function openMessage(link,x,y) {
  var newURL = '/shared/html/glossary/' + link;
  var vWidth = x;
  var vHeight = y;
  var windowprops = vWidth + "," + vHeight + "," + "resizable=no,scrollbars=no,toolbar=no,location=no,directories=no,status=no,menubar=no,copyhistory=no";
    OpenWindow = window.open(newURL, "window", windowprops);
    newURL.focus();
  }
  
// *********************************************************************************
// Open pricing page for a specific shareclass.  This is for CollegeAdvantage.
// *********************************************************************************

function openPricingShareclassCA(theForm) {
          link = '/assembler/shared/html/prodinfo/collegesaving/' +  
                 theForm.shareclass.options[theForm.shareclass.selectedIndex].value;
          document.location.href = link;
        }


// *********************************************************************************
// Open pricing page with either quarterly or monthly performance. This is for CollegeAdvantage.
// *********************************************************************************

function openPricingPerformanceCA(theForm) {
          link = '/assembler/shared/html/prodinfo/collegesaving/' +
                 theForm.timespan.options[theForm.timespan.selectedIndex].value;
          document.location.href = link;
        }
        


// *********************************************************************************
// Open pricing page for a specific shareclass. This is for Mutual Funds.
// *********************************************************************************

function openPricingShareclass(theForm) {
          link = '/assembler/shared/html/prodinfo/mutualfunds/' +  
                 theForm.shareclass.options[theForm.shareclass.selectedIndex].value;
          document.location.href = link;
        }


// *********************************************************************************
// Open pricing page with either quarterly or monthly performance. This is for Mutual Funds.
// *********************************************************************************

function openPricingPerformance(theForm) {
          link = '/assembler/shared/html/prodinfo/mutualfunds/' +
                 theForm.timespan.options[theForm.timespan.selectedIndex].value;
          document.location.href = link;
        }
        
function fundcode(theForm) {
          link = '/assembler/shared/html/prodinfo/mutualfunds/' +
                 theForm.code.options[theForm.code.selectedIndex].value;
          document.location.href = link;
        }
        
function selectcode(theForm) {
          link = '#' +
                 theForm.fund.options[theForm.fund.selectedIndex].value;
          document.location.href = link;
        }
        
//Marcomm Assets Under Management function- created by Marty Lund


var AUM = new Array();

<!-- Total Assets under management in billions of U.S. dollars -->
AUM[0] = "191";

<!-- Shareholders under management in millions of individuals -->
AUM[1] = "9";

<!-- Institutional clients -->
AUM[2] = "204";

<!-- Mutual funds -->
AUM[3] = "78";

<!-- Years of experience -->
AUM[4] = "68";

<!-- Years of global investing -->
AUM[5] = "31";

<!-- Employees worldwide -->
AUM[6] = "3,000";

<!-- Investment professionals -->
AUM[7] = "192";

<!-- Total mutual funds in billions of U.S dollars -->
AUM[8] = "123";

<!-- Total institutional assets in billions of U.S. dollars -->
AUM[9] = "68";

<!-- Most current monthly update in U.S. format -->
AUM[10] = "November 2006";

<!-- Most current quarterly update in U.S. format -->
AUM[11] = "9/30/06";

<!-- 401k plans -->
AUM[12] = "735";

<!-- Taft-Hartely plans -->
AUM[13] = "65";

<!-- Most current monthly update in Non-U.S. format #2 (German) -->
AUM[14] = "31.12.2005";

<!-- Most current quarterly update in Non-U.S. format #2 (German) -->
AUM[15] = "30.9.2005";

<!-- Institutional Clients + 401(k) Accounts -->
AUM[16] = "2500";

<!-- Last Post Date in U.S. Format -->
AUM[17] = "November 30";

<!-- Last Post Date in Non-U.S. Format -->
AUM[18] = "31 December";

function myAUM(num) {
  document.write('<nobr>' + AUM[num] + '</nobr>');
  }




  function loadLeft(destleft) {
    parent.left.location.href = destleft;
  }
  
  function loadContent(destcontent) {
    parent.content.location.href = destcontent;
  }
  
  function loadTop(desttop) {
    parent.topnav.location.href = desttop;
  }
  
  function loadBottom(destleft,destcontent) {
    loadLeft(destleft);
    loadContent(destcontent);
  }
    
  function loadAll(destleft,destcontent,desttop) {
    loadLeft(destleft);
    loadContent(destcontent);
    loadTop(desttop);
  }

// *********************************************************************************
// Added this function for the closed end funds project.  If this works we will need to remove this function from the shareholder scripts file.
// *********************************************************************************

function openProductDetailsFundsNopopup(theForm) {

  if(theForm.fund.selectedIndex > 0){
  link = '/assembler/shared/html/prodinfo/mutualfunds/' + theForm.fund.options[theForm.fund.selectedIndex].value + '.htm';
  document.location.href = link;
  }
}   

//**********************************************************************
//FRAMESET SCRIPT: Mike A -- Demo functions 03/22/2005
//**********************************************************************
  function ReadEverything(link1,link2,link3) {
    ReadTopNav(link1);
    ReadContentNav(link2);
    ReadContent(link3);
  }
  
  function ReadAll(link1,link3) {
    ReadTopNav(link1);
    ReadContent(link3);
  }
  
  function ReadTopNav(link1) {
    parent.tnav.location.href = link1;
  }
  
  function ReadContentNav(link2) {
    parent.nav.location.href = link2;
  }
  
  function ReadContent(link3) {
    parent.content.location.href = link3;
  }
  
  function ReadTop(link) {
    parent.window.location.href = link;
  }
  
//**********************************************************************
//Marcomm all-purpose popup

function myPopUp(link,x,y) {
var newURL = link;
var vWidth = x;
var vHeight = y;
var windowProps = vWidth + "," + vHeight + "," + "resizable=yes,scrollbars=yes,toolbar=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no";
  OpenWindow = window.open(newURL, "window", windowProps);
  OpenWindow.focus();
}

// Print Version Function updated to handle Anchor Tags

  function printVersion()
  {
    printPage = document.location.href;
    printPageArray = printPage.split("#");
    printPage = printPageArray[0];
    
    if (printPage.indexOf("?") < 0)
      printPage = printPage+"?print=yes"
    else
      printPage = printPage+"&print=yes"
    window.open(printPage,'PrintVersion','width=530,height=400,scrollbars=yes,status=no,toolbar=no,menubar=no,resizable=yes');
  }
  
  
//0pen windows

  function showMoreInfo() {
    var newURL = "../a/moreinfo.htm";
    var windowprops = "menubar=no,toolbar=no,location=no,directories=no,scrollbars=yes,status=no,resizable=no,width=320,height=160";
    window.open(newURL, "moreinfo", windowprops);
  }

  function showRemotePrivacy() {
    top.name = "main";
    var newURL = "http://www.putnam.com/policy/fset_privacy.htm";
    var windowprops = "menubar=no,toolbar=no,location=no,directories=no,scrollbars=yes,status=no,resizable=no,width=520,height=450";
    OpenWindow = window.open(newURL, "remote", windowprops);
  }

  function showRemoteSecurity() {
    top.name = "main";
    var newURL = "http://www.putnam.com/policy/fset_security.htm";
    var windowprops = "menubar=no,toolbar=no,location=no,directories=no,scrollbars=yes,status=no,resizable=no,width=520,height=450";
    OpenWindow = window.open(newURL, "remote", windowprops);
  }

  function showRemoteTerms() {
    top.name = "main";
    var newURL = "http://www.putnam.com/policy/fset_terms.htm";
    var windowprops = "menubar=no,toolbar=no,location=no,directories=no,scrollbars=yes,status=no,resizable=no,width=520,height=450";
    OpenWindow = window.open(newURL, "remote", windowprops);
  }

// *********************************************************************************
// Added this function on 5/24/05 for the closed end funds project.
// *********************************************************************************  
  
function glossaryDefinition(filename) {
  var url = ('/assembler/individual_investor/html/glossary/' + filename);
  var desktop = window.open(url, "_blank","width=500,height=360", scrollbars="1");

}

//Open the glossary

  function openGloss() {
  window.open('https://www.putnam.com/dc/infocenter/glossary.htm', 'Glossary', 'width=580,height=520,resizable=no,scrollbars=yes,toolbar=no,location=no,directories=no,status=no,menubar=no,copyhistory=no');
  }

//Get a prospectus

  function getProspectus(theForm) {
    if(theForm.prospectus.selectedIndex > 0){
      link = 'http://www.putnam.com/pdf/' + theForm.prospectus.options[theForm.prospectus.selectedIndex].value + '.pdf';
      window.open(link,'Prospectus','width=700,height=540,resizable=yes,scrollbars=yes,toolbar=no,location=no,status=no')
    }
  }

//Adode Reader download

  function openAdobe() {
  window.open('http://www.putnam.com/downloads/download.htm','Download',
'width=350,height=400,resizable=no,scrollbars=yes,toolbar=no,location=no,directories=no,status=no,menubar=no,copyhistory=no');
  }

//Jump

  function jump(targ,selObj,restore){ //v3.0
    eval(targ+".location='"+selObj.options[selObj.selectedIndex].value+"'");
    if (restore) selObj.selectedIndex=0;
  }

//Print

  function printPage() {
    if (window.print) {
      setTimeout('window.print();',200);
    }
    else if (isMac) {
      alert("Press \"Cmd+p\" on your keyboard to print article.");
    }
    else {
      alert("Press \"Ctrl+p\" on your keyboard to print article.")
    }
  }

//Client Reporting popup

function startPopUp(desktopURL) {
  var desktop =
  window.open(desktopURL, "_blank","width=400,height=250");
  }

//HideShow

  function findObj(n, d) { //v4.0
  var p,i,x; 
    if(!d) d=document;
      if((p=n.indexOf("?"))>0&&parent.frames.length) {
        d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);
        }
      if(!(x=d[n])&&d.all) x=d.all[n];
      for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
      for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=findObj(n,d.layers[i].document);
      if(!x && document.getElementById) x=document.getElementById(n);
      return x;
    }
  
  function showHideLayers() { //v3.0
  var i,p,v,obj,args=showHideLayers.arguments;
    for (i=0; i<(args.length-2); i+=3)
    if ((obj=findObj(args[i]))!=null) {
      v=args[i+2];
      if (obj.style) {
        obj=obj.style; v=(v=='show')?'visible':(v='hide')?'hidden':v; 
        }
      obj.visibility=v; 
      }
    }
  
  function clearall() {
    document.shown.visibility="hide";
    document.hidden.visibility="hide";
    }
  
  function myhidden() {
    clearall();
    document.hidden.visibility="show";
    }
  
  function mydisplay() {
    clearall();
    document.shown.visibility="show";
    }
  
//jumpsubmit

  function jumpsubmit(link) {
    self.window.location.href=link;
    }


//Footnote functions
var now = new Date();

function W(s) {
  self.document.write(s);
}

function FundPerformanceDisclaimer() {
  W('<p class="footnote">');
  W('Past performance does not indicate future results. ');
  W('More recent returns may be worth more or less than those shown. ');
  W('Returns for class A and class M shares reflect the current maximum initial sales charges of 5.25% and 3.50% for equity funds, 3.25% and 2.00% for Putnam U.S. ');
  W('Intermediate Government Income Fund, respectively, and 4.50% for income funds. ');
  W('POP performance reflects a reduction in maximum sales charge that took effect January 28, 2004. ');
  W('Class B share returns for the 1-, 5-, and 10-year (where available) and life-of-fund periods reflect the applicable contingent deferred sales charge (CDSC), which is 5% in the first year, declines to 1% in the sixth year, and is eliminated thereafter. ');
  W('Returns shown for class B and class M shares for periods prior to their inception are derived from the historical performance of class A shares, adjusted to reflect both the initial sales charge or CDSC, if any, currently applicable to each class and, in the case of class B and class M shares, the higher operating expenses applicable to such shares. ');
  W('For class C shares, returns for periods prior to their inception are derived from the historical performance of class A shares, adjusted to reflect both the CDSC currently applicable to class C shares, which is 1% for the first year and is eliminated thereafter, and the higher operating expenses applicable to class C shares. ');
  W('All returns assume reinvestment of distributions at NAV. ');
  W('Investment return and principal value will fluctuate so that an investor\'s shares when redeemed may be worth more or less than their original cost. ');
  W('For a portion of the period, some funds may have limited expenses, without which returns would have been lower. ');
  W('Please see a prospectus for details. ');
  W('Closed-end fund performance is calculated using prices on the dividend ex-date and does not account for taxes on reinvested distributions. ');
  W('</p>');
}

function CollegeAdvantageDisclaimer() {
  W('<p class="footnote">');
  W('Mutual fund pricing as detailed above applies to corresponding investment options in Putnam CollegeAdvantage with the exception of Putnam CollegeAdvantage Stable Value option, which has a maximum sales charge of 4.25% for class A shares. ');
  W('Special fee provisions apply to accounts invested in Putnam CollegeAdvantage Asset Allocation Options opened prior to May 16, 2003. ');
  W('Those accounts are generally subject to lower charges and expenses as long as the amounts remain in the investment option in which they were invested on May 15, 2003. ');
  W('Returns do not reflect an annualized 0.20% fee charged by the Ohio Tuition Trust Authority. ');
  W('</p>');
}

function TaxSmartEquityDisclaimer() {
  W('<p class="footnote">');
  W('All returns are before taxes except as designated for Putnam Tax Smart Equity Fund. ');
  W('After-tax returns reflect the highest individual federal income tax rate and exclude state and local taxes. ');
  W('Actual after-tax returns depend on the investor\'s tax situation and may differ from those shown. ');
  W('After-tax returns are not relevant to those investing through 401(k) plans, IRAs, or other tax-deferred arrangements. ');
  W('</p>');
}

function ShareholderDisclaimer() {
  W('<p class="disclaimer">');
  W('For more information about the Putnam family of funds, including investment policies, charges, and expenses, ask your financial advisor for a free prospectus or call Putnam Investments at <span class="tollfree">1-888-4-PUTNAM (1-888-478-8626)</span>. ');
  W('Please read the prospectus carefully before you invest or send money. ');
  W('If you are having difficulties using this web site, please call Putnam Investments at <span class="tollfree">1-888-4- PUTNAM (1-888-478-8626)</span>. ');
  W('</p>');
  W('<p>');
  W('<img src="/shared/images/logo_footnte_prm.gif" alt="" width="216" height="62" hspace="0" vspace="0" border="0">');
  W('</p>');
}

function LoginDisclaimer() {
  W('<p class="disclaimer">');
  W('To access this site, you will need either ');
  W('<a href="http://www.netscape.com/" class="disclaimer" target="_blank">Netscape 7.0</a> ');
  W('(or higher) or ');
  W('<a href="http://www.microsoft.com/" target="_blank" class="disclaimer">Microsoft Internet Explorer 5.0</a> ');
  W('(or higher). ');
  W('Click the underlined browser name to download the browser software. ');
  W('Browsers must be enabled for both JavaScript and Java. ');
  W('To enable your browser for JavaScript or Java, please consult your browser documentation. ');
  W('If you are having difficulty using this Web site or you would like more information about Putnam products, please call your Putnam representative.');
  W('<br><br>');
  W('<a href="https://www.putnam.com/policies/" class="disclaimer" target="_blank">Click here</a> ');
  W('to view our privacy policy.');
  W('<br><br>');
  W('<br>');
  W('<img src="/shared/images/logo_footnte_prm.gif" alt="Copyright" width="216" height="62" hspace="0" vspace="0" border="0">');
  W('</p>');
}

function printMe() {
  printPage();
  return false;
}

function goBack() {
  this.href = history.back();
  return false;
}

function closeMe() {
  window.close();
  return false;
} 

// PRM Central Function

function prmPop(link,popw,poph) {
var newURL = link;
if (popw > 0 )
  var windowprops = "width="+popw+",height="+poph+",directories=0,location=0,copyhistory=0,menubar=1,resizable=1,scrollbars=1,status=1,toolbar=1";
else  
  var windowprops = "width=755,height=537,directories=0,location=0,copyhistory=0,menubar=1,resizable=1,scrollbars=1,status=1,toolbar=1";
    
  OpenWindow = window.open(newURL, "window", windowprops);
}

//Prodinfo function

function productDetailsPopup(filename) 
{
  var url = ('https://content.putnam.com/prodinfo/funds/' + filename);
  var desktop = window.open(url, "_blank","width=770,height=520", scrollbars="1");
}

function printhelpWin(isBroker)
{
  if (isBroker)
    window.open('https://content.putnam.com/financial_advisor/html/help/print_help_landscape.htm','_blank','width=500,height=400,scrollbars=1');
  else
    window.open('https://content.putnam.com/individual_investor/html/help/print_help_landscape.htm','_blank','width=500,height=400,scrollbars=1');
}

//E Mail Address check for confirm suppression -- Removed 2/9/2004 by DLW

/* custom function for total compensation - Putnam intranet */
function openPayroll(link,x,y) {
  var newURL =  'http://intranet/' + link;
  var vWidth = x;
  var vHeight = y;
  var windowprops = vWidth + "," + vHeight + "," + "resizable=yes,scrollbars=yes,toolbar=yes,location=yes,directories=yes,status=yes,menubar=yes,copyhistory=yes";
    OpenWindow = window.open(newURL, "window", windowprops);
    newURL.focus();
  }
  
//  ***** The following group of functions control business dates *****

function today() {
var vMonth = new Array ("January","February","March","April","May","June","July","August","September","October","November","December")
  document.write(vMonth[now.getMonth()] + "&nbsp;" + now.getDate() + ",&nbsp;" + now.getFullYear());
}

function LeapYear(theYear) {
  if ((theYear % 4) == 0) {
    return 29
    }
  else {
    return 28
    }
  }

function GetMonthDays(month) {
  var year = 0
  while (month < 0) {
    month = month + 12
    year = year + 1
    }
  var currently = new Date
  var currentyear = currently.getYear()
  var checkingyear = (currentyear - year)
  if (month == 0) {
    var days = 31
    }
  if (month == 1) {
    var days = LeapYear(checkingyear)
    }
  if (month == 2) {
    var days = 31
    }
  if (month == 3) {
    var days = 30
    }
  if (month == 4) {
    var days = 31
    }
  if (month == 5) {
    var days = 30
    }
  if (month == 6) {
    var days = 31
    }
  if (month == 7) {
    var days = 31
    }
  if (month == 8) {
    var days = 30
    }
  if (month == 9) {
    var days = 31
    }
  if (month == 10) {
    var days = 30
    }
  if (month == 11) {
    var days = 31
    }
  return days
  }
  
function GetMonthYears(month) {
    var year = 0
  while (month < 0) {
    month = month + 12
    year = year + 1
    }
  return days, year
  }
  
function WriteDate(Offset) { //last business day
  var now = new Date
  var AbsDay = now.getDay()
  var AbsDate = now.getDate()
  var AbsMonth = now.getMonth()
  var AbsYear = now.getFullYear()
  var DayCounter = Offset
  var MonthCounter = 0
  var YearCounter = 0
  var CurDay = 100
  CurDay = CurDay + AbsDay - DayCounter - 100
  while (CurDay < 0) {
    CurDay = (CurDay + 7)
    }
  if (CurDay == 0) {
    CurDay = 5
    DayCounter = DayCounter + 2
    }
  if (CurDay == 6) {
    CurDay = 5
    DayCounter = DayCounter +1
    }
  var CurDate = 100
  CurDate = CurDate + AbsDate - DayCounter - 100
  while (CurDate < 1) {
    MonthCounter = MonthCounter + 1
    CurDate = CurDate + GetMonthDays(AbsMonth - MonthCounter)
    }
  var CurMonth = AbsMonth-MonthCounter
  while (CurMonth < 0) {
    YearCounter = YearCounter + 1
    CurMonth = CurMonth + 12
    }
  var CurYear = AbsYear-YearCounter
  if (CurMonth < 9) {
    document.write("0")
    }
  document.write(CurMonth +1)
  document.write("/")
  if (CurDate < 10) {
    document.write("0")
    }
  document.write(CurDate)
  document.write("/")
  document.write(CurYear)
  }

function AnyDate(Offset) { //last business month
  var AbsDay = now.getDay()
  var AbsDate = now.getDate()
  var AbsMonth = now.getMonth()
  var AbsYear = now.getFullYear()
  
  var DayCounter = Offset
  var MonthCounter = 0
  var YearCounter = 0
  
  var CurDay = 100
  CurDay = CurDay + AbsDay - DayCounter - 100
  while (CurDay < 0) {
    CurDay = (CurDay + 7) }
  var CurDate = 100
  CurDate = CurDate + AbsDate - DayCounter - 100
  while (CurDate < 1) {
    MonthCounter = MonthCounter + 1
    CurDate = CurDate + GetMonthDays(AbsMonth - MonthCounter)
    }
  var CurMonth = AbsMonth-MonthCounter
  while (CurMonth < 0) {
    YearCounter = YearCounter + 1
    CurMonth = CurMonth + 12
    }
  var CurYear = AbsYear-YearCounter
  if (CurMonth < 9) {
    document.write("0")
    }
  document.write(CurMonth + 1)
  document.write("/")
  if (CurDate < 10) {
    document.write("0")
    }
  document.write(CurDate)
  document.write("/")
  document.write(CurYear)
  }

function WriteMonth() {
  var Alpha = new Date
  var Beta = Alpha.getDate()
  AnyDate(Beta)
  }
  
function WriteQuarter() {
  var Omega = new Date
  var MCounter = Omega.getMonth()
  var DCounter = 100
  DCounter = DCounter + Omega.getDate() - 100
  while ((MCounter % 3) > 0) {
    MCounter = MCounter - 1
    DCounter = DCounter + GetMonthDays(MCounter) }
  AnyDate(DCounter)
}

function WriteQtr(num) {
  var Omega = new Date;
  var myMonth = Omega.getMonth();
  var currentQuarter = (myMonth + 1) / 3;
  var oldQuarter = currentQuarter - num;
  var myLoop = oldQuarter;
  var myYears = 0;
  while (oldQuarter < 0) {
    myYears = myYears +1;
    oldQuarter= myLoop + 4;
  }
  if (oldQuarter <= 1) {
    document.write('12/31/' + (Omega.getFullYear() - myYears - 1));
  } else {
    if  (oldQuarter <= 2) {
      document.write('03/31/' + (Omega.getFullYear() - myYears));
    } else {
      if (oldQuarter <= 3) {
        document.write('06/30/' + (Omega.getFullYear() - myYears));
      } else {
        document.write('09/30/' + (Omega.getFullYear() - myYears));
      }
    }
  }
}


// ***********************************************************************************
//
// Name: parseNameValueString
//
// Purpose: Parses a string containing name-value pairs into a hashmap.
//
// Parameters:
// 1) inString     - The string to be parsed
// 2) pairDelimitor - The character used to delimit between consecutive name
//             value pairs
// 3) keyDelimitor  - The character used to delimit between the name and value
//
// Usage:
// -----
//  var parsedData = parseNameValueString('name=value&name2=value2', '&', '=');
//  for (i in parsedData) {
//    alert (logMsgPrefix + "parsedData[" + i + "] = [" + parsedData[i] + "]");
//  }
//  if (parsedData["name3"]) {
//    alert (logMsgPrefix + "parsedData[\"name3\"] exists");
//  } else {
//    alert (logMsgPrefix + "parsedData[\"name3\"] does not exist");
//  }
//
// 
// Important Considerations:
// Be careful when choosing delimiters. YOU MUST USE A <pairDelimitor> THAT DOES NOT 
// OCCUR ANY WHERE ELSE IN THE NAME VALUE PAIRS.
// Example: If name-value pairs may contain the "&" character, then you can use an alternate delimiter:
// parseNameValueString('url=http://stuff.com?name=value&name2=value2@winattr=a=b&c=d@tab=blah', '@', '=');
//
// ***********************************************************************************
function parseNameValueString(inString, pairDelimitor, keyDelimitor)
{
  var logMsgPrefix = "common.js::parseNameValueString()::";
  var gScriptsDebug = false;
  
  if (gScriptsDebug) {alert (logMsgPrefix + "inString     = [" + inString + "]");}
  if (gScriptsDebug) {alert (logMsgPrefix + "pairDelimitor  = [" + pairDelimitor + "]");}
  if (gScriptsDebug) {alert (logMsgPrefix + "keyDelimitor   = [" + keyDelimitor + "]");}

    // The Object ("Array") where our data will be stored. 
    outData = new Object(); 

  // Perhaps we got some bad data?
  if (inString.length < 1) { 
    if (gScriptsDebug) {alert (logMsgPrefix + "inString is empty. Returning false");}
      return false; 
    }   

  // Local vars used to store and keep track of name/value pairs 
  // as we parse them back into a usable form. 
  keypairs = new Object(); 
  numKP = 1; 

  // Split the inString string at each <pairDelimitor>, storing the left-hand side 
  // of the split in a new keypairs[] holder, and chopping the inString 
  // so that it gets the value of the right-hand string. 
  while (inString.indexOf(pairDelimitor) > -1) { 
    keypairs[numKP] = inString.substring(0,inString.indexOf(pairDelimitor)); 
    inString = inString.substring((inString.indexOf(pairDelimitor)) + 1); 
    numKP++; 
  } 

  // Store what's left in the inString string as the final keypairs[] data. 
  keypairs[numKP] = inString; 

  // Debugging
  if (gScriptsDebug) {
    for (i in keypairs) { 
      alert (logMsgPrefix + "keypairs[" + i + "] = [" + keypairs[i] + "]");  
    }
  }
  
  for (i in keypairs) { 
    // Perhaps we got a malformed name-value pair. The name-value pair must contain 
    // the delimitor
    if (keypairs[i].indexOf(keyDelimitor) <= -1) { 
      if (gScriptsDebug) {alert (logMsgPrefix + "Malformed name-value pair [" + keypairs[i] + "]");}
      continue; 
    } 
    
    // Left of <keyDelimitor> is name. The name cannot be a empty string.
    keyName = keypairs[i].substring(0,keypairs[i].indexOf(keyDelimitor)); 
    if (keyName.length < 1) { 
      if (gScriptsDebug) {alert (logMsgPrefix + "Malformed name value pair (name is null) [" + keypairs[i] + "]");}
      continue; 
    }

    // Right of <keyDelimitor> is value. 
    keyValue = keypairs[i].substring((keypairs[i].indexOf(keyDelimitor)) + 1); 
    outData[keyName] = keyValue; 
  }
  
  // Debugging
  if (gScriptsDebug) {
    for (i in outData) { 
      alert (logMsgPrefix + "outData[" + i + "] = [" + outData[i] + "]");  
    }
  }
  
  return outData; 
} 

// Go button for Offshore Products: Daily unit value
// Added on 04.25.2005 by MA
function goThere() {
  var list = document.forms[0].urllist
  window.open(list.options[list.selectedIndex].value);
}

// Suppresses image and label halo 
// Added on 12.06.2006 by MA
function blurAnchors() {
  if(document.getElementsByTagName) {
    var a = document.getElementsByTagName("a");
    for(var i = 0; i < a.length; i++) {
      a[i].onfocus = function(){this.blur()};
    }
  }
  if(document.getElementsByTagName) {
    var label = document.getElementsByTagName("label");
    for(var h = 0; h < label.length; h++) {
      label[h].onfocus = function(){this.blur()};
    }
  }
}

/*** NetTracker script - DO NOT EDIT THE FOLLOWING! ***/

/* NetTracker Page Tagging Script v1.1
 * Copyright 2004-2005 Sane Solutions, LLC.  All rights reserved.
 * Visit http://www.sane.com for more information.
 */

var NTPT_IMGSRC = '/shared/images/ntpagetag.jpg';

var NTPT_FLDS = new Object();
NTPT_FLDS.lc = true; // Document location
NTPT_FLDS.rf = true; // Document referrer
NTPT_FLDS.rs = true; // User's screen resolution
NTPT_FLDS.cd = true; // User's color depth
NTPT_FLDS.ln = true; // Browser language
NTPT_FLDS.tz = true; // User's timezone
NTPT_FLDS.jv = true; // Browser's Java support

var NTPT_MAXTAGWAIT = 1.0; // Max delay (secs) on link-tags and submit-tags

// Optional variables:
var NTPT_HTTPSIMGSRC = '';
var NTPT_GLBLEXTRA = '';
var NTPT_GLBLREFTOP = false;

/*** END OF USER-CONFIGURABLE VARIABLES ***/

function O0000(O0000O,O0O0OOO){return(eval("\x74\x79\x70\x65\x6f\x66\x20"+O0000O+"\x20\x21\x3d\x20\x22\x75\x6e\x64\x65\x66\x69\x6e\x65\x64\x22")?eval(O0000O):O0O0OOO);}function O00O000(O0OOO0,O000OO){return(O0OOO0+(((O0OOO0=='')||((O000OO=='')||(O000OO.substring((0xf6d+32-0xf8d),(0x14d8+2215-0x1d7e))=="\x26")))?'':"\x26")+O000OO);}function O000O0(){var O0O00O=new Date();return(O0O00O.getTime()+"\x2e"+Math.floor(Math.random()*(0xd43+2155-0x11c6)));}function O0OOO(OO0000,O00OO0){OO0OO[OO0000]=O00OO0.toString();}function OO0OO0(OO0000){OO0OO[OO0000]='';}function OO0OOOO(OOOOO){var O0O0OO='',O00OO,O0O000;OOO0O0(O0000("\x4e\x54\x50\x54\x5f\x47\x4c\x42\x4c\x45\x58\x54\x52\x41",''));if(!LnkLck)OOO0O0(O0000("\x4e\x54\x50\x54\x5f\x50\x47\x45\x58\x54\x52\x41",''));OOO0O0(OOOOO);for(O00OO in OO0OO){O0O000=OO0OO[O00OO];if(O0O000&&(O0O000!=''))O0O0OO=O00O000(O0O0OO,(O00OO+"\x3d"+(self.encodeURIComponent?encodeURIComponent(O0O000):escape(O0O000))));}return O0O0OO;}function OOO00OO(){var O00OO;OOOOOO.OO0OO=new Array();for(O00OO in OO0OO)OOOOOO.OO0OO[O00OO]=OO0OO[O00OO];}function O0OO00(){var O00OO;OO0OO=new Array();for(O00OO in OOOOOO.OO0OO)OO0OO[O00OO]=OOOOOO.OO0OO[O00OO];}function OOOO0O(O0OOOO,O0OO0O,OOOO0){if(OO0O0[O0OOOO]!=null){var O00O0O=new Function(O0OO0O);OO0O0[O0OOOO].onload=O00O0O;OO0O0[O0OOOO].onerror=O00O0O;OO0O0[O0OOOO].onabort=O00O0O;}setTimeout(O0OO0O,(OOOO0*(0x61e+1960-0x9de)));}function OO0O00(O0OO0,OO0OOO){if(O0OO0=='')return;OOO0O=((OOO0O+(0xd01+3643-0x1b3b))%OO0O0.length);if(OO0O0[OOO0O]==null)OO0O0[OOO0O]=new Image((0x459+2628-0xe9c),(0x11c2+1387-0x172c));OO0O0[OOO0O].src=O0OO0+"\x3f"+OO0OOO;}function O00000(OOOOO){var O0OO0;var OO0OOO;if((OOOO00!='')&&(document.location.protocol=="\x68\x74\x74\x70\x73\x3a"))O0OO0=OOOO00;else O0OO0=O00O00;OO0OOO=OO0OOOO(OOOOO);OO0O00(O0OO0,OO0OOO);O0OO00();}function OOO0O0(OOOOO){var OOO00O;var OO0O0O;if(!OOOOO)return;OOOOO=OOOOO.toString();if(OOOOO=='')return;OOO00O=OOOOO.split("\x26");for(OO0O0O=(0x41f+1956-0xbc3);OO0O0O<OOO00O.length;OO0O0O++){var O00OOO=OOO00O[OO0O0O].split("\x3d");if(O00OOO.length==(0x1fa5+1107-0x23f6))O0OOO(O00OOO[(0x1836+2183-0x20bd)],(self.decodeURIComponent?decodeURIComponent(O00OOO[(0x1084+3223-0x1d1a)]):unescape(O00OOO[(0x4cb+410-0x664)])));}}function OO000O(OOOOO){O0OOO("\x65\x74\x73",O000O0());O00000(OOOOO);return true;}function O0O00O0(O0O0O,OOOOO,OOOO0){var O00O0;if(!O0O0O||!O0O0O.href)return true;if(LnkLck)return false;LnkLck=O0O0O;if(OOO00.lc)O0OOO("\x6c\x63",O0O0O.href);if(OOO00.rf){if(!OOOOO0||!top||!top.document)O0OOO("\x72\x66",document.location);}OO000O(OOOOO);if(OOOO0)O00O0=OOOO0;else O00O0=NTPT_MAXTAGWAIT;if(O00O0>(0x7df+2430-0x115d)){var OO00OO;if(O0O0O.click){O0O0O.tmpclck=O0O0O.onclick;O0O0O.onclick=null;OO00OO="\x69\x66\x20\x28\x20\x4c\x6e\x6b\x4c\x63\x6b\x20\x29\x20\x7b\x20\x4c\x6e\x6b\x4c\x63\x6b\x2e\x63\x6c\x69\x63\x6b\x28\x29\x3b\x20\x4c\x6e\x6b\x4c\x63\x6b\x2e\x6f\x6e\x63\x6c\x69\x63\x6b\x20\x3d\x20\x4c\x6e\x6b\x4c\x63\x6b\x2e\x74\x6d\x70\x63\x6c\x63\x6b\x3b\x20\x4c\x6e\x6b\x4c\x63\x6b\x20\x3d\x20\x6e\x75\x6c\x6c\x3b\x20\x7d";}else OO00OO="\x69\x66\x20\x28\x20\x4c\x6e\x6b\x4c\x63\x6b\x20\x29\x20\x7b\x20\x77\x69\x6e\x64\x6f\x77\x2e\x6c\x6f\x63\x61\x74\x69\x6f\x6e\x2e\x68\x72\x65\x66\x20\x3d\x20\x22"+O0O0O.href+"\x22\x3b\x20\x4c\x6e\x6b\x4c\x63\x6b\x20\x3d\x20\x6e\x75\x6c\x6c\x3b\x20\x7d";OOOO0O(OOO0O,OO00OO,O00O0);return false;}LnkLck=null;return true;}function O0OOO0O(OO000,OOOOO,OOOO0){var O00O0;if(!OO000||!OO000.submit)return true;if(FrmLck)return false;FrmLck=OO000;OO000O(OOOOO);if(OOOO0)O00O0=OOOO0;else O00O0=NTPT_MAXTAGWAIT;if(O00O0>(0x9e0+6857-0x24a9)){OO000.tmpsbmt=OO000.onsubmit;OO000.onsubmit=null;OOOO0O(OOO0O,"\x69\x66\x20\x28\x20\x46\x72\x6d\x4c\x63\x6b\x20\x29\x20\x7b\x20\x46\x72\x6d\x4c\x63\x6b\x2e\x73\x75\x62\x6d\x69\x74\x28\x29\x3b\x20\x46\x72\x6d\x4c\x63\x6b\x2e\x6f\x6e\x73\x75\x62\x6d\x69\x74\x20\x3d\x20\x46\x72\x6d\x4c\x63\x6b\x2e\x74\x6d\x70\x73\x62\x6d\x74\x3b\x20\x46\x72\x6d\x4c\x63\x6b\x20\x3d\x20\x6e\x75\x6c\x6c\x3b\x20\x7d",O00O0);return false;}FrmLck=null;return true;}var O00O00=NTPT_IMGSRC;var OOO00=NTPT_FLDS;var OOOO00=O0000("\x4e\x54\x50\x54\x5f\x48\x54\x54\x50\x53\x49\x4d\x47\x53\x52\x43",'');var OOOOO0=O0000("\x4e\x54\x50\x54\x5f\x50\x47\x52\x45\x46\x54\x4f\x50",O0000("\x4e\x54\x50\x54\x5f\x47\x4c\x42\x4c\x52\x45\x46\x54\x4f\x50",false));var OOO000=O0000("\x4e\x54\x50\x54\x5f\x4e\x4f\x49\x4e\x49\x54\x49\x41\x4c\x54\x41\x47",false);var ntptAddPair=O0OOO;var ntptDropPair=OO0OO0;var ntptEventTag=OO000O;var ntptLinkTag=O0O00O0;var ntptSubmitTag=O0OOO0O;var OO0OO=new Array();var OOOOOO=new Object();var OO0O0=Array((0xc53+5034-0x1ff3));var OOO0O;for(OOO0O=(0xc69+6583-0x2620);OOO0O<OO0O0.length;OOO0O++)OO0O0[OOO0O]=null;var LnkLck=null;var FrmLck=null;O0OOO("\x6a\x73","\x31");O0OOO("\x74\x73",O000O0());if(OOO00.lc)O0OOO("\x6c\x63",document.location);if(OOO00.rf){var O0O0O0;if(OOOOO0&&top&&top.document)O0O0O0=top.document.referrer;else O0O0O0=document.referrer;O0OOO("\x72\x66",O0O0O0);}if(self.screen){if(OOO00.rs)O0OOO("\x72\x73",self.screen.width+"\x78"+self.screen.height);if(OOO00.cd)O0OOO("\x63\x64",self.screen.colorDepth);}if(OOO00.ln){var OO00O;if(navigator.language)OO00O=navigator.language;else if(navigator.userLanguage)OO00O=navigator.userLanguage;else OO00O='';if(OO00O.length>(0xd3b+6466-0x267b))OO00O=OO00O.substring((0xb13+5400-0x202b),(0x8ca+5379-0x1dcb));OO00O=OO00O.toLowerCase();O0OOO("\x6c\x6e",OO00O);}if(OOO00.tz){var O0O00;var O0O00O=new Date();var O000O=O0O00O.getTimezoneOffset();var OOO0OO;O0O00="\x47\x4d\x54";if(O000O!=(0x10c4+3752-0x1f6c)){if(O000O>(0xc86+1771-0x1371))O0O00+="\x20\x2d";else O0O00+="\x20\x2b";O000O=Math.abs(O000O);OOO0OO=Math.floor(O000O/(0x1840+1703-0x1eab));O000O-=OOO0OO*(0x13b1+2037-0x1b6a);if(OOO0OO<(0x41+6971-0x1b72))O0O00+="\x30";O0O00+=OOO0OO+"\x3a";if(O000O<(0x1026+3918-0x1f6a))O0O00+="\x30";O0O00+=O000O;}O0OOO("\x74\x7a",O0O00);}if(OOO00.jv){var OO00O0;if(navigator.javaEnabled())OO00O0="\x31";else OO00O0="\x30";O0OOO("\x6a\x76",OO00O0);}OOO00OO();if(!OOO000)O00000('');

/*** END OF NetTracker SCRIPTS ***/

