// Javascript Utilities Functions
// Poly Songfack <poly@itransact.com>

function showDate() {
        var d=new Date();
        var weekday=new Array("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday");
        var monthname=new Array("January","February","March","April","May","June","July","August","September","October","November","December");
        document.write(weekday[d.getDay()] + ", ");
        document.write(monthname[d.getMonth()] + " ");
        document.write(d.getDate() + ", ");
        document.write(d.getFullYear());
}

function trim(str) {
        if (str=="") return str;
        else {
                while (str.charAt(0) ==" ") str=str.substring(1,str.length);
                if (str=="") return str;
                while (str.charAt(str.length) ==" ") str=str.substring(0,(str.length-1));
                return str;
        }
}

function validateObj(obj,msg) {
        val=trim(obj.value);
        obj.value=val;
        if (val=="") {
                alert(msg);
                obj.focus();
                return false;
        }
        return true;
}

function validateObjDef(obj,msg) {
        val=trim(obj.value);
        obj.value=val;
        if (val=="") {
                alert(msg);
                obj.focus();
                obj.value=obj.defaultValue;
                return false;
        }
        return true;
}

function validateEObj(obj,msg,emsg) {
        str=trim(obj.value);
        if (! validateObj(obj,msg)) return false;
        if ((str.length <7) || (str.indexOf("@")<1) || (str.lastIndexOf(".") < (str.lastIndexOf("@")+1))) {
                alert(emsg);
                obj.focus();
                return false;
        }
        return true;
}


function validateEObjDef(obj,msg,emsg) {
        str=trim(obj.value);
        if (! validateObjDef(obj,msg)) return false;
        if ((str.length <7) || (str.indexOf("@")<1) || (str.lastIndexOf(".") < (str.lastIndexOf("@")+1))) {
                alert(emsg);
                obj.value=obj.defaultValue;
                obj.focus();
                return false;
        }
        return true;
}

function validateRadioObj(obj,val,msg1,msg2) {
        myOption = -1;
        for (i=0; i<obj.length; i++) {
                if (obj[i].checked) {
                        myOption = i;
                }
        }
        if (myOption == -1) {
                alert(msg1);
                return false;
        }

        if (obj[myOption].value ==val) {
                return true;        
        
        }
        else {
                alert(msg2);
                return false;
        }
}            

function objLength(obj,l,msg) {
        str=trim(obj.value);
        if (str.length <l) {
                alert(msg);
                obj.focus();
                return false;
        }
        return true;
}

function objLengthDef(obj,l,msg) {
        str=trim(obj.value);
        if (str.length <l) {
                alert(msg);
                obj.value=obj.defaultValue;
                obj.focus();
                return false;
        }
        return true;
}

function objMatch(obj1,obj2,msg) {
        if (obj1.value !=obj2.value) {
                alert(msg);
                obj1.focus();
                return false;
        }
        return true;
}

function objMatchDef(obj1,obj2,msg) {
        if (obj1.value !=obj2.value) {
                alert(msg);
                obj1.value=obj1.defaultValue;
                obj1.focus();
                return false;
        }
        return true;
}

function prefillObj(obj2,obj1) {
        if (trim(obj2.value) =="") {
                obj2.value=obj1.value;
        }
}


function alphaNum(obj,msg) {
        validCh="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_";
        str=obj.value;
        badOne=0;
        i=0;
        while (i<str.length && (badOne==0)) {
                ch=str.charAt(i);
                if (validCh.indexOf(ch)==-1) {
         badOne=1;
                }
                i++;
        }

        if ( badOne==1) {
                alert(msg);
                obj.focus();
                return false;
        }
        return true;
}


function rndUp(number) {
        // return Math.ceil(number*Math.pow(10,2))/Math.pow(10,2);
	return Math.round(number*100)/100;
}


function isEmpty(s) {
        return ((s == null) || (s.length == 0))
}

function isDigit (c){
        return ((c >= "0") && (c <= "9"))
}

function isInteger (s) {
        var i;
        var defaultEmptyOK=true;

        if (isEmpty(s))
        if (isInteger.arguments.length == 1) return defaultEmptyOK;
      else return (isInteger.arguments[1] == true);

      // Search through string's characters one by one
      // until we find a non-numeric character.
      // When we do, return false; if we don't, return true.

        for (i = 0; i < s.length; i++) {
                // Check that current character is number.
            var c = s.charAt(i);
                if (!isDigit(c)) return false;
        }

        // All characters are numbers.
        return true;
}

function toInt(obj) {
    if (parseInt(obj.value)) {
        obj.value=parseInt(obj.value);
    }
    else {
        obj.value=0;
    }

}

function toNum(obj) {
    if (parseFloat(obj.value)) {
       obj.value = parseFloat(obj.value);
    }
    else {
      obj.value=0.00;
   }
}

function toDollars(obj) {
    // There is the neat toFixed(2) function in javascript 1.5
    // but it won't work for olther browsers...

    temp2 = 0;
    if (parseFloat(obj.value)) {
        temp1 = parseFloat(obj.value);     
        temp2 =  rndUp(temp1);  
    }
    temp3=(temp2-Math.ceil(temp2))*100;
    temp3=Math.abs(temp3);
    if (temp3 < 0.99) {
            temp4=temp2+".00";
    }
    else {
            temp5=(Math.abs(temp2*10 - Math.ceil(temp2*10)))*10;
            if (temp5 < 0.99) {
                    temp4=temp2+"0";
            }
            else{
                    temp4=temp2;
            }
    }
    obj.value=temp4;
}

function goingTo(loc, chObj) {
    if ((chObj.value == "yes") || (chObj.value == 1)) {
        var agree=confirm("This form has been edited.  Discard changes?");
        if (agree) location.href=loc;
    }
    else location.href=loc;
}


function doProduct(aux1,aux2,aux3) {
        temp1=aux1.value;
	price=aux3.value; 
        temp2=rndUp(temp1*price);
	aux2.value=temp2;
	toDollars(aux2);
}

function doTotal(aux1,aux2,extn,tot) {
	temp1 = tot.defaultValue;
	temp2 = extn.value;
	temp3 = extn.defaultValue;
	temp4 = temp1 + temp2 - temp3 ;
	
	tot.value = 1.0*temp1 +(1.0*temp2 - 1.0*temp3);
	toDollars(tot);
	
	extn.defaultValue = extn.value;
	tot.defaultValue = tot.value;
}

function doGrandTotal(aux1,aux2,extn,tot,ord) {
	temp1 = tot.defaultValue;
	temp10 = ord.defaultValue;
	temp2 = extn.value;
	temp3 = extn.defaultValue;
	
	tot.value = 1.0*temp1 +(1.0*temp2 - 1.0*temp3);
	ord.value = 1.0*temp10 +(1.0*temp2 - 1.0*temp3);
	toDollars(tot);
	toDollars(ord);

	extn.defaultValue = extn.value;
	tot.defaultValue = tot.value;
	ord.defaultValue = ord.value;
}

function goNow(sel) {
	location.href = sel.options[sel.selectedIndex].value;
}

function checkCC(s) {
	  var i, n, c, r, t;

	  // First, reverse the string and remove any non-numeric characters.

	  r = "";
	  for (i = 0; i < s.length; i++) {
	    c = parseInt(s.charAt(i), 10);
	    if (c >= 0 && c <= 9)
	      r = c + r;
	  }

	  // Check for a bad string.

	  if (r.length <= 1)
	    return false;

	  // Now run through each single digit to create a new string. Even digits
	  // are multiplied by two, odd digits are left alone.

	  t = "";
	  for (i = 0; i < r.length; i++) {
	    c = parseInt(r.charAt(i), 10);
	    if (i % 2 != 0)
	      c *= 2;
	    t = t + c;
	  }

	  // Finally, add up all the single digits in this string.

	  n = 0;
	  for (i = 0; i < t.length; i++) {
	    c = parseInt(t.charAt(i), 10);
	    n = n + c;
	  }

	  // If the resulting sum is an even multiple of ten (but not zero), the
	  // card number is good.

	  if (n != 0 && n % 10 == 0)
	    return true;
	  else
	    return false;
}
