// ------------





// DHTML utilities

function winPopup(popURL,WindowName,wt,ht,Scrolling,resizable,top,left) {
	if (Scrolling >0){
	Scrolling=1
	}
	else {
	Scrolling=0
	}
	if (resizable>0){
	resizable=1
	}
	else {
	resizable=0
	}
	if (top>0){
	top=top
	}
	else {
	top=(screen.height-ht)/2
	}
	if (left>0){
	left=left
	}
	else {
	left=(screen.width-wt)/2
	}
	PageURL=popURL;
	settings="toolbar=0,location=0,directories=0,"+
	"status=1,menubar=0,scrollbars=" +Scrolling+","+
	"resizable="+ resizable +",width="+wt+",height="+ht
	+	",top=" + top + ",left="+ left;
	popWin=window.open(PageURL,WindowName,settings);
	//alert((screen.width-popWin.body.offsetWidth)/2);
	//popWin.moveTo((screen.width-popWin.document.body.offsetWidth)/2,(screen.height-popWin.document.body.offsetHeight)/2)
	//popWin.creator=self;
	popWin.focus();	
}

   

function isValidCreditCardNumber(cardNumber, cardType)
{
  var isValid = false;
  var ccCheckRegExp = /[^\d ]/;
  isValid = !ccCheckRegExp.test(cardNumber);

  if (isValid)
  {
    var cardNumbersOnly = cardNumber.replace(/ /g,"");
    var cardNumberLength = cardNumbersOnly.length;
    var lengthIsValid = false;
    var prefixIsValid = false;
    var prefixRegExp;

    switch(cardType)
    {
      case "mastercard":
        lengthIsValid = (cardNumberLength == 16);
        prefixRegExp = /^5[1-5]/;
        break;

      case "visa":
        lengthIsValid = (cardNumberLength == 16 || cardNumberLength == 13);
        prefixRegExp = /^4/;
        break;

      case "amex":
        lengthIsValid = (cardNumberLength == 15);
        prefixRegExp = /^3(4|7)/;
        break;

      default:
        prefixRegExp = /^$/;
        alert("Card type not found");
    }

    prefixIsValid = prefixRegExp.test(cardNumbersOnly);
    isValid = prefixIsValid && lengthIsValid;
  }

  if (isValid)
  {
    var numberProduct;
    var numberProductDigitIndex;
    var checkSumTotal = 0;

    for (digitCounter = cardNumberLength - 1; 
      digitCounter >= 0; 
      digitCounter--)
    {
      checkSumTotal += parseInt (cardNumbersOnly.charAt(digitCounter));
      digitCounter--;
      numberProduct = String((cardNumbersOnly.charAt(digitCounter) * 2));
      for (var productDigitCounter = 0;
        productDigitCounter < numberProduct.length; 
        productDigitCounter++)
      {
        checkSumTotal += 
          parseInt(numberProduct.charAt(productDigitCounter));
      }
    }

    isValid = (checkSumTotal % 10 == 0);
  }

  return isValid;
}

 

function moveOnMax(field,nextFieldID){
  if(field.value.length >= field.maxLength){
    document.getElementById(nextFieldID).focus();
  }
}

// JS utilities

function noRightClick() {
    if (event.button == 2) {
        alert('Please select a zone or material from the menus.')
    }
}



// generic positive number decimal formatting function
function format(expr, decplaces) {
    // raise incoming value by power of 10 times the
    // number of decimal places; round to an integer; convert to string
    var str = "" + Math.round(eval(expr) * Math.pow(10, decplaces))
    // pad small value strings with zeros to the left of rounded number
    while (str.length <= decplaces) {
        str = "0" + str
    }
    // establish location of decimal point
    var decpoint = str.length - decplaces
    // assemble final result from: (a) the string up to the position of
    // the decimal point; (b) the decimal point; and (c) the balance
    // of the string. Return finished product.
    return str.substring(0, decpoint) + "." + str.substring(decpoint, str.length);
}
// turn incoming expression into a dollar value
function dollarize(expr) {
    if (expr == null || expr == "") { expr = 0 }
    return "$" + format(expr, 2)
}



function KeyDownHandler(btn) {
    // process only the Enter key
    if (event.keyCode == 13) {
        // cancel the default submit
        event.returnValue = false;
        event.cancel = true;
        // submit the form by programmatically clicking the specified button
        btn.click();
    }
}



// JS utilitites

function makeArray() {
    this.length = makeArray.arguments.length
    for (var i = 0; i < this.length; i++) {
        this[i] = makeArray.arguments[i];
    }
}

function newImage(arg) {
    if (document.images) {
        rslt = new Image();
        rslt.src = arg;
        return rslt;
    }
}


function loadAutocomplete(txtEnterField, txtValueField, url) {
    $(txtEnterField).autocomplete(url, {
        mustMatch: false,
        width: 450, minChars: 2, autoFill: false, highlight: false, scroll: true, scrollHeight: 200,
        formatItem: function(data, i, n, value) { $(txtValueField).val(data[0]); return data[1] + "<br/>(" + data[2] + ")"; },
        formatResult: function(data, value) { $(txtValueField).val(data[0]); return data[1] + " (" + data[2] + ")"; }
    }).result(function(evt, data, formatted) {
        $(txtValueField).val(data[0]);
    });


    $(txtEnterField).click(function() { jQuery(this).focus(); jQuery(this).select(); });

}

function loadAutocomplete2(txtEnterField, txtValueField, url) {
    $(txtEnterField).autocomplete(url, {
        mustMatch: false,
        width: 450, minChars: 2, autoFill: false, highlight: false, scroll: true, scrollHeight: 200,
        formatItem: function(data, i, n, value) { $(txtValueField).val(data[0]); return data[1] ; },
        formatResult: function(data, value) { $(txtValueField).val(data[0]); return data[1]; }
    }).result(function(evt, data, formatted) {
        $(txtValueField).val(data[0]);
    });


    $(txtEnterField).click(function() { jQuery(this).focus(); jQuery(this).select(); });

}
