window.openWithHashOptions = function(url, name, options) {
    if (typeof options != 'object' || options instanceof String) {
        return window.openWithoutHashOptions(url, name, options);
    }
    var opts = {
        directories: 'no',
        location:    'no',
        menubar:     'no',
        personalbar: 'no',
        resizable:   'yes',
        scrollbars:  'yes',
        status:      'no',
        toolbar:     'no'
    };
    if (options.size) {
        var m = options.size.match(/^(\d+)x(\d+)$/);
        if (m) {
            options.width  = m[1];
            options.height = m[2];
        }
        delete options.size;
    }
    for (var key in options) {
        if (options.hasOwnProperty(key)) {
            opts[key] = options[key];
        }
    }
    options = [];
    for (var key in opts) {
        if (opts.hasOwnProperty(key)) {
            options.push(key + '=' + opts[key]);
        }
    }
    return window.openWithoutHashOptions(url, name, options.join(','));
}
window.openWithoutHashOptions = window.open;
window.open = window.openWithHashOptions;


function disableSubmitOnSubmit(form) {
    Event.observe(form, 'submit', function() {
        Form.getInputs(form, 'submit').each(function(submit) {
            submit.disabled = true;
        });
    });
}


Object.extend(Form, {
    setSelectOptions: function(select, options, _options) {
        var __options = $H({ text: 'text', value: 'value', include_blank: false });
        __options.merge(_options)
        select = $(select);
        var adjustment = __options.include_blank ? 1 : 0;
        select.length = options.length + adjustment;
        for (var i = 0; i < options.length; i++) {
            select.options[i + adjustment].text  = options[i][__options.text];
            select.options[i + adjustment].value = options[i][__options.value];
        }
    },

    setSelectByValue: function(select, value) {
        select = $(select);
        for (var i = 0, l = select.options.length; i < l; i++) {
            if (select.options[i].value == value) {
                select.selectedIndex = i;
                break;
            }
        }
    }
});

Number.prototype.toJson = function() {
    return this.toString();
}


function deleteWithConfirm(url, message) {
    message = message || '本当に削除してよろしいですか？';
    if (confirm(message)) {
        var f = document.createElement('form');
        document.body.appendChild(f);
        f.method = 'POST';
        f.action = url;
        f.submit();
    };
}

function under_construction() {
    alert('ごめんなさい、現在準備中です！');
    return false;
}


String.prototype.toJson = function() {
    return '"' + this.replace(/"/g, '\\"') + '"';
}

Array.prototype.toJson = function() {
    var jsons = this.map(function(i) { return i.toJson() });
    return '[' + jsons.join(',') + ']';
}

Hash.prototype.toJson = function() {
    var jsons = this.map(function(i) { return '"' + i[0].toString() + '":' + i[1].toJson() });
    return '{' + jsons.join(',') + '}';
};
