houseol 愛屋線上

By codelovers Last update Jun 6, 2009 — Installed 107 times.

There are 6 previous versions of this script.

// ==UserScript==
// @name			houseol 愛屋線上
// @namespace		houseol
// @description		houseol 愛屋線上 for firefox by bluelovers
// @include			http://*.houseol.com.tw/include/*.asp*
// @include			http://*.houseol.com.tw/*.asp*
// ==/UserScript==

var _jsinit = 0;

function funcionPrincipal () {
	if (_jsinit) return;
	_jsinit = 1;

	var XPFirst = XPathResult.FIRST_ORDERED_NODE_TYPE;
	var XPList = XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE;
	var XPIter = XPathResult.UNORDERED_NODE_ITERATOR_TYPE;

	var XPList2 = XPathResult.ORDERED_NODE_SNAPSHOT_TYPE;

	var localStr = new Array();

	var script_stop = 0;
	var selfurl = document.location.href ? document.location.href : window.location.href;
	var selfurl_arg = '';
	var selfurl_array = new Array();

	var $BASESCRIPT, $BASEFILENAME;

	getGeneralData();

	function getGeneralData() {
		selfurl_arg = parse_url(selfurl);
		parse_str(selfurl_arg.query, selfurl_array);

		$BASESCRIPT = basename(selfurl_arg.path);
		$BASEFILENAME = explode('.', $BASESCRIPT)[0];
	}

	if ($BASEFILENAME == 'index') {
		switch(selfurl_array['module']) {
			case 'SellHouse':
			case 'RentHouse':
				if (in_array(selfurl_array['file'], ['search', 'Search'])) {

					_setAttribute($('storeid1'), 'onclick', '');

					_attachEvent($('storeid1'), 'click', function() {
						var StoreID = unsafeWindow.StoreID = $names('StoreID')[0];

						window.open(StoreID.value == '' ? 'include/pickEmp.asp?job=House&returnMode=3&f=main&elem=Manager&elem2=StoreID' : 'include/pickEmp.asp?job=Staff&returnMode=3&f=main&elem=Manager&houseid='+StoreID.value,'','top=185px,left=140px,Width=500px,Height=520px,scrollbars=yes,resizable=no');
					});

					var labels1 = find('//span[@onclick="Manager.value=\'\'"]');

					_setAttribute(labels1, 'onclick', '');

					_attachEvent(labels1, 'click', function() {
						$names('Manager')[0].value = '';
					});



				} else if (in_array(selfurl_array['file'], ['Object'])) {

					var labels1 = find('//table[@id="Ob"]', XPList2);
					for (var i = 0; i < labels1.length; i++) {
						labels1.item(i).style.display = '';
					}

					var listfrom = unsafeWindow.listfrom = unsafeWindow.window.listfrom = unsafeWindow.window.frames[0];

//					var labels1 = find('//a[@onclick="javascript:listfrom.jobs(\'Books\')"]');
//
//					_setAttribute(labels1, 'onclick', '');
//
//					_attachEvent(labels1, 'click', function(e) {
//						var job = 'Books';
//						listfrom.jobs(job);
//					});
				}
				break;
			default:

				var js_showhide = unsafeWindow.showhide

				if (js_showhide) {
						unsafeWindow.showhide = function (tempid, readed) {
						js_showhide(tempid, readed);

						var ele = $(tempid) ? $(tempid) : document.all[tempid];
						if (ele.style.display == 'block') ele.style.display = '';
					}
				}

				var cssStyle = "";

				cssStyle += "a:visited { color: #c0c0c0; }";

				GM_addStyle(cssStyle);

				break;
		}
	} else if ($BASEFILENAME == 'auto') {

		if (in_array(selfurl_array['m'], ['Circle', 'DealCus']) && in_array(selfurl_array['f'], ['lifeCircle_Search_list', 'Search_list'])) {
			var labels1 = find('//tr[@ondblclick]/td/input[@type="checkbox"]', XPList2);
			for (var i = 0; i < labels1.length; i++) {
				_setAttribute(labels1.item(i), 'type', 'radio');
			}
		}

		if (in_array(selfurl_array['f'], ['bookprint2'])) {
			var labels1 = find('//body/table/tbody/tr[3]/td/table/tbody/tr/td[2]/table/tbody/tr[2]/td');
			var labels2 = find('//body/table/tbody/tr[5]/td/span[2]');

			document.title = trim(labels1.textContent)+'-'+trim(labels2.textContent);

			var cssStyle = "";

			cssStyle += "body {color: #666666} .borderss, .borderss2 { color: blue; padding: 0px; } .borderss { padding: 1px; padding-left: 3px; padding-right: 3px; }";

			GM_addStyle(cssStyle);

			labels1.className = 'borderss2';
			var labels2 = find('//body/table/tbody/tr[3]/td/table/tbody/tr/td/table/tbody/tr[2]/td');
			labels2.className = 'borderss2';
			var labels2 = find('//body/table/tbody/tr[3]/td/table/tbody/tr/td[3]/table/tbody/tr[2]/td');
			labels2.className = 'borderss2';
		}

		if (in_array(selfurl_array['f'], ['Search_list', 'community_Search_list', 'lifeCircle_Search_list'])) {
			var labels1 = find('//tr[@ondblclick]', XPList2);
			var labels2 = find('//label[@for]', XPList2);

			var labels13 = document.evaluate('//td[2]', labels1.item(0), null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null );
			var labels14 = document.evaluate('//td[3]', labels1.item(0), null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null );

			for (var i = 0; i < labels1.length; i++) {

				var who = labels1.item(i);

				_setAttribute(who, 'labelfor', labels2.item(i).getAttribute('for'));

				_attachEvent(who, 'click', function(e) {
					var who = e.target;
					if (who.tagName == 'TD') who = who.parentNode;

					$(who.getAttribute('labelfor')).checked = true;
				});


//				var labels13 = find('//td[1]', XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, who);

//				labels13.snapshotItem(0).innerHTML = '123';

				var a = labels13.snapshotItem(2+i).innerHTML.split('<br>');

				labels14.snapshotItem(1+i).innerHTML += '<br><a href="http://m010.houseol.com.tw/auto.asp?m=SellHouse&f=bookprint2&type=0&listbox=' + a[0] + '%20%20%20%23001" target="_blank">列印總表</a>';

			}
		}
	} else if (in_array($BASEFILENAME, ['pickEmp']) && in_array(selfurl_array['job'], ['House', 'Staff'])) {
		var labels1 = find('//tr[@ondblclick]', XPList2);
		var labels2 = find('//label[@for]', XPList2);

		for (var i = 0; i < labels1.length; i++) {
			_setAttribute(labels1.item(i), 'labelfor', labels2.item(i).getAttribute('for'));

			_attachEvent(labels1.item(i), 'click', function(e) {
				var who = e.target;
				if (who.tagName == 'TD') who = who.parentNode;

				$(who.getAttribute('labelfor')).checked = true;
			});
		}
	} else if ($BASEFILENAME == 'select' && selfurl_array['elem'] == 'Address') {
		var labels1 = find('//input[@name="address"]');
		if (labels1.value) document.title = labels1.value;

	} else if (in_array($BASEFILENAME, ['select']) && in_array(selfurl_array['job'], ['OU', 'OT'])) {
		var labels1 = find('//tr[@ondblclick]', XPList2);
		var labels2 = find('//label[@for]', XPList2);

		for (var i = 0; i < labels1.length; i++) {
			_setAttribute(labels1.item(i), 'labelfor', labels2.item(i).getAttribute('for'));

			_attachEvent(labels1.item(i), 'click', function(e) {
				var who = e.target;
				if (who.tagName == 'TD') who = who.parentNode;

				$(who.getAttribute('labelfor')).checked = true;
			});
		}
	}

	function trim(str) {
		return (str + '').replace(/(\s+)$/g, '').replace(/^\s+/g, '');
	}

	function explode( delimiter, string, limit ) {
	    // http://kevin.vanzonneveld.net
	    // +     original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
	    // +     improved by: kenneth
	    // +     improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
	    // +     improved by: d3x
	    // +     bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
	    // *     example 1: explode(' ', 'Kevin van Zonneveld');
	    // *     returns 1: {0: 'Kevin', 1: 'van', 2: 'Zonneveld'}
	    // *     example 2: explode('=', 'a=bc=d', 2);
	    // *     returns 2: ['a', 'bc=d']

	    var emptyArray = { 0: '' };

	    // third argument is not required
	    if ( arguments.length < 2 ||
	        typeof arguments[0] == 'undefined' ||
	        typeof arguments[1] == 'undefined' )
	    {
	        return null;
	    }

	    if ( delimiter === '' ||
	        delimiter === false ||
	        delimiter === null )
	    {
	        return false;
	    }

	    if ( typeof delimiter == 'function' ||
	        typeof delimiter == 'object' ||
	        typeof string == 'function' ||
	        typeof string == 'object' )
	    {
	        return emptyArray;
	    }

	    if ( delimiter === true ) {
	        delimiter = '1';
	    }

	    if (!limit) {
	        return string.toString().split(delimiter.toString());
	    } else {
	        // support for limit argument
	        var splitted = string.toString().split(delimiter.toString());
	        var partA = splitted.splice(0, limit - 1);
	        var partB = splitted.join(delimiter.toString());
	        partA.push(partB);
	        return partA;
	    }
	}

	function basename(path, suffix) {
	    // http://kevin.vanzonneveld.net
	    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
	    // +   improved by: Ash Searle (http://hexmen.com/blog/)
	    // +   improved by: Lincoln Ramsay
	    // +   improved by: djmix
	    // *     example 1: basename('/www/site/home.htm', '.htm');
	    // *     returns 1: 'home'

	    var b = path.replace(/^.*[\/\\]/g, '');

	    if (typeof(suffix) == 'string' && b.substr(b.length-suffix.length) == suffix) {
	        b = b.substr(0, b.length-suffix.length);
	    }

	    return b;
	}

	function _setAttribute(elem, key, value) {
		elem[key] = value;
		elem.setAttribute(key, value);
	}

	function parse_str(str, array){
		// Parses GET/POST/COOKIE data and sets global variables
		//
		// version: 903.421
		// discuss at: http://phpjs.org/functions/parse_str
		// +   original by: Cagri Ekin
		// +   improved by: Michael White (http://getsprink.com)
		// +	tweaked by: Jack
		// +   bugfixed by: Onno Marsman
		// %		note 1: Currently does not put variables in local scope.
		// %		note 1: So use of second argument is required.
		// *	 example 1: $P.var arr = {};
		// *	 example 1: $P.parse_str('first=foo&second=bar', arr);
		// *	 results 1: arr == { first: 'foo', second: 'bar' }
		// *	 example 2: $P.var arr = {};
		// *	 example 2: $P.parse_str('str_a=Jack+and+Jill+didn%27t+see+the+well.', arr);
		// *	 results 2: arr == { str_a: "Jack and Jill didn't see the well." }
		var glue1 = '=';
		var glue2 = '&';

		var array2 = (str+'').split(glue2);
		var array2l = 0, tmp = '', x = 0;

		array2l = array2.length;
		for (x = 0; x<array2l; x++) {
			tmp = array2[x].split(glue1);
			array[unescape(tmp[0])] = unescape(tmp[1]).replace(/[+]/g, ' ');
		}
	}

	function parse_url (str, component) {
		// http://kevin.vanzonneveld.net
		// +	  original by: Steven Levithan (http://blog.stevenlevithan.com)
		// + reimplemented by: Brett Zamir (http://brettz9.blogspot.com)
		// %		  note: Based on http://stevenlevithan.com/demo/parseuri/js/assets/parseuri.js
		// %		  note: blog post at http://blog.stevenlevithan.com/archives/parseuri
		// %		  note: demo at http://stevenlevithan.com/demo/parseuri/js/assets/parseuri.js
		// %		  note: Does not replace invaild characters with '_' as in PHP, nor does it return false with
		// %		  note: a seriously malformed URL.
		// %		  note: Besides function name, is the same as parseUri besides the commented out portion
		// %		  note: and the additional section following, as well as our allowing an extra slash after
		// %		  note: the scheme/protocol (to allow file:/// as in PHP)
		// *	 example 1: parse_url('http://username:password@hostname/path?arg=value#anchor');
		// *	 returns 1: {scheme: 'http', host: 'hostname', user: 'username', pass: 'password', path: '/path', query: 'arg=value', fragment: 'anchor'}

		var  o   = {
			strictMode: false,
			key: ["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],
			q:   {
				name:   "queryKey",
				parser: /(?:^|&)([^&=]*)=?([^&]*)/g
			},
			parser: {
				strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,
				loose:  /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/\/?)?((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/ // Added one optional slash to post-protocol to catch file:/// (should restrict this)
			}
		};

		var m   = o.parser[o.strictMode ? "strict" : "loose"].exec(str),
		uri = {},
		i   = 14;
		while (i--) uri[o.key[i]] = m[i] || "";
		// Uncomment the following to use the original more detailed (non-PHP) script
		/*
			uri[o.q.name] = {};
			uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {
			if ($1) uri[o.q.name][$1] = $2;
			});
			return uri;
		*/

		switch (component) {
			case 'PHP_URL_SCHEME':
				return uri.protocol;
			case 'PHP_URL_HOST':
				return uri.host;
			case 'PHP_URL_PORT':
				return uri.port;
			case 'PHP_URL_USER':
				return uri.user;
			case 'PHP_URL_PASS':
				return uri.password;
			case 'PHP_URL_PATH':
				return uri.path;
			case 'PHP_URL_QUERY':
				return uri.query;
			case 'PHP_URL_FRAGMENT':
				return uri.anchor;
			default:
				var retArr = {};
				if (uri.protocol !== '') retArr.scheme=uri.protocol;
				if (uri.host !== '') retArr.host=uri.host;
				if (uri.port !== '') retArr.port=uri.port;
				if (uri.user !== '') retArr.user=uri.user;
				if (uri.password !== '') retArr.pass=uri.password;
				if (uri.path !== '') retArr.path=uri.path;
				if (uri.query !== '') retArr.query=uri.query;
				if (uri.anchor !== '') retArr.fragment=uri.anchor;
				return retArr;
		}
	}

	function fixcookiesname(name) {
		var cookiepre = document.domain ? document.domain: window.location.hostname;
		return cookiepre + '_' + spieler + '_' + name;
	}
	function getcookies(name, defaultVal) {
		name = fixcookiesname(name);
		if (typeof GM_getValue == 'undefined') {
			var ca = document.cookie.split(';');
			var nameEQ = name + "=";
			for (var i = 0; i < ca.length; i++) {
				var c = ca[i];
				while (c.charAt(0) == ' ') c = c.substring(1, c.length); // Elimina espacios
				if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
			}
			return defaultVal;
		} else return decodeURI(GM_getValue(name, defaultVal));
	}
	function setcookie(name, value, days) {
		name = fixcookiesname(name);
		if (typeof GM_setValue == "undefined") {
			if (days) {
				var date = new Date();
				date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
				var expires = "; expires=" + date.toGMTString();
			} else {
				var expires = "";
			}
			document.cookie = name + "=" + value + expires + "; path=/";
		} else GM_setValue(name, encodeURI(value));
	}
	function setOption(key, value) {
		var options = getcookies("options");
		if (options != '') options = options.split(",");
		else options = [];
		var myOption = options.indexOf(key);
		if (myOption < 0) {
			options.push(key);
			options.push(encodeURIComponent(value));
		} else {
			options[myOption + 1] = encodeURIComponent(value);
		}
		options.join(",");
		setcookie("options", options);
	}
	function getOption(key, defaultValue, type) {
		var options = getcookies('options');
		options = options.split(",");
		var myOption = options.indexOf(key);
		if (myOption < 0) {
			return defaultValue;
		}
		switch (type) {
		case "boolean":
			var myOption = (options[myOption + 1] == "true" || options[myOption + 1] == "1") ? true: false;
			break;
		case "integer":
			var myOption = parseInt(options[myOption + 1]);
			break;
		case "string":
		default:
			var myOption = decodeURIComponent(options[myOption + 1]);
			break;
		}
		return myOption;
	}
	function eatcookie(name) {
		setcookie(name, '', -1);
	}
	function t(key) {
		return T(key);
	}
	function T(key) {
		return localStr[key] ? localStr[key] : '!' + key + '!';
	}

	function arrayToInt(a){
		var h = 0;
		for(var i in a){ h += parseInt(a[i]); }
		return h;
	}

	function in_array(needle, haystack) {
		if(typeof needle == 'string' || typeof needle == 'number') {
			for(var i in haystack) {
				if(haystack[i] == needle) {
						return true;
				}
			}
		}
		return false;
	}

	function kleinster(a, b) {
		if (a < b) {
			return a;
		} else {
			return b;
		};
	}

	function seite_parameter() {
		var idx = selfurl.indexOf(fragezeichen);
		if (idx == -1) {
			return ''
		} else {
			return selfurl.substr(idx + 1);
		}
	}

	function gup(name) {
		name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
		var regexS = "[\\?&]" + name + "=([^&#]*)";
		var regex = new RegExp(regexS);
		var results = regex.exec(selfurl);
		if (results == null) return "";
		else return results[1];
	}

	function contains(a, b) {
		return (a.indexOf(b) != -1)
	}

	function $(id) {
		return document.getElementById(id);
	}

	function $names(name, doc) {
		if (!doc) var doc = document;
		return doc.getElementsByName(name);
	}

	function $tags(tag, doc) {
		if (!doc) var doc = document;
		return doc.getElementsByTagName(tag);
	}

	function find(xpath, xpres, startnode, doc) {
		if (!startnode) {
			startnode = document;
		}
		doc = doc != null ? doc: document;

		xpres = xpres ? xpres: XPFirst;

		var ret = doc.evaluate(xpath, startnode, null, xpres, null);

		if (xpres != XPFirst) {
			ret.length = ret.snapshotLength;
			ret.item = ret.snapshotItem;
		}

		return xpres == XPFirst ? ret.singleNodeValue: ret;
	}

	function insertAfter(node, referenceNode) {
		node.parentNode.insertBefore(referenceNode, node.nextSibling);
	}

	function insertBefore(node, referenceNode) {
		node.parentNode.insertBefore(referenceNode, node);
	}

	function textelem(s) {
		return document.createTextNode(s);
	}

	function elem(tag, content, idt, idv, class) {
		var ret = document.createElement(tag);
		if (content) ret.innerHTML = content;
		if (idt) {
			if (typeof idt != 'array') {
				ret.setAttribute(idt, idv);
			} else {
				for (a in idt)
				ret.setAttribute(a, idt[a]);
			}
		}

		if (idv && typeof idv == 'array') {
			for (a in style)
			ret.style[a] = style[a];
		}

		if (class) ret.className = class;

		return ret;
	}

	function doane(event) {
		try {
			e = event ? event : window.event;
			if(0 && is_ie) {
				e.returnValue = false;
				e.cancelBubble = true;
			} else if(e) {
				e.stopPropagation();
				e.preventDefault();
			}
		} catch (e) {}

		return false;
	}

	function isInt(x) {
		var y = parseInt(x);
		if (isNaN(y)) {
			return false;
		}
		return x == y && x.toString() == y.toString();
	}

}

function _attachEvent(obj, evt, func) {
	if(obj.addEventListener) {
		if (is_array(evt)) {
			for(var i=0; i<evt.length; i++) {
				obj.addEventListener(evt[i], func, false);
			}
		} else {
			obj.addEventListener(evt, func, false);
		}
	} else if(obj.attachEvent) {
		if (is_array(evt)) {
			for(var i=0; i<evt.length; i++) {
				obj.attachEvent("on" + evt[i], func);
			}
		} else {
			obj.attachEvent("on" + evt, func);
		}
	}
}

function is_array(needle) {
	return (typeof needle == 'array') ? true : false;
}

//_attachEvent(window, 'load', funcionPrincipal);

_attachEvent(window, 'DOMContentLoaded', funcionPrincipal);
if (document.body) funcionPrincipal();