/**
 * Mafia items
 * 
 * using as bookmarklet on Facebook MW page: 
 * javascript:(function(){if(document.getElementById('mafia_util')){mafia_items.find();}else{var%20a=document.createElement('script');a.id='mafia_util';a.src='http://mafia.bavtese.info?js=1';document.body.appendChild(a);}})();   
 *
 * @version	3.4.1 2010-07-11 21h - [Firefox only - cz/en parsers]
 * @author	bigbart
 * 
 * History:
 * 3.4.1  - Patches for new iframe version and animals (2010-07-11)
 * 3.3.4  - Autogift sender (2009-09-26)
 * 3.3.3  - Viral items (godfather temporarily sales) grab 
 * 3.3.2  - Moscow item bar, patches for any new city (classes by mw_city[0-9] etc.)
 * 3.3.1  - Zynga has new travel menu for cities, repair travel click for item autograbber
 *        - initial collapse toolbar (default)
 *        - TODO: some facebook/mafia changes in CSS cause minor changes in design of util
 * 3.2.1  - code for menu refactored/heredoc'd
 *        - external CSS
 * 3.1.1  - CSS a code patching
 *        - mafia_items.script variable
 * 2.2.14 - commentary, cleaning, using jQuery.getScript method 
 * 2.2.13 - db enhancement
 *        - linkbuilding
 * 2.2.12 - hide the frustrating link Ask Mafia
 * 2.2.11 - items with two additional fields
 *        - link to items DB
 *        - path to script to variable
 * 2.2.10 - fixed only one last item bug
 * 2.2.9 - another type of fight table + FatBoy title bug 
 * 2.2.8 - thanks for sending items
 * 2.2.7 - properties efficiency autofiller
 * 2.2.6 - adds 'obrana' change in loot parser (changes in translate)
 * 2.2.5 - sending items anonymously
 * 2.2.4 - little security on posting/showing items
 * 2.2.3 - loots name to the singular (only Rambo's account bug)
 * 2.2.2 - new fight table arsenal grabber
 * 2.2.1 - basic server items browser ?items=1
 * 2.1.1 - better find member attack click
 * 2.1.0 - items/players server save
 * 2.0.2 - czech patch loot autograbber
 * 2.0.1 - append send button after send link (two way)
 * 2.0.0 - saving items to server
 * 1.2.2-beta - Fix "an" and "a" replace to 1 item in parsing arsenal
 * 1.2.1-beta - css cursors
 * 1.2.0-beta - efficiency counter use jQuery
 *            - efficiency autofiller (start/stop)
 * 1.1.4-beta - move atribute used to the items - not dynamicaly counts
 * 1.1.3-beta - add wait class to autograbber, update items after arsenal grab
 * 1.1.2-beta - memorize show/hide of tables
 * 1.1.1-beta - per member counter
 *            - arsenal parser view
 *            - already grab checking
 * 1.1.0-beta - arsenal grabber
 *            - arsenal tables by type with toggling
 *            - attack/defense show
 * 1.0.1-beta - Initialization issues fixed
 * 1.0.0-beta - Attack/rob/grab confirm stopper
 * 0.10.3 - Attack/rob defreezer
 * 0.10.2 - Autograb cycle anywhere :o]
 * 0.10.1 - Autograb city cycle - start at NY please
 * 0.9.12 - Fixed bug in autograb :o) now find data in first next interval and not jumping and buging
 * 0.9.11 - Unique revision, autograb click now preventDefault
 * 0.9.10 - Experimental autograb - (bugs - sometimes bad timings of loading and parsing, incomplete grab, other bugs)
 * 0.9.9 - Tablesorter with first item 0 repaired
 * 0.9.8 - UI feature,hints, animations
 * 0.9.7 - table sorter
 * 0.9.6 - details toggling
 * 0.9.5 - add type of items for looted items, new search without parent using :o)
 * 0.9.4 - add auto type of items for inventories (TODO loots because they are mixed)  
 *
 */

var mafia_items = {};
var mafia_attack = {}
mafia_items.script = "http://mafia.bavtese.info";
/* nacteni jQuery */
document.body.appendChild(document.createElement('script')).src=mafia_items.script+'/jquery-nc.js';



/* funkce na vsechny pole ktera zjisti zda prvek je v poli  :o) */
Array.prototype.inArray = function (value) {
// Returns true if the passed value is found in the
// array. Returns false if it is not.
	var i;
	for (i=0; i < this.length; i++) {
	// Matches identical (===), not just similar (==).
		if (this[i] === value) {
			return true;
		}
	}
	return false;
};

(function() {
	mafia_items.items = [];
	mafia_items.type = '';
	/**
	 * Vrati informace o nalezenem itemu
	 */
	mafia_items.get_item = function(item) {
		var ret   = {};
		ret.name  = item.find('td strong:eq(0)').text();
		ret.a = parseInt(item.find('table td:contains(Attack)').text() || item.find('td:contains(Attack)').text());
		ret.d = parseInt(item.find('table td:contains(Defense)').text() || item.find('td:contains(Defense)').text());
		ret.img = item.find('img:visible:eq(0)').attr('src');
		// pokusime se zjistit pocet zbrani
		var cnt = item.find('td:contains(\:):last');
		if(cnt.length) {
			var owned = cnt.text().match(/([0-9]+)/);
			if(owned.length) {
				ret.owned = parseInt(owned[1]);
			} else {
				ret.owned = 0;
			}
		}
		// odstraneni mnozneho cisla (obcas tam byva a pak to nesedi s arsenalem)
		ret.name = ret.name.replace(/s$/g,'');
		// pozor povolene typy
		ret.type = (['w','a','v','s','b','u','n'].inArray(mafia_items.type) ? mafia_items.type : '');
		if(isNaN(ret.a) || isNaN(ret.d)) {
			return {};
		} else {
	  	return ret;
	  }
	};
	mafia_items.stop = false;
	/**
	 * Vymaze po otazce zamky
	 */	 	
	mafia_items.confirm_stop = function(str) {
		if(confirm(str + ' already running - stop this?')) {
			mafia_items.stop = true;
			mafia_items.lock = '';
			jQuery('#bigbart_mafia_menu .wait').removeClass('wait');
		}
	};
	/**
	 * Vyparsi radky itemu ze stranky a snazi se urcit typ zbrane
	 * animuje a meni status mesto/typ	 
	 */	 	
	mafia_items.find = function(start,end) {
		if(typeof start == 'function') {
			start();
		}
		var new_items = [];
		var tab2class = mafia_items.tab2class();
		var elem;
		if(tab2class) {
			elem = jQuery('#bigbart_mafia_menu .bigbart_items ' + tab2class);
			elem.addClass('fade');
			elem.fadeTo('normal',0.4).fadeTo('normal',1.0);
			elem.fadeTo('normal',0.4).fadeTo('normal',1.0,function() {
				$(this).removeClass('fade');
			});
		}
		jQuery('.main_table').find('tr:has(img[title])').each(
			function() {
				var pt = jQuery(this).prev().find('h3 span,th');
				if(pt.length) {
					switch(pt.text().toLowerCase()) {
						case 'weapons':
						case 'zbraně':
							mafia_items.type = 'w';
							break;
						case 'armor':
						case 'armors':
						case 'brnění':
						case 'obrana':
							mafia_items.type = 'a';
							break;
						case 'vehicles':
						case 'vozidla':
							mafia_items.type = 'v';
							break;
						case 'animal':
						case 'animals':
							mafia_items.type = 'n';
							break;
						case 'boosts':
							mafia_items.type = 'b';
							break;
						case 'special loot':
						case 'speciální kořist':
							mafia_items.type = 's';
							break;
					}
				}
				var d = mafia_items.get_item(jQuery(this));
				if(d.name) {
					mafia_items.items.push(d);
					new_items.push(d);
				}
			}
		);
		mafia_items.items = mafia_items.unique(mafia_items.items);
		new_items = mafia_items.unique(new_items);
		if(tab2class && elem && elem.length){
			if(new_items.length) {
				elem.addClass('grab');
			}
			elem.text(elem.text().replace(/\(.*\)/,'('+new_items.length+')'));
		}
		if(typeof end == 'function') {
			end();
		}
		return new_items;
	};
	/**
	 * Vytvori formular k odeslani dat
	 */	 	
	mafia_items.form = function() {
		var form = jQuery('div.bigbart_items form');
		form.length || jQuery('div.bigbart_items .send').after(
			jQuery('<form id="bigbart_post" target="_blank" action="'+mafia_items.script+'" method="post">'
			+'<input type="hidden" name="json"/>'
			+'<input type="hidden" name="user_id" value="'+parseInt(a10979261223_Facebook.getUser())+'"/>'
			+'<input type="hidden" name="user_name" value="'+escape(presence.name)+'"/>'
			+'<input type="submit" value="Send items"/>'
			+'<input type="button" name="btn" value="Close" onClick="jQuery(\'#bigbart_post\').remove();"/>'
			+'<br/><input type="checkbox" id="anonymous" name="anonymous" value="1" onClick="'
			+  'var checked = jQuery(this).attr(\'checked\') || false;'
			+  'var form = jQuery(\'#bigbart_post\');'
			+  'var $user = form.find(\'input[name=user_name]\');'
			+  'var $id = form.find(\'input[name=user_id]\');'
			+  'if(checked) { $id.val(\'\');$user.val(\'\');} else {$id.val(parseInt(a10979261223_Facebook.getUser()));$user.val(escape(presence.name));};"/>'
			+'<label for="anonymous">anonymous (without facebook id and username)</label></form>'));
		jQuery('#bigbart_post input:[name=json]').val(JSON.stringify(mafia_items.items).replace(/,\{"name"/g,',\n{"name"'));
	};
	mafia_items.interval = null;
	/**
	 * Kolekce na pojmenovane smycky	
	 */
	mafia_items.loop_cnt = {default:0};
	mafia_items.loop = function(name,data,off) {
		var ret;
		var off = off || 0;
		if(typeof name == 'undefined') {
			return null;
		}
		if(typeof mafia_items.loop_cnt[name] == 'undefined') {
			mafia_items.loop_cnt[name] = 0;
		}
		if(data.length > mafia_items.loop_cnt[name] + off) {
			ret = data[mafia_items.loop_cnt[name] + off];
			mafia_items.loop_cnt[name]++;
		} else {
			mafia_items.loop_cnt[name] = 0;
			ret = [];
		}
		return ret;
	};
	mafia_items.grab_text = 'BMW autoload';
	/**
	 * V elementu testuje vyskyt textu v selectoru, pokud uz tam neni zresetuje timer a zavola funkci	
	 */
	mafia_items.timer = function(selector,timer,fnc) {
		var elem = jQuery(selector);
		if(elem.length && elem.text() != mafia_items.grab_text) {
			clearInterval(timer);
			if(!mafia_items.stop) {
				fnc();
			} else {
				mafia_items.stop = false;
			}
		} else {
			//console.log('next cycle');
		}
	};
	mafia_items.grab_itm = '';
	mafia_items.auto_interval = 250;
	// kvuli multiple clickum
	mafia_items.lock = false;
	mafia_items.grab_one = function() {
	
	};
	mafia_items.cities = [];
	/**
	 * Projede vsechny kliky weapon, armor, vehicle, loot a pak zmeni mesto a zacne znovu grab
	 */	 	
	mafia_items.grab_all = function() {
		var $minitabs = jQuery('.minitabs a').add('.tabs .tab_content:visible:eq(1) a');
		mafia_items.grab_itm = '.tabs .tab_content:visible:eq(1) a';
		next_grab = mafia_items.loop('minitabs',$minitabs,1);
		if(jQuery(next_grab).length) {
			mafia_items.find(
				function() {
					//console.log('start find ' + jQuery(next_grab).text());
				},
				function() {
				  mafia_items.grab_viral();
					jQuery(mafia_items.grab_itm).text(mafia_items.grab_text);
					mafia_items.timer_item = setInterval('mafia_items.timer(mafia_items.grab_itm,mafia_items.timer_item,mafia_items.grab_all)',mafia_items.auto_interval);
					jQuery(next_grab).click();
					console.log('end find');
				}
			);
		// a zpracujeme posledni
		} else {
		  var first = 0;
		  if(mafia_items.cities.length) {
				first = mafia_items.cities[0].match(/\d+/);
				if(first.length) {
					first = parseInt(first[0]);
				} else {
					first = 0;
				}
			}
			mafia_items.find();
			// novy zpusob roletkoveho cestovani
			if(jQuery('#app10979261223_travel_menu').length) {
				// musime najit prvni pouzite city abysme na nej neklikli znovu a dat ho az jako posledni v loopu
				var city_reordered = jQuery('#app10979261223_travel_menu a[href*=travel]').filter('[href*=destination]');
				var $first_city = city_reordered.filter('[href*=destination\='+first+'\&]');			
				var city = mafia_items.loop('cities',city_reordered.not($first_city).add($first_city),0);
			// puvodni city
			} else {
				var city = jQuery('#app10979261223_button_travel_cuba:visible').add('#app10979261223_button_travel_nyc:visible');
			}
			if(jQuery(city).length) {
				mafia_items.grab_itm = '#app10979261223_inner_page';
				jQuery(mafia_items.grab_itm).html('<span></span>').text(mafia_items.grab_text);
				mafia_items.timer_item = setInterval('mafia_items.timer(mafia_items.grab_itm,mafia_items.timer_item,mafia_items.grab)',mafia_items.auto_interval);
				jQuery(city).click();
			}
		}
	};
	/**
	 * Pokusi se najit viralni predmety (nabizene za GP nebo Money) a prida je do items
	 */
	mafia_items.grab_viral = function() {
		var items = jQuery('[id=app10979261223_viral_description]');
		if(items.length) {
			items.each(function(){
				var $item = jQuery(this);
				var item = {type:'u',owned:0};
				item.img = $item.parents('table:eq(1)').find('img').attr('src');
				item.name = $item.parents('table:eq(1)').find('img').attr('title');				
				var att_def_text = $item.find('strong').parent().text() || '';
				var att_def = att_def_text.match(/(\d+)\sattack\s+(\d+)\sdefense/im);
				// pokud to ma utok a defense tak to ulozime
				if(att_def.length == 3) {
					item.a = parseInt(att_def[1]);
					item.d = parseInt(att_def[2]);
					mafia_items.items.push(item);
				}
						
			})
		}
		// musime to tam ulozit takto aby se uz vlastnici predmety neprepsali
		mafia_items.items = mafia_items.unique(mafia_items.items.reverse()).reverse();
	}
	/**
	 * Preklikne se do inventory ve meste	
	 */	
	mafia_items.grab = function() {
		mafia_items.lock = 'Grab';
	  mafia_items.grab_itm = '#app10979261223_inner_page'; 
		var $inventory = jQuery('.nav_link.inventory_link a');
		var city_class = jQuery('#app10979261223_mw_city_wrapper').attr('class');
		if(!mafia_items.cities.inArray(city_class)) {
			mafia_items.cities.push(city_class);
			jQuery(mafia_items.grab_itm).html('<span></span>').text(mafia_items.grab_text);		
			mafia_items.timer_item = setInterval('mafia_items.timer(mafia_items.grab_itm,mafia_items.timer_item,mafia_items.grab_all)',mafia_items.auto_interval);
		} else {
			// zrusime
			mafia_items.cities = [];
			mafia_items.lock = false;
			jQuery('#bigbart_mafia_menu .bigbart_items .wait').removeClass('wait');
		}			
		$inventory.click();
	};
	mafia_items.attack_items = [];
	/**
	 * Rozparseni itemu po jednom a zmena clenu na pocty
	 */	 	
	mafia_items.attack_parse = function(str) {
		var ret = [];
		var elem = str.split(', ');
		for(var i=0;i<elem.length;i++) {
			// odznaceni
			tmp = elem[i].replace(/^and /,'').replace(/^an? /,'1 ').match(/^([0-9]+) (.+)$/) || [];
			if(tmp.length == 3) {
				// odstraneni koncove tecky a mnozneho cisla
				tmp[2] = tmp[2].replace(/\.$/,'').replace(/s$/g,'');
				ret.push(tmp);
			};
			
		};
		return ret;
	};
	mafia_items.attack_text = '';
	/**
	 * Najde seznam utocnych zbrani	
	 */	
	mafia_items.grab_attack = function() {
		var ret = '';
		// MW's new attack table by type
		if(jQuery('#app10979261223_fightres_items_user:has(p),#fightres_items_user:has(p)').length) {
			var a = jQuery('#app10979261223_fightres_items_user:has(p),#fightres_items_user:has(p)').clone();
			a.find('strong').remove();
			var tmp = ['new',jQuery.trim(a.find('p').text()).replace(/\s+\n+\s+/g,', ')];
		// MW's new attack table
		} else if(jQuery('#app10979261223_fightres_items_user,#fightres_items_user:has(p)').length) {
			var tmp = jQuery('#app10979261223_fightres_items_user,#fightres_items_user').text().split(/:\s+/);
		} else {
			var tmp = jQuery('#app10979261223_inner_page table td.message_body:visible:eq(0)').text().split(' with ');
		}
		if(tmp.length>1) {
			mafia_items.attack_text = tmp[1];
		} else {
			mafia_items.attack_text = '';
			return false;
		}
		var itms = mafia_items.attack_parse(mafia_items.attack_text);
		var new_items = {};		
		for(var i=0;i<itms.length;i++) {
			new_items[ itms[i][2] ] = itms[i][1]; 
		}
		if(itms.length) {
			mafia_items.attack_items.push(new_items);
			jQuery(this).addClass('done');
		}
		return new_items;
	}
	/**
	 * Detektor items_type/city a vraci class pro animace zpracovani
	 */	
	mafia_items.tab2class = function() {
		var tab = jQuery('.tabs:visible .tab_on a');
		var minitab = jQuery('.minitabs:visible .tab_on a');
		var city_w = jQuery('#app10979261223_mw_city_wrapper,#mw_city_wrapper');
		var ret = '';
		// Cuba
		if(city_w.length && city_w.attr('class')) {
			mafia_items.city = 'bigbart_'+city_w.attr('class');
		// NY
		} else {
		  mafia_items.city = 'bigbart_mw_city1';
		}
		// jsem v inventory
		mafia_items.type = '';
		if(minitab.length && tab.length) {
			var re1 = /xw_controller=([^&]+)&/;
			var a1_tab = tab.attr('href').match(re1);
			if(a1_tab && a1_tab.length && a1_tab[1] == 'item') {
				var re2 = /&tab=([0-9]+)/;
				var a2_tab = minitab.attr('href').match(re2);
				if(a2_tab && a2_tab.length && a2_tab[1]) {
					switch(a2_tab[1]) {
						case '1':
							ret = '.'+mafia_items.city+' .weapon';
							mafia_items.type = 'w';
							break;
						case '2':
							ret = '.'+mafia_items.city+' .armor';
							mafia_items.type = 'a';
							break;
						case '3':
							ret = '.'+mafia_items.city+' .vehicle';
							mafia_items.type = 'v';
							break;
						case '4':
							ret = '.'+mafia_items.city+' .animal';
							mafia_items.type = 'n';
							break;
					}
				}	
			}
			
		// jinak zkusim dohledat loot	
		} else if(tab.length) {
			var re = /xw_controller=([^&]+)&/; 
			var a_tab = tab.attr('href').match(re);
			if(a_tab && a_tab.length && a_tab[1] == 'loot') {
				ret = '.loot';
				mafia_items.type = 'l';
			}
		}
		return ret;
	};
	/**
	 * Unikatni pole itemu podle name	
	 */	
	mafia_items.unique = function(items) {
		var ret = [];
		var names = [];
		// prohodime poradi protoze posledni jsou dulezitejsi
		// FIXME - neni tu poresen stav kdy o vec prijdu (gift/sale) zcela na 0 - zustane predchozi pocet
		var items = items && items.length && items.reverse() || [];
		for(i=0;i<items.length;i++) {
			if(!names.inArray(items[i].name)) {
				ret.push(items[i]);
				names.push(items[i].name);
			}
		}
		return ret.reverse();
	};
	mafia_items.mafia = 0;
	/**
	 * Vyzvedne posledni attack_items a v iteraci opravi used v items	
	 */	
	mafia_items.items_add_used = function() {
		if(mafia_items.attack_items.length) {
			var a_items = mafia_items.attack_items[mafia_items.attack_items.length - 1];
		} else {
			var a_items = {};
		}
		for(i=0;i<mafia_items.items.length;i++) {
			if(mafia_items.items[i].name in a_items) {
				mafia_items.items[i].used = parseInt(a_items[ mafia_items.items[i].name ]);				
			} else {
				mafia_items.items[i].used = 0;
			}
		}
		return mafia_items.items;
	}
	/**
	 * Zobrazovadlo na itemy	
	 */
	mafia_items.show = function() {
		mafia_items.mafia = parseInt(jQuery('#app10979261223_user_group_size').text());
		if(mafia_items.debug) {
			console.log(JSON.stringify(mafia_items.items).replace(/,\{"name"/g,',\n{"name"'));
		}
		var $elem = jQuery('#bigbart_mafia_menu div.bigbart_items');
		var data = $elem.find('div.data').length || $elem.append('<div class="data"></div>');
		
		
		var itm = mafia_items.items_add_used();
		var data = jQuery('<table><thead><tr><th>Item</th><th>Img</th><th>Attack</th><th>Defense</th><th>Owned</th><th>Used</th><th>Type</th></tr></thead><tbody></tbody></table>');
		var tables = {
			"w":data.clone().addClass("weapons").attr('title','Weapons').attr('attack',0).attr('defense',0),
			"a":data.clone().addClass('armors').attr('title','Armors').attr('attack',0).attr('defense',0),
			"v":data.clone().addClass('vehicles').attr('title','Vehicles').attr('attack',0).attr('defense',0),
			"n":data.clone().addClass('animal').attr('title','Animals').attr('attack',0).attr('defense',0),
			"s":data.clone().addClass('special-loot').attr('title','Special loots').attr('attack',0).attr('defense',0),
			"u":data.clone().addClass('unknown').attr('title','Unknown').attr('attack',0).attr('defense',0)
		};

		for(i=0;i<itm.length;i++) {
			var attack = 0, defense = 0;
			tb = tables[ itm[i].type ];
			if(itm[i].used) {
				tb.attr('attack',parseInt(tb.attr('attack')) + parseInt(itm[i].used) * parseInt(itm[i].a) );
				tb.attr('defense',parseInt(tb.attr('defense')) + parseInt(itm[i].used) * parseInt(itm[i].d) );
			}
			tb.find('tbody').append(jQuery(
				'<tr class="type-'+itm[i].type+'">'
				+'<td>'+itm[i].name+'</td>'
				+'<td><img src="'+itm[i].img+'"/></td>'
				+'<td>'+parseInt(itm[i].a)+'</td>'
				+'<td>'+parseInt(itm[i].d)+'</td>'
				+'<td>'+itm[i].owned+'</td>'
				+'<td>'+itm[i].used+'</td>'
				+'<td>'+itm[i].type+'</td>'
				+'</tr>'));
		};
		var tables_html = jQuery('<div class="tables"><h3>Arsenal</h3></div>');
		var all_attack = 0,all_defense = 0;
		for(var i in tables) {
			/* TODO - pokud nejsou prazdne */
			all_attack = all_attack + parseInt(tables[i].attr('attack'));
			all_defense = all_defense + parseInt(tables[i].attr('defense'));
			tables_html.append(
				jQuery('<div class="'+tables[i].attr('class')+'"></div>').append(
					jQuery('<h4>'+tables[i].attr('title')+' ('+tables[i].attr('attack')+'/'+tables[i].attr('defense')+') <span>&laquo; hide</span></h4>').click(
						function(){
							var tb = jQuery(this).parents('div:eq(0)').find('table');
							var span = jQuery(this).find('span');
							tb.toggle();
							if(tb.filter(':visible').length) {
								span.html('&laquo; hide');
							} else {
								span.html('&raquo; show');
							}
						}
					)
				).append(tables[i])
			);
		};
		tables_html.find('h3').text('Arsenal ('+all_attack + '/' +all_defense + ' - per member '+ Math.round(100*all_attack/mafia_items.mafia)/100 + '/' +Math.round(100*all_defense/mafia_items.mafia)/100+')');
		var prev_show = $elem.find('div.data .tables h4:contains(show)');
		$elem.find('div.data').empty().append(tables_html);
		//console.log(prev_show);
		prev_show.each(
			function(){
				var cl = jQuery(this).parent('div').attr('class');
				$elem.find('div.'+cl+' h4').click();
			}
		);
		$elem.find('div.data table:has(td)').tablesorter({sortList:[[2,1],[3,1]]});
		var hint = $elem.find('.hint').length || $elem.find('div.data').prepend(
			jQuery('<p class="hint">Click to the column\'s header to sort, use shift-key to sort by multiple columns. </p>').append(
				jQuery('<a href="#" class="send">Send your items to server.</a>').click(function() { mafia_items.form(); return false;})
			)
		);
	};
	mafia_items.inited = false;
	/**
	 * Inicializace
	 */	 	
  mafia_items.init = function() {
  	if(mafia_items.inited) {
			return;
		}
		jQuery('html').append(jQuery('<head id="bigbart_css"><link rel="stylesheet" href="'+mafia_items.script+'/mafia.css?md5" type="text/css"/></head>'));
		jQuery('#app10979261223_mainDiv,#mainDiv').before(
			jQuery(
				(<r><![CDATA[
				<div id="bigbart_mafia_menu">
					<h4>
						<span class="toggle">&laquo; hide details</span>
						Bigbart's MafiaWars util - v3.4.1 2010-07-11 21h - [Firefox only - cz/en parsers]					</h4>
					<div class="inner">
						<div class="cl"></div>
					</div>
				</div>
				]]></r>).toString()
			)
		);

		jQuery('#bigbart_mafia_menu h4').click(
			function(){
				if(jQuery('#bigbart_mafia_menu .inner div.bigbart_items:visible').length) {
					jQuery(this).find('span').html('&raquo; show details');
				} else {
					jQuery(this).find('span').html('&laquo; hide details');
				};
				jQuery('#bigbart_mafia_menu .inner div.bigbart_items').toggle();
				return false;
			}
		);
		var $items = jQuery(
			(<r><![CDATA[
				<div class="bigbart_items">
					<p>
						Use <a class="button grab-item-auto" href="#">automatic item grabber</a> (all counters change) or use
						<a class="button grab-item-manual" href="#">manual grab</a> on any inventory page.
						<br/>After that you can attack anybody (you must see text like "Your Mafia of...") and
						<a class="button grab-arsenal" href="#">grab your arsenal</a>
						<br/>Finaly <a class="toggle show-items" href="#">&raquo; show your items</a>
						or visit <a class="button item-db" target="_blank" href="#">&raquo; item database</a> collected by this utility
					</p>
					<ul class="bigbart_items">
						<li class="loot">loot (0)</li>
						<li class="bigbart_mw_city1">NY:
							<ul>
								<li class="weapon">weapons (0)</li>
								<li class="armor">armors (0)</li>
								<li class="vehicle">vehicles (0)</li>
								<li class="animal">animal (0)</li>
								<li class="cl">&nbsp;</li>
							</ul>
						</li>
						<li class="bigbart_mw_city2">Cuba:
							<ul>
								<li class="weapon">weapons (0)</li>
								<li class="armor">armors (0)</li>
								<li class="vehicle">vehicles (0)</li>
								<li class="animal">animal (0)</li>
								<li class="cl">&nbsp;</li>
							</ul>
						</li>
						<li class="bigbart_mw_city3">Moscow:
							<ul>
								<li class="weapon">weapons (0)</li>
								<li class="armor">armors (0)</li>
								<li class="vehicle">vehicles (0)</li>
								<li class="animal">animal (0)</li>
								<li class="cl">&nbsp;</li>
							</ul>
						</li>
						<li class="bigbart_mw_city4">Bangkok:
							<ul>
								<li class="weapon">weapons (0)</li>
								<li class="armor">armors (0)</li>
								<li class="vehicle">vehicles (0)</li>
								<li class="animal">animal (0)</li>
								<li class="cl">&nbsp;</li>
							</ul>
						</li>
						
						
						<li class="cl">&nbsp;</li>
					</ul>
					<div class="data"></div>
				</div>]]>
			</r>).toString()
		).find('.item-db').attr('href',mafia_items.script+'?items=1')
		.end().find('.show-items').click(
			function(){
				jQuery('#bigbart_mafia_menu .data').toggle('normal',function(){
					if(jQuery(this).filter(':visible').length) {
						jQuery('#bigbart_mafia_menu .bigbart_items a.toggle').html('&laquo; hide your items');
						mafia_items.show();
					}	else {
						jQuery('#bigbart_mafia_menu .bigbart_items a.toggle').html('&raquo; show your items');
					}
				});
				return false;
			}
		).end().find('.grab-item-auto').click(
			function(event){
				event.preventDefault();
				if(!mafia_items.lock) {
					if(jQuery(this).hasClass('done') && !confirm('You already autograb items. Grab again?')) {
						return false;
					}
					jQuery(this).addClass('wait');
					jQuery(this).addClass('done');
					// projistotu zresetujem loopy
					mafia_items.loop_cnt = {default:0};
					mafia_items.grab();
				} else {
					mafia_items.confirm_stop(mafia_items.lock);
				}
				return false;
			}
		).end().find('.grab-item-manual').click(
			function(){
				mafia_items.find(); mafia_items.grab_viral(); return false;
			}
		).end().find('.grab-arsenal').click(
			function(event){
				event.preventDefault();
				if(jQuery(this).hasClass('done') && !confirm('You already grab your arsenal. Grab again?')) {
						return false;
				}
				var ars = mafia_items.grab_attack(this);
				if(!ars) {
					alert('Arsenal grabber parse error. Go to the attack page, attack anybody and grab arsenal again.');
					return false;
				} else {
					var ret = '';
					for(var i in ars) {
						ret += '\n\t'+ ars[i] + 'x\t' + i;
					}
					if(mafia_items.items.length) {
						mafia_items.show();
					}
					alert('Arsenal grabber parse OK.\nYou attack with:' + ret +'\n\nNow you can see items with attack statistics.');
				}
				jQuery(this).addClass('done');
				return false;
			}
		).end().appendTo('#bigbart_mafia_menu .inner');
		
		var $jobs =	jQuery(
			(<r><![CDATA[
				<div class="bigbart_jobs">
					<p>
						<a class="button job-eff" href="#">&raquo; Start job\'s efficiency autofiller</a> in the table of jobs or	
						<a class="button prop-eff" href="#">&raquo; start properties efficiency autofiller</a>
					</p>
				</div>
			]]></r>).toString()
			).find('.job-eff').click(
			function(){
				if(mafia_util.efficiency_toggle()) {
					mafia_util.efficiency();
					jQuery(this).addClass('active').html('&laquo; Stop job\'s efficiency autofiller');
				} else {
					jQuery(this).removeClass('active').html('&raquo; Start job\'s efficiency autofiller');
				}
				return false;
			}
		).end().find('.prop-eff').click(
			function(){
				if(mafia_property.efficiency_toggle()) {
					mafia_property.check();
					jQuery(this).addClass('active').html('&laquo; stop properties efficiency autofiller');
				} else {
					jQuery(this).removeClass('active').html('&raquo; start properties efficiency autofiller');
				}
				return false;
			}
		).end().appendTo('#bigbart_mafia_menu .inner');
		// inicializace automatickych doplnovacu
		jQuery('#bigbart_mafia_menu .bigbart_jobs a').click();
		// zkryjeme ask button
		// jQuery('#bigbart_ask_button').click();
		// sbalime menu
		jQuery('#bigbart_mafia_menu>h4').click();

	};

	mafia_items.timer_job = 0;
	mafia_attack.grab_itm = '#app10979261223_inner_page';
	mafia_attack.auto_interval = mafia_items.auto_interval || 250;
	mafia_attack.lock = false;
	mafia_attack.type = 'attack';
	mafia_attack.attack = function () {
		mafia_items.lock = false;
		if(mafia_attack.type == 'rob') {
			jQuery('.stats_left a:visible:eq(3)').click();
		// attack
		} else {
			jQuery('.stats_left a:visible:eq(0)').click();
		}
	
	}
	mafia_attack.my_mafia_menu = function() {
		// odkaz v menu
		var elem = jQuery('.mafia_link a:eq(0)');
		mafia_attack.grab_itm = '#app10979261223_inner_page';
		jQuery(mafia_attack.grab_itm).text(mafia_items.grab_text);
		mafia_attack.timer_item = setInterval('mafia_items.timer(mafia_attack.grab_itm,mafia_attack.timer_item,mafia_attack.my_mafia)',mafia_attack.auto_interval);
		elem.click();
	}
	mafia_attack.my_mafia = function() {
		// odkaz v tabech
		var elem = 	jQuery('.tabs a:visible:eq(1)');
		mafia_attack.grab_itm = '.tabs a:visible:eq(1)';
		jQuery(mafia_attack.grab_itm).text(mafia_items.grab_text);
		mafia_attack.timer_item = setInterval('mafia_items.timer(mafia_attack.grab_itm,mafia_attack.timer_item,mafia_attack.user)',mafia_attack.auto_interval);
		elem.click();
	}
	mafia_attack.user = function() {
		// odkaz v my myfia
		var elem = jQuery('.topmafia_box').next().next().find('a:first')
		mafia_attack.grab_itm = '.tabs a:visible:eq(1)';
		jQuery(mafia_attack.grab_itm).text(mafia_items.grab_text);
		mafia_attack.timer_item = setInterval('mafia_items.timer(mafia_attack.grab_itm,mafia_attack.timer_item,mafia_attack.attack)',mafia_attack.auto_interval);
		elem.click();
	};
	mafia_attack.inited = false;
	mafia_attack.init = function() {
		if(mafia_attack.inited) {
			return;
		}
		mafia_attack.inited = true;
		var $attack = jQuery(
			(<r><![CDATA[
				<div class="bigbart_attack">
					<acronym title="maybee serialize sanitization bug if somebody has \\\\\\\\\\\\\\\\\' in their name">Fight defreezer</acronym>:
					<a class="button attack-member" href="#">&raquo; attack your member</a> if your attack freeze or try to
					<a class="button rob-member" href="#">rob them</a>
					<br/><label for="bigbart_ask_button"><span>Hide "Ask Mafia" button:</span></label>
					<input type="checkbox" id="bigbart_ask_button" name="bigbart_ask_button"/> You can send multiple gifts to anybody <a href="#" class="button auto-gift">start auto gift</a>
				</div>]]></r>).toString()
		).find('#bigbart_ask_button').click(
			function() {
				$this = jQuery(this);
				if($this.filter(':checked').length) {
					jQuery('body').append(
						jQuery('<style type="text/css" id="css_bigbart_patch">.fight_results > div > .sexy_button {visibility:hidden;}</style>')
					);
				} else {
					jQuery('#css_bigbart_patch').remove();
				}
			}
		).end().find('.rob-member').click(
			function(event){
				event.preventDefault();
				if(!mafia_items.lock) {
					mafia_attack.type = 'rob';
					mafia_items.lock = 'Rob';
					mafia_attack.my_mafia_menu();
				} else {
					mafia_items.confirm_stop(mafia_items.lock);
				}
				return false;
			}
		).end().find('.attack-member').click(
			function(event){
				event.preventDefault();
				if(!mafia_items.lock) {
					mafia_attack.type = 'attack';
					mafia_items.lock = 'Attack';
					mafia_attack.my_mafia_menu();
				} else {
					mafia_items.confirm_stop(mafia_items.lock);
				}
				return false;
			}
		).end().find('.auto-gift').click(
			function(){
				if(mafia_gifts.timer) {
					mafia_gifts.stop();
				} else {
					mafia_gifts.start();
				}
				return false;
			}
		).end().appendTo('#bigbart_mafia_menu .inner');
	};
	mafia_items.all_init = function() {
		if(!jQuery('#bigbart_init').hasClass('done')) {
			jQuery('#bigbart_init').hide().addClass('done');
			jQuery.getScript(mafia_items.script+'/json2.js');
			jQuery.getScript(mafia_items.script+'/jquery.tablesorter.js');
			mafia_items.init();
			mafia_attack.init();
		}
 	};
	// initialization	
	if(!document.getElementById('bigbart_init')) {
		var a = document.getElementById('app10979261223_mainDiv') || document.getElementById('mainDiv');
		var init = document.createElement('div');
		init.id = 'bigbart_init';
		init.innerHTML = '<h2><a href="#" onclick="mafia_items.all_init(); return false;">Manual initialization of Bigbart\'s MafiaWars util</a></h2>';
		a.parentNode.insertBefore(init,a);
		setTimeout('mafia_items.all_init()',2000);
	}
		
})();



//mafia_items.init();
//mafia_attack.init();

var mafia_property = {};

mafia_property.timer_interval = 2500;
mafia_property.timer = false;
mafia_property.efficiency_toggle = function() {
	if(mafia_property.timer) {
		clearInterval(mafia_property.timer);
		mafia_property.timer = false;
	} else {
		mafia_property.timer = setInterval('mafia_property.check()', mafia_property.timer_interval);
	}
	return mafia_property.timer;
};
mafia_property.check = function() {
	if(jQuery('.main_table:visible tr:contains(Mega Casino)').length == 1){
		mafia_property.property();
	}
};
mafia_property.property = function() {
	jQuery('.main_table:visible tr:contains(x):contains($)').each(
		function(){
			var text = jQuery(this).find('.money').text();
			var data = text.replace(/,/g,'').split('$');
			if(data.length == 3) {
				var e = Math.round(parseInt(data[1])*1000000/parseInt(data[2]));
				var eff = jQuery(this).find('.eff');
				var eff_str = e + ' / 1 mil.';
				if(eff.length) {
					eff.text(eff_str);
				} else {
					jQuery(this).find('td:eq(1)').append(jQuery('<div class="eff">'+eff_str+'</div>'));
				}
			}
		}
	);
};



var mafia_util = {};

mafia_util.timer_interval = 2000;
mafia_util.timer = false;
mafia_util.efficiency_toggle = function() {
	if(mafia_util.timer) {
		clearInterval(mafia_util.timer);
		mafia_util.timer = false;
	} else {
		mafia_util.timer = setInterval('mafia_util.efficiency()', mafia_util.timer_interval);
	}
	return mafia_util.timer;
};

mafia_util.efficiency = function() {
	var span_class = 'eff';
	jQuery('table.job_list tr').not(':empty').each(
		function() {
			var $this = jQuery(this);
			if(!$this.find('.'+span_class).length) {
				var $energy = $this.find('td.job_energy span.bold_number');
				var $exp = $this.find('td.job_reward span.bold_number');
				if($exp.length && $energy.length) { 
					var energy = parseInt($energy.text());
					var exp = parseInt($exp.text());
					var eff = Math.round(exp*100/energy)/100;
					$energy.parent('td').append(jQuery('<span class="'+span_class+'">'+eff+'</span>'));
				}
			}
		}
	);
}

/**
 * Giftovani darku
 */ 
mafia_gifts = {};
mafia_gifts.counter = 0;
mafia_gifts.gift_to = [];
/**
 * Zjisti kdo je kliklej
 */
mafia_gifts.to = function() {
	var checked = jQuery('#gift_send :checked');
	mafia_gifts.gift_to = [];
	if(checked.length) {
		checked.each(function() {
			mafia_gifts.gift_to.push('#'+jQuery(this).attr('id'));
		});
	}
}
mafia_gifts.timer = 0;
/**
 * Posle darek a ceka dokud neni odeslano
 */
mafia_gifts.gift = function() {
	if(mafia_gifts.gift_to.length && jQuery(mafia_gifts.gift_to.join(',')).not(':checked').click().length) {
		jQuery('#bigbart_mafia_menu .auto-gift').text('stop auto gift ('+mafia_gifts.counter+')');
		if(mafia_gifts.counter > 0) {
			mafia_gifts.counter = mafia_gifts.counter - mafia_gifts.gift_to.length;
			jQuery('.sexy_gift').click();
		} else {
			mafia_gifts.stop();
		}
	}
}
/**
 * Resetovani
 */
mafia_gifts.stop = function(no_change) {
	if(mafia_gifts.timer) clearInterval(mafia_gifts.timer);
	if(!no_change) {
		jQuery('#bigbart_mafia_menu .auto-gift').text('start auto gift');
	}
	mafia_gifts.timer = 0;
}
mafia_gifts.start = function() {
	mafia_gifts.to();
	if(mafia_gifts.gift_to.length) {
		mafia_gifts.counter = prompt('How many gifts ?',0);
	} else {
		alert('Nobody checked ! Please choose somebody to send gift.');
		return;
	}
	if(mafia_gifts.counter>0) {
		jQuery('#bigbart_mafia_menu .auto-gift').text('stop auto gift ('+mafia_gifts.counter+')');
		// stopnem pripadne probihajici posilani
		mafia_gifts.stop(true);
		// nastav interval
		mafia_gifts.timer = setInterval('mafia_gifts.gift()',1500);
		mafia_gifts.counter = mafia_gifts.counter - mafia_gifts.gift_to.length;
		// a provedem prvni
		jQuery('.sexy_gift').click();
	}
}

/* incompatible patches */
// disable autoscroll to top
fixScroll = function() {};
// unknown user
if(typeof a10979261223_Facebook != 'object') {
	var a10979261223_Facebook = {getUser:function() {return 0;}};
}
// icko
if(typeof presence != 'object') {
	var presence = {name:'Vasek Barta'};
}

/*
a10979261223_Facebook.getUser();
*/