Active TopicsActive Topics  Display List of Forum MembersMemberlist  Search The ForumSearch  HelpHelp
  RegisterRegister  LoginLogin
PowerHome Macros, Scripts, and Formulas Repository
 PowerHome Messageboard : PowerHome Macros, Scripts, and Formulas Repository
Subject Topic: Javascript Calculator Dim Level entry Post ReplyPost New Topic
Author
Message << Prev Topic | Next Topic >>
krommetje
Super User
Super User
Avatar

Joined: December 29 2004
Location: Netherlands
Online Status: Offline
Posts: 695
Posted: February 16 2007 at 12:25 | IP Logged Quote krommetje

Here is a complete PSP-file which enables you to enter a Dim level for a dimmer with a POP-UP caclulator:

Code:


<script type="text/javascript"><!--
/* Script by: www.jtricks.com
* Version: 20060426
* Latest version:
* www.jtricks.com/javascript/forms/calculator.html
*/
var calc_image = 'calc.gif';

var calc_start_num = false;
var calc_cur_oper = '';
var calc_acc = 0;
var calc_prev_oper = 0;
var calc_prev_entry = 0;

var calc_field;

function calc_num_value()
{
    if (calc_field.value == '0.')
        return calc_field.value;
    else if (isNaN(calc_field.value))
        return 0;
    else
        return parseFloat(calc_field.value);
}

function calc_perform_oper(oper, val1, val2)
{
    switch(oper)
    {
    case '*':
        return val1 * val2;
    case '/':
        return val1 / val2;
    case '+':
        return Math.round(
                   val1 * 10000000000000 +
                   val2 * 10000000000000) /
                   100000000000 00;
    case '-':
        return Math.round(
                   val1 * 10000000000000 -
                   val2 * 10000000000000) /
                   100000000000 00;
    default:
        return val2;
    }
}

function calc_press(button)
{
    switch (button)
    {
    case 'CE':
        calc_start_num = true;
        calc_field.value = "0";
        return;

    case 'C':
        calc_acc = 0;
        calc_prev_entry = 0;
        calc_cur_oper = "";
        calc_prev_oper = "";
        calc_start_num = true;
        calc_field.value = "0";
        return;

    case '+/-':
        calc_field.value = calc_num_value() * -1;
        return;

    case ',':
    case '.':
        if (calc_start_num || isNaN(calc_field.value))
        {
                calc_field.value = "0.";
                calc_start_num = false;
        }
        else
        {
                if (calc_field.value.indexOf(".") == -1)
                   calc_field.value += ".";
        }
        return;

    case '+':
    case '-':
    case '/':
    case '*':
        calc_prev_oper = button;

        if (calc_start_num)
        {
                calc_cur_oper = button;
                return;
        }

        // No break here.

    case '=':
        calc_start_num = true;

        if (button == '=' && calc_cur_oper != '=')
        {
                calc_prev_entry = calc_num_value();
        }

        if (button == '=' && calc_cur_oper == '=')
        {
                calc_acc = calc_perform_oper(
                   calc_prev_oper, calc_acc, calc_prev_entry)
        }
        else
                calc_acc = calc_perform_oper(
                   calc_cur_oper, calc_acc, calc_num_value());

        calc_field.value = calc_acc;
        calc_cur_oper = button;

        return;
    }

    if (calc_start_num)
    {
        calc_field.value = button;
        calc_start_num = false;
    }
    else
    {
        if (calc_num_value() == "0")
                calc_field.value = button;
        else
                calc_field.value += button;
    }
}

function calc_setup(frm, inp)
{
    if (!document.getElementById)
        return;

    document.write(
        '<a href="javascript:void(0);" ' +
        'onclick="calc_show_hide(\'' +
        frm + '\', \'' + inp +
        '\')"><img style="border:none" ' +
        'src="' + calc_image +
        '"><' + '/a>');
}

function move_box(an, box)
{
    var cleft = 0;
    var ctop = 0;
    var obj = an;

    while (obj.offsetParent)
    {
        cleft += obj.offsetLeft;
        ctop += obj.offsetTop;
        obj = obj.offsetParent;
    }

    box.style.left = cleft + 'px';

    ctop += an.offsetHeight + 2;

    // Handle Internet Explorer body margins,
    // which affect normal document, but not
    // absolute-positioned stuff.
    if (document.body.currentStyle &&
        document.body.currentStyle['marginTop'])
    {
        ctop += parseInt(
                document.body.currentStyle ['marginTop']);
    }

    box.style.top = ctop + 'px';
}

function calc_show_hide(frm, inp)
{
    var boxcalc = document.getElementById('attach_calc_div');
    var to_obj = document.forms[frm].elements[inp];

    if (boxcalc == null)
        return;

    if (to_obj != calc_field ||
        boxcalc.style.display=='none')
    {
        // Show and move calculator.

        move_box(to_obj, boxcalc);
        calc_field = to_obj;
        boxcalc.style.display='block';
    }
    else
        // Hide currently shown calculator.
        boxcalc.style.display='none';
    return false;
}

function calc_hide()
{
    document.getElementById('attach_calc _div')
        .style.display = 'none';
}

//--></script>

<form name="dim" action="/ph-cgi/devicebtn">
<form method="get" action="/ph-cgi/devicebtn">
<input type="hidden" name="type" value="0">
<input type="hidden" name="id" value="M2">
<input type="submit" name="cmd" value="On" style="background-color:white;border-color:red";>
<input type="submit" name="cmd" value="Off" style="background-color:white;border-color:red"'>
<input type="submit" value="ADim" style="background-color:white;border-color:red";>
<input name="level" type="text" size="5" value="0">
<script type="text/javascript"><!--
calc_setup('dim', 'level');
//--></script>
<input type="hidden" name="cmd" value="ADim">

<div id="attach_calc_div"
style="background:white;padding:2px;border:1px solid #2266AA;position:absolute;display:none">
<form name="attach_calc_form" action="/ph-cgi/devicebtn"
style="margin-bottom:0px;margin-top:0px">

<table style="border:none;padding:0px;border-spacing:0px">

<tbody>

<TR><td><input style="width:40px" name="cbtn7"
type="button" value="7" onmouseup="calc_press(7)"></td>
<td><input style="width:40px" name="cbtn8"
type="button" value="8" onmouseup="calc_press(8)"></td>
<td><input style="width:40px" name="cbtn9"
type="button" value="9" onmouseup="calc_press(9)"></td>
<td><input style="width:40px" name="cbtnp"
type="button" value="+" onmouseup="calc_press('+')"></td>
<td><input style="width:40px" name="cbtnm"
type="button" value="-" onmouseup="calc_press('-')"></td>
</tr>

<tr>
<td><input style="width:40px" name="cbtn4"
type="button" value="4" onmouseup="calc_press(4)"></td>
<td><input style="width:40px" name="cbtn5"
type="button" value="5" onmouseup="calc_press(5)"></td>
<td><input style="width:40px" name="cbtn6"
type="button" value="6" onmouseup="calc_press(6)"></td>
<td><input style="width:40px" name="cbtnm"
type="button" value="*" onmouseup="calc_press('*')"></td>
<td><input style="width:40px" name="cbtnd"
type="button" value="/" onmouseup="calc_press('/')"></td>
</tr>

<tr>
<td><input style="width:40px" name="cbtn1"
type="button" value="1" onmouseup="calc_press(1)"></td>
<td><input style="width:40px" name="cbtn2"
type="button" value="2" onmouseup="calc_press(2)"></td>
<td><input style="width:40px" name="cbtn3"
type="button" value="3" onmouseup="calc_press(3)"></td>
<td><input style="width:40px" name="cbtnc"
type="button" value="C" onmouseup="calc_press('C')"></td>
<td><input style="width:40px" name="cbtne"
type="button" value="CE" onmouseup="calc_press('CE')"></td>
</tr>

<tr>
<td><input style="width:40px" name="cbtn0"
type="button" value="0" onmouseup="calc_press(0)"></td>
<td><input style="width:40px" name="cbtnd"
type="button" value="." onmouseup="calc_press('.')"></td>
<td><input style="width:40px" name="cbtnn"
type="button" value="+/-" onmouseup="calc_press('+/-')"></td>
<td colspan=2><input style="width:84px" name="cbtnq"
type="Button" value="=" onmouseup="calc_press('=')"></td>
</tr>

</table>
</form>
</div>



The PSP-File is Preset to housecode M unitcode 2 but this can be changed for your own purpose!

Peter

Edited by krommetje - February 16 2007 at 12:26
Back to Top View krommetje's Profile Search for other posts by krommetje Visit krommetje's Homepage
 

If you wish to post a reply to this topic you must first login
If you are not already registered you must first register

  Post ReplyPost New Topic
Printable version Printable version

Forum Jump
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot delete your posts in this forum
You cannot edit your posts in this forum
You cannot create polls in this forum
You cannot vote in polls in this forum