Greasy Fork is available in English.

SetsMaster

Наборы армии, навыков и оружия - 3 в 1 (by Demin & Tamozhnya1)

Устаревшая версия на 30.11.2014. Перейти к последней версии.

// ==UserScript==
// @name           SetsMaster
// @author         Demin
// @namespace      Tamozhnya1
// @description    Наборы армии, навыков и оружия - 3 в 1 (by Demin & Tamozhnya1)
// @homepage       https://greasyfork.org/users/1602-demin
// @icon           http://i.imgur.com/LZJFLgt.png
// @version        3.1
// @encoding 	   utf-8
// @include        http://*heroeswm.ru/*
// @include        http://178.248.235.15/*
// @include        http://209.200.152.144/*
// @include        http://*lordswm.com/*
// @exclude        */rightcol.php*
// @exclude        */ch_box.php*
// @exclude        */chat*
// @exclude        */ticker.html*
// @exclude        */frames*
// @exclude        */brd.php*
// @grant          GM_deleteValue
// @grant          GM_getValue
// @grant          GM_listValues
// @grant          GM_setValue
// @grant          GM_addStyle
// @grant          GM_log
// @grant          GM_openInTab
// ==/UserScript==

// (c) 2012-2014, demin  ( http://www.heroeswm.ru/pl_info.php?id=15091 )
// (c) 2012, Tamozhnya1

(function() {

var version = '3.1';


if (!this.GM_getValue || (this.GM_getValue.toString && this.GM_getValue.toString().indexOf("not supported")>-1)) {
	this.GM_getValue=function (key,def) {
		return localStorage[key] || def;
	};
	this.GM_setValue=function (key,value) {
		return localStorage[key]=value;
	};
	this.GM_deleteValue=function (key) {
		return delete localStorage[key];
	};
}
if (!this.GM_addStyle || (this.GM_addStyle.toString && this.GM_addStyle.toString().indexOf("not supported")>-1)) {
	this.GM_addStyle=function (key) {
		var style = document.createElement('style');
		style.textContent = key;
		document.querySelector("head").appendChild(style);
	}
}
if (!this.GM_listValues || (this.GM_listValues.toString && this.GM_listValues.toString().indexOf("not supported")>-1)) {
	this.GM_listValues=function () {
		var values = [];
		for (var i=0; i<localStorage.length; i++) {
			values.push(localStorage.key(i));
		}
		return values;
	}
}


var script_num = 124512;
var script_name = "SetsMaster: Наборы армии, навыков и оружия - 3 в 1 (by Demin & Tamozhnya1)";
update_n(version,script_num,script_name);

var url_cur = location.href;
var url = 'http://'+location.hostname+'/';


var flash_heart = document.querySelector("object > param[value*='heart.swf']");
if ( flash_heart ) flash_heart = flash_heart.parentNode.querySelector("param[name='FlashVars']");
if ( flash_heart ) {
	flash_heart = flash_heart.value.split('|');
	if ( flash_heart[3] ) { var nick = flash_heart[3] + "_"; }
}


if ( document.querySelector("body") && nick ) {

nick = encodeURIComponent(nick);

if ( location.pathname=='/home.php' ) {
	var frak = /\/i\/(r\d+)\.gif/.exec( document.querySelector("body").innerHTML );
	if ( frak ) {
		frak = frak[1] + "_";
		GM_setValue( nick+"frak", frak );
	}
}
if ( !frak ) var frak = GM_getValue( nick+"frak" );


if ( frak ) {


var menuId = "menuSets";
var functionHash = {
	"rl" : rl
}

/************************************************************************************************************/

armySet = {
	oid: 2,
	id: "armySet",
	name: ( url.match('lordswm') ? "<a href='army.php' style='color: #f5c137; text-decoration: none;'>Army</a>" : "<a href='army.php' style='color: #f5c137; text-decoration: none;'>\u0410\u0440\u043c\u0438\u044f</a>" ),
	currentSetName: nick+frak+"currentArmySet",
	currentSetNumber: undefined,
	sets: new Array(),
	setObjects: new Array(),
	menuItems: {},
	currentMenuItem: undefined,
	menu: undefined,
	savedSetIdsConst: nick+frak+"savedArmySetIds",
	savedSetConst: nick+frak+"savedArmySet",

	getSets:
	function() {
		for(var i = 0; i < this.setObjects.length; i++) {
			var setObject = this.setObjects[i];
			if(setObject) {
				var setName = setObject.name;
				var army = setObject.army;

				var setTitle = "";
				for (var j = 0; j < army.length; j++) {
					setTitle += (army[j] == "" ? "0" : army[j]) + "+";
				}
				setTitle = setTitle.substring(0, setTitle.length - 1);

				var data = "";
				for(var j = 0; j < army.length; j++) {
					data = "countv" + (j + 1) + "=" + (army[j] == "" ? "0" : army[j]) + (data == "" ? "" : "&") + data;
				}
				this.sets[i] = {
					number: parseInt(setObject.oid),
					name: setName,
					title: setTitle,
					method: "POST",
					url: "army_apply.php",
					data: data,
					responseHandler: "rl",
					contentType: "application/x-www-form-urlencoded"
				}
			}
		}
	},

	init:
	function() {
		this.currentSetNumber = GM_getValue(this.currentSetName, -1);
		var savedSetIdsStr = GM_getValue(this.savedSetIdsConst);
		var setIds = new Array();
		if(savedSetIdsStr) {
			setIds = savedSetIdsStr.split("|");
		}
		for(var i = 0; i < setIds.length; i++) {
			if(setIds[i] == "") {
				continue;
			}
			var setStr = GM_getValue(this.savedSetConst + setIds[i]);
			if(!setStr) {
				continue;
			}
			setData = setStr.split("|");
			this.setObjects[i] = {
				oid:  setIds[i],
				name: setData[7],
				fraction: setData[8],
				army: new Array()
			}
			for(var j = 0; j < 7; j++) {
				this.setObjects[i].army[j] = setData[j];
			}
		}
		if(/army.php$/.test(location.href)) {
			this.drawSetsTable();
		}
	},

	drawSetsTable:
	function() {
		var div = addElement("center", document.querySelector("body"));

		addElement("br", div);

		var htmlTable = addElement("table", div, {bgcolor: "#959595", bordercolor: "#f5c137", border: "1px"});
		this.drawTableHeader(htmlTable);
		for(var i = 0; i < this.setObjects.length; i++) {
			if(this.setObjects[i]) {
				this.drawSetsRow(htmlTable, this.setObjects[i]);
			}
		}

		if ( url.match('lordswm') ) {
			var saveButton = addElement("input", div, {type: "button", value: "Save"});
		} else {
			var saveButton = addElement("input", div, {type: "button", value: "\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c"});
		}

		saveButton.addEventListener("click", this.saveSets, false);

		if ( url.match('lordswm') ) {
			var addButton = addElement("input", div, {type: "button", value: "Add"});
		} else {
			var addButton = addElement("input", div, {type: "button", value: "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c"});
		}

		addButton.addEventListener("click", this.addSet, false);
	},

	drawTableHeader:
	function(htmlTable) {
		var flash = document.querySelector("object > param[value*='recruitarmy.swf']");
		flash = flash.parentNode.querySelector("param[name='FlashVars']");
		var flashVars = flash.value.substr(8);
		var sets = flashVars.split(";M");
		
		var tr = addElement("tr", htmlTable);
		var th = addElement("td", tr);

		th.style.fontWeight = "bold";
		if ( url.match('lordswm') ) {
			th.innerHTML = "Name of the set";
		} else {
			th.innerHTML = "\u041d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430\u0431\u043e\u0440\u0430";
		}

		for(var i = 0; i < sets.length; i++) {
			var set = sets[i].split("|");
			var th = addElement("td", tr);

			th.style.fontWeight = "bold";
			if ( url.match('lordswm') ) { th.innerHTML = set[2].split("#")[1]; } else { th.innerHTML = set[2].split("#")[0]; }
		}
	},

	drawSetsRow:
	function(htmlTable, setObject) {
		var tr = addElement("tr", htmlTable, {oid: setObject.oid});
		var td = addElement("td", tr);
		var input = addElement("input", td, {value: setObject.name, size: 22});
		for(var i = 0; i < setObject.army.length; i++) {
			var td = addElement("td", tr);
			var input = addElement("input", td, {value: setObject.army[i], size: 5});
		}
		var td = addElement("td", tr);

		if ( url.match('lordswm') ) {
			var delButton = addElement("input", td, {type: "button", value: "x", title: "Remove"});
		} else {
			var delButton = addElement("input", td, {type: "button", value: "x", title: "\u0423\u0434\u0430\u043b\u0438\u0442\u044c"});
		}

		delButton.addEventListener("click", this.deleteSet, false);
	},

	saveSets:
	function() {
		var table = this.previousSibling;
		var setIdsStr = "";
		for(var i = 1; i < table.rows.length; i++) {
			var setStr = "";
			var row = table.rows[i];
			var oid = row.getAttribute("oid");
			setIdsStr = setIdsStr + "|" + oid;
			for(var j = 1; j <= 7; j++) {
				setStr = setStr + "|" + row.cells[j].firstChild.value;
			}
			setStr = setStr + "|" + row.cells[0].firstChild.value;
			setStr = setStr + "|" + "";
			GM_setValue(armySet.savedSetConst + oid, setStr.substr(1));
		}
		if(setIdsStr && setIdsStr != "") {
			GM_setValue(armySet.savedSetIdsConst, setIdsStr.substr(1));

			// udalit' udalennye komplekty
			if ( typeof GM_listValues == 'function' ) {
				var clear_d = GM_listValues();
				var clear_d_len = clear_d.length;
				var num_id_regexp = new RegExp(armySet.savedSetConst+'(\\d+)');
				var num_id;
				for (var i=clear_d_len; i--;) {
					num_id = num_id_regexp.exec( clear_d[i] );
					if ( num_id && !setIdsStr.match(num_id[1]) ) {
						GM_deleteValue(clear_d[i]);
					}
				}
			}

		} else {
			GM_deleteValue(armySet.savedSetIdsConst);
			GM_deleteValue(armySet.currentSetName);

			// udalit' udalennye komplekty
			if ( typeof GM_listValues == 'function' ) {
				var clear_d = GM_listValues();
				var clear_d_len = clear_d.length;
				var num_id_regexp = new RegExp(armySet.savedSetConst+'(\\d+)');
				var num_id;
				for (var i=clear_d_len; i--;) {
					num_id = num_id_regexp.exec( clear_d[i] );
					if ( num_id ) {
						GM_deleteValue(clear_d[i]);
					}
				}
			}

		}
	},

	addSet:
	function() {
		var table = this.previousSibling.previousSibling;
		armySet.drawSetsRow(table, {oid: (new Date()).getTime(), name: "", army: ["", "", "", "", "", "", ""]});
	},

	deleteSet:
	function() {
		var table = this.parentNode.parentNode.parentNode;
		var row = this.parentNode.parentNode;
		table.removeChild(row);
	},
}

/************************************************************************************************************/

skillSet = {
	oid: 1,
	id: "skillSet",
	name: ( url.match('lordswm') ? "<a href='skillwheel.php' style='color: #f5c137; text-decoration: none;'>Talents</a>" : "<a href='skillwheel.php' style='color: #f5c137; text-decoration: none;'>\u041d\u0430\u0432\u044b\u043a\u0438</a>" ),
	currentSetName: nick+frak+"currentSkillSet",
	currentSetNumber: undefined,
	sets: new Array(),
	setObjects: new Array(),
	menuItems: {},
	currentMenuItem: undefined,
	menu: undefined,
	savedSetIdsConst: nick+frak+"savedSkillSetIds",
	savedSetConst: nick+frak+"savedSkillSet",

	getSets:
	function() {
		for(var i = 0; i < this.setObjects.length; i++) {
			var setObject = this.setObjects[i];
			if(setObject) {
				var setName = setObject.name;
				var skills = setObject.skills;
				var setTitle = setObject.name == setObject.comment ? "" : setObject.comment;
				var data = "";
				for(var j = 0; j < skills.length; j++) {
					data += "&param" + j + "=" + (skills[j] == "" ? "0" : skills[j]);
				}
				this.sets[i] = {
					number: parseInt(setObject.oid),
					name: setName,
					title: setTitle,
					method: "GET",
					url0: "skillwheel.php?reset_all=1",
					url: "skillwheel.php?" + data.substr(1),
					responseHandler: "rl"
				}
			}
		}
	},

	init:
	function() {
		this.currentSetNumber = GM_getValue(this.currentSetName, -1);
		var savedSetIdsStr = GM_getValue(this.savedSetIdsConst);
		var setIds = new Array();
		if(savedSetIdsStr) {
			setIds = savedSetIdsStr.split("|");
		}
		for(var i = 0; i < setIds.length; i++) {
			if(setIds[i] == "") {
				continue;
			}
			var setStr = GM_getValue(this.savedSetConst + setIds[i]);
			if(!setStr) {
				continue;
			}
			setData = setStr.split("|");
			this.setObjects[i] = {
				oid:  setIds[i],
				name: setData[0],
				comment: setData[1],
				skills: new Array()
			}
			for(var j = 2; j < setData.length; j++) {
				this.setObjects[i].skills[j - 2] = setData[j];
			}
		}
		if(/skillwheel.php$/.test(location.href)) {
			this.drawSetsTable();
		}
	},

	drawSetsTable:
	function() {
		var div = addElement("center", document.querySelector("body"));

		addElement("br", div);

		var htmlTable = addElement("table", div, {bgcolor: "#959595", bordercolor: "#f5c137", border: "1px"});
		this.drawTableHeader(htmlTable);
		for(var i = 0; i < this.setObjects.length; i++) {
			if(this.setObjects[i]) {
				this.drawSetsRow(htmlTable, this.setObjects[i]);
			}
		}

		if ( url.match('lordswm') ) {
			var saveButton = addElement("input", div, {type: "button", value: "Save"});
		} else {
			var saveButton = addElement("input", div, {type: "button", value: "\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c"});
		}

		saveButton.addEventListener("click", this.saveSets, false);

		if ( url.match('lordswm') ) {
			var addButton = addElement("input", div, {type: "button", value: "Add"});
		} else {
			var addButton = addElement("input", div, {type: "button", value: "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c"});
		}

		addButton.addEventListener("click", this.addSet, false);
	},

	drawTableHeader:
	function(htmlTable) {
		var tr = addElement("tr", htmlTable);
		var th = addElement("td", tr);

		th.style.fontWeight = "bold";
		if ( url.match('lordswm') ) {
			th.innerHTML = "Name of the set";
		} else {
			th.innerHTML = "\u041d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430\u0431\u043e\u0440\u0430";
		}

		var th = addElement("td", tr);

		th.style.fontWeight = "bold";
		if ( url.match('lordswm') ) {
			th.innerHTML = "Talents";
		} else {
			th.innerHTML = "\u041d\u0430\u0432\u044b\u043a\u0438";
		}
	},

	drawSetsRow:
	function(htmlTable, setObject) {
		var tr = addElement("tr", htmlTable, {oid: setObject.oid});
		var td = addElement("td", tr);
		var input = addElement("input", td, {value: setObject.name, size: 50});
		var td = addElement("td", tr);
		var input = addElement("input", td, {value: setObject.comment, size: 50, readonly: true});
		var skillsStr = "";
		for(var i = 0; i < setObject.skills.length; i++) {
			skillsStr += "|" + setObject.skills[i];
		}
		var input = addElement("input", td, {type: "hidden", value: skillsStr.substr(1)});
		var td = addElement("td", tr);

		if ( url.match('lordswm') ) {
			var delButton = addElement("input", td, {type: "button", value: "x", title: "Remove"});
		} else {
			var delButton = addElement("input", td, {type: "button", value: "x", title: "\u0423\u0434\u0430\u043b\u0438\u0442\u044c"});
		}

		delButton.addEventListener("click", this.deleteSet, false);
	},

	saveSets:
	function() {
		var table = this.previousSibling;
		var setIdsStr = "";
		for(var i = 1; i < table.rows.length; i++) {
			var row = table.rows[i];
			var oid = row.getAttribute("oid");
			setIdsStr = setIdsStr + "|" + oid;
			var setStr = row.cells[0].firstChild.value + "|" + row.cells[1].firstChild.value + "|" + row.cells[1].firstChild.nextSibling.value;
			//alert(skillSet.savedSetConst + oid+"="+setStr)
			GM_setValue(skillSet.savedSetConst + oid, setStr);
		}
		if(setIdsStr && setIdsStr != "") {
			GM_setValue(skillSet.savedSetIdsConst, setIdsStr.substr(1));

			// udalit' udalennye komplekty
			if ( typeof GM_listValues == 'function' ) {
				var clear_d = GM_listValues();
				var clear_d_len = clear_d.length;
				var num_id_regexp = new RegExp(skillSet.savedSetConst+'(\\d+)');
				var num_id;
				for (var i=clear_d_len; i--;) {
					num_id = num_id_regexp.exec( clear_d[i] );
					if ( num_id && !setIdsStr.match(num_id[1]) ) {
						GM_deleteValue(clear_d[i]);
					}
				}
			}

		} else {
			GM_deleteValue(skillSet.savedSetIdsConst);
			GM_deleteValue(skillSet.currentSetName);

			// udalit' udalennye komplekty
			if ( typeof GM_listValues == 'function' ) {
				var clear_d = GM_listValues();
				var clear_d_len = clear_d.length;
				var num_id_regexp = new RegExp(skillSet.savedSetConst+'(\\d+)');
				var num_id;
				for (var i=clear_d_len; i--;) {
					num_id = num_id_regexp.exec( clear_d[i] );
					if ( num_id ) {
						GM_deleteValue(clear_d[i]);
					}
				}
			}

		}
	},

	addSet:
	function() {
		var flash = document.querySelector("object > param[value*='skillwheel.swf']");
		flash = flash.parentNode.querySelector("param[name='FlashVars']");
		var flashVars = flash.value.substr(6);
		var skills = flashVars.split("|$");
		var appliedSkills = new Array();
		var appliedSkillsLength = 0;
		for(var i = 0; i < skills.length; i++) {
			var skill = skills[i].split("|");
			if( skill[8] && skill[8]==1 ) {
				appliedSkills[appliedSkillsLength] = {
					mnemonicName: skill[0],
					//rusName: skill[2],
					shortRusName: skillSet.getShortRusName(skill[2])
				}
				appliedSkillsLength++;
			}
		}
		if(appliedSkills.length == 0) {
			alert('\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043d\u0430\u0432\u044b\u043a\u0438 \u0438 \u043d\u0430\u0436\u043c\u0438\u0442\u0435 "\u041f\u0440\u0438\u043d\u044f\u0442\u044c"');
			return;
		}
		var skills = new Array();
		for(var i = 0; i < appliedSkills.length; i++) {
			skills[i] = appliedSkills[i].mnemonicName;
		}
		var comment = "";
		for(var i = 0; i < appliedSkills.length; i++) {
			var curShortRusName = appliedSkills[i].shortRusName;
			if(/^\d$/.test(skills[i].substr(-1)) && skills[i + 1] && /^\d$/.test(skills[i + 1].substr(-1)) && (parseInt(skills[i].substr(-1)) < parseInt(skills[i + 1].substr(-1)))) {
				continue;
			}
//
			comment = comment + "+" + curShortRusName;
		}
		comment = comment.substr(1);
		var table = this.previousSibling.previousSibling;
		skillSet.drawSetsRow(table, {oid: (new Date()).getTime(), name: comment, comment: comment, skills: skills});
	},

	deleteSet:
	function() {
		var table = this.parentNode.parentNode.parentNode;
		var row = this.parentNode.parentNode;
		table.removeChild(row);
	},

	getShortRusName:
	function(name) {
		var arr = name.split(" ");
		if(arr.length <= 1) {
			return name;
		}
		var result = "";
		for(var i = 0; i < arr.length; i++) {
			result += arr[i].substr(0, 1).toUpperCase();
		}
		return result;
	},
}

/************************************************************************************************************/

weaponSet = {
	oid: 0,
	id: "weaponSet",
	name: ( url.match('lordswm') ? "<a href='inventory.php' style='color: #f5c137; text-decoration: none;'>Weapon</a>" : "<a href='inventory.php' style='color: #f5c137; text-decoration: none;'>\u041E\u0440\u0443\u0436\u0438\u0435</a>" ),
	currentSetName: nick+"currentWeaponSet",
	currentSetNumber: undefined,
	sets: new Array(),
	menuItems: {},
	currentMenuItem: undefined,
	menu: undefined,

	getSets:
	function() {
		this.sets[0] = {
			number : 0,
			name: ( url.match('lordswm') ? "Un-equip all" : "\u0421\u043D\u044F\u0442\u044C \u0432\u0441\u0435" ),
			method : "GET",
			url : "inventory.php?all_off=100",
			responseHandler : "rl"
		}
		for (var i = 1; i <= 5; i++) {
			var setName = GM_getValue(nick+"weaponSet" + i);
			if(setName) {
				this.sets[i] = {
					number : i,
					name : setName,
					method : "GET",
					url : "inventory.php?all_on=" + i,
					responseHandler : "rl",
					headers: null
				}
			}
		}
	},

	init:
	function() {
		this.currentSetNumber = GM_getValue(this.currentSetName, -1);
		if(/inventory.php$/.test(location.href)) {
			var a = document.querySelector("a[href^='inventory.php?all_off=']");
			if ( a ) {
				a.addEventListener("click", markCurrentEventHandler, false);
				a.setAttribute("number", 0);
				a.setAttribute("oid", this.oid);

			var all_on = document.querySelectorAll("a[href^='inventory.php?all_on=']");
			var FilledSets = new Array();
			for(var i = 0; i < all_on.length; i++) {
				a = all_on[i];
				a.addEventListener("click", markCurrentEventHandler, false);
				setNumber = parseInt(a.href.substr(a.href.indexOf("all_on=") + 7, 1));
				a.setAttribute("number", setNumber);
				a.setAttribute("oid", this.oid);
				GM_setValue(nick+"weaponSet" + setNumber, a.innerHTML);
				FilledSets[setNumber] = setNumber;
			}
			for(var i = 1; i <= 5; i++) {
				if(!FilledSets[i]){
					GM_deleteValue(nick+"weaponSet" + i);
				}
			}

			}
		}
	}
}

/************************************************************************************************************/

var setObjects = new Array();
setObjects[weaponSet.oid] = weaponSet;
setObjects[armySet.oid] = armySet;
setObjects[skillSet.oid] = skillSet;
main();

}

}

function main() {
	var menuId = "menuSetsTable";
	var logobEngChild = document.querySelector("img[width='101'][height='26']");
	if(!logobEngChild) { return; }

	var styleObject = {
		borderColor: "#f5c137",
		background: "#6b6b69",
		color: "#f5c137",
	}

	if ( document.querySelector("img[src*='i/top_ny']") ) styleObject.background = "#003399";

	var offSet = -55;
	for(var i = 0; i < setObjects.length; i++) {
		if(!setObjects[i]) {
			continue;
		}
		var currentSetObject = setObjects[i];
		if(currentSetObject.init) {
			currentSetObject.init();
		}
		currentSetObject.getSets();

		if ( i > 0 ) offSet += $(menuId + (i-1) + "Header").clientWidth;

		var menuHeaderStyleObject = {
			position: "absolute",
			margin: "2px 0px 0px " + offSet + "px",
			background: styleObject.background,
			color: styleObject.color,
			border: "1px solid " + styleObject.borderColor,
			"font-weight": "bold",
			padding: "2px 6px 4px 5px",
			"z-index": ( url_cur.match('photo_pl_photos') ? "0" : "2" )
		}
		var menuHeader = addElement("div", logobEngChild.parentNode, {id: menuId + i + "Header", headerId: menuId + i + "Header", menuId: menuId + i}, menuHeaderStyleObject);
		var aLevel1 = addElement("b", menuHeader, {}, "color: #f5c137;");
	//	aLevel1.style.cursor = "pointer";
		aLevel1.innerHTML = currentSetObject.name;
		currentSetObject.menu = aLevel1;

		var menuContent = addElement("div", menuHeader, {id: menuId + i, headerId: menuId + i + "Header", menuId: menuId + i}, "position: relative; padding: 6px 3px 2px 3px; white-space: nowrap;");

		menuHeader.addEventListener("mouseover", showMenu, false);
		menuHeader.addEventListener("mouseout", hideMenu, false);
		menuContent.addEventListener("mouseover", showMenu, false);
		menuContent.addEventListener("mouseout", hideMenu, false);

		for(var j = 0; j < currentSetObject.sets.length; j++) {
			var currentSet = currentSetObject.sets[j];
			if(!currentSet) continue;

			var liData = {};
			liData.type = "disc";
			if(currentSetObject.title) {
				liData.title = currentSetObject.title;
			}
			var liLevel2 = ( url_cur.match('photo_pl_photos') ? addElement("div", menuContent, liData) : addElement("li", menuContent, liData) );
			var aLevel2 = addElement("b", liLevel2, currentSet, "color: #f5c137;");
			aLevel2.style.cursor = "pointer";
			aLevel2.innerHTML = currentSet.name;
			aLevel2.addEventListener("click", applySet, false);

			aLevel2.setAttribute("oid", currentSetObject.oid);
			if(currentSet.number == currentSetObject.currentSetNumber) {
				markCurrent(aLevel2);
			}
			currentSetObject.menuItems[j] = aLevel2;
		}

		$( menuId + i ).style.width = ( $( menuId + i ).clientWidth + 20 ) + "px";
		$( menuId + i ).style.display = "none";
	}
}

function showMenu() {
	var menu = $(this.getAttribute("menuId"));
	menu.style.display = "block";
}

function hideMenu() {
	var menu = $(this.getAttribute("menuId"));
	menu.style.display = "none";
}

function markCurrentEventHandler(e) {
	var obj = setObjects[this.getAttribute("oid")];
	var menuItemToMark = obj.menuItems[this.getAttribute("number")];
	markCurrent(menuItemToMark);
}

function markCurrent(el) {
	var obj = setObjects[el.getAttribute("oid")];
	GM_setValue(obj.currentSetName, el.getAttribute("number"));
	el.style.color = '#0f0';

	if(obj.currentMenuItem && obj.currentMenuItem != el) {
		obj.currentMenuItem.style.color = "#f5c137";
	}
	obj.currentMenuItem = el;
}

function applySet() {
	markCurrent(this);
	var obj = setObjects[parseInt(this.getAttribute("oid"))];
	var responseHandler = functionHash[this.getAttribute("responseHandler")];
	//obj.menu.innerHTML = obj.menu.innerHTML + " " + loaders();
	var _this = this;
	var title = this.innerHTML;
	this.innerHTML += " " + loaders();
	var contentType = this.getAttribute("contentType");
	var headers = {};
	if(contentType) {
		headers['Content-type'] = contentType;
	}
	var requestObject = {
		headers: headers,
		method: this.getAttribute("method"),
		url: this.getAttribute("url"),
		data: this.getAttribute("data"),
		onload : function(response) {
			//obj.menu.innerHTML = obj.name;
			_this.innerHTML = title;
			responseHandler(response);
		}
	}
	var url0 = this.getAttribute("url0");
	if(url0) {
		var requestObject0 = {
			headers: headers,
			method: this.getAttribute("method"),
			url: url0,
			data: this.getAttribute("data"),
			onload : function(response) {
	//			GM_xmlhttpRequest(requestObject);
			}
		}

	//	GM_xmlhttpRequest(requestObject0);

		var objXMLHttpReqSM = new XMLHttpRequest();
		objXMLHttpReqSM.open( requestObject0.method, requestObject0.url, true);
		objXMLHttpReqSM.onreadystatechange = function() { handleHttpResponseSM_2(objXMLHttpReqSM, requestObject, _this, title); }
		for (var i_headers in requestObject0.headers) {
			objXMLHttpReqSM.setRequestHeader(i_headers, requestObject0.headers[i_headers]);
		}
		objXMLHttpReqSM.send( requestObject0.data );

	} else {

	//	GM_xmlhttpRequest(requestObject);

		var objXMLHttpReqSM = new XMLHttpRequest();
		objXMLHttpReqSM.open( requestObject.method, requestObject.url, true);
		objXMLHttpReqSM.onreadystatechange = function() { handleHttpResponseSM(objXMLHttpReqSM, requestObject, _this, title); }
		for (var i_headers in requestObject.headers) {
			objXMLHttpReqSM.setRequestHeader(i_headers, requestObject.headers[i_headers]);
		}
		objXMLHttpReqSM.send( requestObject.data );

	}
	return false;
}

function rl(response) {
	//location.href = url_cur;
}

function handleHttpResponseSM(objXMLHttpReqSM, requestObject, _this, title) {
	if ( objXMLHttpReqSM.readyState == 2 ) {

		objXMLHttpReqSM.abort();

		_this.innerHTML = title;
	}
}

function handleHttpResponseSM_2(objXMLHttpReqSM, requestObject, _this, title) {
	if ( objXMLHttpReqSM.readyState == 2 ) {

		objXMLHttpReqSM.abort();

		var objXMLHttpReqSM = new XMLHttpRequest();
		objXMLHttpReqSM.open( requestObject.method, requestObject.url, true);
		objXMLHttpReqSM.onreadystatechange = function() { handleHttpResponseSM(objXMLHttpReqSM, requestObject, _this, title); }
		for (var i_headers in requestObject.headers) {
			objXMLHttpReqSM.setRequestHeader(i_headers, requestObject.headers[i_headers]);
		}
		objXMLHttpReqSM.send( requestObject.data );
	}
}

function addElement(type, parent, data, style) {
	var el = document.createElement(type);
	if(parent) {
		parent.appendChild(el);
	}
	if(data) for(key in data) {
		el.setAttribute(key, data[key]);
	}
	if(style && el.id) {
		if(typeof(style) == "string") {
			GM_addStyle("#" + el.id + "{" + style + "}");
		} else {
			var styleStr = "";
			for(key in style) {
				styleStr += key + ": " + style[key] + "; ";
			}
			GM_addStyle("#" + el.id + "{" + styleStr + "}");
		}
	}
	return el;
}

function loaders() {
return '<img border="0" align="absmiddle" height="11" src="data:image/gif;base64,'+
'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'+
'fySDhGYQdDWGQyUhADs=">';
}

function $(id) { return document.querySelector("#"+id); }

function addEvent(elem, evType, fn) {
	if (elem.addEventListener) {
		elem.addEventListener(evType, fn, false);
	}
	else if (elem.attachEvent) {
		elem.attachEvent("on" + evType, fn);
	}
	else {
		elem["on" + evType] = fn;
	}
}

function update_n(a,b,c,d,e){if(e){e++}else{e=1;d=(Number(GM_getValue(b+'_update_script_last2','0'))||0)}if(e>3){return}var f=new Date().getTime();var g=document.querySelector('#update_demin_script2');if(g){if((d+86400000<f)||(d>f)){g=g.innerHTML;if(/100000=1.1/.exec(g)){var h=new RegExp(b+'=(\\d+\\.\\d+)=(\\d+)').exec(g);var i=/url7=([^%]+)/.exec(g);if(a&&h&&i){if(Number(h[1])>Number(a))setTimeout(function(){if(confirm('\u0414\u043E\u0441\u0442\u0443\u043F\u043D\u043E \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u0435 \u0441\u043A\u0440\u0438\u043F\u0442\u0430: "'+c+'".\n\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u043D\u0443\u044E \u0432\u0435\u0440\u0441\u0438\u044E \u0441\u0435\u0439\u0447\u0430\u0441?\n\nThere is an update available for the script: "'+c+'".\nWould you like install the script now?')){if(typeof GM_openInTab=='function'){GM_openInTab(i[1].replace(/\s/g,'')+h[2])}else{window.open(i[1].replace(/\s/g,'')+h[2],'_blank')}}},500)}GM_setValue(b+'_update_script_last2',''+f)}else{setTimeout(function(){update_n(a,b,c,d,e)},1000)}}}else{var j=document.querySelector('body');if(j){var k=GM_getValue(b+'_update_script_array2');if(e==1&&((d+86400000<f)||(d>f)||!k)){if(k){GM_deleteValue(b+'_update_script_array2')}setTimeout(function(){update_n(a,b,c,d,e)},1000);return}var l=document.createElement('div');l.id='update_demin_script2';l.setAttribute('style','position: absolute; width: 0px; height: 0px; top: 0px; left: 0px; display: none;');l.innerHTML='';j.appendChild(l);if((d+86400000<f)||(d>f)||!k){var m=new XMLHttpRequest();m.open('GET','photo_pl_photos.php?aid=1777'+'&rand='+(Math.random()*100),true);m.onreadystatechange=function(){update(m,a,b,c,d,e)};m.send(null)}else{document.querySelector('#update_demin_script2').innerHTML=k;setTimeout(function(){update_n(a,b,c,d,e)},10)}}}}function update(a,b,c,d,e,f){if(a.readyState==4&&a.status==200){a=a.responseText;var g=/(\d+=\d+\.\d+(=\d+)*)/g;var h='';var i=/(url7=[^%]+\%)/.exec(a);if(i){h+=i[1]}while((i=g.exec(a))!=null){if(h.indexOf(i[1])==-1){h+=' '+i[1]}};GM_setValue(c+'_update_script_array2',''+h);var j=document.querySelector('#update_demin_script2');if(j){j.innerHTML=h;setTimeout(function(){update_n(b,c,d,e,f)},10)}}}

})();