// Photos namespace
if (!Photos) var Photos = { };

// Function for generating an email with javascript
Photos.getMailCode = function()
{
	T = "";
	T += "THOR";
	T += "ASMUND";
	T += "@";
	T += "GMA";
	T += "IL";
	T += ".";
	T += "COM";

  return T;
}

// Functions for preloading images
//Prototype.preloadImages = function(){
Photos.preloadImagesArray = [];

Photos.preloadImage = function(id, src)
{
  Photos.preloadImagesArray.push(new Image());
  Photos.preloadImagesArray.last().src = src;
  if (id != undefined)
  {
    $(Photos.preloadImagesArray.last()).observe('load', function() { 
      var image = $(id);
      var loadedSrc = image.getAttribute('loadedSrc');
      var loadedAltSrc = image.getAttribute('loadedAltSrc');
      image.setAttribute('src', loadedSrc);
      image.setAttribute('restoreSrc', loadedSrc);
      image.setAttribute('altSrc', loadedAltSrc);
    });
  }
}

Photos.preloadImages = function()
{
  var imageIds = [];
	for (var i = 0; i < arguments.length; ++i) {
    Photos.preloadImage(arguments[i].id, arguments[i].src);
	}
}


Photos.ajaxCombo = Class.create({
  initialize: function(element, options) {
    var _this = this;

    // ComboBox object
    this.element = $(element);

    // Establish reciprocal link
    this.element.obj = this;

    // Options
    this.setOptions(options, {
      autoLoad: 'autoLoad', 
      action: '',
      method: 'get',
      responseValuesField: 'values',
      useBlankOption: '',
      blankKey: '',
      blankValue: '---',
      keyField: 'key',
      valueField: 'value'
    });

    // Autoload
    if (this.options.autoLoad != '')
      this.load();
  },
  setOptions: function (options, defaults) {
    this.options = options;
    var _this = this;

    $H(defaults).each(function(pair) {
      if ((option = _this.element.readAttribute(pair.key)) != null) 
        _this.options[pair.key] = option;
      else if (_this.options[name] == undefined)
        _this.options[pair.key] = pair.value;
    });
  },
  load: function() {
    var _this = this;
    new Ajax.Request(this.options.action, {
      method: this.options.method,
      onSuccess: function(response) {
        response = response.responseJSON;

        if (response.success) {
          var valuesField = _this.options.responseValuesField;

          // Clear items
          while (_this.element.childNodes.length >= 1)
            _this.element.removeChild(_this.element.firstChild);

          // Create options
          var elementOptions = '';
          var selectOption = '';
          for (var i=0; i<response[valuesField].length; ++i) {
            elementOptions += '<option value="' + response[valuesField][i][_this.options.keyField] + '">' + response[valuesField][i][_this.options.valueField] + '</option>';
            if (i == 0)
              selectOption = response[valuesField][i][_this.options.keyField];
          }
          if (_this.options.useBlankOption != '') {
            elementOptions = '<option value="' + _this.options.blankKey + '">' + _this.options.blankValue + '</option>' + elementOptions;
            selectOption = '';
          }

          // Insert options
          _this.element.insert({bottom: elementOptions});

          // Select first option
          if (response[valuesField].length > 0)
            _this.element.setValue(selectOption);
        }
        else
        {
          _this.element.insert({bottom: '<option>'+response.message+'</option'});
          _this.element.disable();
        }
      },
      onFailure: function(response) {
        _this.element.disable();
      }
    });
  }
});


Event.observe(document, 'dom:loaded', function() {
  // Create email address
  var murs = $('mailstring');
  murs.innerHTML = Photos.getMailCode();
  murs.href = "mailto:" + Photos.getMailCode().toLowerCase();

  // Hover buttons
  $$('.rollOver').invoke('observe', 'mouseover', function(event){
    var image = event.element();
    var altImageSrc = image.getAttribute('altSrc');
    var imageSrc = image.getAttribute('src');
    image.setAttribute('src', altImageSrc);
    image.setAttribute('restoreSrc', imageSrc);
  }).invoke('observe', 'mouseout', function(event){
    var image = event.element();
    var restoreImageSrc = image.getAttribute('restoreSrc');
    image.setAttribute('src', restoreImageSrc);
  });

  // Auto drop-downs
  $$("select.ajaxCombo").each(function(element) {
    new Photos.ajaxCombo(element, {});
  });

});
