
/* sccs id = "@(#)sdautils.js 33.1.30    05/01/09"; */

function isBadBrowser()
{
   // All recent versions of the major browsers now appear to work:
   // Windows: IE and Firefox, Mac: Safari and Firefox, Linux: Firefox

   return false;  
}

function createXmlHttpRequest()
{
   var request = false;
   try 
   {
      request = new XMLHttpRequest();
   } 
   catch(e)
   {
      try
      {
         request = new ActiveXObject("Msxml2.XMLHTTP");
      }
      catch(e2)
      {
         try
         {
            request = new ActiveXObject("Microsoft.XMLHTTP");
         }
         catch(e3)
         {
            request = false;
         }
      }
   }
   return request;
}

function urlExists(url)
{
   var request = createXmlHttpRequest();
   if ( ! request )
   {
      return false;
   }

   try
   {
      request.open("HEAD", url, false);   // false == synchronous mode
   }
   catch(e)
   {
      return false;
   }

   request.send(null);

   if ( request.status == 200 )
   {
      return true;
   }
   else
   {
      return false;
   }
}

function loadFrames(url1, url2)
{
   top.frames["tf"].location.replace(url2);
   top.frames["tblform"].location.replace(url1);

   return false;
}

function progNumToName( programNum )
{
   var program = '';

   if ( programNum == 1 )
      program = 'tables';
   else if ( programNum == 2 )
      program = 'means';
   else if ( programNum == 3 )
      program = 'corrtab';
   else if ( programNum == 4 )
      program = 'correl';
   else if ( programNum == 5 )
      program = 'regress';
   else if ( programNum == 6 )
      program = 'logit';
   else if ( programNum == 7 )
      program = 'listcase';
   else if ( programNum == 8 )
      program = 'recode';
   else if ( programNum == 9 )
      program = 'compute';
   else if ( programNum == 20 )
      program = 'download';
   else if ( programNum == 21 )
      program = 'subset';

   return program;
}

function loadProgFrames( programNum )
{
   var program = progNumToName( programNum )
   var formLink = top.hsda2link + '&action=' + program;

   top.tf.programChange( programNum );
   top.frames["tblform"].location.replace(formLink);
}

function listvars( idxstring )
{
   var h2link = top.hsda2link;
   var formLink = h2link + '&action=listvars';
   if ( arguments.length > 0 )
   { 
      formLink += '_study(';
      formLink += idxstring;
      formLink += ')';
   }
   listvarsWindowOpen(formLink);
}

function subset()
{
   var h2link = top.hsda2link;
   var formLink = h2link + '&action=subset';
   subsetWindowOpen(formLink);
}

var descWindow = null;
function viewVar(varname,win)
{
   var topwin = top;  // default
   if ( arguments.length > 1 )
   {
      topwin = win;
   }

   var descurl = topwin.cgibinurl + '/' + topwin.hsda3name + '?';

   var extra = 'sdaprog=describe';
   extra += '&var=' + encodeURIComponent(varname);
   extra += '&sdapath=' + encodeURIComponent(topwin.sdapath);

   var tmpstudy = topwin.study;
   if ( topwin.userstudypath.length > 0 )
   {
      tmpstudy += ' ';
      tmpstudy += topwin.userstudypath;
   }
   extra += '&study=' + encodeURIComponent(tmpstudy);

   if ( topwin.varcase.length > 0 )
   {
      extra += '&varcase=' + encodeURIComponent(topwin.varcase);
   }

   extra += '&subtmpdir=' + encodeURIComponent(topwin.subtmpdir);

   descurl += extra;

   var basewinopts = "toolbar=1,location=1,directories=0,status=1,menubar=1,scrollbars=1,resizable=1,";
   var sizewinopts = getNewNarrowWinSizeOpts(15);
   var winfeatures = basewinopts + sizewinopts;

   descWindow=window.open(descurl,'_blank',winfeatures);
   if(window.focus)
   {
     descWindow.focus();
   }
}

function createFrameset( analysisSrc )
{
   var menupage = top.jscripturl + "/menu.htm";
   var varselpage = top.jscripturl + "/varsel.htm";
   var treepage = top.jscripturl + "/tree.htm";

   var fs = '';
   fs += '<frameset onload="maximizeWindow()" rows="100,*" border="0">\n';
   fs += '   <frame src=';
   fs += menupage;
   fs += ' name="menubar" id="menubar" title="menu for selecting programs" scrolling="Auto" frameborder="1" marginwidth="0" marginheight="5">\n';
   fs += '   <frameset cols="35%,*" border="0">\n';
   fs += '      <frameset rows="180,*" border="0">\n';
   fs += '         <frame src=';
   fs += varselpage;
   fs += ' name="tf" id="tf" title="variable manipulation options" scrolling="Auto" frameborder="1" marginwidth="0" marginheight="5">\n';
   fs += '         <frame src=';
   fs += treepage;
   fs += ' name="tree" id="tree" title="tree menu for selecting variables" scrolling="Auto" frameborder="1" marginwidth="0" marginheight="5">\n';
   fs += '      </frameset>\n';
   fs += '      <frame src="' + analysisSrc + '" name="tblform" id="tblform" title="analysis options form" scrolling="Auto" frameborder="1" marginwidth="0" marginheight="0">\n';
   fs += '   </frameset>\n';
   fs += '</frameset>\n';

   return fs;
}

////////// Window creation/sizing /////////

function getWname(prefix)
{
   var dname = top.datasetname;
   dname = dname.replace(/[^a-zA-Z0-9]/g,''); 
   var wname = prefix + dname;
   return wname;
}

// Absolute limits on SDA window dimensions (pixels)
var winWidthLimit = 1600;
var winHeightLimit = 1024;

function getMaxWinWidth()
{
   if ( screen.availWidth < winWidthLimit )
      return screen.availWidth;
   else
      return winWidthLimit;
}

function getMaxWinHeight()
{
   if ( screen.availHeight < winHeightLimit )
      return screen.availHeight;
   else
      return winHeightLimit;
}

function maximizeWindow()
{
   window.moveTo(0,0);
   window.resizeTo(getMaxWinWidth() - 5, getMaxWinHeight() - 5);
}

function getNewWinSizeOpts()
{
   var left = parseInt(150);
   var top = parseInt(25);
   var width = parseInt(getMaxWinWidth() - 200);
   var height = parseInt(getMaxWinHeight() - 200);

   var sizewinopts = "width=" + width + ",height=" + height + ",left=" + left + ",top=" + top;

   return sizewinopts;
}

function getNewNarrowWinSizeOpts(offset)
{
   addOffset = 0;
   if ( arguments.length > 0 )
   {
      addOffset = offset;
   }
   var left = parseInt(300 + addOffset);
   var top = parseInt(25 + addOffset);
   var width = parseInt(getMaxWinWidth() - 350);
   var height = parseInt(getMaxWinHeight() - 200);

   var sizewinopts = "width=" + width + ",height=" + height + ",left=" + left + ",top=" + top;

   return sizewinopts;
}

var cbkWin = null;
function cbkWindow( url )
{
   var basewinopts = "toolbar=1,location=1,directories=0,status=1,menubar=1,scrollbars=1,resizable=1,";
   var sizewinopts = getNewWinSizeOpts();
   var winfeatures = basewinopts + sizewinopts;
   
   var wname = getWname('cbkwin');
   cbkWin=window.open(url,wname,winfeatures);
   if(window.focus)
   {
      cbkWin.focus()
   }
}

function showCodebook( index )
{
   cbkWindow( top.codebookurl[index] );
}

var searchWindow = null;
function searchWindowOpen( url )
{
   var basewinopts = "toolbar=1,location=1,directories=0,status=1,menubar=1,scrollbars=1,resizable=1,";
   var sizewinopts = getNewWinSizeOpts();
   var winfeatures = basewinopts + sizewinopts;

   var wname = getWname('sdasearch');
   searchWindow=window.open(url,wname,winfeatures);
   if(window.focus)
   {
      searchWindow.focus()
   }
}

function showSearch( searchTerm )
{
   var url = top.searchurl;

   if ( arguments.length > 0 )
   {
	url += '&query=' + encodeURIComponent(searchTerm);
   }
   searchWindowOpen( url );
}

var helpWindow = null;
function helpWindowOpen( url )
{
   var basewinopts = "toolbar=1,location=1,directories=0,status=1,menubar=1,scrollbars=1,resizable=1,";
   var sizewinopts = getNewWinSizeOpts();
   var winfeatures = basewinopts + sizewinopts;

   var wname = getWname('sdahelp');
   helpWindow=window.open(url,wname,winfeatures);
   if(window.focus)
   {
      helpWindow.focus()
   }
}

function showHelp()
{
   helpWindowOpen( top.helpgourl );
}

var listvarsWindow = null;
function listvarsWindowOpen( formLink )
{
   // alert( "In listvarsWindow() formLink = " + formLink );
   // Note: Firefox can't handle relative script URL when opening a new window
   // so we must pass a full path starting with protocol. IE works fine with
   // just a relative script path URL however.

   var basewinopts = "toolbar=1,location=1,directories=0,status=1,menubar=1,scrollbars=1,resizable=1,";
   var sizewinopts = getNewNarrowWinSizeOpts();
   var winfeatures = basewinopts + sizewinopts;

   var wname = getWname('lswin');
   listvarsWindow=window.open(formLink,wname,winfeatures);
   if(window.focus)
   {
     listvarsWindow.focus();
   }
}

function getSubsetWinSizeOpts()
{
   var left = parseInt(50);
   var top = parseInt(25);
   var width = parseInt(getMaxWinWidth() - 150);
   var height = parseInt(getMaxWinHeight() - 200);

   var sizewinopts = "width=" + width + ",height=" + height + ",left=" + left + ",top=" + top;

   return sizewinopts;
}

var subsetWindow = null;
function subsetWindowOpen( formLink )
{
   var basewinopts = "toolbar=1,location=1,directories=0,status=1,menubar=1,scrollbars=1,resizable=1,";
   var sizewinopts = getSubsetWinSizeOpts();
   var winfeatures = basewinopts + sizewinopts;

   var wname = getWname('subsetwin');
   subsetWindow=window.open(formLink,wname,winfeatures);
   if(window.focus)
   {
     subsetWindow.focus();
   }
}


