/*================================================

RIGSTAR Content Software
(c) 2007 Steven Kendall (steve@rigstar.com)
Programmed By Eric Ciocca (eric@ericciocca.com)

This file may not be used, copied, or modified without
permission from the code's owner.

Filename: common.js

Description: Commonly-used Javascript Functions

================================================*/

function ArraySearch(needle, haystack)
{
  var retval = -1;
  for (var idx in haystack)
    {
      if (haystack[idx]==needle)
        return idx;
    }
}


function SetSelectByValue(selectBox, value)
{
	for (var i=0; i < selectBox.length; ++i)
	{
	 if (selectBox.options[i].value==value)
		selectBox.selectedIndex = i;
	}
}

function GetSelectValue(selectBox)
{
	return (selectBox)?selectBox.options[selectBox.selectedIndex].value:"";
}

function GetSelectText(selectBox)
{
	return (selectBox)?selectBox.options[selectBox.selectedIndex].text:"";
}


function SetChecked(checkbox, ischecked)
{
	checkbox.checked = ischecked;
}

function SetCheckByValue(checkboxGroup, value, ischecked)
{
 for (var j=0; j < checkboxGroup.length; ++j)
 {	
  if (checkboxGroup[j].value == value)
  {
    checkboxGroup[j].checked = ischecked;
  }  
 }
}

function SetChecksByValue(checkboxGroup, values)
{
 for (var j=0; j < checkboxGroup.length; ++j)
 {
  checkboxGroup[j].checked = false;
  if (values)
  {	
   for (var i=0; i < values.length; ++i)
   {
	if (checkboxGroup[j].value == values[i])
	{
	 checkboxGroup[j].checked = true;
	}
   }
  }
 }
}


var gDateDOW = Array("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday");

//make a string safe for various XML transactions
function SAFESTRING(str)
{
  if ((str)&&(str!=undefined))
    {
      str = str.toString();
      str = str.replace(/&/g,"&amp;");
      str = str.replace(/'/g,"&apos;");
      str = str.replace(/</g,"&lt;");
      str = str.replace(/>/g,"&gt;");
    }
  return str;
}


function ValidateEmail(email)
{
	var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	return filter.test(email);
}

function ToDate(ts)
{
  if ((!ts)||(ts==undefined)||(ts.length == 0))
	return "";
  var D;
  D = new Date(ts*1000);
  return (D.getUTCMonth()+1)+"/"+D.getUTCDate()+"/"+D.getUTCFullYear();  
}

function ToTime(ts)
{
  if ((!ts)||(ts==undefined)||(ts.length == 0))
	return "";
  var D;
  D = new Date(ts*1000);
  var ampm = (D.getUTCHours()<12)?"am":"pm";
  return ValidateTime(D.getUTCHours()+":"+D.getUTCMinutes()+ampm);  
}

function MakeGMTTS(yr, mo, da, hr, mn, se)
{
 return (Date.UTC(yr, mo, da, hr, mn, se))/1000.0;
}

function CombineTSParts(gmbase, inttime)
{
 var D = new Date(gmbase * 1000);
 var mn = inttime % 100;
 var hr = (inttime - mn)/100;
 return MakeGMTTS(D.getUTCFullYear(), D.getUTCMonth(), D.getUTCDate(), hr, mn, 0);
}

function MakeGMTBase(ts)
{
//hack this - pass in the timestamp, but force it to midnight.	
	return CombineTSParts(ts, 0);
}

function ToLocalDate(ts)
{
  if ((!ts)||(ts==undefined)||(ts.length == 0))
	return "";
  var D;
  D = new Date(ts*1000);
  return (D.getMonth()+1)+"/"+D.getDate()+"/"+D.getFullYear();  
}

function ToLocalTime(ts)
{
  if ((!ts)||(ts==undefined)||(ts.length == 0))
	return "";
  var D;
  D = new Date(ts*1000);
  var min = (D.getMinutes()<10)?"0"+(D.getMinutes()):(D.getMinutes());
  var tag = "am";
  var hr = D.getHours();
	if (hr == 0) hr = 12;
	else if (hr > 12) { hr -= 12; tag = "pm"; }
  return hr+":"+min+tag;
}

function DiffInternalTime(timeStr1, timeStr2)
{
	time1 = parseInt(timeStr1);
	time2 = parseInt(timeStr2);

	if ((time1<0)||(time2<0))
		return false;

	var hh1 = (time1 - (time1%100))/100;
	var mm1 = (time1%100);
	var hh2 = (time2 - (time2%100))/100;
	var mm2 = (time2%100);
	var dhh = hh2 - hh1;
	var dmm = mm2 - mm1;
	if (dmm < 0) { dmm += 60; dhh -= 1; }
	if (dhh < 0) dhh += 24;

	return new Object({hours:dhh, minutes:dmm});
}

function FromInternalTime(timeStr)
{
 if ((!timeStr)||(timeStr==undefined)||(timeStr.length<1)) return "";
 while (timeStr.length < 4) timeStr = "0" + timeStr;
 var retval = "";
 var timePat = /^(\d{1,2})(\d{2})$/;
 var matchArray = timeStr.match(timePat);
 if (matchArray != null) 
 {
  var hour = matchArray[1];
  var ampm = (hour >= 12)?"pm":"am";
  var cv = matchArray[1] + ":" + matchArray[2] + ampm;
  retval = ValidateTime(cv);
 }
 return retval;
}

function ToInternalTime(timeStr)
{
var retval = false;

var cv = ValidateTime(timeStr);
if (cv)
{
 var timePat = /^\s*(\d{1,2})(?::(\d{1,2})(:(\d{2}))?)?(\s?(AM|am|PM|pm))?\s*$/;
 var matchArray = cv.match(timePat);
 if (matchArray != null) 
 {
	hour = matchArray[1];
	if (hour==undefined) hour = "00";

	minute = matchArray[2];
	if (minute==undefined) minute = "00";
	if (minute.length<2) minute = "0" + minute;

	ampm = matchArray[6];

	if ((hour*1) < 12 && ampm=="pm") hour = (hour*1) + 12;
	else if (hour=="12" && ampm=="am") hour = "00";

	if (hour.length<2) hour = "0" + hour;
	retval = hour.toString() + minute.toString();
 } 
}
return retval;
}

//returns FALSE or corrected value
function ValidateTime(timeStr)
{	
var retval = false;
var timePat = /^\s*(\d{1,2})(?::(\d{1,2})(:(\d{2}))?)?(\s?(AM|am|PM|pm))?\s*$/;
	
var matchArray = timeStr.match(timePat);
if (matchArray != null) 
{

	hour = matchArray[1];
	if (hour==undefined) hour = "0";

	minute = matchArray[2];
	if (minute==undefined) minute = 0;
	minute = minute % 60;
	if (minute.toString().length<2) minute = "0" + minute.toString();

	second = matchArray[4];
	ampm = matchArray[6];
	if (ampm==undefined) ampm = "am";

	//correct military time
	hour = hour % 24;
	if (hour == 0) hour = 12;	
	else if (hour > 12) { hour -= 12; ampm = "pm"; }

	retval = hour + ":" + minute + ampm.toLowerCase();
}
return retval;
}


function FixRounding(mnt)
{
mnt -= 0;
//nudge any floating errors
mnt += 0.00001; 
return (Math.round((mnt*1000)/10)/100);
}

function ToMoney(mnt)
{
    mnt -= 0;
    mnt = (Math.round((mnt*1000)/10))/100;
    return (mnt == Math.floor(mnt)) ? mnt + '.00'
              : ( (mnt*10 == Math.floor(mnt*10)) ?
                       mnt + '0' : mnt);

    return mnt;
}


function findPos(obj)
{
var offsetTrail = obj;
var offsetLeft = 0;
var offsetTop = 0;
var offsetWidth = offsetTrail.offsetWidth;
var offsetHeight = offsetTrail.offsetHeight;
while (offsetTrail){
offsetLeft += offsetTrail.offsetLeft;
offsetTop += offsetTrail.offsetTop;
offsetTrail = offsetTrail.offsetParent;
}
return {left:offsetLeft,top:offsetTop,width:offsetWidth,height:offsetHeight};
}

function MoveToAnchor(obj, anchor)
{
  var coors = findPos(anchor);
  var calheight = parseInt(obj.offsetHeight);
  var calwidth = parseInt(obj.offsetWidth);
  if ((coors["top"] - calheight) > 0)
    obj.style.top = (coors["top"] - calheight) + 'px';
  else
    obj.style.top = coors["top"] + 'px';

  if (coors["left"]+calwidth > document.body.clientWidth)
    obj.style.left = (coors["left"]-calwidth) + 'px';  
  else 
    obj.style.left = (coors["left"]+coors["width"]) + 'px';


}

