/*
 * MEDIAOBJECT FUNCTIONS
 */

$.fn.YFmediaobjectListActivate = function(ref_class, ref_slug)
{
	var mytable = $().YFgetmediaobjectTableId(ref_class, ref_slug);

	$().YFinterfaceTableZebraRowsInit(mytable);
	$().YFinterfaceLightboxInit();
	$().YFinterfaceTableDragNDropInit({'module':'mediaobject','module_name':str_mediaobjectreference, 'table_class':'medialist'});

	$().YFmediaobjectBindIconSelector();

	if ($("#"+mytable).find('tr.noicon').length > 0) {
		$().YFmediaobjectBindNoIconSelector();
	}
}

$.fn.YFmediaobjectBindIconSelector = function() {
	$(".iconselector").unbind();
	$(".iconselector").click(function(){
		var mediaobject_id = $(this).parent().parent().find(".mediaobject_id").text();
		var table = $(this).parent().parent().parent().parent();
		var ref_vars =  $().YFmediaobjectListGetRelVals(table);
		var ref_class = ref_vars.ref_class;
		var ref_id = ref_vars.ref_id;
		var api_url = uri_api+str_mediaobjectreference+'/seticonbackground';
		
		$.post(api_url, {'mediaobjectreference[mediaobject_id]' : mediaobject_id,
		 				 'mediaobjectreference[ref_class]' : ref_class,
		 				 'mediaobjectreference[ref_id]' : ref_id,
						 'mediaobjectreference[field]' : 'is_icon' }, function(data){
			if (!data.errors){
				return(true);
			} else {
				alert('Could not save the icon');
			}},"json");
	});
}

$.fn.YFmediaobjectBindNoIconSelector = function() {
	$(".noiconselector").unbind();
	$(".noiconselector").click(function(){
		var table = $(this).parent().parent().parent().parent();
		var ref_vars =  $().YFmediaobjectListGetRelVals(table);
		var ref_class = ref_vars.ref_class;
		var ref_id = ref_vars.ref_id;
		
		var api_url = uri_api+str_mediaobjectreference+'/removeiconbackground';
		
		$.post(api_url, {'mediaobjectreference[ref_class]' : ref_class,
		 				 'mediaobjectreference[ref_id]' : ref_id,
						 'mediaobjectreference[field]' : 'is_icon' }, function(data){
			if (!data.errors){
				return(true);
			} else {
				alert('Could not unset the icon');
			}},"json");
	});
}

$.fn.YFmediaobjectDeleteReference = function(options) {
	var defaults = {
		title: '',
		row_id: false,
		ref_slug: false,
		ref_class: false
	};
	var opts = $.extend(defaults, options);
	
	var mediaobject_id	= $('#'+opts.row_id).find('span.mediaobject_id').text();

	var ref_slug = opts.ref_slug;
	var ref_class = opts.ref_class;

	if (!ref_slug || !ref_class) {
		return;
	}

	var ref_id = $().YFmediaobjectListGetRefId(ref_class, ref_slug);

	if (!ref_id) {
		return;
	}

	// give confirmation alert
	var yes=confirm(str_delete_reference_confirm+" «" + opts.title + "»?");
	var offset = 2;
	if(yes){
		var uri = uri_api+str_mediaobjectreference+'/delete/';

		var table = $("#"+opts.row_id).parent();

		// decrease successful_uploads count to allow a new upload
		var swfu_obj_name = table.find(".swfu_obj_name");
		if (swfu_obj_name) {
			var swfu_obj = window[swfu_obj_name.html()];
			if (swfu_obj) {
				var stats = swfu_obj.getStats();
				stats.successful_uploads--;
				swfu_obj.setStats(stats);
			}
		}

		$(".even").removeClass('even');
		$.post(uri,{'mediaobjectreference[ref_class]':ref_class,'mediaobjectreference[ref_id]':ref_id,'mediaobjectreference[mediaobject_id]':mediaobject_id},function(json) { 
			$("#"+opts.row_id).effect("highlight", {color:"#d41111"}, 1000).slideUp("fast",function(){
				var num_rows = $().YFinterfaceTableGetNumRows(table, offset);
				$().YFinterfaceTableZebraRowsInit(table.id);
			});
		});
        return true;
	} else {
        return false;
	}
}

$.fn.YFmediaobjectMetadataSave = function(mediaobject_id, ref_class, ref_slug, ref_id)
{
	var form = $("div#mediaobject"+mediaobject_id);
	
	var title 				= form.find("#mediaobject_title").val();
	var caption 			= form.find("#mediaobject_caption").val();
	var credit_name 		= form.find("#mediaobject_credit_name").val();
	var credit_uri 			= form.find("#mediaobject_credit_uri").val();
	var keywords 			= form.find("#mediaobject_keywords").val();
	var clickthrough_url 	= form.find("#mediaobject_clickthrough_url").val();
	if (clickthrough_url === undefined) { clickthrough_url = 0; }
	var no_download 		= form.find("#mediaobject_no_download").is(':checked');
	if (no_download == false) { no_download = 0; } else { no_download = 1; }
	
	form.parent().html('<img src="'+url_loading_anim+'">');
	
	if (credit_uri === undefined) { credit_uri = ''; }
	if (credit_name === undefined) { credit_name = ''; }
	
	$.post(uri_api+str_mediaobject_module+'/update', { 'where':'mediaobject', 'action':'update','mediaobject[id]': mediaobject_id, 'mediaobject[title]': title, 'mediaobject[credit_name]': credit_name, 'mediaobject[credit_uri]': credit_uri, 'mediaobject[caption]': caption , 'mediaobject[no_download]': no_download , 'mediaobject[keywords]': keywords , 'mediaobject[clickthrough_url]': clickthrough_url , 'mediaobject[redirect]': 0 }, function(data){ 
		// check for valid
		if (!data.errors) {
			var table = $().YFgetmediaobjectTable(ref_class, ref_slug);

			var mediarow_options = '';
			if (table.hasClass('no_embed_button')) {
				mediarow_options += '&embed_button=0';
			}
			if (table.hasClass('no_select_icon')) {
				mediarow_options += '&select_icon=0';
			}
			
			var ref_options_str = $().YFgetRefOptionsStr(ref_class, ref_slug, 1, ref_id);

			var row_url = window.url_prefix + '/'+str_mediaobject_module+'/'+str_row+'/?id='+data.values.id+ref_options_str+mediarow_options;
		  	$.get(row_url,function(data) { 
				$("#mediaobject"+mediaobject_id).replaceWith(data).YFmediaobjectListActivate(ref_class, ref_slug);
				if (ref_id) {
					if($("#"+ref_class+"_id").get() == '') {
						$("input[name=action]").after('<input type="hidden" id="'+ref_class+'_id" name="'+ref_class+'[id]" value="'+ref_id+'">');
					}
				}
			});
		} else {
			// fix errors
			alert(str_error_metadata_saving);
		}
	}, "json");
}

$.fn.YFgetmediaobjectTableId = function(ref_class, ref_slug)
{
		var mediaobject_table_id = $().YFgetmediaobjectTable(ref_class, ref_slug).attr('id');

		return mediaobject_table_id;
}

$.fn.YFgetmediaobjectTable = function(ref_class, ref_slug)
{
	// simplify slug to avaid errors
	var stripped_slug = jQuery().YFstripSlug(ref_slug);

	// super-stupid hack for norwegiancrafts. I, for one, blame Chavez.
	if (ref_class == 'articlepage') { ref_class = 'ArticlePage'; }

	var mediaobject_table = $("table#medialist"+ref_class+"_"+stripped_slug);
	
	if (mediaobject_table.length == 0) {
		mediaobject_table = $("table#medialisticon"+ref_class+"_"+stripped_slug);
	}
	
	return mediaobject_table;
}

/**
 * Parse ref values from the main table's rel attribute
 */
$.fn.YFmediaobjectListGetRelVals = function(table)
{
	var ret = Object;

	var rel = table.attr('rel');
	var vars = rel.split(",");

	
	// get ref_class
	var pair = vars[0].split(":");
	ret['ref_class'] = pair[1];

	// get ref_slug
	var pair = vars[1].split(":");
	ret['ref_slug'] = pair[1];

	// get no_ref_obj
	var pair = vars[2].split(":");
	var val = pair[1];
	if (val == "1") {
		ret['no_ref_obj'] = 1;
	} else {
		ret['no_ref_obj'] = 0;
	}

	// get ref_id
	var pair = vars[3].split(":");
	if (pair.length < 2 || pair[1] == "") {
		ret['ref_id'] = null;
	} else {
		ret['ref_id'] = pair[1];
	}
	
	return ret;
}

$.fn.YfmediaobjectStoreRefId = function(ref_class, ref_slug, ref_id)
{
	var table = $().YFgetmediaobjectTable(ref_class, ref_slug);
	// only add it if it doesn't exist
	if (!$().YFmediaobjectListGetRefId(ref_class, ref_slug)) {
		var val = table.attr('rel');
		val += ref_id;
		table.attr('rel', val);
	}
}

$.fn.YFmediaobjectListGetRefId = function(ref_class, ref_slug)
{
	var values = $().YFmediaobjectListGetRelVals($().YFgetmediaobjectTable(ref_class, ref_slug));
	return values['ref_id'];
}	

$.fn.YFmediaobjectListNoRefObj = function(ref_class, ref_slug)
{
	var values = $().YFmediaobjectListGetRelVals($().YFgetmediaobjectTable(ref_class, ref_slug));
	return values['no_ref_obj'];
}

$.fn.YFmediaobjectGetList = function(ref_class, ref_slug)
{	
	var table = $().YFgetmediaobjectTable(ref_class, ref_slug);
	var stripped_slug = jQuery().YFstripSlug(ref_slug);
	var loader = $("div#medialistloader_"+ref_class+'_'+stripped_slug);
	var no_ref_obj = $().YFmediaobjectListNoRefObj(ref_class, ref_slug);
	var ref_id = $().YFmediaobjectListGetRefId(ref_class, ref_slug);

	if (!no_ref_obj && ref_id){
		table.hide();
		loader.show();
		
		var mediarow_options = '';
		
		if (table.hasClass('no_embed_button')) {
			mediarow_options += '&embed_button=0';
		}
		if (table.hasClass('no_select_icon')) {
			mediarow_options += '&select_icon=0';
		}
		if (table.hasClass('no_admin_view')) {
			mediarow_options += '&admin_view=0';
		}
		mediarow_options += '&embed_field='+table.find(".embed_field_data").text();
		
		var markup_url = uri_admin+str_mediaobject_module+'/'+str_row+'/?ref_id='+ref_id+'&ref_class='+ref_class+mediarow_options;
		
		$.get(markup_url,function(markup) { 
			if (markup !== ''){
				if (table.find('tr.noicon').length > 0) {

					table.find('tr.noicon').before(markup);
					table.slideDown().YFmediaobjectListActivate(ref_class, ref_slug);
				} else {
					table.append(markup).slideDown().YFmediaobjectListActivate(ref_class, ref_slug);
				}
				loader.hide();
			} else {          
				loader.hide();
				table.hide();	
			}
		});
	} else {
		table.hide();
	}
}

$.fn.YFmediaobjectToggleAndEmbed = function(title, module_name, object_slug, ref_class, ref_slug, ref_id, button_id, textfield_id, embed_size, media_type)
{
	var button = $("#"+button_id);
	var previous_state = button.attr("class");
	
	// dirty hack: 
	if (textfield_id == "articlepage_body") { textfield_id = 'ArticlePage_body'; } // Norwegiancrafts.no specific – this is no good, and
	
	if (media_type === undefined) { media_type = 'media'; }
	if (media_type == 'image') {
		str_list_info = str_list_info_image;
		str_turn_visibility_on = str_turn_visibility_on_image;
	} else if (media_type == 'audio') {
		str_list_info = str_list_info_audio;
		str_turn_visibility_on = str_turn_visibility_on_audio;
	}
	// give confirmation alert
	if (previous_state == 'on'){
		var field_name = window['str_embed_' + textfield_id] == undefined ? "" : " " + window['str_embed_' + textfield_id];
		var yes=confirm("«" + title + "» "+str_embed_info + field_name + ". "+str_embed_remember_save);
	} else {
		var yes=confirm("«" + title + "» "+str_list_info);
	}
	
	if(yes){
		var uri = uri_api+module_name+'/toggle/?slug='+object_slug+'&ref_class='+ref_class+'&ref_id='+ref_id;
		$.getJSON(uri,function(json) { 
			if (previous_state == 'on'){
				button.text(str_turn_visibility_on);
				button.attr("class", "off");
				if (embed_size) {
					var embed_string = object_slug+":"+embed_size;
				} else { // for audio
					var embed_string = object_slug;
				}
				$("#"+textfield_id).val($("#"+textfield_id).val() + "\n\n!"+embed_string+"!");
			} else {
				button.text(str_turn_visibility_off);
				button.attr("class", "on");
			}
		});
        return true;
	} else {
        return false;
	}
}

$.fn.YFsetMediaSelectorLightBoxContent = function(ajax_url) {
	$.get(ajax_url, {}, function(data){ 
			$('#existingdialog').html(data);
		});
}

$.fn.YFMediaSelectLightBoxClose = function() {
	$('#existingdialog').dialog('close');
}


$.fn.YFhasMediaSelectorLightBox = false;

$.fn.YFspawnMediaSelectorLightBox = function(ajax_url) {
	if ($.fn.YFhasMediaSelectorLightBox) {
		$('#existingdialog').dialog('open');
		return;
	}

	$.fn.YFhasMediaSelectorLightBox = true;

	$.get(ajax_url, {}, function(data){ 
			$('#existingdialog').html(data);
			var buttons = {};

			buttons[str_cancel] = function() {
				$(this).dialog('close');
				$('.flashbuttons').show();
			};

			var dialog_params = {
			bgiframe: true,
			resizable: false,
			height:460,
			width: 840,
			modal: true,
			overlay: {
				backgroundColor: '#000',
				opacity: 0.5
				},
			buttons: buttons,
			beforeclose: function(){ $('.flashbuttons').show();},
			open: function(){ $('.flashbuttons').hide();}
			};
			$("#existingdialog").dialog(dialog_params);
		});
}

$.fn.YFmediaobjectEditMetadata = function(options) {
	var defaults = {
		mediaobject_id: false,
		mediaobject_slug: false,
		ref_class: false,
		ref_slug: false,
		row_id: false
	};
	var opts = $.extend(defaults, options);
	
	var ref_options_str = $().YFgetRefOptionsStr(opts.ref_class, opts.ref_slug, 0);
	
	var editor_url = window.url_prefix  + "/"+str_mediaobject_module+"/meta/?id="+opts.mediaobject_id+ref_options_str;
	
	$("#"+opts.row_id).html('<td class="inlinemediaobjecteditor" colspan="7"><img src="'+url_loading_anim+'"></td>');
	
	$.get(editor_url, function(data){
		$("#"+opts.row_id).html('<td class="inlinemediaobjecteditor" colspan="7">'+data+'</td>').YFinterfaceLightboxInit();
	});
	
	return false;
}

$.fn.YFaddExistingMediaObjToList = function(ref_class, ref_slug, ref_id, med_id) {
	$.fn.YFaddMediaObjToList(ref_class, ref_slug, ref_id, med_id, 1, 1);
}

$.fn.YFgetRefOptionsStr = function(ref_class, ref_slug, no_slug, ref_id) {
	var ret = "";

	var no_ref_obj = $().YFmediaobjectListNoRefObj(ref_class, ref_slug);
	
	if (no_ref_obj) {
		return ret;
	}

	if (!ref_id) {
		ref_id = $().YFmediaobjectListGetRefId(ref_class, ref_slug);		
	}

	ret = '&ref_class='+ref_class+'&ref_id='+ref_id;

	if (no_slug) {
		return ret;
	}
	
	return ret + '&ref_slug=' + ref_slug;
}

$.fn.YFaddMediaObjToList = function(ref_class, ref_slug, ref_id, med_id, create_reference, force_is_published) {
	$.get(window.url_prefix + '/'+str_mediaobject_module+'/'+str_row+'/', {}, function(data){ 
			var mediarow_options = '';
			var table = $().YFgetmediaobjectTable(ref_class, ref_slug);

			if (table.hasClass('no_embed_button')) {
				mediarow_options += '&embed_button=0';
			}
			if (table.hasClass('no_select_icon')) {
				mediarow_options += '&select_icon=0';
			}
			if (table.hasClass('no_admin_view')) {
				mediarow_options += '&admin_view=0';
			}

			var ref_options_str = $().YFgetRefOptionsStr(ref_class, ref_slug, 1, ref_id);

			var row_url = window.url_prefix + '/'+str_mediaobject_module+'/'+str_row+'/?id='+med_id+ref_options_str+mediarow_options;
			if (force_is_published) {
				// needed to allow _row.php to show "embed i body" instead of "Show in media list" for existing images
				row_url += "&force_is_published=1";
			}

			if (create_reference) {
				// create mediaobject reference for existing media objects
				row_url += "&create_reference=1";
			}

			var table = $().YFgetmediaobjectTable(ref_class, ref_slug);
			if (table.find('tr.noicon').length > 0) {
				table.find('tr.noicon').before('<tr id="temp'+med_id+'" class="mediarow temprow"><td colspan="6"><img src="'+url_loading_anim+'"></td></tr>');
			} else {
				table.append('<tr id="temp'+med_id+'" class="mediarow temprow"><td colspan="6"><img src="'+url_loading_anim+'"></td></tr>');
			}

			$.get(row_url,function(data) { 
					var my_media_id = $("span.mediaobject_id", $(data)).text();
					$("tr#temp"+my_media_id).replaceWith(data).YFmediaobjectListActivate(ref_class, ref_slug);
					var ref_id = $().YFmediaobjectListGetRefId(ref_class, ref_slug);
					if (ref_id) {
						if($("#"+ref_class+"_id").get() == '') {
							$("input[name=action]").after('<input type="hidden" id="'+ref_class+'_id" name="'+ref_class+'[id]" value="'+ref_id+'">');
						}
					}
					table.show();
				});
		});
}

$.fn.YFmediaobjectUploadSuccess = function(file, serverData) {
	try {
		var progress = new FileProgress(file, this.customSettings.progressTarget);
		progress.setComplete();
		progress.setStatus("Fullført.");
		progress.toggleCancel(false);

		var serverData = eval('(' + serverData + ')');

		if ($.fn.YFmediaobjectOnUploadSucccess) {
			$().YFmediaobjectOnUploadSucccess(serverData);
		}

		if(serverData.errors.media) {
			alert(serverData.errors.media);
		} else {
			$().YfmediaobjectStoreRefId(serverData.values.ref_class, serverData.values.ref_slug, serverData.values.ref_id);
			$().YFaddMediaObjToList(serverData.values.ref_class, serverData.values.ref_slug, serverData.values.ref_id, serverData.values.id);
		}
	} catch (ex) {
		this.debug(ex);
	}
}

$.fn.YFmediaobjectUpdateUploadSuccess = function(file, serverData) {
	try {
		var progress = new FileProgress(file, this.customSettings.progressTarget);
		progress.setComplete();
		progress.setStatus("Fullført.");
		progress.toggleCancel(false);

		var serverData = eval('(' + serverData + ')');

		if(serverData.errors) {
			alert(serverData.errors);
		} else {
			$("#file_size_kb_value").text(serverData.values.file_size_kb);
		}
	} catch (ex) {
		this.debug(ex);
	}
}

$.fn.YFmediaobjectFileQued = function(file) {
	try {
		var progress = new FileProgress(file, this.customSettings.progressTarget);
		$('#fsUploadProgress').show();
		progress.setStatus(str_swfupload_pending);
		progress.toggleCancel(true, this);

	} catch (ex) {
		this.debug(ex);
	}
}

// This event comes from the Queue Plugin
$.fn.YFmediaobjectQueueComplete = function(numFilesUploaded) {
	var status = document.getElementById("divStatus");
	status.innerHTML = numFilesUploaded + " fil" + (numFilesUploaded === 1 ? "" : "er") + " lastet opp.";
	$('#fsUploadProgress').hide();
}

$.fn.YFmediaobjectUploadComplete = function(file) {
	if (this.getStats().files_queued === 0) {
		document.getElementById(this.customSettings.cancelButtonId).disabled = true;
	}
}

$.fn.YFmediaobjectHideMetaeditor = function(options) {
	var defaults = {
		mediaobject_id: false,
		ref_class: false,
		ref_slug: false,
		ref_id: false
	};
	var opts = $.extend(defaults, options);
	
	var table = $().YFgetmediaobjectTable(opts.ref_class, opts.ref_slug);

	var mediarow_options = '';
	if (table.hasClass('no_embed_button')) {
		mediarow_options += '&embed_button=0';
	}
	if (table.hasClass('no_select_icon')) {
		mediarow_options += '&select_icon=0';
	}
	
	var ref_options_str = $().YFgetRefOptionsStr(opts.ref_class, opts.ref_slug, 1, opts.ref_id);

	var row_url = window.url_prefix + '/'+str_mediaobject_module+'/'+str_row+'/?id='+opts.mediaobject_id+ref_options_str+mediarow_options;

	$("#mediaobject"+opts.mediaobject_id).html('<td colspan="7"><img src="'+url_loading_anim+'"></td>');
	
	$.get(row_url, function(data){
		$("#mediaobject"+opts.mediaobject_id).replaceWith(data).YFinterfaceLightboxInit();
	});
	
	return false;
}

$.fn.YFstripSlug = function(slug)
{	
	if (slug == "") {
		return slug;
	}

	return slug.replace(/[^a-zA-Z 0-9]+/g,'');
}

$.fn.YFplayMP3 = function(file)
{
	document.getElementById('mp3player').SetVariable('player:jsUrl', file); 
	document.getElementById('mp3player').SetVariable('player:jsPlay', '');
}