"use strict";
(function (window, undefined) {
	window['System'] = {
		addEvent:function (obj, type, func) {
			if (obj.attachEvent) {
				var rnd = parseInt(Math.random() * 0xffffffff, 16).toString() + parseInt(Math.random() * 0xffffffff, 16).toString() + parseInt(Math.random() * 0xffffffff, 16).toString() + parseInt(Math.random() * 0xffffffff, 16).toString();
				obj['e' + type + func + rnd] = func;
				obj[type + func + rnd] = function() { obj['e' + type + func + rnd](window.event); };
				obj.attachEvent('on' + type, obj[type + func + rnd]);
			} else {
				obj.addEventListener(type, func, false);
			}
		},

		trim:function (text) {
			return text.replace(/^\s+/, '').replace(/\s+$/, '');
		},

		hasClass:function (node, className) {
			if (typeof(node) === 'string') { node = document.getElementById(node); }
			return (new RegExp('(^|\\s)' + className + '(\\s|$)')).test(node.className);
		},

		addClass:function (node, className) {
			if (typeof(node) === 'string') { node = document.getElementById(node); }
			if (!System.hasClass(node, className)) {
				return (node.className += (node.className ? ' ' : '') + className);
			}
			return node.className;
		},

		removeClass:function (node, className) {
			if (typeof(node) === 'string') { node = document.getElementById(node); }
			if (System.hasClass(node, className)) {
				return (node.className = System.trim(node.className.replace(new RegExp('(^|\\s)' + className + '(\\s|$)'),' ')));
			}
			return node.className;
		},

		unselectable:function (elem) {
			if (elem === undefined) { return; }
			System.addEvent(elem, "selectstart", function () { return false; });
			elem.style.MozUserSelect = "none";
			elem.style.KhtmlUserSelect = "none";
			elem.unselectable = "on";
		},

		jsApiRequest: function(url, callback) {
			var s = document.createElement('SCRIPT'),
				callbackName = 'jsApiCallback_', callbackId = 0;

			while (typeof(System[callbackName + callbackId.toString()]) !== 'undefined') {
				callbackId++;
			}

			s.charset = 'UTF-8';
			s.type = "text/javascript";

			s.src = url + (url.indexOf('?') === -1 ? '?' : '&') + 'callback=System.' + callbackName + callbackId.toString() + '.process';
			System[callbackName + callbackId.toString()] = {
				process:(function (callback, name) { return function (json) {
					callback(json);
					System[name].element.parentNode.removeChild(System[name].element);
					delete System[name];
				}; })(callback, callbackName + callbackId.toString()),
				element:document.body.appendChild(s)
			};
		}
	};
})(window);
