<!--
 Speed Dial head template for Midori.
 Copyright (C) 2009 Jean-François Guchens <zcx000@gmail.com>
 Copyright (C) 2011 Paweł Forysiuk <tuxator@o2.pl>
 Copyright (C) 2011 Cassidy James <email@cassidyjames.com>
 This file is licensed under the terms of the expat license, see the file EXPAT.
-->

<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>{title}</title>
    <style>

    /* Animations */

    @-webkit-keyframes popin {
        0%   { opacity: 0.0; -webkit-transform: scale(0.00); }
        75%  { opacity: 0.5; -webkit-transform: scale(1.15); }
        100% { opacity: 1.0; -webkit-transform: scale(1.00); }
    }

    /* Styles */

    * {
        margin: 0;
        padding: 0;
        cursor: default;
        font-size: 13px;
        color: #4d4d4d;
        -webkit-user-select: none;
    }

    html, body {
        font-family: sans-serif;
        width: 100%;
        height: 100%;
        outline: 0;
        background: #eee;
    }

    input {
        width: 85%;
    }

    #content {
        width: 96%;
        height: 85%;
        margin: 0 auto;
        padding-top: 5%;
        padding-left: 2%;
    }

    div.shortcut {
        width: 25%;
        height: 33%;
        float: left;
    }

    div.shortcut .preview {
        width: 85%;
        height: 75%;
        margin: auto;
        box-shadow: 0 1px 3px rgba(0,0,0,0.12),
                    0 1px 2px rgba(0,0,0,0.24);
        position: relative;
        border-radius: 3px;
        transition: all 200ms ease-in-out;
        outline: none;
    }

    div.shortcut .preview img {
        width: 100%;
        height: 100%;
        cursor: pointer;
        border-radius: 3px;
    }
    
    div.shortcut .preview.new {
        background-color: rgba(0,0,0,0.05);
        border: 1px solid rgba(0,0,0,0.15);

        box-shadow: inset 0 0 1px 1px rgba(0,0,0,0.05),
                          0 1px 0 0 rgba(255,255,255,0.40);
        overflow: hidden;     
    }

    div.shortcut .preview.new .add {
        background-color: #777;
        width: 64px;
        height: 64px;
        line-height: 64px;
        text-align: center;
        border-radius: 32px;
        position: absolute;
        left: 50%;
        top: 50%;
        margin-left: -32px;
        margin-top: -32px;
        box-shadow: 0 1px 3px rgba(0,0,0,0.12),
                    0 1px 2px rgba(0,0,0,0.24);
        outline: none;
    }
    
    div.shortcut .preview.new .add:after {
        content: "+";
        color: #fff;
        font-size: 48px;
        display: inline-block;
    }

    .title {
        background: transparent;
        border: 2px solid transparent;
        display: block;
        text-align: center;
        margin: 8px;
        margin-left: auto;
        margin-right: auto;
        white-space: nowrap;
        text-overflow: ellipsis;
        overflow: hidden;
        cursor: text;
        outline: none;
        transition: all 200ms ease-in-out;
        padding-bottom: 6px;
    }
    
    .preview.new ~ .title {
        cursor: default;
    }
    
    .title.active {
        border-bottom-color: #4CAF50;
    }

    .cross {
        color: #fff;
        display: block;
        width: 32px;
        height: 32px;
        text-align: center;
        line-height: 32px;
        top: -14px;
        right: -14px;
        position: absolute;
        cursor: pointer;
        opacity: 0;
        background-color: #555;
        border-radius: 16px;
        box-shadow: 0 1px 3px rgba(0,0,0,0.12),
                    0 1px 2px rgba(0,0,0,0.24);
    }
    
    .cross:after {
        content: '+';
        -webkit-transform: rotate(45deg);
        font-size: 22px;
        display: inline-block;
    }

    div.shortcut .preview:hover .cross {
        -webkit-animation: popin 250ms ease-in-out;
        opacity: 1;
    }

    .box.added {
        display:none;
    }

    .selectable {
        -webkit-user-select: text;
    }
    </style>

    <script type="text/javascript">
    var previousName = "";

    function input_key_down (ev) {
        // 13 is the key code for enter
        if(ev.keyCode == 13) ev.target.blur();
        // 27 is the key code for escape
        if(ev.keyCode == 27) {
            ev.target.value = previousName;
            ev.target.blur();
        }
    }

    function add_tile (ev) {
        ev.preventDefault();

        var url = prompt ("{enter_shortcut_address}", "http://");
        if (!url)
            return false;

        if (url.indexOf ("://") == -1)
            url = "http://" + url;

        var id = ev.target.parentNode.parentNode.id;
        console.log ("speed_dial-save-add " + id + " " + url);
    }

    function done_editing_title (ev) {
        input = ev.target;
        input.className = "title";

        var name = ev.target.value;
        if (name == "")
            name = previousName;
        var id = ev.target.parentNode.id;
        console.log ("speed_dial-save-rename " + id + " " + name);
    }

    function editing_tile (ev) {
        input = ev.target;
        previousName = input.value;
        // indicate to user they are editing the title
        input.className = input.className + " active";
    }

    function delete_tile (ev) {
        ev.preventDefault();

        if (!confirm("{are_you_sure}"))
            return;

        var id = ev.target.parentNode.parentNode.id;
        console.log ("speed_dial-save-delete " + id);
    }

    var firstNode, secondNode;
    var cursor;

    var get_dial_div = function (ele) {
        var dial_div;
        if (ele.nodeName == 'IMG')
            dial_div = ele.parentNode.parentNode.parentNode;
        if (ele.className == 'title')
            dial_div = ele.parentNode;
        if (ele.className.indexOf ('shortcut') != -1)
            dial_div = ele;
        return dial_div;
    }

    function click (ev) {
        if (ev == undefined)
            return;

        /* If the target of the event is an element of class title
         * and not also of class add-shortcut we are editing title
         */
        var classes = ev.target.className.split(" ");
        var edit_title = false;
        for (var i = 0; i < classes.length; i++) {
            if(classes[i] == "add-shortcut") {
                edit_title = false;
                break;
            }
            if(classes[i] == "title") 
                edit_title = true;
        }

        if(edit_title) 
            return;

        ev.preventDefault();
        var ele = ev.target;
        cursor = ele.style.cursor;
        ele.style.cursor = 'move';

        var eparent = get_dial_div (ele);
        if (eparent != undefined) {
            eparent.className = 'shortcut selected';
            firstNode = eparent.id;
        }
    };

    function up (ev) {
        if (ev == undefined)
            return;

        ev.preventDefault();
        ele = ev.target;
        var eparent = get_dial_div (ele);

        ele.style.cursor = cursor;
        if(eparent != undefined) secondNode = eparent.id;
        else return;

        /* ommit just mere clicking the dial */
        if (firstNode != secondNode && firstNode != undefined)
            swap();
    };

    function over (ev) {
        if (ev == undefined)
            return;

        ev.preventDefault();
        var ele = ev.target;
        var eparent = get_dial_div (ele);

        var dial = document.getElementsByClassName("shortcut");
        if (firstNode != undefined)
        {
            eparent.className = 'shortcut selected';
            for (var i = 0; i < dial.length; i++) {
                if (eparent.id != firstNode.id && dial[i].id != eparent.id) {
                    dial[i].className = 'shortcut';
                }
            }
        }
        ele.style.cursor = cursor;
    }

    function swap () {
        console.log ("speed_dial-save-swap " + firstNode + " " + secondNode);
    };

    function init () {
        var new_tile = document.getElementsByClassName ("preview new");
        new_tile[0].addEventListener ('click', add_tile, false);

        var titles = document.getElementsByClassName ("title");
        var len = titles.length;
        for (var i = 0; i < len; i++) {
            if (titles[i].parentNode.childNodes[0].className != "preview new") {
                titles[i].addEventListener ('click', editing_tile, false);
                titles[i].addEventListener ('blur', done_editing_title, false);
                titles[i].addEventListener ('keydown', input_key_down, false);
            }
        }

        var crosses = document.getElementsByClassName ("cross");
        var len = crosses.length;
        for (var i = 0; i < len; i++)
            crosses[i].addEventListener ('click', delete_tile, false);

        var occupied_tiles = document.getElementsByClassName ("shortcut");
        var len = occupied_tiles.length;
        for (var i = 0; i < len; i++) {
            if (occupied_tiles[i].childNodes[0].className != "preview new") {
                occupied_tiles[i].addEventListener('mousedown', click, false);
                occupied_tiles[i].addEventListener('mouseover', over, false);
                occupied_tiles[i].addEventListener('mouseup', up, false);
            }
        }
    }
    </script>
</head>
<body onload="init ();">
    <div id="content">