<!doctype>
<html>

<head>
<script type="text/javascript" src="../dist/web3.js"></script>
<script type="text/javascript">

    var web3 = require('web3');
    web3.setProvider(new web3.providers.HttpProvider("http://localhost:8545"));

    // solidity code code
    var source = "" +
    "contract test {\n" +
    "   function take(uint[] a, uint b) constant returns(uint d) {\n" +
    "       return a[b];\n" +
    "   }\n" +
    "}\n";

    var compiled = web3.eth.compile.solidity(source);
    var code = compiled.test.code;
    // contract json abi, this is autogenerated using solc CLI
    var abi = compiled.test.info.abiDefinition;

    var myContract;

    function createExampleContract() {
        // hide create button
        document.getElementById('create').style.visibility = 'hidden'; 
        document.getElementById('code').innerText = code;

        // let's assume that coinbase is our account
        web3.eth.defaultAccount = web3.eth.coinbase;

        var watch = web3.eth.filter('latest');

        // create contract
        myContract = web3.eth.contract(abi).new({data: code});
        console.log('address: ' + myContract.address);
        document.getElementById('status').innerText = "transaction sent, waiting for confirmation";
        watch.watch(function (err, hash) {
            var block = web3.eth.getBlock(hash, true); 
            var contractMined = block.transactions.reduce(function (mined, th) {
                // TODO: compiled code do not have 0x prefix
                return mined || (th.from === web3.eth.defaultAccount && th.input.indexOf(code) !== -1);
            }, false);

            if (contractMined) {
                document.getElementById('status').innerText = 'Mined!';
                document.getElementById('call').style.visibility = 'visible';
            }
        });

    }

    function callExampleContract() {
        // this should be generated by ethereum
        var param = parseInt(document.getElementById('value').value);

        // call the contract
        var res = myContract.take([0,6,5,2,1,5,6], param);
        document.getElementById('result').innerText = res.toString(10);
    }

</script>
</head>
<body>
    <h1>contract</h1>
    <div id="code"></div> 
    <div id="status"></div>
    <div id='create'>
        <button type="button" onClick="createExampleContract();">create example contract</button>
    </div>
    <div id='call' style='visibility: hidden;'>
        <div>var array = [0,6,5,2,1,5,6];</div>
        <div>var x = array[
            <input type="number" id="value" onkeyup='callExampleContract()'></input>
        ];
        </div>
    </div>
    <div id="result"></div>
</body>
</html>