
if (typeof HNG == 'undefined')
    HNG = {};

HNG.Info = function(element) {
  this.element = $(element);
  this._value = "";
  this.autoDraw = false;
}

HNG.Info.prototype = {
  update: function() {
    this.element.innerHTML = this._value;
    if (this.element.className == "alert") {
        Effect.Shake('container');
    }
  },
  setStatus: function(string) {
    this._value = string;
    if (this.autoDraw) {
        this.update();
    }
  },
  clear: function() {
    this.setStatus("");
    this.update();
  },
  state: function(name) {
    this.element.className = name;
  }
}

HNG.LinkUnit = function(element) {
    this.element = $(element);
    this.visible = false;
    new Effect.BlindUp(this.element, {duration: 0})
}

HNG.LinkUnit.prototype = {
    show: function() {
        new Effect.BlindDown(this.element);
        this.visible = true;
    },
    hide: function() {
        new Effect.BlindUp(this.element);
        this.visible = false;
    },
    toggle: function() {
        if (this.visible) {
            this.hide();
        } else {
            this.show();
        }
    }
}

HNG.Generator = function(form, text, submit, status) {
    this.form = $(form);
    this.text = $(text);
    this.submit = $(submit);
    this.info = new HNG.Info(status);
    this.info.autoDraw = true;
    this.initialize(form);
}

HNG.Generator.prototype = {
  initialize: function() {
    var self = this;
    var value = ""
    var lb = new HNG.LinkUnit('linkbox');
    var qr = new HNG.LinkUnit('linkmobile');
    var listener = function() {
        value = self.text.value;
        Form.disable(self.form.id);
        $('link').href = 'http://www.bulkitem.com/hng/';
        self.info.state('normal');
        var option = {
            method: 'post',
            postBody: 'action=gen&url=' + encodeURIComponent(self.text.value),
            asynchronous: true,
            onLoading: function() { self.info.setStatus('<img src="./images/loading.gif" />ハンドルネームの生成中...'); },
            onSuccess: function(http) {
                obj = eval(http.responseText);
                if (obj.first_name.surface == "タイムアウト") {
                    self.info.state('alert');
                    self.info.setStatus("ページを開けません。URLを確認してください。");
                } else {
                    var surface = obj.family_name.surface + " " + obj.first_name.surface;
                    var reading = obj.family_name.reading + " " + obj.first_name.reading;
                    self.info.setStatus("こんにちは! <b>" + surface + "</b>（" + reading + "） さん。");
                    $('link').href = './?url=' + encodeURIComponent(self.text.value);
                    var url =  ($('url').value.indexOf("http://") == -1 && $('url').value.indexOf("https://") == -1) ? $('hn_url').value = 'http://' + $('url').value : $('url').value;
                    $('hn_url').value = "http://www.bulkitem.com/hng/?url=" + encodeURIComponent(url);
                    $('hn_tag').value = '<a href="http://www.bulkitem.com/hng/?url=' + encodeURIComponent(url) + '">' + $('url').value + "のハンドルネーム" + '</a>';
                    self.text.value = value;
                }
            },
            onFailure: function(e) {
                self.info.state('alert');
                self.info.setStatus(e.statusText);
            },
            onException: function(e) {
                self.info.state('alert');
                self.info.setStatus(e.statusText);
            },
            onComplete: function() {
                Form.enable(self.form.id);
            }
        }
        if (!Field.present(self.text.id)) {
            Form.enable(self.form.id);
            self.info.state('alert');
            self.info.setStatus('URLを入力してください。');
            Field.activate($('url'));
        } else {
            new Ajax.Request(self.form.action, option);
        }
    }
    Event.observe(this.form, 'submit', function(event) {
            listener.apply(this, arguments);
            Event.stop(event);
        }, false);
    Event.observe($('link'), 'click', function(event) {
            lb.toggle();
            Event.stop(event);
        }, false);
    Event.observe($('qrcode'), 'click', function(event) {
            qr.toggle();
            Event.stop(event);
        }, false);
    Event.observe(window, 'load', function(event) {
            if ($('url').value != "") {
                listener.apply(this, arguments);
            } else {
                self.info.setStatus('URLを入力してください。');
                Field.activate($('url'));
            }
            $('hn_url').value = location.href;
            $('hn_tag').value = '<a href="' + location.href + '">ハンドルネームジェネレーター</a>';
        }, false);
  }
}

