﻿// Print setup dialog code.
// This dialog is used for table view, drillthrough and charts.

var M_nPrintOrientation;
var M_nPrintPaperSize;
var M_strMarginLeft;
var M_strMarginTop;
var M_strMarginRight;
var M_strMarginBottom;

// print options dialog box
var g_strPrintOptions = 
   "<table class='OptionTable' width='100%' cellPadding='3' cellSpacing='0'>"
+  "<tr><td>"
+  "<TABLE cellPadding='3' cellSpacing='0'>"
+  "<TR>"
+  "<td class=OptionHeader nowrap align=left>"
+  resPrintSetup
+  "</td>"
+  "</TR>"
+  "<TR height='3'>"
+  "</TR>"
+  "</TABLE>"
+  "</TD></TR>"
+  "<tr><td>"
+  "<TABLE border=0 cellpadding='0' cellspacing='0'>"
+  "<TR><TD>&nbsp;</TD><TD colspan=3>"
+  "<TABLE border=0 cellpadding='0' cellspacing='0'>"
+  "<TR><TD class='OptionItem'>" 
+  resPrintNote 
+  "</TD></TR></TABLE></TD>"
+  "<TD>&nbsp;</TD></TR>"
+  "<TR><TD colspan=3>&nbsp;</TD></TR>"
+  "<TR><TD>&nbsp;</TD><td><table>"
+  "<tr><TD class='OptionItem' nowrap>"
+  resOrientation
+  "&nbsp;</TD><TD nowrap>"
+  "<INPUT id='Orientation_Portrait' name='Orientation' class='OptionItem' type='radio' title='"
+  resPortrait
+  "' value='0'"
+  ((M_nPrintOrientation == 0)?" checked":"")
+  " onkeypress=\"javascript:SubmitPreparePrint(event);\""
+  "><label class='OptionItem' for='Orientation_Portrait'>" 
+  resPortrait 
+  "</label></TD><TD>&nbsp;</TD><TD>&nbsp;</TD></TR>"
+  "<TR><TD>&nbsp;</TD><TD nowrap>"
+  "<INPUT id='Orientation_Landscape' name='Orientation' class='OptionItem' type='radio' title='"
+  resLandscape 
+  "' value='1'"
+  ((M_nPrintOrientation == 1)?" checked":"")
+  " onkeypress=\"javascript:SubmitPreparePrint(event);\""
+  "><label class='OptionItem' for='Orientation_Landscape'>" 
+  resLandscape 
+  "</label></TD><TD>&nbsp;</TD><TD>&nbsp;</TD></TR>"
+  "<TR><TD colspan=3>&nbsp;</TD></TR>"
+  "<TR><TD valign='top' nowrap><label class='OptionItem' for='PaperSize'>"
+  resPaperSize
+  "</label>&nbsp;</TD><TD nowrap>"
+  "<SELECT class='Default'  id='PaperSize' name='PaperSize' onkeypress=\"javascript:SubmitPreparePrint(event);\" title=\"" 
+  resPaperSize 
+  "\">"
+  TranslatePaperSizes()
+  "</TD><TD>&nbsp;</TD><TD>&nbsp;</TD></TR>"
+  "</table></td>"
+  "<TR><TD colspan=3>&nbsp;</TD></TR>"
+  "<TR><TD>&nbsp;</TD><TD>"
+  "<table border=0><TR>"
+  "<TD class='OptionItem' nowrap>"
+  resMargins
+  "&nbsp;</TD>"
+  "<td nowrap><label class='OptionItem' for='LeftMargin'>" 
+  resPrintLeft 
+  "</label></td>"
+  "<td nowrap><INPUT class='default' id='LeftMargin' onkeypress=\"javascript:SubmitPreparePrint(event);\""
+  "title=\"" 
+  resPrintLeft 
+  "\" type='text' size='6' value='" 
+  M_strMarginLeft 
+  "'>"
+  "</td>"
+  "<td nowrap><label class='OptionItem' for='TopMargin'>" 
+  resPrintTop 
+  "</label></td>"
+  "<td nowrap><INPUT class='default' id='TopMargin' onkeypress=\"javascript:SubmitPreparePrint(event);\""
+  " title=\"" + resPrintTop + "\" type='text' size='6' value='" 
+  M_strMarginTop 
+  "'>"
+  "</td></tr>"
+  "<tr><TD>&nbsp;</TD><td nowrap><label class='OptionItem' for='RightMargin'>" 
+  resPrintRight 
+  "</label></td>"
+  "<td nowrap><INPUT class='default' id='RightMargin' onkeypress=\"javascript:SubmitPreparePrint(event);\""
+  " title=\"" + resPrintRight + "\" type='text' size='6' value='" 
+  M_strMarginRight 
+  "'>"
+  "</td>"
+  "<td nowrap><label class='OptionItem' for='BottomMargin'>" 
+  resPrintBottom 
+  "</label></td>"
+  "<td nowrap><INPUT class='default' id='BottomMargin' onkeypress=\"javascript:SubmitPreparePrint(event);\""
+  " title=\"" 
+  resPrintBottom 
+  "\" type='text' size='6' value='" 
+  M_strMarginBottom 
+  "'>"
+  "</td></tr>"
+  "</TABLE>"
+  "</TD><TD>&nbsp;</TD><TD>&nbsp;</TD></TR>"
+  "<TR><TD>&nbsp;</TD><TD colspan=3 align=left>"
+  "<INPUT type='button' value=\""
+  resOK
+  "\" onClick=\"javascript:OnPreparePrint();\">"
+  "&nbsp;&nbsp;"
+  "<INPUT type='button' name='Cancel' value=\""
+  resCancel
+ "\" onClick=\"javascript:OnCancelOptions();\">&nbsp;&nbsp;"
   + "<input name=DialogHelpButton type=button value=\"" + resHelp
   + "\" onclick=\"javascript:DisplayDialogHelp('PrintSetup.htm', '');\">"
+  "</TD><TD>&nbsp;</TD></TR>"
+  "</table>"
+  "</TD>"
+  "<TD width='100%'>"
+  "</td></TR>"
+  "</TABLE>";

function TranslatePaperSizes()
{
   var strResult="";
   var astrOptions = resPrintPaperSizes.split(",");
   for(var i=0; i<astrOptions.length;i++)
   {
      strResult+="<OPTION Value='"+i.toString()+"'";
      if(i==M_nPrintPaperSize) strResult+=" selected";
      strResult+=">"+astrOptions[i]+"</OPTION>";
   }
   return strResult;
}

function ShowPrintOptions()
{
   DisplayOption(g_strPrintOptions);   
   onLayoutResize();
   document.aspnetForm.Orientation_Portrait.focus();
}

function OnPreparePrint()
{
   if (SavePrintSettings()) {
      executeWait(document.aspnetForm);
   }
}

function SubmitPreparePrint(i_event)
{
   var key = GetKeyCode(i_event);
   if (key == 13) {
      OnPreparePrint();
      ResetSubmit(i_event);
   }
}

var GPattern = /^[-]\d{1,}$|^[+]\d{1,}$|^[-]{0,1}\d*[.]\d{1,}$|^\d{1,}$|^[+]\d*[.]\d{1,}$|^[+]\d{1,}[.]{0,1}\d*$|^[-]{0,1}\d{1,}[.]{0,1}\d*$|^[-]{0,1}\d{1,}[eE][-]{0,1}\d{1,}$|^[-]{0,1}\d{1,}[eE][+]\d{1,}$|^[-]{0,1}\d*[.]\d{1,}[eE][-]{0,1}\d{1,}$|^[-]{0,1}\d*[.]\d{1,}[eE][+]\d{1,}$|^[+]\d{1,}[eE][-]{0,1}\d{1,}$|^[+]\d{1,}[eE][+]{0,1}\d{1,}$|^[+]\d*[.]\d{1,}[eE][-]{0,1}\d{1,}$|^[+]\d*[.]\d{1,}[eE][+]{0,1}\d{1,}$|^[-]{0,1}\d{1,}[.]\d*[eE][-]{0,1}\d{1,}$|^[-]{0,1}\d{1,}[.]\d*[eE][+]\d{1,}$|^[+]\d{1,}[.]\d*[eE][+]{0,1}\d{1,}$|^[+]\d{1,}[.]\d*[eE][-]\d{1,}$/;

// Validate and save print settings, return true if success
function SavePrintSettings()
{
   // Printable version constants
   var PRINT_PAPER_TYPE_COUNT = 8;  // A3, A4, A5, B5, Letter, Legal, Executive, Tabloid
   // Hard-code the paper sizes in inches (1 inch = 2.54 cm)
   // anPaperSizes[type][0] = width in portrait mode
   // anPaperSizes[type][1] = height in portrait mode
   var anPaperSizes = new Array();
   for (type = 0; type < PRINT_PAPER_TYPE_COUNT; type++){
      anPaperSizes[type]= new Array();
   }
   // A3 - 297mm x 420mm
   anPaperSizes[0][0] = 29.7 / 2.54;
   anPaperSizes[0][1] = 42 / 2.54;
   // A4 - 210mm x 297mm
   anPaperSizes[1][0] = 21 / 2.54;
   anPaperSizes[1][1] = 29.7 / 2.54;
   // A5 - 148mm x 210mm
   anPaperSizes[2][0] = 14.8 / 2.54;
   anPaperSizes[2][1] = 21 / 2.54;
   // B5 - 176mm x 250mm
   anPaperSizes[3][0] = 17.6 / 2.54;
   anPaperSizes[3][1] = 25 / 2.54;

   // Letter - 8.5 x 11 
   anPaperSizes[4][0] = 8.5;
   anPaperSizes[4][1] = 11;
   // Legal - 8.5 x 14
   anPaperSizes[5][0] = 8.5;
   anPaperSizes[5][1] = 14;
   // Executive - 7.25 x 10.5
   anPaperSizes[6][0] = 7.25;
   anPaperSizes[6][1] = 10.5;
   // Tabloid - 11 x 17
   anPaperSizes[7][0] = 11;
   anPaperSizes[7][1] = 17;
   var clLeftMargin = document.getElementById("LeftMargin");
   var clRightMargin = document.getElementById("RightMargin");
   var clTopMargin = document.getElementById("TopMargin");
   var clBottomMargin = document.getElementById("BottomMargin");
   var nBottomMargin;
   var nHeight;
   var nLeftMargin;
   var nPaperOrientation;
   var nPaperSize;
   var nRightMargin;
   var nTopMargin;
   var nWidth;
   var objTemp;
   var strMargins;
      
   // Validate print options
   if (!GPattern.test(clLeftMargin.value) || !GPattern.test(clRightMargin.value) || 
         !GPattern.test(clTopMargin.value) || !GPattern.test(clBottomMargin.value))
   {
      alert(resInvalidMargins);
      return false;
   }
   nLeftMargin = parseFloat(clLeftMargin.value);
   nRightMargin = parseFloat(clRightMargin.value);
   nTopMargin = parseFloat(clTopMargin.value);
   nBottomMargin = parseFloat(clBottomMargin.value);            
   if ( (isNaN(nLeftMargin)) || (isNaN(nRightMargin)) || (isNaN(nTopMargin)) || (isNaN(nBottomMargin))) {
      alert(resInvalidMargins);
      return false;
   }
   if (nLeftMargin < 0 || nRightMargin < 0 || nTopMargin < 0 || nBottomMargin < 0) {
      alert(resInvalidMargins);
      return false;
   }
   // Get the orientation
   nPaperOrientation = (document.aspnetForm.Orientation[0].checked == true ? 0 : 1);
   
   // Get the paper size
   objTemp = document.getElementById("PaperSize");
   nPaperSize = objTemp.options[objTemp.selectedIndex].value;
   
   // Validate the margins
   if (nPaperOrientation == 0) { 
      nWidth = anPaperSizes[nPaperSize][0] - nLeftMargin - nRightMargin;
      nHeight = anPaperSizes[nPaperSize][1] - nTopMargin - nBottomMargin;
   }
   else {
      nWidth = anPaperSizes[nPaperSize][1] - nLeftMargin - nRightMargin;
      nHeight = anPaperSizes[nPaperSize][0] - nTopMargin - nBottomMargin;
   }
   if ((nWidth <= 0) || (nHeight <= 0)) {
      alert(resMarginsTooBig);
      return false;
   }
   strMargins = nLeftMargin + ",";
   strMargins += nRightMargin + ",";
   strMargins += nTopMargin + ",";
   strMargins += nBottomMargin;

   document.aspnetForm.PrintOrientation.value = nPaperOrientation;
   document.aspnetForm.PrintPaperSize.value = nPaperSize;
   document.aspnetForm.PrintMargins.value = strMargins;
   return true;
}


