
$.fn.serializeObject = function()
{
    var o = {};
    var a = this.serializeArray();
    $.each(a, function() {
        if (o[this.name]) {
            if (!o[this.name].push) {
                o[this.name] = [o[this.name]];
            }
            o[this.name].push(this.value || '');
        } else {
            o[this.name] = this.value || '';
        }
    });
    return o;
};

// prida/odebere vlastnost daneho objektu
$.fn.beFan = function(settings, value) {
	var defaults = {
		button: undefined,
		callback: function(settings,value,item) {},
		condition: true,
		conditionMessage: '',
		url: '', 
		/* data: {},
		dataType: 'json',
		itemID: 'itemID',
		method: 'GET',*/
		update: function(state,result,item) {}
	}
	settings = $.extend({},defaults,settings);
	console.log(settings);
	if (typeof settings.button == 'undefined') {
		settings.button = item.find('.button-befan');
	}
	
	// povolena zmena?
	if (!settings.condition) {
		if (settings.conditionMessage) {
			alert(settings.conditionMessage);
		}
		return false;
	}
	
	var item = $(this);
	var setValue;

	// prepnuti hodnoty (defaultni chovani)
	if (typeof value == 'undefined') {
		setValue = item.data('isFan') ? false : true;
	// vynucene nastaveni hodnoty
	} else {
		setValue = value
	}
	
	settings.callback(settings,setValue,item);

	return item;
}

var beFanCallback = function(settings,value,item) {
	var isFan = value ? 1 : 0;
	var actorID = item.data('actorID');

	var sameItems = $('.actorID_' + actorID);
	console.log(sameItems);
	// (zruseni) oznaceni polozky a odezva
	$.ajax({
		url: settings.url,
		type: 'GET',
		data: {
			'actor_id': actorID,
			'isFan': isFan
		},
		dataType: 'JSON',
		error: function(result) {
			console.log(result);
			alert('error');
		},
		success: function(result) {
			alert('success');
			console.log(result);
			resl = result;
			var sameItems = $('.actorID_' + actorID);
			var sameItemButtons = sameItems.find('.button-befan');
			// polozka pridana
			if (isFan) { // nahradit stavem na serveru
				// globalni udalost
				settings.update('isFan',result,item);
				
				// priznak polozky
				sameItems.data('isFan',true);
				// udalost tlacitka + probublani do rodicovskych prvku
				sameItemButtons.trigger('isFan',result);

			// polozka odebrana
			} else {
				// globalni udalost
				settings.update('isNotFan',result,item);
				
				// priznak polozky
				sameItems.data('isFan',false);
				// udalost tlacitka + probublani do rodicovskych prvku
				sameItemButtons.trigger('isNotFan',result);

			}
		}
	});
}
