/*
  -------------------------------------------------------------------------
		      Calculation Helper Functions
              Part of Simfatic Forms software
					
	Copyright (C) 2008-2009 Simfatic Solutions. All rights reserved.
    This javascript code is installed as part of Simfatic Forms software.
	You may adapt this script for your own needs, provided these opening credit
    lines (down to the lower dividing line) are kept intact.
    You may not reprint or redistribute this code without permission from 
    Simfatic Solutions.
	http://www.simfatic.com/
    -------------------------------------------------------------------------  
*/

function SFM_max()
{
    var values = SFM_max.arguments;
    var len  = SFM_max.arguments.length;

    if(len <= 0){ return 0; }

    var max=values[0];
    for(var i = 1;i<len;i++)
    {
        if(values[i] > max)
        {
            max = values[i];
        }
    }
    return max;
}

function SFM_min()
{
    var values = SFM_min.arguments;
    var len  = SFM_min.arguments.length;

    if(len <= 0){ return 0; }

    var min=values[0];
    for(var i = 1;i<len;i++)
    {
        if(values[i] < min)
        {
            min = values[i];
        }
    }
    return min;
}

function SFM_avg()
{
    var values = SFM_avg.arguments;
    var len  = SFM_avg.arguments.length;

    if(len <= 0){ return 0; }

    var sum=0;
    for(var i = 0;i<len;i++)
    {
        sum += values[i];
    }
    var avg = sum/len;
    return avg;
}

function SFM_if_else(condn,if_true,if_false)
{
    if(condn)
    {
        return if_true;
    }
    else
    {
        return if_false;
    }
}

function SFM_round(num,dec)
{
    var result = Math.round(num*Math.pow(10,dec))/Math.pow(10,dec);
	return result;
}

function SFM_perc_of(total,perc)
{
    return((total*perc)/100);
}

function SFM_find_perc(fraction,max)
{
    return((fraction*100)/max);
}

function sfm_date_diff(d1,d2)
{
    var msecsperday = 1000 * 60 * 60 * 24;


    var days = Math.ceil((d1.getTime()- d2.getTime())/msecsperday);

    return days;
}

function SFM_days_between(date1,date2)
{
    if(!date1.getcal || !date2.getcal)
    {
        return null;
    }

    var d1 = date1.getcal();
    var d2 = date2.getcal();

    if(!d1 || !d2)
    {
        return null;
    }

    return sfm_date_diff(d1,d2);
}

function SFM_days_from_today(other_date)
{
    if(!other_date.getcal)
    {
        return null;
    }
    var d1 = other_date.getcal();
    if(!d1)
    {
        return null;
    }

    return sfm_date_diff(d1,new Date());
}

function SFM_format_currency(amount,add_comma)
{
	var the_num = parseFloat(amount);

	if(isNaN(the_num)) 
    { 
        the_num = 0.00; 
    }

	var minus = '';
	if(the_num < 0) 
    { 
        minus = '-'; 
    }
	the_num = Math.abs(the_num);
	the_num = parseInt((the_num + .005) * 100,10);
	the_num = the_num / 100;

	strN = new String(the_num);

    parts = strN.split('.');

    part1 = parts[0];

    part2 = parts.length > 1 ? parts[1]:'';

    if(add_comma)
    {
        var rgx = new RegExp(/(\d+)(\d{3})/);

        var m;
        while(m=rgx.exec(part1)) 
        {
            part1 = part1.replace(m[0], m[1] + ',' + m[2]);
        }
    }

    if(part2.length == 0)
    {
        part2='00';
    }
    else if(part2.length == 1)
    {
        part2 += '0';
    }

	return (minus + part1 + '.' + part2);

}

function SFM_GetRadioValue(radioObj)
{
	if(!radioObj){return 0;}

    var ret_val=0;
	var radioLength = radioObj.length;
	if(radioLength == undefined)
    {
		if(radioObj.checked)
        {
			ret_val= radioObj.value;
        }
    }
    else
    {
	    for(var i = 0; i < radioLength; i++) 
        {
		    if(radioObj[i].checked) 
            {
                ret_val = radioObj[i].value;
		    }
	    }
    }
	return SFM_Normalize_ReturnValue(ret_val);
}

//returns number if the value is number else passes the value itself
function SFM_Normalize_ReturnValue(val)
{
    var ret = val;
    if(val.length > 0)
    {
        if(val.match(/^[\-\+]?[\d]*\.?[\d]*$/))
        {
            ret = parseFloat(val);
            if(isNaN(ret))
            {
                ret = val;
            }
        }
    }
    
    return ret;
}

function SFM_GetListValue(listobj)
{
    return(SFM_Normalize_ReturnValue(listobj.options[listobj.selectedIndex].value));
}

function SFM_is_checked_grp(value,objcheck)
{
    return SFM_is_checked_internal(objcheck,value);
}

function SFM_is_checked(objcheck)
{
    return SFM_is_checked_internal(objcheck,'on');
}

function SFM_is_checked_internal(objcheck,value)
{
    if(objcheck.length)
     {
         for(var c=0;c < objcheck.length;c++)
         {
           if(objcheck[c].checked == "1" && 
	         objcheck[c].value == value)
           {
            return 1; 
           }
         }
     }
     else
     {
      if(objcheck.checked == "1" )
       {
        return 1; 
       }    
     }
     return 0;
}

function SFM_GetDecimalValue(strValue)
{
    strValue = strValue.replace(/\,/g,"");
    return parseFloat(strValue);
}

function SFM_addHandler(input_obj,event_name,func_handler) 
{ 
    if(input_obj[event_name] == undefined ||
       typeof(input_obj[event_name]) != 'function')
    {
        input_obj[event_name]= func_handler; 
    }
    else 
    { 
        var old_event = input_obj[event_name];
        input_obj[event_name]= function() 
                { 
                  if (old_event) 
                  { 
	                old_event(); 
                  } 
                  func_handler(); 
                } 
    } 
} 

function sfm_calc_trim(strIn)
{
   return strIn.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
}

function SFM_map_to_number(mapstr,curvalue)
{
    curvalue = sfm_calc_trim(curvalue);

    var maps = mapstr.split(",");
    
    for(var m=0;m<maps.length;m++)
    {
        var parts = maps[m].split("=>");
        var str = sfm_calc_trim(parts[0]);
        var val = parts[1];
        
        if(curvalue == str)
        {
            return parseFloat(val);
        }
    }
    return 0;
}

/*
	Copyright (C) 2008-2009 Simfatic Solutions . All rights reserved.
*/