Filmagenda = {}
Filmagenda.Remote = {}

Filmagenda.togglePair = function(a, b) {
  $(a).toggle()
  $(b).toggle()
}

Filmagenda.extractId = function(str) {
  var r = /^\w+\[(\d+)\]/
  var m = r.exec(str)
  if (m != null)
    return m[1]
  else
    return ""
}

Filmagenda.stripeTable = function(t, oddColor, evenColor) {
  oddColor = oddColor || "#fff"
  evenColor = evenColor || "#edf3fe"
  var isOdd = false
  $(t).select("tbody").each(function(tbody) {
    tbody.select("tr").each(function(trow) {
      if (!trow.hasClassName("preserve"))
        trow.style.backgroundColor = isOdd ? oddColor : evenColor
      isOdd = !isOdd
    })
  })
}

Filmagenda.Remote.Change = Behavior.create({
  initialize: function(options) {
    this.url = options["url"]
    this.param = options["param"]
    this.callback = options["callback"]
  },
  onchange: function(e) {
    var url = this.url.gsub("_ID_", Filmagenda.extractId(e.target.name))
    var ajaxOptions = {parameters: {authenticity_token: auth_token}, onComplete: this.callback}
    if (this.param != null)
      ajaxOptions["parameters"][this.param] = $F(e.target)
    new Ajax.Request(url, ajaxOptions)
  }
})

Filmagenda.drawRating = function(element, value) {
  var normalized_value = value * 10
  var base_value = Math.floor(normalized_value / 10)
  var fractional_value = normalized_value % 10
  var stars = element.childElements()
  for (i=0; i<base_value; i++)
    stars[i].src = "/images/star.png"
  if (fractional_value >= 5) {
    stars[i].src = "/images/halfstar.png"
    base_value += 1
  }
  for (i=base_value; i<stars.length; i++)
    stars[i].src = "/images/blankstar.png"
}

Filmagenda.Rating = Behavior.create({
  initialize: function(options) {
    this.originalValue = options["value"] || 0
    this.url = options["url"]
    this.paramName = options["paramName"] || "vote"
    var stars = this.element.childElements()
    for (i=0; i<stars.length; i++)
      stars[i].ratingValue = i+1
  },
  draw: function(value) {
    Filmagenda.drawRating(this.element, value)
  },
  onmouseover: function(e) {
    if (!this.fixed && e.target.tagName == "IMG")
      this.draw(e.target.ratingValue)
  },
  onclick: function(e) {
    if (!this.fixed && e.target.tagName == "IMG") {
      this.fixed = true
      if (this.url) {
        var params = {authenticity_token: auth_token}
        params[this.paramName] = e.target.ratingValue
        new Ajax.Request(this.url, {parameters: params})
      }
    }
  },
  onmouseout: function(e) {
    if (!this.fixed)
      this.draw(this.originalValue)
  }
})

Filmagenda.SearchField = Behavior.create({
  initialize: function() {
    this.initialValue = $F(this.element)
  },
  onfocus: function(e) {
    var value = $F(this.element)
    if (value == this.initialValue) {
      this.element.value = ""
      this.element.style.color = "black"
    }
  },
  onblur: function(e) {
    var value = $F(this.element).strip()
    if (value == "") {
      this.element.value = this.initialValue;
      this.element.style.color = ""
    }
  }
})

var Confirmation = Behavior.create({
  onclick: function(e) {
    if (!confirm("Sei sicuro?")) {
      e.stop()
      return false
    } else return true
  }
})

Event.addBehavior.reassignAfterAjax = true;