/*
 * GENERAL INTERFACE FUNCTIONS
 */

$.fn.YFinterfaceDelete = function(options) {
	var defaults = {
		start_text: str_delete_confirm,
		title: '',
		module_name: false,
		object_slug: false,
		row_id: false,
		show_empty: true,
		redirect: false,
		end_text: false,
		wrap_title_in_quotes: true
	};
	var opts = $.extend(defaults, options);
	
	// give confirmation alert
	var yes=confirm(opts.start_text+(opts.wrap_title_in_quotes ? " «" : " ")+ opts.title + (opts.wrap_title_in_quotes ? "»" : "")+"?"+(opts.end_text ? " "+opts.end_text : ""));
	var offset = 2;
	if(yes){
		var uri = uri_api+opts.module_name+'/delete/?slug='+opts.object_slug;
		if (opts.redirect) {
			uri += '&redirect=1';
		}  else {
			uri += '&redirect=0';
		}
		var table = $("#"+opts.row_id).parent();
		$(".even").removeClass('even');
		$.getJSON(uri,function(json) { 
			$("#"+opts.row_id).effect("highlight", {color:"#d41111"}, 1000).slideUp("fast",function(){
				var num_rows = $().YFinterfaceTableGetNumRows(table, offset);
				$().YFinterfaceTableZebraRowsInit();
				if ((num_rows == 0) && opts.show_empty) {
					var empty_url = window.url_prefix+'/'+opts.module_name+'/'+str_uri_empty+'/';
					$.get(empty_url, false, function(data){ 
						var table_container = table.parent();
						table_container.before('<div class="hidden" id="emptylist">'+data+'</div>');
						table_container.slideUp("slow");
						$("#emptylist").show("slow");
						offset++;
					});
				}
			});
		});
        return true;
	} else {
        return false;
	}
}


$.fn.YFconfirmAndSubmitDelete = function( options )
{
	var defaults = {
		alert: 'Are you sure?',
		form_dom_id: false
	};
	var opts = $.extend(defaults, options);
	
	// give confirmation alert
	var yes=confirm(opts.alert);

	if(yes){
		var myForm = document.getElementById(opts.form_dom_id);
		myForm.submit();
	}
	else{
        return false;
	}
}



// Focus first element
// from http://www.gerd-riesselmann.net/development/focus-first-form-field-with-jquery
$.fn.YFinterfaceFormFocusFirstInput = function() {

  var elem = $('input:visible', this).get(0);
  var select = $('select:visible', this).get(0);

  if (select && elem) {
    if (select.offsetTop < elem.offsetTop) {
      elem = select;
    }
  }

  var textarea = $('textarea:visible', this).get(0);

  if (textarea && elem) {
    if (textarea.offsetTop < elem.offsetTop) {
      elem = textarea;
    }
  }

  if (elem) {
    elem.focus();
  }

  return this;
}

$.fn.YFinterfacePopWindow = function(options) {
	var defaults = {
		url: false, 
		width: 60, 
		height: 60, 
		xpos: 60, 
		ypos: 60, 
		toolbar: false, 
		scrollbar: false, 
		resizable: true, 
		name: 'popped',
		status: false,
		titlebar: false,
		directories: false
	};
	var opts = $.extend(defaults, options);
	
    var wspec = "width="  + opts.width  + ",";
    var hspec = "height=" + opts.height + ",";
    var xspec = "screenX=" + opts.xpos + ",left=" + opts.xpos + ",";
    var yspec = "screenY=" + opts.ypos + ",top="  + opts.ypos + ",";

    var toolspec   = (opts.toolbar)   ? "toolbar=yes,"    : "toolbar=no,";
    var scrollspec = (opts.scrollbar) ? "scrollbars=yes," : "scrollbars=no,";
    var resizspec  = (opts.resizable) ? "resizable=yes,"  : "resizable=no,";

    var specs  = wspec + hspec + xspec + yspec;
    specs += toolspec + scrollspec + resizspec;
    specs += "status=no,titlebar=no,directories=no";

    var popper = window.open(opts.url,opts.name,specs);
    if (window.focus) popper.focus();
}

$.fn.YFinterfaceTableZebraRowsInit = function(options) {
	var defaults = {
		tableclass: 'zebra',
		tableid: false,
		classtoadd: 'even',
		parentelement: 'table',
		childelement: 'tr'
	};
	var opts = $.extend(defaults, options);

	if (opts.tableid) {
		$("#"+opts.tableid+" "+opts.childelement).removeClass(opts.classtoadd);
		$("#"+opts.tableid+" "+opts.childelement+":nth-child(even):visible").addClass(opts.classtoadd);
	} else {
		$(opts.parentelement+"."+opts.tableclass+" "+opts.childelement).removeClass(opts.classtoadd);
		$(opts.parentelement+"."+opts.tableclass+" "+opts.childelement+":nth-child(even):visible").addClass(opts.classtoadd);
	}
}

$.fn.YFinterfaceTableGetNumRows = function(table, offset)
{
	var rows = table.children("tr");
	num_rows = rows.length-offset;
	
	return(num_rows);
}

$.fn.YFinterfaceLightboxInit = function()
{
	$("a[rel^='lightbox']").slimbox({counterText: str_slimbox_image_counter}, null, function(el) {
		return (this == el) || ((this.rel.length > 8) && (this.rel == el.rel));
	});
}

$.fn.YFinterfaceTableDragNDropInit = function(options)
{
	var defaults = {
		table_class: false,
		module: false,
		module_name: false
	};

	var opts = $.extend(defaults, options);

	$("."+opts.table_class).tableDnD({
	    onDragClass: "onDrag",
	    dragHandle: "dragger",
	    onDrop: function(table, row) {
			$().YFinterfaceTableOrderSave({'table':table, 'row':row, 'module':opts.module, 'module_name':opts.module_name});
	    }
	});
}

$.fn.YFinterfaceTableOrderSave = function(options) {
	var defaults = {
		table: false,
		row: false,
		module: false,
		module_name: false,
		ref_class: current_module,
		id: false
	};
	var opts = $.extend(defaults, options);
	
	$().YFinterfaceTableZebraRowsInit();
	
    var rows = opts.table.tBodies[0].rows;
    var order_csv = "";
    for (var i=0; i<rows.length; i++) {
        order_csv += rows[i].id.substring(opts.module.length)+",";
    }

	var ref_id 			= $("#"+opts.ref_class+"_id").val();

	var uri = uri_api+opts.module_name+'/setorder/?order='+escape(order_csv);
	if (opts.ref_class) {
		uri += '&ref_class='+opts.ref_class;
	}
	if (ref_id) {
		uri += '&ref_id='+ref_id;		
	}
	if (opts.id) {
		uri += '&id='+opts.id;			
	}
	
	$.getJSON(uri,function(json) { });
}

yf_help_filter_open = Array();

$.fn.YFinterfaceHelpFilterShow = function(classname, inputname)
{
	var origin = $('#'+classname+'_'+inputname);
	var buttontxt = $("#filterhelpbutton"+inputname+" a");
	buttontxt.html(str_loading);

	$("#filterhelpcontent"+inputname).load(uri_textfilter, function() { 
		var ypos = origin.offset().top+8;
		$("#filterhelpcontent"+inputname).css('top', ypos+"px");
		var width = origin.css('width').substr(0, 3);
		width = width-0;
		var xpos = origin.offset().left+width+6;
		$("#filterhelpcontent"+inputname).css('left', xpos+"px");
		$("#filterhelpcontent"+inputname+" tr:nth-child(even)").addClass("minieven");
		$("#filterhelpcontent"+inputname).fadeIn("fast");
		buttontxt.html(str_hide_formatting);
		yf_help_filter_open[classname+'_'+inputname] = true;
	});	
}

$.fn.YFinterfaceHelpFilterToggle = function(classname, inputname)
{
	if(yf_help_filter_open[classname+'_'+inputname]) {
		$("#filterhelpcontent"+inputname).fadeOut("slow");
		var buttontxt = $("#filterhelpbutton"+inputname+" a");
		buttontxt.html(str_show_formatting);
		yf_help_filter_open[classname+'_'+inputname] = false;
	} else {
		$().YFinterfaceHelpFilterShow(classname, inputname);
	}
}


$.fn.YFinterfaceToggle = function(id)
{
	if($("#"+id+"_toggler").text() == str_toggle_hide) {
		$("#"+id+"_toggler").text(str_toggle_show);
	} else {
		$("#"+id+"_toggler").text(str_toggle_hide);
	}
	$("#"+id).toggle('blind');
}

$.fn.YFinterfaceLimitChars = function(textarea)
{
	infodiv = $("#charcount_info_"+textarea.attr('id'));
	limit = $("#charcount_max_"+textarea.attr('id')).text();

	var text = textarea.val(); 
	var textlength = text.length;

	if(textlength > limit) {
		max_char_alert = str_max_char_alert.replace(/{x}/,limit);
		infodiv.html(max_char_alert);
		textarea.val(text.substr(0,limit));
		return false;
	} else {
		max_char_status = str_max_char_status.replace(/{x}/,(limit - textlength));
		infodiv.html(max_char_status);
		return true;
	}
 }