﻿var mksystem = function() {
	// Serialize object

	var serialize = function(variable) {
		var result = "";


		for (var key in variable) {
			var value = encodeURIComponent("" + variable[key] + "");


			if (result.length == 0) {
				result += key + "=" + value;
			}
			else {
				result += "&" + key + "=" + value;
			}
		}


		return result;
	};






	// DOM helper

	var dom = function() {
		var index = 0;




		var rewriteAttribute = function(instance, variable) {
			for (var key in variable) {
				switch (key) {
					case "style":

						rewriteAttribute(instance[key], variable[key]);
						break;


					default:

						instance[key] = variable[key];
						break;
				}
			}
		};




		var createElement = function(tagname, variable, anotherelements) {
			var element = document.createElement(tagname);


			if (variable) {
				rewriteAttribute(element, variable);
			}


			if (anotherelements) {
				for (var key in anotherelements) {
					element.appendChild(anotherelements[key]);
				}
			}


			return element;
		};




		var appendFirst = function(node, child) {
			if (node.hasChildNodes()) {
				node.insertBefore(child, node.firstChild);
			}
			else {
				node.appendChild(child);
			}
		};
		
		
		
		
		var removeAllChilds = function(node) {
			while (node.hasChildNodes()) {
				node.removeChild(node.lastChild);
			}
		};




		/*
		var identity = function(element) {
			if (element["id"] == "") {
				if (element["name"] == "") {
					element["id"] = "instance" + index;
				}
				else {
					element["id"] = element["name"];
				}
			}


			alert(element["id"]);
			return element["id"];
		};
		*/




		return {
			appendFirst: appendFirst,
			createElement: createElement,
			removeAllChilds: removeAllChilds/*,
			identity: identity*/
		};
	}();






	// Form helper

	var form = function() {
		var read = function(node) {
			var param = {
			};




			function onValueElement(element) {
				if (element.id != "") {
					var editor = nicEditors.findEditor(element.id);

					if (editor) {
						param[element.name] = editor.getContent();

						return;
					}
				}


				param[element.name] = element.value;
			};




			function onCheckedElement(element) {
				if (element.checked == "checked" || element.checked) {
					param[element.name] = element.value;
				}
			};




			function elementInput(node) {
				var elements = node.getElementsByTagName("input");

				for (var i = 0; i < elements.length; i++) {
					switch (elements[i].type) {
						case "file":
						case "text":
						case "password":
						case "hidden":

							onValueElement(elements[i]);
							break;


						case "radio":
						case "checkbox":

							onCheckedElement(elements[i]);
							break;
					}
				}
			};




			function elementTextarea(node) {
				var elements = node.getElementsByTagName("textarea");

				for (var i = 0; i < elements.length; i++) {
					onValueElement(elements[i]);
				}
			};




			function elementSelect(node) {
				var elements = node.getElementsByTagName("select");

				for (var i = 0; i < elements.length; i++) {
					onValueElement(elements[i]);
				}
			};




			elementInput(node);
			elementTextarea(node);
			elementSelect(node);


			return param;
		};






		return {
			read: read
		};
	}();






	// AJAX action

	var ajax = function(url, variable, handler) {
		var httprequest = false;




		try {
			httprequest = new XMLHttpRequest();
		}
		catch (error) {
			var versions = [
				"MSXML2.XMLHTTP.6.0",
				"MSXML2.XMLHTTP.5.0",
				"MSXML2.XMLHTTP.4.0",
				"MSXML2.XMLHTTP.3.0",
				"MSXML2.XMLHTTP",
				"Microsoft.XMLHTTP"
			];


			for (var i = 0; i < versions.length && !httprequest; i++) {
				try {
					httprequest = new ActiveXObject(versions[i]);
				}
				catch (error) {
				}
			}
		}




		var onreadystatechange = function(args) {
			if (httprequest.readyState != 4) {
				return;
			}


			handler(httprequest, args);
		};




		if (httprequest) {
			httprequest.open("POST", url, true);


			if (handler) {
				httprequest.onreadystatechange = onreadystatechange;
			}


			var params = "";


			if (variable) {
				params = serialize(variable);
			}


			httprequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
			httprequest.setRequestHeader("Content-length", params.length);
			httprequest.setRequestHeader("Connection", "close");


			httprequest.send(params);
		}




		return false;
	};






	// Adobe Flash

	var flash = function() {
		var embed = 0;




		var embedSWF = function(movie, width, height, flashvars) {
			embed++;


			var body = mksystem["dom"].createElement("body", {}, [
					mksystem["dom"].createElement("div", {id: "embed" + embed})
				]
			);


			document.write(body.innerHTML);


			swfobject.embedSWF(
				movie, "embed" + embed, width, height, "9.0.0", "Content/image/portal/flash/expressInstall.swf", flashvars, {wmode: "transparent"}, {wmode: "transparent"}
			);
		};




		return {
			embedSWF: embedSWF
		};
	}();






	// Effect

	var effect = function() {
		// Card
		
		var card = function(option) {
			var page_index = 0;
			var page_count = 0;


			var references = [
			];
			
			
			var click = false;
			var hidden = false;
			var embed = false;




			click = function() {
				// Change index

				switch (this.rel) {
					case "prev": --page_index; break;
					case "next": ++page_index; break;
					default:

						page_index = this.rel;
						break;
				}


				hidden();


				return false;
			};




			hidden = function() {
				// Hidden all references

				for (var i = 0; i < references.length; i++) {
					references[i].style.display = "none";
				}




				// Visible only current references

				var start = page_index * option.size;


				for (var i = start; true; i++) {
					if (i == references.length) {
						break;
					}
					else {
						if (i == (start + option.size)) {
							break;
						}
					}


					references[i].style.display = "block";
				}




				// Hidden event
				
				var args = {
					index: page_index, count: page_count, click: click
				};


				option.onhidden(args);
			};




			embed = function(node) {
				// Add child to references

				for (var i = 0; i < node.children.length; i++) {
					references.push(
						node.children[i]
					);
				}




				// Set page count

				page_count = Math.round(
					(node.children.length / option.size) + 0.4
				);


				hidden();
			};




			return {
				embed: embed
			};
		};






		// Expander

		var expander = function(option) {
			var references = [
			];




			var onclick = function() {
				var args = false;


				// Close expande

				for (var i = 0; i < references.length; i++) {
					args = {
						target: references[i]
					};


					if (option.autoclose) {
						option.onclose(args);
					}
				}


				// Open selected expande

				this["expanded"] = (this["expanded"] ? false : true);


				args = {
					target: this
				};


				if (this["expanded"] == true) {
					option.onopen(args);
				}
				else {
					option.onclose(args);
				}


				return false;
			};




			var embed = function(node) {
				// Test rel property

				var test = function(name) {
					var result = false;


					if (name.length >= 8) {
						var substring = name.substring(0, 8);


						if (substring == "expander") {
							result = true;
						}
					}


					return result;
				};
				
				
				
				
				// Prepare link
				
				var prepare = function(link) {
					if (test(links[i].rel) == false) {
						return;
					}


					link["expanded"] = false;


					link.onclick = onclick;


					references.push(link);
				};




				try {
					if (option.onclose && option.onopen) {
						var links = node.getElementsByTagName("a");


						for (var i = 0; i < links.length; i++) {
							prepare(
								links[i]
							);
						}
					}
				}
				catch (error) {
					alert(error);
				}
			};




			return {
				embed: embed
			};
		};






		var page = function() {
			// Page size

			var size = function() {
				// Scroll test

				var xScroll = 0;
				var yScroll = 0;


				if (window.innerHeight && window.scrollMaxY) {
					xScroll = window.innerWidth + window.scrollMaxX;
					yScroll = window.innerHeight + window.scrollMaxY;
				}
				else {
					if (document.body.scrollHeight > document.body.offsetHeight) {
						xScroll = document.body.scrollWidth;
						yScroll = document.body.scrollHeight;
					}
					else {
						xScroll = document.body.offsetWidth;
						yScroll = document.body.offsetHeight;
					}
				}




				// Window test

				var windowWidth = 0;
				var windowHeight = 0;


				if (self.innerHeight) {
					if (document.documentElement.clientWidth) {
						windowWidth = document.documentElement.clientWidth; 
					}
					else {
						windowWidth = self.innerWidth;
					}

					windowHeight = self.innerHeight;
				}
				else {
					if (document.documentElement && document.documentElement.clientHeight) {
						windowWidth = document.documentElement.clientWidth;
						windowHeight = document.documentElement.clientHeight;
					}
					else {
						if (document.body) {
							windowWidth = document.body.clientWidth;
							windowHeight = document.body.clientHeight;
						}
					}
				}




				// Page size

				var pageWidth = 0;
				var pageHeight = 0;


				if (yScroll < windowHeight) {
					pageHeight = windowHeight;
				}
				else { 
					pageHeight = yScroll;
				}


				if (xScroll < windowWidth) {
					pageWidth = xScroll;
				}
				else {
					pageWidth = windowWidth;
				}


				return {
					width: pageWidth,
					height: pageHeight
				};
			};






			// Page scroll

			var scroll = function() {
				var scroll = 0;


				if (self.pageYOffset) {
					scroll = self.pageYOffset;
				}
				else {
					if (document.documentElement && document.documentElement.scrollTop) {
						scroll = document.documentElement.scrollTop;
					}
					else {
						if (document.body) {
							scroll = document.body.scrollTop;
						}
					}
				}


				return {
					y: scroll
				};
			};






			return {
				size: size,
				scroll: scroll
			};
		}();






		return {
			card: card,
			page: page,
			expander: expander
		};
	}();






	return {
		flash: flash,
		dom: dom,
		form: form,
		serialize: serialize,
		ajax: ajax,
		effect: effect
	};
}();






/*
(function() {
	// Array extended

	if (typeof Array.prototype.uniqal !== 'function') {
        Array.prototype.uniqal = function (value) {
			alert(value);
		};
	}
}());
*/

