﻿// JScript File


/* Function for autoformating doubles to include commas */
function GetDecimalDelimiter(countryCode)
{
 
  switch (countryCode)
  {
    case 3:   
           return '#';
    case 2:   
           return ',';
    default:
           return '.';
  }
}

function GetCommaDelimiter(countryCode)
{
 
  switch (countryCode)
  { 
    case 3:          
           return '*';
    case 2:   
           return ',';
    default:
           return ',';
  }
 
}

function FormatClean(num)
{

     var sVal='';
     var nVal = num.length;
     var sChar='';
     
   try
   {
      for(c=0;c<nVal;c++)
      {
         sChar = num.charAt(c);
         nChar = sChar.charCodeAt(0);
         if ((nChar >=48) && (nChar <=57))  { sVal += num.charAt(c);   }
      }
   }
    catch (exception) { AlertError("Format Clean",exception); }
    return sVal;
    
}
  

function FormatNumber(num,countryCode,decimalPlaces)
{       

  var minus='';
  var comma='';
  var dec='';
  var preDecimal='';
  var postDecimal='';
  
  try 
  {
   
    if (num == "")
    {
        return "";
    }
    decimalPlaces = parseInt(decimalPlaces);
    comma = GetCommaDelimiter(countryCode);
    dec = GetDecimalDelimiter(countryCode);
    
    if (decimalPlaces < 1) { dec = ''; }
    
    if (num.lastIndexOf("-") == 0) { minus='-'; }
    
    //Adding this: if num doesnt contain a decimal, num * 100
    if (num.lastIndexOf(".") == -1 & num != "0")
    {
        num = num + "00";
    }
    
    //Need to pad extra zero if there is only one digit after the decimal point
    if (num.lastIndexOf(".") > 0 & num != "0")
    {
        var temp = new Array();
        temp = num.split(".");
        if (temp[1].length == 1)
        {
            num = num + "0";
        }
    }
    
    preDecimal = FormatClean(num);
    
    // preDecimal doesn't contain a number at all.
    // Return formatted zero representation.
    
    if (preDecimal.length < 1)
    {
       return minus + FormatEmptyNumber(dec,decimalPlaces);
    }
    
    // preDecimal is 0 or a series of 0's.
    // Return formatted zero representation.
    
    if (parseInt(preDecimal) < 1)
    {
       return minus + FormatEmptyNumber(dec,decimalPlaces);
    }
    
    // predecimal has no numbers to the left.
    // Return formatted zero representation.
    
    if (preDecimal.length == decimalPlaces)
    {
      return minus + '0' + dec + preDecimal;
    }
    
    // predecimal has fewer characters than the
    // specified number of decimal places.
    // Return formatted leading zero representation.
    
    if (preDecimal.length < decimalPlaces)
    {
       if (decimalPlaces == 2)
       {
        return minus + FormatEmptyNumber(dec,decimalPlaces - 1) + preDecimal;
       }
       return minus + FormatEmptyNumber(dec,decimalPlaces - 2) + preDecimal;
    }
    
    // predecimal contains enough characters to
    // qualify to need decimal points rendered.
    // Parse out the pre and post decimal values
    // for future formatting.
    
    if (preDecimal.length > decimalPlaces)
    {
      postDecimal = dec + preDecimal.substring(preDecimal.length - decimalPlaces,
                                               preDecimal.length);
      preDecimal = preDecimal.substring(0,preDecimal.length - decimalPlaces);
    }

    // Place comma oriented delimiter every 3 characters
    // against the numeric represenation of the "left" side
    // of the decimal representation.  When finished, return
    // both the left side comma formatted value together with
    // the right side decimal formatted value.
    
    var regex  = new RegExp('(-?[0-9]+)([0-9]{3})');
 
    while(regex.test(preDecimal))
    {
       preDecimal = preDecimal.replace(regex, '$1' + comma + '$2');
    }
       
  }
  catch (exception) { AlertError("Format Number",exception); }
  return minus + preDecimal + postDecimal;
}

function FormatEmptyNumber(decimalDelimiter,decimalPlaces)
{
    var preDecimal = '0';
    var postDecimal = '';
 
    for(i=0;i<decimalPlaces;i++)
    {
      if (i==0) { postDecimal += decimalDelimiter; }
      postDecimal += '0';
    }
   return preDecimal + postDecimal;
}
  

 function AlertError(methodName,e)
 {
            if (e.description == null) { alert(methodName + " Exception: " + e.message); }
            else {  alert(methodName + " Exception: " + e.description); }
 }
 function RoundNumber(object)
 {
    var Number1 = object.value;
    var Number2 = object.value;
    Number1 = FormatNumber(Number1, 1, 2);
    Number1 = Number1.replace(",", "");
    Number1 = Math.round(Number1);
    Number1 = Number1 + ".00";
    Number1 = FormatNumber(Number1, 1, 2);
    object.value = Number1;

 }
 
 
 
 //New Phone Number masking function
 
 function FormatPhoneNumber(num, format, shortformat)
{
	if(format==null)
	{
			// Choose the default format you prefer for the <b style="color:black;background-color:#a0ffff">number</b>. 
		//format = "#-(###) ###-#### ";		// Telephone w/ LD Prefix and Area Code
		format = "(###) ###-#### ";			// Telephone w/ Area Code
		//format = "###-###-####";			// Telephone w/ Area Code (dash seperated)
		//format = "###-##-####";			//Social Security <b style="color:black;background-color:#a0ffff">Number</b>
	}					
//---------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------
	if(shortformat==null)
	{
		// Choose the short format (without area code) you prefer. 
		//If you do not want multiple formats, leave it as "".

		//var shortformat = "###-#### ";
		var shortformat = "";
	}
	
//---------------------------------------------------------------------------------------------------------------------
//----------------------------------------This code can be used to format any <b style="color:black;background-color:#a0ffff">number</b>. ---------------------------------
//----------------------------------------Simply change the format to a <b style="color:black;background-color:#a0ffff">number</b> format ---------------------------------
//---------------------------------------- you prefer. It will ignore all characters  ---------------------------------
//----------------------------------------  except the #, where it will replace with  ---------------------------------
//----------------------------------------               user input.                  ---------------------------------
//---------------------------------------------------------------------------------------------------------------------

	var validchars = "0123456789";
	var tempstring = "";
	var returnstring = "";
	var extension = "";
	var tempstringpointer = 0;
	var returnstringpointer = 0;
	count = 0;

	// Get the length so we can go through and remove all non-numeric characters
	var length = num.value.length;
		

	// We are only concerned with the format of the phone <b style="color:black;background-color:#a0ffff">number</b> - extensions can be left alone.
	if (length > format.length)
	{
		length = format.length;
	};
	
	// scroll through what the user has typed
	for (var x=0; x<length; x++)
	{
		if (validchars.indexOf(num.value.charAt(x))!=-1)
		{
		tempstring = tempstring + num.value.charAt(x);
		};
	};
	// We should now have just the #'s - extract the extension if needed
	if (num.value.length > format.length)
	{
		length = format.length;
		extension = num.value.substr(format.length, (num.value.length-format.length));
	};
	
	// if we have fewer characters than our short format, we'll default to the short version.
	for (x=0; x<shortformat.length;x++)
	{
		if (shortformat.substr(x, 1)=="#")
		{
			count++;
		};
	}
	if (tempstring.length <= count)
	{
		format = shortformat;
	};

	
	//Loop through the format string and insert the numbers where we find a # sign
	for (x=0; x<format.length;x++)
	{
		if (tempstringpointer <= tempstring.length)
		{
			if (format.substr(x, 1)=="#")
			{
				returnstring = returnstring + tempstring.substr(tempstringpointer, 1);
				tempstringpointer++;
			}else{
				returnstring = returnstring + format.substr(x, 1);
			}
		}
		
	}

	// We have gone through the entire format, let's add the extension back on.
		returnstring = returnstring + extension;
	
	//we're done - let's return our value to the field.
	num.value = returnstring;
}	
 
 /**  Function for phone number masking   **/
 
 
var zChar = new Array(' ', '(', ')', '-', '.');
var maxphonelength = 13;
var phonevalue1;
var phonevalue2;
var cursorposition;

function ParseForNumber1(object){
phonevalue1 = ParseChar(object.value, zChar);
}
function ParseForNumber2(object){
phonevalue2 = ParseChar(object.value, zChar);
}

function backspacerUP(object,e) { 
if(e){ 
e = e 
} else {
e = window.event 
} 
if(e.which){ 
var keycode = e.which 
} else {
var keycode = e.keyCode 
}

ParseForNumber1(object)

GetCursorPosition

if(keycode >= 48 || cursorposition > 13){
ValidatePhone(object)
}
}

function backspacerDOWN(object,e) { 
if(e){ 
e = e 
} else {
e = window.event 
} 
if(e.which){ 
var keycode = e.which 
} else {
var keycode = e.keyCode 
}
ParseForNumber2(object)
} 

function GetCursorPosition(){

var t1 = phonevalue1;
var t2 = phonevalue2;
var bool = false
for (i=0; i<t1.length; i++)
{
if (t1.substring(i,1) != t2.substring(i,1)) {
if(!bool) {
cursorposition=i
bool=true
}
}
}
}

function ValidatePhone(object){

var p = phonevalue1

p = p.replace(/[^\d]*/gi,"")

if (p.length < 3) {
object.value=p
} else if(p.length==3){
pp=p;
d4=p.indexOf('(')
d5=p.indexOf(')')
if(d4==-1){
pp="("+pp;
}
if(d5==-1){
pp=pp+")";
}
object.value = pp;
} else if(p.length>3 && p.length < 7){
p ="(" + p; 
l30=p.length;
p30=p.substring(0,4);
p30=p30+")"

p31=p.substring(4,l30);
pp=p30+p31;

object.value = pp; 

} else if(p.length >= 7){
p ="(" + p; 
l30=p.length;
p30=p.substring(0,4);
p30=p30+")"

p31=p.substring(4,l30);
pp=p30+p31;

l40 = pp.length;
p40 = pp.substring(0,8);
p40 = p40 + "-"

p41 = pp.substring(8,l40);
ppp = p40 + p41;

object.value = ppp.substring(0, maxphonelength);
}

GetCursorPosition()

if(cursorposition >= 0){
if (cursorposition == 0) {
cursorposition = 2
} else if (cursorposition <= 2) {
cursorposition = cursorposition + 1
} else if (cursorposition <= 5) {
cursorposition = cursorposition + 2
} else if (cursorposition == 6) {
cursorposition = cursorposition + 2
} else if (cursorposition == 7) {
cursorposition = cursorposition + 4
e1=object.value.indexOf(')')
e2=object.value.indexOf('-')
if (e1>-1 && e2>-1){
if (e2-e1 == 4) {
cursorposition = cursorposition - 1
}
}
} else if (cursorposition < 11) {
cursorposition = cursorposition + 3
} else if (cursorposition == 11) {
cursorposition = cursorposition + 1
} else if (cursorposition >= 12) {
cursorposition = cursorposition
}

//var txtRange = object.createTextRange();
//txtRange.moveStart( "character", cursorposition);
//txtRange.moveEnd( "character", cursorposition - object.value.length);
//txtRange.select();
}

}

function ParseChar(sStr, sChar)
{
if (sChar.length == null) 
{
zChar = new Array(sChar);
}
else zChar = sChar;

for (i=0; i<zChar.length; i++)
{
sNewStr = "";

var iStart = 0;
var iEnd = sStr.indexOf(sChar[i]);

while (iEnd != -1)
{
sNewStr += sStr.substring(iStart, iEnd);
iStart = iEnd + 1;
iEnd = sStr.indexOf(sChar[i], iStart);
}
sNewStr += sStr.substring(sStr.lastIndexOf(sChar[i]) + 1, sStr.length);

sStr = sNewStr;
}

return sNewStr;
}



function CalculateSubTotal(object1, object2, object3)
{
    var Number1 = object1.value;
    var Number2 = object2.value;
    object1.value = FormatNumber(Number1, 1, 2);
    object2.value = FormatNumber(Number2, 1, 2);
    object3.value = FormatNumber("0", 1, 2);
    Number1 = Number1.replace(",", "");
    Number2 = Number2.replace(",", "");
    var Number3;
    if(Number1 != "" && Number2 != "")
    {   
        Number3 = (Number1 * Number2);
        Number3 = Number3.toFixed(2);
        Number3 = FormatNumber(Number3, 1, 2);
        object3.value = Number3;
    }
}

function CalculatePercentTotal(object1, object2, object3)
{
    var Number1 = object1.value;
    var Number2 = object2.value;
    object1.value = FormatNumber(Number1, 1, 2);
    object2.value = FormatNumber(Number2, 1, 2);
    object3.value = FormatNumber("0", 1, 2);
    Number1 = Number1.replace(",", "");
    Number2 = Number2.replace(",", "");
    var Number3;
    if(Number1 != "" && Number2 != "")
    {   
        Number3 = (Number1 * (Number2 / 100));
        Number3 = Number3.toFixed(2);
        Number3 = FormatNumber(Number3, 1, 2);
        object3.value = Number3;
    }
}

function CalculatePercentTotalDollars(object1, object2, object3)
{
    var Number1 = object1.value;
    var Number2 = object2.value;
    Number1 = Number1.replace("$", "");
    object1.value = "$" + FormatNumber(Number1, 1, 2);
    object2.value = FormatNumber(Number2, 1, 2);
    object3.value = FormatNumber("0", 1, 2);
    Number1 = Number1.replace(",", "");
    Number2 = Number2.replace(",", "");
    var Number3;
    if(Number1 != "" && Number2 != "")
    {   
        Number3 = (Number1 * (Number2 / 100));
        Number3 = Number3.toFixed(2);
        Number3 = FormatNumber(Number3, 1, 2);
        object3.value = "  =  $" + Number3;
    }
}

function CalculateGrandTotal(object1, object2)
{
    var Number1 = object1.value;
    var Number2 = object2.value;
    Number1 = Number1.replace(",", "");
    Number2 = Number2.replace(",", "");
    var Total
    if (object2.value == "")
    {
        Number2 = 0;
    }
    //if(Number1 != "" && Number2 != "")
    //{
        Total = eval(Number1) + eval(Number2);
        Total = Total.toFixed(2);
        Total = FormatNumber(Total, 1, 2);
        object2.value = Total;
    //}
}

function CopyText(object1, object2)
{
    object2.value = object1.value;
}

function CalculateGrandTotal2(objectarray, sumtarget)
{
    var Total = 0;
    var Number;
    var object;
    for (i = 0; i < objectarray.length; i++)
    {
        object = document.getElementById(objectarray[i]);
        Number = object.value;
        object.value = FormatNumber(Number);
        Number = Number.replace(",", "");
        Total += eval(Number);
    }
    Total = Total.toFixed(2);
    Total = FormatNumber(Total, 1, 2);
    sumtarget.value = Total;
}

function CalculateGrandTotal3(object)
    {
        var Total = 0;
        var Amount;
        var tBox;
        var Name;
        var BidAmount;
        tBox = document.getElementsByTagName("INPUT");
        for(i = 0; i< (tBox.length - 2) ; i++) 
        {
            Name = tBox[i].name;
            if (Name.indexOf("SubTotal") != -1)
            {
                Amount = tBox[i].value;
                Amount = Amount.replace(",", "");
                if (Amount != "")
                {
                    Total += eval(Amount);
                }
            }
        }
        
        Total = Total.toFixed(2);
        object.value = FormatNumber(Total, 1, 2);
    }
    
function CalculateShipChoiceFee(object1, object2, object3, BrokerageRate)
    {
        var Total = object1.value;
        var PayToCarrier = 0;
        var ShipChoiceFee = 0;
        if (object1.value == "")
        {
            Total = 0;
        }
        Total = Total.replace(",", "");
        ShipChoiceFee = Total * BrokerageRate;
        //ShipChoiceFee = FormatNumber(ShipChoiceFee, 1, 2);
        //ShipChoiceFee = ShipChoiceFee.replace(",", "");
        PayToCarrier = Total - ShipChoiceFee;
        //PayToCarrier = FormatNumber(PayToCarrier, 1, 2);
        
        ShipChoiceFee = ShipChoiceFee.toFixed(2);
        PayToCarrier = PayToCarrier.toFixed(2);
        
        ShipChoiceFee = FormatNumber(ShipChoiceFee, 1, 2);
        PayToCarrier = FormatNumber(PayToCarrier, 1, 2);
        
        object2.value = "($" + ShipChoiceFee + ")";
        object3.value = PayToCarrier;
    }
    
 function CalculateShipChoiceFeeGoal(GoalRateTextBox, BidAmountTextBox, PlusShipChoiceFeeTextBox, BrokerageRate)
    {
        var Goal = GoalRateTextBox.value;
        var FlatFee;
        var BidAmount;
        var ShipChoiceFee;
        var TotalDueCarrier;
        
        Goal = Goal.replace(",", "");
        //Goal = Goal.toFixed(2);
        
        BidAmount = Goal/(1-BrokerageRate);
        BidAmount = BidAmount.toFixed(2);
        
        ShipChoiceFee = BidAmount * BrokerageRate;
        ShipChoiceFee = ShipChoiceFee.toFixed(2);
        
        FlatFee = BidAmount;
        TotalDueCarrier = BidAmount - ShipChoiceFee;
        TotalDueCarrier = TotalDueCarrier.toFixed(2);
        
        Goal = FormatNumber(Goal, 1, 2);
        FlatFee = FormatNumber(FlatFee, 1, 2);
        BidAmount = FormatNumber(BidAmount, 1, 2);
        ShipChoiceFee = FormatNumber(ShipChoiceFee, 1, 2);
        TotalDueCarrier = FormatNumber(TotalDueCarrier, 1, 2);
        
        GoalRateTextBox.value = Goal;
        BidAmountTextBox.value = BidAmount;
        PlusShipChoiceFeeTextBox.value = "($" + ShipChoiceFee + ")";
    }
    
    
    function CalculateShipChoiceFeeGoalCustomer(GoalRateTextBox, BidAmountTextBox, PlusShipChoiceFeeTextBox, BrokerageRate)
    {
        var Goal = GoalRateTextBox.value;
        var FlatFee;
        var BidAmount;
        var ShipChoiceFee;
        var TotalDueCarrier;
        
        Goal = Goal.replace(",", "");
        //Goal = Goal.toFixed(2);
        
        BidAmount = Goal/(1+BrokerageRate);
        BidAmount = BidAmount.toFixed(2);
        
        ShipChoiceFee = BidAmount * BrokerageRate;
        ShipChoiceFee = ShipChoiceFee.toFixed(2);
        
        //if (ShipChoiceFee < 50)
        //{
        //    ShipChoiceFee = 50;
        //    ShipChoiceFee = ShipChoiceFee.toFixed(2);
        //}
        
        FlatFee = BidAmount;
        TotalDueCarrier = BidAmount - ShipChoiceFee;
        TotalDueCarrier = TotalDueCarrier.toFixed(2);
        
        Goal = FormatNumber(Goal, 1, 2);
        FlatFee = FormatNumber(FlatFee, 1, 2);
        BidAmount = FormatNumber(BidAmount, 1, 2);
        ShipChoiceFee = FormatNumber(ShipChoiceFee, 1, 2);
        TotalDueCarrier = FormatNumber(TotalDueCarrier, 1, 2);
        
        GoalRateTextBox.value = Goal;
        BidAmountTextBox.value = BidAmount;
        PlusShipChoiceFeeTextBox.value = "($" + ShipChoiceFee + ")";
    }
