module.exports = {
	getPageYOffset() {	
		if (document.documentElement.scrollTop)
			return document.documentElement.scrollTop;
		else
			return document.body.scrollTop;
	},

	getPageXOffset() {	
		if (document.documentElement.scrollLeft)
			return document.documentElement.scrollLeft;
		else
			return document.body.scrollLeft;
	},

	getInnerHeight() {
		if (document.documentElement.clientHeight)
			return document.documentElement.clientHeight;
		else
			return document.body.clientHeight;
	},

	getInnerWidth() {
		if (document.documentElement.clientWidth)
			return document.documentElement.clientWidth;
		else
			return document.body.clientWidth;
	},

	createRadio(radioName) {
		var radio;

		try {
			radio = document.createElement('<input type="radio" name="' + radioName + '">');
		} catch (e) {
			radio = document.createElement('input');
			radio.type = 'radio';
			radio.name = radioName;
		}
	
		return radio;
	},

	setInputTypeNumber(input) {
		input.type = 'text';
	}
};

if (!Function.bind) {
	Function.prototype.bind = function() {
		var bindFunc = this;
		var bindThis = arguments[0];
		var bindArgs = arguments;

		var IE_bind = function() {
			var args = new Array();
	
			for (var i = 1; i < bindArgs.length; i++)
				args.push(bindArgs[i]);
			for (var i = 0; i < arguments.length; i++)
				args.push(arguments[i]);
		
			bindFunc.apply(bindThis, args);
		}

		return IE_bind;
	}
}

//	attachEvent -> addEventListener

if (window.attachEvent && !window.addEventListener) {
	function IE_addEventListener(signal, func, capture) {
		var obj = this;
		
		func.IE_eventHandler = function(event) {
			event.target = event.srcElement;
			event.layerY = event.clientY;
			event.layerX = event.clientX;
			event.pageX = event.offsetX;
			event.pageY = event.offsetY;
			event.stopPropagation = function() {
				this.cancelBubble = true;
			}
			
			func.call(obj, event);
		}

		this.attachEvent('on' + signal, func.IE_eventHandler);
	}
	
	function IE_removeEventListener(signal, func, capture) {
		this.detachEvent('on' + signal, func.IE_eventHandler);
	}

	window.addEventListener = IE_addEventListener;
	window.removeEventListener = IE_removeEventListener;
	document.addEventListener = IE_addEventListener;
	document.removeEventListener = IE_removeEventListener;

	var IE_createElement = document.createElement;

	document.createElement = function(tagName) {
		var node = IE_createElement(tagName);
		node.addEventListener = IE_addEventListener;
		node.removeEventListener = IE_removeEventListener;
		return node;
	}
}

//	ActiveXObject ('Microsoft.XMLHTTP') -> XMLHttpRequest

if (!window.XMLHttpRequest && window.ActiveXObject) {
	function XMLHttpRequest() {
		return new ActiveXObject('Microsoft.XMLHTTP');
	}
}