/* ************************************************************************** **
**                                                                            **
**   MEISUI JavaScript Object                                                 **
**   Copyright (c) 2008 MEISUI Co., Ltd. All Rights Reserved.                 **
**                                                                            **
** ************************************************************************** */

if (!MS) { var MS = new Object(); }
else { try { throw new Error('Loaded MS'); } catch (e) { throw 'Loaded MS'; }; }

MS = {
	hasRequired		: function () {
		if (document.getElementById && document.getElementsByTagName) { return true; }
		if ((!document.getElementById || !document.getElementsByTagName) && document.all) {
			if (!document.getElementById) { document.getElementById = function (id) { return document.all[id]; }; };
			if (!document.getElementsByTagName) { document.getElementsByTagName = function (tag) { return document.all.tags(tag); }; };
			return true;
		}
		return false;
	}(),
	onload			: function () {
		if (!this.hasRequired) { return; }
		
		var searchtext	= this.$("searchtext");
		if (searchtext) {
			var focusColor		= "#454545";
			var defaultColor	= "#c7c7c7";
			var globalsearch	= this.$("globalsearch");
			if (globalsearch) {
				focusColor		= this.getStyle("globalsearch","color");
				defaultColor	= this.getStyle("searchtext","color");
			}
			if (searchtext.value != searchtext.defaultValue) {
				searchtext.style.color = focusColor;
			}
			if (navigator.userAgent.match(/AppleWebKit/i)) {
				searchtext.setAttribute("type", "search");
				searchtext.setAttribute("results", "0");
				searchtext.setAttribute("incremental", "1");
				searchtext.setAttribute("placeholder", searchtext.defaultValue);
				searchtext.setAttribute("value", "");
				searchtext.style.color = focusColor;
			} else {
				searchtext.focusColor	= focusColor;
				searchtext.defaultColor	= defaultColor;
				searchtext.onfocus		= this.textFocus;
				searchtext.onblur		= this.textBlur;
			}
			var searchform	= this.$("searchform");
			if (searchform) {
				searchform.onsubmit = function () {
					var searchtext = MS.$("searchtext");
					if (searchtext.value.match(/^\s*$/) || searchtext.value == searchtext.defaultValue) {
						searchtext.value = "";
					}
					return true;
				}
			}
		}
	},
	$				: function () {
		if (arguments.length == 0) { return; }
		var obj = new Array();
		for (var i = 0; i < arguments.length; i++) {
			if (arguments[i] == "") { continue; }
			var element = (typeof arguments[i] == "string") ? document.getElementById(arguments[i]) : arguments[i];
			obj[obj.length] = element;
		}
		return (obj.length == 1) ? obj[0] : obj;
	},
	addEvent		: function (element, type, func) {
		if (element.addEventListener) {
			element.addEventListener(type, func, false);
		} else if (element.attachEvent) {
			element.attachEvent('on' + type, func);
		}
	},
	textFocus	: function () {
		if (this.value == this.defaultValue) {
			this.value = "";
			if (this.focusColor) { this.style.color = this.focusColor; }
		}
	},
	textBlur	: function () {
		if (this.value.match(/^\s*$/)) {
			this.value = this.defaultValue;
			if (this.defaultColor) { this.style.color = this.defaultColor; }
		}
	},
	getStyle	: function (element, prop) {
		var camelize = function (prop) {
			if (!prop.match(/\-/)) { return prop; }
			var name = prop.split("-");
			var ret = name[0];
			for (var i = 1; i < name.length; i++) {
				ret += name[i].charAt(0).toUpperCase() + name[i].substring(1);
			}
			return ret;
		};
		
		var element = MS.$(element);
		var value = element.style[camelize(prop)];
		if (!value) {
			if (typeof document.defaultView != "undefined" && document.defaultView.getComputedStyle) {
				var css	= document.defaultView.getComputedStyle(element, null);
				value	= (css != null) ? (css.getPropertyValue) ? css.getPropertyValue(prop): css[camelize(prop)]: null;
			} else if (typeof element.currentStyle != "undefined") {
				value	= element.currentStyle[camelize(prop)];
			}
		}
		return (value == "auto") ? null: value;
	}
};

(function () {
	var _timer;
	var domReady = function () {
		if (arguments.callee.done) return;
		arguments.callee.done = true;
		if (_timer) clearInterval(_timer);
		MS.onload();
	};
	if (document.addEventListener) {
		document.addEventListener("DOMContentLoaded", domReady, false);
	}
	if (/WebKit/i.test(navigator.userAgent)) {
		_timer = setInterval(function() {
			if (/loaded|complete/.test(document.readyState)) domReady();
		}, 10);
	}
	MS.addEvent(window, "load", function (e) { domReady(); });
})();