//*******************************
// Media javascript
// (c) Martin Kufner 2007-2008
//*******************************
var Media = {
  containerExtender: {
		isMedia: true,
    media_info: function(which) {
      var m,cdata;
      this.media_info_cached = {};
//      if(!this.media_info_cached) {
        m = this.className.match(/((\S+)_)?Media_(\S+)/);
        if(m) {
        	this.media_info_cached.media_id = m[3];
        	this.media_info_cached.media_class = m[0];
        	if(m[2]) {
        		m = m[2].split("_");
        		this.media_info_cached[m[0].toLowerCase()+'_id'] = m[1];
        	}
        }
        m = this.className.match(/MediaUUID_(\S+)/);
        if(m) this.media_info_cached.uuid = m[1];
        cdata = this.firstChild;
        if(cdata.nodeType == 8 || cdata.nodeType == 4)
          this.media_info_cached['options'] = cdata.nodeValue.strip(); //.replace(/^\[CDATA\[(.*)\]\]/,'$1');
//      }
      if(which) return this.media_info_cached[which];
      return this.media_info_cached;
    },
    media_class: function() {return this.media_info('media_class') },
    media_id: function() {return this.media_info('media_id') },
    parameters: function() {
      var o;
      o = Object.clone(this.media_info());
      o['mediaContainerId'] = this.identify();
      return o;
    },
    media_options: function() {return this.mediainfo('options') },
    set_media_class: function(m) {
      var newClassName;
			this.className = this.className.replace(/\S*_?Media\S*/g,'');
      if(typeof(m) == "string") {
				newClassName = m;
      } else {
        newClassName = [m.mediaof_type,m.mediaof_id,"Media",m.media_id].compact().join("_") + ' Media_' + m.media_id;
      }
			this.className = this.className + ' ' + newClassName;
      this.media_info_cached = false;
      this.media_info();
    },
		reload: function(media_id) {
			if(!media_id) media_id = this.media_id();
			new Ajax.Request( "/medias/"+media_id, {method: "get", parameters: this.parameters()});
		},
		update_media: function(media_class,render) {
			this.set_media_class(media_class);
			this.reload();
//			this.down(".mediaObject").replace(render);
		}
  },
	getMediaContainer: function(which) {
		which = $(which);
		if(!which.isMedia) Object.extend(which,this.containerExtender);
		return which;
	},
	reload: function(selector,media_id) {
		var elems = $$("."+selector);
		for(var i=0; i < elems.length; i++) {
			var mcel = elems[i];
			if(!mcel.media_info) Object.extend(mcel,this.containerExtender);
			mcel.reload(media_id);
		}
	},
  openUpload: function(which,options) {
    var mcel, path, params;
    options = Object.extend({position: 'append'},options || {})
		if(which) {
			switch(options.position) {
				case "before": mcel = $(which).next('.mediaContainer');break;
				default : mcel = $(which).previous('.mediaContainer');break;
				//default: mcel = $(which).up('.mediaContainer');
			}
			options.uuid = mcel.className.replace(/^.*mediaUUID_(\S+).*$/,'$1');
		} else {
			new Ajax.Request('/medias/new',{parameters: options,  method: 'get'});
			return;
		}
    if(!mcel) return;
    if(!mcel.media_info) Object.extend(mcel,this.containerExtender);
    path = mcel.media_id() == 'missing' ? '/medias/new' : '/medias/'+mcel.media_id()+'/edit';
    var get_params = mcel.parameters();
    Object.extend(get_params,{media: (options.set || {})})
    new Ajax.Request(path,{
			method: 'get',
			parameters: get_params
		});
  },
	media_id: function(mcel) {
		if(! (mcel = $(mcel))) return;
		if(!mcel.media_info) Object.extend(mcel,this.containerExtender);
		return mcel.media_id();
	},
  update: function(mcel,media_class) {
		if(! (mcel = $(mcel))) return;
		if(!mcel.media_info) Object.extend(mcel,this.containerExtender);
		return mcel.update_media(media_class);
  },
	update_all: function(selector,media_class) {
		var elements = $$(selector);
		for(var i=0; i < elements.length;i++) {
			this.update(elements[i],media_class);
		}
	}
}
