/*
try {
}catch(err) {
	for(var i in err) {
		alert(i+":"+err[i]);
	}
}

escape();
*/
function IEBrowser() {
	this.name = "IE";
	this.displayCursorPosition = function(event) {
		if (typeof event == "undefined") {
			event = window.event;
		}

		var scrollingPosition = this.getScrollingPosition();
		var cursorPosition = [0, 0];

		if (typeof event.pageX != "undefined" && typeof event.x != "undefined") {
			cursorPosition[0] = event.pageX;
			cursorPosition[1] = event.pageY;
		} else {
			cursorPosition[0] = event.clientX + scrollingPosition[0];
			cursorPosition[1] = event.clientY + scrollingPosition[1];
		}

		return cursorPosition;

	}
	this.attachEventListener = function(target, eventType, functionRef, capture) {

		target.attachEvent("on" + eventType, functionRef);
		return true;
	}
	this.addLoadListener = function(fn) {
		window.attachEvent('onload', fn);
	}
	this.getPageDimensions = function() {
		var body = document.getElementsByTagName("body")[0];
		var bodyOffsetWidth = 0;
		var bodyOffsetHeight = 0;
		var bodyScrollWidth = 0;
		var bodyScrollHeight = 0;
		var pageDimensions = [0, 0];
		if (typeof document.documentElement != "undefined" &&
			typeof document.documentElement.scrollWidth != "undefined") {
			pageDimensions[0] = document.documentElement.scrollWidth;
			pageDimensions[1] = document.documentElement.scrollHeight;
		}
		bodyOffsetWidth = body.offsetWidth;
		bodyOffsetHeight = body.offsetHeight;
		bodyScrollWidth = body.scrollWidth;
		bodyScrollHeight = body.scrollHeight;
		if (bodyOffsetWidth > pageDimensions[0]) { pageDimensions[0] = bodyOffsetWidth; }
		if (bodyOffsetHeight > pageDimensions[1]) { pageDimensions[1] = bodyOffsetHeight; }
		if (bodyScrollWidth > pageDimensions[0]) { pageDimensions[0] = bodyScrollWidth; }
		if (bodyScrollHeight > pageDimensions[1]) { pageDimensions[1] = bodyScrollHeight; }
		return pageDimensions;
	}
	this.getScrollingPosition = function() {
		//return [document.body.scrollLeft,document.body.scrollTop];
		return [document.documentElement.scrollLeft,document.documentElement.scrollTop];
	}
	this.getViewportSize = function() {
		return [document.documentElement.clientWidth,document.documentElement.clientHeight];
	}
	this.copyToClipboard = function(txt) {
       window.clipboardData.clearData();
       window.clipboardData.setData("Text", txt);
	}
}
function MozillaBrowser() {
	this.name = "Mozilla";
	this.attachEventListener = function(target, eventType, functionRef, capture) {
		target.addEventListener(eventType, functionRef, capture);
		return true;
	}
	this.addLoadListener = function(fn) {
		window.addEventListener('load', fn, false);
	}
	this.getPageDimensions = function() {
		var body = document.getElementsByTagName("body")[0];
		var bodyOffsetWidth = 0;
		var bodyOffsetHeight = 0;
		var bodyScrollWidth = 0;
		var bodyScrollHeight = 0;
		var pageDimensions = [0, 0];
		if (typeof document.documentElement != "undefined" &&
			typeof document.documentElement.scrollWidth != "undefined") {
			pageDimensions[0] = document.documentElement.scrollWidth;
			pageDimensions[1] = document.documentElement.scrollHeight;
		}
		bodyOffsetWidth = body.offsetWidth;
		bodyOffsetHeight = body.offsetHeight;
		bodyScrollWidth = body.scrollWidth;
		bodyScrollHeight = body.scrollHeight;
		if (bodyOffsetWidth > pageDimensions[0]) { pageDimensions[0] = bodyOffsetWidth; }
		if (bodyOffsetHeight > pageDimensions[1]) { pageDimensions[1] = bodyOffsetHeight; }
		if (bodyScrollWidth > pageDimensions[0]) { pageDimensions[0] = bodyScrollWidth; }
		if (bodyScrollHeight > pageDimensions[1]) { pageDimensions[1] = bodyScrollHeight; }
		return pageDimensions;
	}
	this.getScrollingPosition = function() {
		var position = [0, 0];
		if (typeof window.pageYOffset != 'undefined') {
			position = [window.pageXOffset,window.pageYOffset];
		}
		if(typeof document.body.scrollTop != 'undefined') {
			position = [document.body.scrollLeft,document.body.scrollTop];
		}
		return position;
	}
	this.getViewportSize = function() {
		return [window.innerWidth,window.innerHeight];
	}
	this.copyToClipboard = function(txt) {
       try {
            netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
        } catch (e) {
            alert("很抱歉！由於Firefox瀏覽器設定問題，Firefox使用者若要使用新聞引用的功能 必須先做些設定：\r\n1. 開一個新分頁，在網址列打上 about:config\r\n2. 用過濾器找到 signed.applets.codebase_principal_support 這個值，用滑鼠點一下，把他改為 true");
        }
        var clip = Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interfaces.nsIClipboard);
        if (!clip)
            return;
        var trans = Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable);
        if (!trans)
            return;
        trans.addDataFlavor('text/unicode');
        var str = new Object();
        var len = new Object();
        var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);
        var copytext = txt;
        str.data = copytext;
        trans.setTransferData("text/unicode",str,copytext.length*2);
        var clipid = Components.interfaces.nsIClipboard;
        if (!clip)
            return false;
        clip.setData(trans,null,clipid.kGlobalClipboard);
	}
}

function UndefinedBrowser() {
	this.name = "Undefined";

	this.attachEventListener = function(target, eventType, functionRef, capture) {
		if (typeof target.addEventListener != "undefined") {
			target.addEventListener(eventType, functionRef, capture);
			return;
		}
		if (typeof target.attachEvent != "undefined") {
			target.attachEvent("on" + eventType, functionRef);
			return;
		}
		eventType = "on" + eventType;
		if (typeof target[eventType] != "function") {
			target[eventType] = functionRef;
			return;
		}
		var oldListener = target[eventType];
		target[eventType] = function() {
			oldListener();
			return functionRef();
		}
		return true;
	}
	this.addLoadListener = function(fn) {
		if (typeof window.addEventListener != 'undefined') {
			window.addEventListener('load', fn, false);
			return;
		}
		if (typeof document.addEventListener != 'undefined') {
			document.addEventListener('load', fn, false);
			return;
		}
		if (typeof window.attachEvent != 'undefined') {
			window.attachEvent('onload', fn);
			return;
		}
		if (typeof window.onload != 'function') {
			window.onload = fn;
			return;
		}
		var oldfn = window.onload;
		window.onload = function() {
			oldfn();
			fn();
		};
	}
	this.getPageDimensions = function() {
		var body = document.getElementsByTagName("body")[0];
		var bodyOffsetWidth = 0;
		var bodyOffsetHeight = 0;
		var bodyScrollWidth = 0;
		var bodyScrollHeight = 0;
		var pageDimensions = [0, 0];
		if (typeof document.documentElement != "undefined" &&
			typeof document.documentElement.scrollWidth != "undefined") {
			pageDimensions[0] = document.documentElement.scrollWidth;
			pageDimensions[1] = document.documentElement.scrollHeight;
		}
		bodyOffsetWidth = body.offsetWidth;
		bodyOffsetHeight = body.offsetHeight;
		bodyScrollWidth = body.scrollWidth;
		bodyScrollHeight = body.scrollHeight;
		if (bodyOffsetWidth > pageDimensions[0]) { pageDimensions[0] = bodyOffsetWidth; }
		if (bodyOffsetHeight > pageDimensions[1]) { pageDimensions[1] = bodyOffsetHeight; }
		if (bodyScrollWidth > pageDimensions[0]) { pageDimensions[0] = bodyScrollWidth; }
		if (bodyScrollHeight > pageDimensions[1]) { pageDimensions[1] = bodyScrollHeight; }
		return pageDimensions;
	}
	this.getScrollingPosition = function() {
		var position = [0, 0];
		if (typeof window.pageYOffset != 'undefined') {
			position = [window.pageXOffset,window.pageYOffset];
		}
		if (typeof document.documentElement.scrollTop != 'undefined' && document.documentElement.scrollTop > 0) {
			position = [document.documentElement.scrollLeft,document.documentElement.scrollTop];
		} else if(typeof document.body.scrollTop != 'undefined') {
			position = [document.body.scrollLeft,document.body.scrollTop];
		}
		return position;
	}
	this.getViewportSize = function() {
		var size = [0,0];
		if (typeof window.innerWidth != 'undefined') {
			size = [window.innerWidth,window.innerHeight];
		} else if (typeof document.documentElement != 'undefined' && typeof document.documentElement.clientWidth != 'undefined' && document.documentElement.clientWidth != 0) {
			size = [document.documentElement.clientWidth,document.documentElement.clientHeight];
		} else {
			size = [document.getElementsByTagName('body')[0].clientWidth,document.getElementsByTagName('body')[0].clientHeight];
		}
		return size;
	}
	this.copyToClipboard = function(txt) {
       window.location = txt;
	}
}

function identifyBrowser() {
	var agent = navigator.userAgent.toLowerCase();

	if (typeof navigator.vendor != "undefined" && navigator.vendor == "KDE" && typeof window.sidebar != "undefined") {
		//return "kde";
		return new UndefinedBrowser();
	}

	if (typeof window.opera != "undefined") {
		var version = parseFloat(agent.replace(/.*opera[\/ ]([^ $]+).*/, "$1"));
		if (version >= 7) {
			//return "opera7";
			return new UndefinedBrowser();
		} else if (version >= 5) {
			//return "opera5";
			return new UndefinedBrowser();
		}
		//return false;
		return new UndefinedBrowser();
	}

	if (typeof document.all != "undefined") {
		if (typeof document.getElementById != "undefined") {
			var browser = agent.replace(/.*ms(ie[\/ ][^ $]+).*/, "$1").replace(/ /, "");
			if (typeof document.uniqueID != "undefined") {
				if (browser.indexOf("5.5") != -1) {
					//return browser.replace(/(.*5\.5).*/, "$1");
					return new IEBrowser();
				} else {
					//return browser.replace(/(.*)\..*/, "$1");
					return new IEBrowser();
				}
			} else {
				//return "ie5mac";
				return new IEBrowser();
			}
		}
		//return false;
		return new IEBrowser();
	}

	if (typeof document.getElementById != "undefined") {
		if (navigator.vendor.indexOf("Apple Computer, Inc.") != -1) {
			if (typeof window.XMLHttpRequest != "undefined") {
				//return "safari1.2";
				return new UndefinedBrowser();
			}
			//return "safari1";
			return new UndefinedBrowser();
		} else if (agent.indexOf("gecko") != -1) {
			//return "mozilla";
			return new MozillaBrowser();
		}
	}
	//return false;
	return new IEBrowser();
}
var Browser = identifyBrowser();