window.onload = function() {
  for (var i=0; i< document.links.length; i++) {
    if(document.links[i].protocol == "javascript:") {
      document.links[i].onmouseover = function () { window.status = ''; return true; }
    }
  }
}

function show(elementName) {
  var element = document.getElementById(elementName);
  element.style.display = '';
}

function hide(elementName) {
  var element = document.getElementById(elementName);
  element.style.display = 'none';
}

function showHide(elementName, imageName) {
  var element = document.getElementById(elementName);
  var image = document.getElementById(imageName);
  
  fields = new String(getField('show'));  
  if(element.style.display == 'none') {
    show(elementName);  
    if(image) image.src='/collapse.gif';
    if(fields.length) { fields += ',' + elementName; }
    else { fields = elementName; }
  } else {
    hide(elementName);
    if(image) image.src='/expand.gif';
    var re = new RegExp('^'+elementName+',?');
    fields = fields.replace(re,'');
    re = new RegExp(','+elementName);
    fields = fields.replace(re,'');
  }
  updateField('show', fields);
}

function launch(webpage, height, width) {
  var leftPos = (screen.availWidth-width)/2;
  var topPos = (screen.availHeight-height)/2;

  var popUp = window.open(webpage, '_blank', 'height=' + height + ',width=' + width + ',top='+topPos+',left=' + leftPos + ',scrollbars=1');
}

// BILLING_UPDATE (invoice => quoteId? can this be done on invoices too?)
function phonesquote(account,invoice) {
  if(account==null)
    account=0;
  if(invoice==null)
    invoice=0;
  launch("/employee/phonesystems/quotepop/index.php?account="+account+"&invoice="+invoice,350,425);
}

function jobsearch(fields) {
  setFields = fields;
  launch("/employee/job/search.php",350,425);
}

function jobedit(job,fields) {
  setFields = fields;
  if(!job) { job=''; }
  launch("/employee/job/edit.php?jobId="+job,350,425);
}

function accountdetail(account) {
  launch("/employee/account/detail.php?account="+account,350,425);
}

function accountedit(account, fields) {
  setFields = fields;
  if(!account) { account = ''; }
  launch("/employee/account/edit.php?account="+account,350,425);
}

var setFields = null;
function accountsearch(fields) {
  setFields = fields;
  launch("/employee/account/search.php",350,425);
}

function inventorysearch(fields, service, manufacturer) {
  setFields = fields;
  if(!service) { service = ''; }
  if(!manufacturer) { manufacturer = ''; }
  
  launch("/employee/inventory/search.php?service="+service+"&manufacturer="+manufacturer,260,350);
}

function inventoryedit(itemId) {
  if(!itemId) { itemId = ''; }
  launch("/employee/inventory/edit.php?itemId="+itemId,300,500);
}

function altaddressuse(fields, accountId) {
  setFields = fields;
  launch("/phone_systems/schedule/choosesubaccount.php?accountId="+accountId,750,800);
}

function refreshParent() {
  var submitForm = window.opener.document.submitForm;
  if(submitForm != undefined) { submitForm.submit(); }
}

// added by jim 
function refreshFoo() { 
  opener.document.foo.submit() ; 
  window.close() ; 
  return false ;  
}

function now(){
    window.location.reload(true);
}


function refreshParent2() {
  var submitForm2 = window.opener.document.submitForm2;
  if(submitForm2 != undefined) { submitForm2.submit(); }
}

function jobUpdateParent(jobId) {
  var setFields = window.opener.setFields;
  if(setFields != undefined) {
    for (var i=0; i < setFields.length; i=i+2) {
      var parent = window.opener.document;
      var parentField = setFields[i+1];
      var fieldValue = eval(setFields[i]);
      
      // Need to do error checking on fieldValue later
      
      if(parentField) {
       	updateField(parentField, fieldValue, parent);
      }
      else {
        alert("One of the fields was invalid");
      }
    }
  }
  
  refreshParent();
  window.close();
}


function accountUpdateParent(accountId, accountCompany, accountCustomer, accountFirstName, accountLastName, accountPhone, accountFax, accountEmail) {
  var setFields = window.opener.setFields;
  if(setFields != undefined) {
    for (var i=0; i < setFields.length; i=i+2) {
      var parent = window.opener.document;
      var parentField = setFields[i+1];
      var fieldValue = eval(setFields[i]);
      
      // Need to do error checking on fieldValue later
            
      if(parentField) {
       	updateField(parentField, fieldValue, parent);
      }
      else {
        alert("One of the fields was invalid");
      }
    }
  }
  
  refreshParent();
  window.close();
}

function inventoryUpdateParent(itemId, itemPartNumber, itemName, itemManufacturer, itemDescription, itemPrice, itemSupplier) {
  var setFields = window.opener.setFields;
  if(setFields != undefined) {
    for (var i=0; i < setFields.length; i=i+2) {
      var parent = window.opener.document;
      var parentField = setFields[i+1];
      var fieldValue = eval(setFields[i]);
      
      // Need to do error checking on fieldValue later
      
      if(parentField) {
      	updateField(parentField, fieldValue, parent);
      }
      else {
        alert("One of the fields was invalid");
      }
    }
  }
  
  refreshParent();
  window.close();
}

function useNewAddressUpdateParent(useId, accountId, useFirstName, useLastName, useCompany, useAddress, useSuite, useCity, useState, useZip) {
  
  var setFields = window.opener.setFields;
  if(setFields != undefined) {
    for (var i=0; i < setFields.length; i=i+2) {
      var parent = window.opener.document;
      var parentField = setFields[i+1];
      var fieldValue = eval(setFields[i]);
      // Need to do error checking on fieldValue later
	
      if(parentField) {
        updateField(parentField, fieldValue, parent);
      }
      else {
        alert("One of the fields was invalid");
      }
    }
  }

  refreshParent();
  window.close();
}


function getField(fieldName, doc) {
  if(doc == undefined) { doc = document; }
  var element = doc.getElementById(fieldName);
  if(element) {
    return getElement(element);
  }
  var elements = doc.getElementsByName(fieldName);
  if(elements) {
    var value;
    for(var i = 0; i < elements.length; i++) {
      if(value != undefined) { value += "," + getElement(elements[i]); }
      else { value = getElement(elements[i]); }
    }
    return value;
  }
  return null;
}

function getElement(element, value) {
  if(element.selectedIndex != undefined) { return element.options[element.selectedIndex].value; }
  else if(element.value != undefined) { return element.value; }
  else if(element.innerHTML != undefined) { return element.innerHTML; }
  else { return null; }
}

function updateField(fieldName, value, doc) {
  if(doc == undefined) { doc = document; }
  var element = doc.getElementById(fieldName);
  if(element) {
    updateElement(element, value);
  }
  var elements = doc.getElementsByName(fieldName);
  if(elements) {
    for(var i = 0; i < elements.length; i++) {
      updateElement(elements[i], value);
    }
  }
}

function updateElement(element, value) {
  if(element.selectedIndex != undefined) {
    element.selectedIndex = 0;
    for(var k=0; k < element.options.length; k++) {
      if(element.options[k].value == value) {
        element.selectedIndex = k;
        break;
      }
    }
  }
  else if(element.value != undefined) { element.value = value; }
  else if(element.innerHTML != undefined) { element.innerHTML = value; }
}

function popUp(webpage, height, width) {
  var win = window.open(webpage, null, 'height=' + height + ',width=' + width + ',directories=0,location=0,menubar=0,resizable=0,scrollbars=0,status=0,toolbar=0');
}

// ToolTips

var toolTip = document.createElement('DIV');

function destroyToolTip() {
  document.onmousemove = null;
  if(toolTip) {
    toolTip.style.visibility = 'hidden';
    //
    // There's an error when you mouse over
    // the tooltip before it's destroyed
    //
    //document.body.removeChild(toolTip);
  }
}

function createToolTip(item, title, text) {
  if(toolTip) {
    toolTip.innerHTML = "<table class='toolTip' cellspacing=0 cellpadding=0>" +
      "<tr><td class='toolTip'>" + title + "</font></td></tr>" +
      "<tr><td>" + text + "</font></td></tr>" +
      "</table>";
    document.body.appendChild(toolTip);
    toolTip.style.position = 'absolute';
    
    
    document.onmousemove = moveToolTip;
    item.onmouseout = destroyToolTip;
  }
}

function moveToolTip(e) {
  if( !e ) {
    if( window.event ) {
      //Internet Explorer
      e = window.event;
    } else {
      //total failure, we have no way of referencing the event
      return;
    }
  }
  if( typeof( e.pageX ) == 'number' ) {
    //most browsers
    var xcoord = e.pageX;
    var ycoord = e.pageY;
  } else if( typeof( e.clientX ) == 'number' ) {
    //Internet Explorer and older browsers
    //other browsers provide this, but follow the pageX/Y branch
    var xcoord = e.clientX;
    var ycoord = e.clientY;
    var badOldBrowser = ( window.navigator.userAgent.indexOf( 'Opera' ) + 1 ) ||
      ( window.ScriptEngine && ScriptEngine().indexOf( 'InScript' ) + 1 ) ||
      ( navigator.vendor == 'KDE' );
    if( !badOldBrowser ) {
      if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
        //IE 4, 5 & 6 (in non-standards compliant mode)
        xcoord += document.body.scrollLeft;
        ycoord += document.body.scrollTop;
      } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
        //IE 6 (in standards compliant mode)
        xcoord += document.documentElement.scrollLeft;
        ycoord += document.documentElement.scrollTop;
      }
    }
  } else {
    //total failure, we have no way of obtaining the mouse coordinates
    return;
  }  
  
  if(toolTip) {
    //toolTip.style.top = ycoord + document.body.scrollTop;
    toolTip.style.top = ycoord;
    //toolTip.style.left = xcoord + 15;
    toolTip.style.left = xcoord;
    toolTip.style.visibility = 'visible';
  }     
  return;
}



function moveToolTipx(e) {
  if(!e) {  // IE
    e = event;
  }
  if(toolTip) {
    toolTip.style.top = e.clientY + document.body.scrollTop;
    toolTip.style.left = e.clientX + 15;
    toolTip.style.visibility = 'visible';
  }
}

function findPosX(obj) {
	var curleft = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curleft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	}
	else if (obj.x)
		curleft += obj.x;
	return curleft;
}

function findPosY(obj) {
	var curtop = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	}
	else if (obj.y)
		curtop += obj.y;
	return curtop;
}

var calendar = document.createElement('DIV');
function createCalendar(field) {
  if(calendar.style.visibility == 'visible') {
    calendar.style.visibility = 'hidden';
  }
  else {
    drawCalendar(field);
    document.body.appendChild(calendar);
    calendar.style.position = 'absolute';
	e = document.getElementsByName(field)[0];
    calendar.style.top = findPosY(e) + 25;
    calendar.style.left = findPosX(e) + 25;
    calendar.style.visibility = 'visible';
  }
}

function drawCalendar(field, d) {
  if(d) { var date = new Date(d); }
  else { var date = new Date(); }
  date.setDate(1);
  
  var x = date.getDate() - date.getDay();
  
  var today=new Date();

  var months = new Array("January","February","March","April","May","June","July","August","September","October","November","December");
  var days = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
  
  var month = date.getMonth();
  var monthDays = days[month];
  var monthWeeks = Math.ceil((Math.abs(x) + 1 + monthDays) / 7);

  var calString = "<TABLE BGCOLOR='#FFFFFF' CELLSPACING='2' CELLPADDING='0' STYLE=\"border:1px solid black;\">\n";
  calString += "<TR BGCOLOR='#00539F'>\n";
  calString += "<TD CLASS=\"cal_head\"><A HREF=\"javascript:drawCalendar('" + field + "' , " + (date.getTime() - 20 * 86400000) + ")\" CLASS=\"cal_head\">\<</A></TD>\n";
  calString += "<TD COLSPAN='5' CLASS=\"cal_head\">" + months[date.getMonth()] + " " + date.getFullYear() + "</TD>\n";
  calString += "<TD CLASS=\"cal_head\"><A HREF=\"javascript:drawCalendar('" + field + "' , " + (date.getTime() + 40 * 86400000) + ")\" CLASS=\"cal_head\">\></A></TD>\n";
  calString += "</TR>\n";
  calString += "<TR>\n";
  calString += "<TD BGCOLOR='#EAEAEA' ALIGN=\"center\"><B>S</B></TD>\n";
  calString += "<TD ALIGN=\"center\"><B>M</B></TD>\n";
  calString += "<TD ALIGN=\"center\"><B>T</B></TD>\n";
  calString += "<TD ALIGN=\"center\"><B>W</B></TD>\n";
  calString += "<TD ALIGN=\"center\"><B>T</B></TD>\n";
  calString += "<TD ALIGN=\"center\"><B>F</B></TD>\n";
  calString += "<TD BGCOLOR='#EAEAEA' ALIGN=\"center\"><B>S</B></TD>\n";
  calString += "</TR>\n";
  for(var i = 0; i < monthWeeks; i++) {
    calString += "<TR>\n";
    for(var j = 0; j < 7; j++) {
      if(date.getYear()==today.getYear() && date.getMonth==today.getMonth()) { calString += "<TD BGCOLOR=\"#000000\" STYLE=\"border: 1px solid #EAEAEA;\">\n"; }
      else if(j == 0 || j == 6) { calString += "<TD BGCOLOR=\"#EAEAEA\" STYLE=\"border: 1px solid #EAEAEA;\">\n"; }
      else { calString += "<TD STYLE=\"border: 1px solid #EAEAEA;\">\n"; }
      if((x > 0) && (x <= monthDays)) {
        calString += "<A CLASS=\"cal_day\" HREF=\"javascript:calendar.style.visibility = 'hidden'; updateField('" + field + "','" + date.getFullYear() + "-" + (date.getMonth()+1) + "-" + x + "');\">" + x;
        if(x<10) calString+= "  "
        calString+="</A>";
      }
      else { calString += "<SPAN CLASS=\"cal_day\"> </SPAN>"; }
      x++;
      calString += "</TD>\n";
    }
    calString += "</TR>\n";
  }
  calString += "</TABLE>\n";
  calendar.innerHTML = calString;
}
