/* Begin Utils */
function openOnOpenerWindow(url) {
alert("in openOnOpenerWindow");
alert(url);
	opener.location.href=url;
}

function selectRow(row) {
	allRows = row.parentNode.childNodes;
	for (i=0;i<allRows.length;i++) {
		allTds = allRows[i].childNodes;
		className = "COLLECTION";
		if (allRows[i]==row) {
			className = "SELECTED";
		}
		for (j=0;j<allTds.length;j++) {
			allTds[j].className = className;
		}
	}
	if (row.firstChild && row.firstChild.firstChild && row.firstChild.firstChild.type == "radio") {
		row.firstChild.firstChild.click();
	}
}

function popupDialog(url, width, height) {
	window.showModalDialog(url, "dialogHeight:"+height+";dialog:Width:"+width+";center:yes;resizable:yes;scroll:yes;status:yes;unadorned:no;");
}
function disableTable(table) {
    var rows = table.rows;
    for(var rowCount = 0; rowCount < table.rows.length; rowCount++) {
        disableRow(table.rows[rowCount]);
    }
}

function disableRow(row) {
	var selects = row.getElementsByTagName("select");
	for (var i = 0; i < selects.length; i++) {
		selects[i].disabled = true;
	}
	var inputs = row.getElementsByTagName("input");
	for (var i = 0; i < inputs.length; i++) {
        inputs[i].disabled = true;
	}
}

function helpwindow(url) {
    popupwin = window.open(url, 'njglossary','scrollbars,status,resizable,dependent,width=700,height=300,center=yes,middle=yes');
}

function helpWindow(url) {
	return window.open(url, 'njglossary','scrollbars,status,resizable,dependent,width=700,height=300,center=yes,middle=yes');
}

function popupWindow(url) {
	return window.open(url, 'njpopup','scrollbars,status,resizable,dependent,width=800,height=600,center=yes,middle=yes');
}

// Performance enhancing popup windows --
function openWindow(url) {
    if (url!=null && url.length>0) {
        return window.open(url,'','menubar=no,status=yes,personalbar=no,titlebar=no,toolbar=no,resizable=yes,scrollbars=yes');
    }
}

function openWindow(url,width,height) {
    if (url!=null && url.length>0) {
        if (width!=null && width>100 && height!=null && height>100) {
            return window.open(url,'',"menubar=no,status=yes,personalbar=no,titlebar=no,toolbar=no,resizable=yes,scrollbars=yes,width="+width+",height="+height+"");
        } else {
            return window.open(url,'','menubar=no,status=yes,personalbar=no,titlebar=no,toolbar=no,resizable=yes,scrollbars=yes');
        }
    }
}
// Performance enhancing popup windows --END

function redirect(url) {
	document.location=url;
}

function setPropertyOnAllFormElements(form,property,value) {
	for(var i=0; i < form.elements.length; i++) {
		form.elements[i][property] = value;
	}
}


/* dataSet is an array of key value pairs with keys listed first */
function populateFormOnTargetScreenWithArray(targetScreen, targetForm, dataSet) {
	if(dataSet == null || dataSet.length % 2 != 0) {
		alert("Invalid data Set");
		return;
	}

	for(var i=0; i < dataSet.length; i+=2) {
		if(this[targetScreen].document[targetForm][dataSet[i]] != null)
			loadValues(this[targetScreen].document[targetForm][dataSet[i]], dataSet[i+1]);
	}
}

function loadValues (field, value) {
	if ((field.type != 'hidden')&&(field.type != 'submit')&&(field.type != 'button')&&(field.type != 'reset')&&(field.type != 'password')) {
		if ((field.type == 'text')||(field.type == 'textarea')) {
			field.value = value;
		}
		else if (field.type == 'checkbox') {
			if (field.value == value) {
				if (!field.checked) {
					field.click();
			  	}
			}
		}
		else if (field.type == 'select-one') {
			for (var i = 0; i < field.options.length; i++) {
				if (value == field.options[i].value) {
					field.selectedIndex = i;
					break
			  	}
			 }
		}
		else if (field[0].type == 'radio') {
			for (var i = 0; i < field.length; i++) {
				if (field[i].value == value) {
					field[i].click();
					break
				}
			}
		}
	}
}

/* End Utils */

/* Begin orderHistoryForm */

function validateOrderHistoryForm(form) {
var dateFrom = isFieldValidDate(form.dateFrom.value, false);
if (!dateFrom) {
	form.dateFrom.focus();
	alert('Please enter From date in the following format: mm/dd/yyyy');
	return false;
}
var dateTo = isFieldValidDate(form.dateTo.value, false);
if (!dateTo) {
	form.dateTo.focus();
	alert('Please enter To date in the following format: mm/dd/yyyy');
	return false;
}
}

/* End login form */


// check text input field for required length
function isFieldRequiredLength(field, requiredLength) {
  if(eval(requiredLength) > field.length) {
    return false;
  }
  else {
    return true;
  }
}

// checks if two text fields contain the same value
function isFieldEqual(field1, field2) {
  if(field1 == field2) {
    return true;
  }
  else {
    return false;
  }
}

// Check select input fields for selection
function isFieldSelected(field) {
  if (field == 0) {
    return false;
  }
  else {
    return true;
  }
}

function isFieldValidWholeNumber(field, alerts) {
  for(i = 0; i < field.length; i++) {
    if(((field.charAt(i) < '0') || (field.charAt(i) > '9'))) {
      if(alerts) {
        alert('Please enter a valid whole number.');
      }
      return false;
    }
  }
  return true;
}

function isFieldValidNumber(field, alerts) {
  var deciCount = 0;
  for(i = 0; i < field.length; i++) {
    if(field.charAt(i) == '.') {
      deciCount += 1;
    }
    if(((field.charAt(i) < '0') || (field.charAt(i) > '9')) && (field.charAt(i) != '.') || (deciCount > 1)) {
      if(alerts) {
        alert('Please enter a valid number.');
      }
      return false;
    }
  }
  return true;
}

// Check zipcode field
function isFieldValidZipcode(field, alerts) {
  if(field.length != 5) {
    if(alerts) {
      alert('Please enter a valid zipcode.');
    }
    return false;
  }
  // check to see if number is valid
  for(i = 0; i < field.length; i++) {
    if((field.charAt(i) < '0') || (field.charAt(i) > '9')) {
      if(alerts) {
        alert('Please enter a valid zipcode.');
      }
      return false;
    }
  }
  return true;
}

// Check email fields for a valid email address
function isFieldValidEmailAddress(field, alerts) {
  var periodIndex = field.indexOf('.');
  var newPeriodIndex;
  var atIndex = field.indexOf('@');
  var atSniffer = true;
  // Check for non-zero length
  if(field != '') {
    // Look for @
    if(atIndex != -1) {
      // Look for .
      if(periodIndex != -1) {
        // Make sure all . fit the right profile
        for(i = periodIndex; i < field.length; i++) {
          newPeriodIndex = field.indexOf('.', i);
          if(newPeriodIndex != -1) {
            periodIndex = newPeriodIndex;
            if((periodIndex - 1) == atIndex) {
              atSniffer = false;
            }
          }
        }
        // Look for one character after . and that the final period is after the @
        if((periodIndex != field.length - 1) && (periodIndex > atIndex) && atSniffer) {
          return true;
        }
      }
    }
  }
  if(alerts) {
    alert('Please enter a valid email address.');
  }
  return false;
}

// Check date field for valid date
function isFieldValidDate(field, alerts) {
  // Variables
  var dateLength = field.length;
  var month = parseFloat(field.substring(0,2));
  var day = parseFloat(field.substring(3,5));
  var year = parseFloat(field.substring(6,10));

  // Validate date; if not valid return false else return true
  if((field != '') && (field != null)) {
    // Check to see if date is correct length
    if(dateLength != 10) {
      if(alerts) {
        alert('Please enter date in the following format: mm/dd/yyyy');
      }
      return false;
    }
    // Look for correct format: xx/xx/xxxx with x being anumber
    else {
      for(i = 0; i < field.length; i++) {
        if((i != 2) && (i != 5)) {
          if((field.charAt(i) < '0') || (field.charAt(i) > '9')) {
            if(alerts) {
              alert('Please enter date in the following format: mm/dd/yyyy');
            }
            return false;
          }
        }
        else {
          if(field.charAt(i) != '/') {
            if(alerts) {
              alert('Please enter date in the following format: mm/dd/yyyy');
            }
            return false;
          }
        }
      }
    }
    // Check for a valid month
    if((month <= 0) || (month > 12)) {
      if(alerts) {
        alert('Please enter a valid month.');
      }
      return false;
    }
    // Check for a valid day (simplified)
    if((day <= 0) || (day > 31)) {
      if(alerts) {
        alert('Please enter a valid day.');
      }
      return false;
    }
    // Check for a valid year (simplified)
    if((year < 1800) || (year >2050)) {
      if(alerts) {
        alert('Please enter a valid year.');
      }
      return false;
    }
  }
  // If all is well return true
  return true;
}

function round(i) {
  i = Math.round(i * 100) / 100;
  i = (i + 0.001) + '';
  return i.substring(0, i.indexOf('.') + 3);
}

function isFieldValidYear(field, alerts) {
  if((field != null) && (field != '')) {
    if(field.length != 4) {
      if(alerts) {
        alert('Please enter a 4 digit year.');
      }
      return false;
    }
    else {
      for(i = 0; i < field.length; i++) {
        if((field.charAt(i) < '0') || (field.charAt(i) > '9')) {
          if(alerts) {
            alert('Please enter a valid year.');
          }
          return false;
        }
      }
      var year = parseInt(field);
      if((year < 1800) || (year > 2050)) {
        if(alerts) {
          alert('Please enter a year between 1800 and 2050.');
        }
        return false;
      }
    }
  }
  return true;
}

/* End Registration */



/* Begin Order Process */

daysOfWeek = ['','Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'];

function getMinuteOfDayOptions(val) {
	document.writeln('<option value="-1">Now</option>');
	for (var hr=0.00; hr<24; hr+=0.25) {
		hour = Math.floor(hr%12);
		if (hour==0) { hour=12; }
		min = Math.floor(60*((hr%12)%1));
		timetxt = "" + hour + ":" + (min<10?"0":"") + min + (hr>=12?" pm":" am");
		document.write("<option value=\"" + timetxt + "\"");
		if (timetxt==val) {
			document.write(" selected");
		}
		document.writeln(">" + timetxt + "</option>");
	}
}

function getDayOfWeekOptions(val) {
	document.write("<option value=\"-1\">Today</option>");
	for (var c=1; c<daysOfWeek.length; c++) {
		document.write("<option value="+c);
		if (c==val) {
			document.write(" selected");
		}
		document.write(">"+daysOfWeek[c]+"</option>");
	}
}
function validatePackageReadyTime(frm) {
	if (frm.readyDayOfWeek.value>-1 && frm.readyMinuteOfDay.value=="-1") {
		alert("You must specify a time for the day specified");
		frm.readyMinuteOfDay.focus();
		return false;
	}
	return true;
}
function validateOrigDest(frm) {
	if (frm.origin.value=="") {
		alert("You must specify an origin");
		frm.origin.focus();
		return false;
	}
	if (frm.destination.value=="") {
		alert("You must specify a destination");
		frm.destination.focus();
		return false;
	}
	return true;
}
function validatePackage(frm,c) {
	if (frm["pkgWeight"+c].value=="") {
		alert("You must specify a weight for package "+(c+1));
		frm["pkgWeight"+c].focus();
		return false;
	}
	if (frm["pkgLength"+c].value=="") {
		alert("You must specify a length for package "+(c+1));
		frm["pkgLength"+c].focus();
		return false;
	}
	if (frm["pkgWidth"+c].value=="") {
		alert("You must specify a width for package "+(c+1));
		frm["pkgWidth"+c].focus();
		return false;
	}
	if (frm["pkgHeight"+c].value=="") {
		alert("You must specify a height for package "+(c+1));
		frm["pkgHeight"+c].focus();
		return false;
	}
	if (frm["pkgContentType"+c].value=="-1") {
		alert("You must specify a the contents of your package.");
		frm["pkgContentType"+c].focus();
		return false;
	}
	if (frm["pkgContentType"+c].value=="0" && frm["pkgContentDesc"+c].value=="") {
		alert("You must specify a description for package type 'Other'");
		frm["pkgContentDesc"+c].focus();
		return false;
	}
	return true;
}

function validateQuickQuote(frm) {
	if (frm.readyDayOfWeek.value>-1 && frm.readyMinuteOfDay.value=="-1") {
		alert("You have chosen a custom time, but not selected an hour/minute");
		frm.quoteAvailHr.focus();
		return false;
	}
	if (frm.origin.value == "") {
		alert("You must enter an Origin Zip Code");
		frm.origin.focus();
		return false;
	}
	if (frm.destination.value == "") {
		alert("You must enter a Destination Zip Code");
		frm.destination.focus();
		return false;
	}
	if (frm.pkgWeight0.value == "") {
		alert("You must select a package Weight");
		frm.pkgWeight0.focus();
		return false;
	}
	return true;
}

function validateQuoteMultiple(frm) {

	if (frm.origin!=null && !validateOrigDest(frm))
		return false;

	if (!validatePackageReadyTime(frm))
		return false;

	var numPkgs = 0;
	for (var c=0; c<15; c++) {
		if (frm["pkgWeight"+c].value==""
				&& frm["pkgLength"+c].value==""
				&& frm["pkgWidth"+c].value==""
				&& frm["pkgHeight"+c].value=="") {
				continue; }
		OCEUpdateContentType(frm, c); // Convert custom OCE type to Other and fill-in the description
		if (!validatePackage(frm,c))
			return false;

		numPkgs++;
	}
	if (numPkgs==0) {
		alert("You must have at least one package");
		frm["pkgWeight0"].focus();
		return false;
	}
}

function addressBook(which,param) {
	if ("originContact" == which) {
		url = 'address_book_select.jsp?function=viewOriginAddressBook';
	} else if ("destinationContact" == which) {
		url = 'address_book_select.jsp?function=viewDestinationAddressBook';
	} else if ("emailAddress" == which) {
		url = 'address_book_select.jsp?function=viewEmailAddressBook&emailIndex=' + param;
	} else if ("faxNumber" == which) {
		url = 'address_book_select.jsp?function=viewFaxNumberAddressBook&faxField=' + param;
	} else if ("shipEmailAddress" == which) {
		url = 'address_book_select.jsp?function=viewShippingEmailAddressBook&emailField=' + param;
	}
	else { //multi-source
		url = 'address_book_select.jsp?function=viewMultiSourceAddressBook';
		url += '&field=' + which;
	}
	if (param!=null&&which!="faxNumber"&&which!="shipEmailAddress")
		url+='&zip='+param;
	window.open(url,'new','width=400,height=300,resizable=yes,status,scrollbars')
}

function validatePayment(frm) {
	if (frm.UserReferenceRequired!=null && frm.UserReference.value=="") {
		alert('You must specify a reference number.');
		frm.UserReference.focus();
		return false;
	}
	return true;
}
function validateCreditCard(frm) {
	if (frm['creditCardInfo.number'].value=="") {
		alert('You must specify a credit card number');
		frm['creditCardInfo.number'].focus();
		return false;
	}
	if (frm.creditCardAddressOption.value==0) {
		if (frm['creditCardInfo.streetAddress'].value=="") {
			alert('You must specify a billing address');
			frm['creditCardInfo.streetAddress'].focus();
			return false;
		}
		if (frm['creditCardInfo.zipCode'].value=="") {
			alert('You must specify a billing zip code');
			frm['creditCardInfo.zipCode'].focus();
			return false;
		}
	}
	return true;
}
function billAccount(billAccount) {
	var frm = document.orderForm;
	//if (!validatePayment(frm))
	//	return;
	//if (billtype=="creditcard" && !validateCreditCard(frm))
	//	return;

	frm['billAccount'].value=billAccount;
	frm.submit();
}

/* End Order Process */

/* Begin OCE */

//OCEUpdateContentType(form, zero-based package number)
// Converts "Printer Matter" custom content type to 'Other' and sets Content Description to "Printer matter"
function OCEUpdateContentType(type, desc) {
	if (type == null)
		return true;

	if (type.value == "-2") {
		desc.value = "Printed Matter";
		type.selectedIndex = 3;	// set to 'other' type
	}
	else if (type.value != "other") {
		desc.value = "";
	}

	return true;
}

function OCESetInstructions(cntrlCustom, cntrlInstr) {
	switch (eval(cntrlCustom.selectedIndex)) {
		case 0: // blank entry
			cntrlInstr.value = "";
			break;
		case 1: // hold for pick-up
			cntrlInstr.value = "Part to be held for Pick-Up at Airport";
			break;
		case 2: // NextJet pull/pack/ship
			cntrlInstr.value = "NextJet will come into Oce, and ship material.\nProduct:\nShelf Number/Location:" ;
			break;
		case 3: // Other
			cntrlInstr.value = "";
			break;
		default: // should never get here
			cntrlInstr.value = "";
			break;
	}

	return true;
}

function OCEVerifyInstructions(frm) {
	var isOCE = frm["isOCE"];
 	if ('true'==isOCE.value) {
		var cInst = frm["deliveryInstructions"];

		if (frm["OCECustomInstructions"].selectedIndex ==2) // pull/pack/ship
		{
			if (cInst.value.substr(58, 5) == "Shelf") // no product code
			{
				alert("Please enter product information");
				cInst.focus();
				return false;
			}
			if (cInst.value.substr(cInst.value.length-1, 1) == ":") // no shelf number
			{
				alert("Please enter shelf number/location");
				cInst.focus();
				return false;
			}
		}
	}
	return true;
}

function disableFormField(field) {
    enableField(field,false);
}

function disableFormField(field, clearFlag) {
    setFieldState(field,false,clearFlag);
}

function enableFormField(field) {
    enableField(field,true);
}

function enableField(field, enableFlag) {
    setFieldState(field, enableFlag, true);
}

function setFieldState(field, enableFlag, clearFlag) {
	if(enableFlag == true) {
		field.disabled=false;
		field.className = "FIELD";
	} else {
		field.disabled=true;
		field.className = "FIELD_READONLY";
        if (clearFlag) {
            clearField(field);
        }
	}
}

function clearAllFields() {
	var length = document.all.length;
	for (i=0;i<length;i++) {
		clearField(document.all[i]);
	}
}

function clearField(field) {
    if (field.nodeName=="SELECT") {
        var options = field.options;
        for (var j = 0; j < options.length; j++) {
          var option = options[j];
          option.selected = (j==0);
        }
    } else if (field.nodeName=="TEXTAREA") {
        field.value = "";
    } else if (field.nodeName=="INPUT") {
        if (field.type=="checkbox" || field.type=="radio") {
            field.checked = false;
        } else if (field.type!="button" && field.type!="submit") {
            field.value = "";
        }
    }
}

function reloadParentWindowAndKeepFocus() {
	if (window.opener.opener == null) {
		window.opener.opener = self;
	}
	window.opener.opener.hasFocus = true;
	window.opener.location.reload();
	self.focus();
}

function setWindowFocus(focusWindow) {
	window.opener = focusWindow;
	focusWindow.focus();
}

function setFocus(name) {
	var item = document.getElementsByName(name).item(0);
	item.focus();
	item.hasFocus = true;
}

function disableAutoSetFocus() {
  disableAutoSetFocus(window);
}

function disableAutoSetFocus(win) {
  window.autoSetFocusDisabled = true;
}

function autoSetFocus() {
  try {
    if (window.autoSetFocusDisabled || (window.opener && window.opener.hasFocus) || (document.all && window.opener && window.opener.document && window.opener.document.hasFocus()) ) {
      return;
    }
  } catch(exceptionObj) {}
	var focusSet = false;
	if (document.forms != null && document.forms.item(0) != null && document.forms.item(0).elements != null) {
		var length = document.forms.item(0).elements.length;
		for (i=0;i<length;i++) {
			if (document.forms != null && document.forms.item(0) != null && document.forms.item(0).elements != null) {
				var item = document.forms.item(0).elements.item(i);
				if (item.hasFocus || (!focusSet && item.tagName != "FIELDSET" && item.type != "hidden" && item.isDisabled != true)) {
					try {
						item.focus();
					} catch(exceptionObj) {}
					focusSet = true;
				}
			}
		}
	}
}

function getQueryStringValue(sKey) {
    var sQueryString = window.location.search

    if(sQueryString.length > 1) {
         sQueryString = sQueryString.substring(1, sQueryString.length);
    } else {
         return null;
    }

    var aKeyValuePairs = sQueryString.split("&");
    for(var i=0; i < aKeyValuePairs.length; i++) {
         if(aKeyValuePairs[i].split("=")[0] == sKey) {
              return unescape(aKeyValuePairs[i].split("=")[1]);
         }
    }
    return false;
}

function autoScroll() {
    if (document.all.errorTable) {
      return;
    }

    var scrollPosition = getQueryStringValue("scrollPosition");
    if (scrollPosition) {
    	setScrollTopValue(scrollPosition);
    }
}

function submitFormWithScrollPosition(form) {
	addScrollPosition(form);
	form.submit();
}

function addScrollPosition(form) {
	form.action += "?scrollPosition="+getScrollTopValue();
}

function getScrollTopValue() {
	//opera
	if (window.pageYOffset) {
	  	return window.pageYOffset;
	}
	//specified doctype
	if (document.documentElement && document.documentElement.scrollTop) {
		return document.documentElement.scrollTop;
	}
	//no doctype
	return document.body.scrollTop;
}

function setScrollTopValue(scrollPosition) {
	//must try and set all possible properties to support multiple doctypes and browsers
	//opera
	if (window.pageYOffset) {
		window.pageYOffset = scrollPosition;
	}
	//specified doctype
    	document.documentElement.scrollTop = scrollPosition;
    	//no doctype
	document.body.scrollTop = scrollPosition;
}

// ----- COOKIE MANIPULATION -------------------------------------
// name - name of the cookie
// value - value of the cookie
// [expires] - expiration date of the cookie (defaults to end of current session)
// [path] - path for which the cookie is valid (defaults to path of calling document)
// [domain] - domain for which the cookie is valid (defaults to domain of calling document)
// [secure] - Boolean value indicating if the cookie transmission requires a secure transmission
// * an argument defaults when it is assigned null as a placeholder
// * a null placeholder is not required for trailing omitted arguments
function setCookie(name, value, expires, path, domain, secure) {
  var curCookie = name + "=" + escape(value) +
      ((expires) ? "; expires=" + expires.toGMTString() : "") +
      ((path) ? "; path=" + path : "") +
      ((domain) ? "; domain=" + domain : "") +
      ((secure) ? "; secure" : "");
  document.cookie = curCookie;
}

// name - name of the desired cookie
// * return string containing value of specified cookie or null if cookie does not exist
function getCookie(name) {
  var dc = document.cookie;
  var prefix = name + "=";
  var begin = dc.indexOf("; " + prefix);
  if (begin == -1) {
    begin = dc.indexOf(prefix);
    if (begin != 0) return null;
  } else
    begin += 2;
  var end = document.cookie.indexOf(";", begin);
  if (end == -1)
    end = dc.length;
  return unescape(dc.substring(begin + prefix.length, end));
}

// name - name of the cookie
// [path] - path of the cookie (must be same as path used to create cookie)
// [domain] - domain of the cookie (must be same as domain used to create cookie)
// * path and domain default if assigned null or omitted if no explicit argument proceeds
function deleteCookie(name, path, domain) {
  if (getCookie(name)) {
    document.cookie = name + "=" +
    ((path) ? "; path=" + path : "") +
    ((domain) ? "; domain=" + domain : "") +
    "; expires=Thu, 01-Jan-70 00:00:01 GMT";
  }
}

// date - any instance of the Date object
// * hand all instances of the Date object to this function for "repairs" (for Netscape 2.0)
function fixDate(date) {
  var base = new Date(0);
  var skew = base.getTime();
  if (skew > 0)
    date.setTime(date.getTime() - skew);
}

function getOneYearExpireDate() {
	expires = new Date();
	// fix the bug in Navigator 2.0, Macintosh
	fixDate(expires);
	// cookie expires in one year (actually, 365 days)
	// 365 days in a year
	// 24 hours in a day
	// 60 minutes in an hour
	// 60 seconds in a minute
	// 1000 milliseconds in a second
	expires.setTime(expires.getTime() + 365 * 24 * 60 * 60 * 1000);
	return expires;
}

function hide(element) {
	element.style.display="none";
}

function show(element) {
	element.style.display="";
}

/* End OCE */


/* Input Table Scripts (supports N6+, IE5.5+, Mozilla 1+) */

function addRow(tableId) {
    var table = document.getElementById(tableId);
	var tbody = table.tBodies[0];
	var rows = tbody.rows;
	var newRow = cloneRow(rows[0]);
	tbody.appendChild(newRow);
	updateRowAttributes(rows,rows.length-1);
	clearRow(newRow);
	return newRow;
}

function cloneRow(row) {
	var newRow = document.createElement("TR");
	newRow.className = row.className;
	var elts = row.getElementsByTagName("td");
	for (var i = 0; i < elts.length; i++) {
		var td = document.createElement("TD");
		td.innerHTML = elts[i].innerHTML;
		td.className = elts[i].className;
		td.id = elts[i].id;
		newRow.appendChild(td);
	}
	return newRow;
}

function initInputTable(tableId) {
	table = document.getElementById(tableId);
	var rows = table.rows;
	for (var i = 0; i < rows.length; i++) {
		addRowNumber(rows[i]);
		addRemoveButton(table,rows[i]);
	}
}

function initRowNumbers(table) {
	var rows = table.rows;
	for (var i = 0; i < rows.length; i++) {
		addRowNumber(rows[i]);
	}
}

function initRemoveButtons(table) {
	var rows = table.rows;
	for (var i = 0; i < rows.length; i++) {
		addRemoveButton(table,rows[i]);
	}
}

function addRemoveButton(table,row) {
	var td;
	if (row.rowIndex == 0) {
		td = document.createElement("TH");
		td.innerHTML="&nbsp;";
	} else {
		td = document.createElement("TD");
		btn=createButton("X", "removeRow(event);");
		td.innerHTML = btn;
		td.align="center";
	}
	td.className=row.cells[0].className;
	row.appendChild(td);
}

function createButton(name, clickHandler) {
	btn = "<input type=\"button\" value=\""+name+"\" class=\"BUTTON\" onclick=\""+clickHandler+"\">";
	return btn;
}

function addRowNumber(row) {
	var td;
	if (row.rowIndex == 0) {
		td = document.createElement("TH");
		td.innerHTML="#";
	} else {
		td = document.createElement("TD");
		td.innerHTML=row.rowIndex;
	}
	td.className=row.cells[0].className;
	td.width=10;
	td.valign="middle";
	td.align="left";
	row.insertBefore(td,row.firstChild);
}

function removeRow(event, row) {
	if (row==null) {
		if (window.event) { //ie
			row = getParentRow(window.event.srcElement);
		} else { // all other browsers
			row = getParentRow(event.target);
		}
	}
	rowIndex = row.rowIndex;
	rows = row.parentNode.rows;

    if (rows.length <= 1) {
    	clearRow(row);
   	} else {
		row.parentNode.removeChild(row);
		updateRowAttributes(rows,rowIndex-1);
	}
}



function updateRowAttributes(rows, startIndex) {
	for (var i = startIndex; i < rows.length; i++) {
		var row = rows[i];

		fixElementsNameSubScriptByTagNameAndId(row, "input");
		fixElementsNameSubScriptByTagNameAndId(row, "select");
		fixElementsNameSubScriptByTagNameAndId(row, "textarea");
		fixElementsNameSubScriptByTagNameAndId(row, "img");
		fixElementsNameSubScriptByTagNameAndId(row, "td");
		updateRowNumber(row);
	}
}

function getParentRow(elt) {
	while (elt != null && elt.nodeName != "TR") {
		elt = elt.parentNode;
	}
	return elt;
}

function updateRowNumber(row) {
	if (row.rowIndex == 0) return;
	td=row.cells[0];
	//alert("oldRowNumber="+td.innerHTML);
	td.innerHTML = row.rowIndex;
	//alert("newRowNumber="+td.innerHTML);
}

function fixElementsNameSubScriptByTagNameAndId(parent, tagName) {
	var pattern = /\[[0-9]\]/g;
	var elts = parent.getElementsByTagName(tagName);
	for (var i = 0; i < elts.length; i++) {
		var elt = elts[i];
		if (elt.name) {
      var oldHTMLName = elt.name;
      //alert("oldName="+elt.name);
      elt.name = oldHTMLName.replace(pattern, "["+(parent.rowIndex-1)+"]");
      //alert("newName="+elt.name);
    }
    if (elt.id) {
      var oldHTMLId = elt.id;
      //alert("oldId="+elt.id);
      elt.id = oldHTMLId.replace(pattern, "["+(parent.rowIndex-1)+"]");
      //alert("newId="+elt.id);
    }
	}
}

function clearRow(row) {
	var selects = row.getElementsByTagName("select");
	for (var i = 0; i < selects.length; i++) {
	  clearField(selects[i]);
	}

	var textareas = row.getElementsByTagName("textarea");
	for (var i = 0; i < textareas.length; i++) {
		clearField(textareas[i]);
	}

	var inputs = row.getElementsByTagName("input");
	for (var i = 0; i < inputs.length; i++) {
		clearField(inputs[i]);
	}
}

function filterAirportSelect(userText, select) {
    upperCaseText = userText.value.toUpperCase();
    select.setAttribute("value", upperCaseText);
    if (select.selectedIndex == -1) {
        select.setAttribute("value", "");
    }
}

function resetList(list) {
    list.setAttribute("value","");
    list.selectedIndex = -1;
}

/* End Input Table Scripts */


