/************************************************************************
####################################################
jquery.MTool Version 1.0.4
Copyright by Méo 2010
Website: meo.com.vn
Building based on
	+ jQuery library at http://jquery.com/
	+ jQuery UI library at http://jqueryui.com/

Public: 2011-01-04 23:50:29
####################################################
************************************************************************/
MTool = M$ = {};

/************************************************************************
WebDevelopeTool 1.0.0
************************************************************************/
MTool.WebDevelopeTool = {
	title: "MTool_WebDevelopeTool_Expand",
	Begin: function() {
		if(M$.CheckIE56()) return;
		if(!$("#MTool_WebDevelopeTool").length && !$("#MTool_WebDevelopeTool_Expand").length) {
			$("body").prepend(
				"<div id=\"MTool_WebDevelopeTool\" style=\"height: 25px;\">"
					+"<div style=\"color: #15428b; font-size: 11px; height: 14px; padding: 5px 18px 4px 18px; width: 100%; background: #bfdbff; border-top: solid #737374 1px; border-bottom: solid #9bbbe3 1px; position: fixed; z-index: 100;\">"
						+"<a onclick=\"M$.WebDevelopeTool.EncodeURI();\">EncodeURI</a>"
					+"</div>"
					+"<div id=\"MTool_WebDevelopeTool_Expand\" title=\"MTool_WebDevelopeTool_Expand\" style=\"z-index: 101;\">Mở rộng</div>"
				+"</div>"
			);
			$("#MTool_WebDevelopeTool_Expand").dialog({
				dialogClass: "MTool_WebDevelopeTool_Expand",
				position: true,
				autoOpen: false,
				closeOnEscape: false,
				width: 500,
				minWidth: 500,
				height: 500,
				minHeight: 500
			});
			$("#MTool_WebDevelopeTool_Expand").bind("dialogresize", M$.WebDevelopeTool.SetTitle);
		}
	},
	SetTitle: function() {
		$("#ui-dialog-title-MTool_WebDevelopeTool_Expand").html(M$.WebDevelopeTool.title + " (" + parseInt($(".MTool_WebDevelopeTool_Expand.ui-dialog").css("width")) + " x " + parseInt($(".MTool_WebDevelopeTool_Expand.ui-dialog").css("height")) + ")");
	},
	EncodeURI: function() {
		$("#MTool_WebDevelopeTool_Expand").dialog("option", "position", true);
		$("#MTool_WebDevelopeTool_Expand").dialog("option", "width", 500);
		$("#MTool_WebDevelopeTool_Expand").dialog("option", "minWidth", 500);
		$("#MTool_WebDevelopeTool_Expand").dialog("option", "height", 160);
		$("#MTool_WebDevelopeTool_Expand").dialog("option", "minHeight", 160);
		
		M$.WebDevelopeTool.title = "EncodeURI";
		M$.WebDevelopeTool.SetTitle();
		
		$("#MTool_WebDevelopeTool_Expand").html(
			"<textarea style=\"width: 100%;\"></textarea>"
			+"<textarea style=\"width: 100%; margin-top: 5px;\"></textarea>"
			+"<center><input type=\"button\" style=\"margin-top: 5px;\" onclick=\"$('#MTool_WebDevelopeTool_Expand textarea:nth-child(2)').val($('#MTool_WebDevelopeTool_Expand textarea:nth-child(1)').val());\" value=\"EncodeURI\" /></center>"
		);
		
		$("#MTool_WebDevelopeTool_Expand input").click(function() {
			$("#MTool_WebDevelopeTool_Expand textarea:nth-child(2)").val(
				encodeURI($("#MTool_WebDevelopeTool_Expand textarea:nth-child(1)").val()).replace(/%20/g, "+").replace(/%0A/g, "\n")
			);
		});
		$("#MTool_WebDevelopeTool_Expand").dialog("open");
	}
};

/************************************************************************
Debug 1.0.0
************************************************************************/
MTool.Debug = {
	Begin: function() {
		if(M$.CheckIE56()) return;
		
		if(!$("#MTool_Debug").length) $("body").prepend("<div id=\"MTool_Debug\" title=\"MTool_Debug\"></div>");
		$("#MTool_Debug").dialog({
			position: M$.Debug.Option_FixedPosition_Position,
			dialogClass: "MTool_Debug",
			autoOpen: false,
			closeOnEscape: false,
			show: "slide",
			hide: "slide",
			height: 300,
			width: 300,
			buttons: [
				{
					text: M$.Language.L8,
					click: function() {
						$(this).html("");
					}
				},
				{
					text: M$.Language.L9,
					click: function() { $(this).dialog("close"); }
				}
			]
		});
	},
	Open: function() {
		if(M$.CheckIE56()) return;
		
		$("#MTool_Debug").dialog("open");
	},
	Close: function() {
		if(M$.CheckIE56()) return;
		
		$("#MTool_Debug").dialog("close");
	},
	Toggle: function() {
		if(M$.CheckIE56()) return;
		
		if($(".MTool_Debug.ui-dialog").css("display") == "none") $("#MTool_Debug").dialog("open");
		else $("#MTool_Debug").dialog("close");
	},
	Append: function(string) {
		if(M$.CheckIE56()) {
			//alert(string);
			return;
		}
		
		M$.Debug.Open();
		$("#MTool_Debug").append("<span style=\"padding: 2px;\">" + string + "</span><br />");
		$("#MTool_Debug span:last").effect("highlight", {}, 3000);
		if($("#MTool_Debug").length) $("#MTool_Debug").scrollTop($("#MTool_Debug")[0].scrollHeight);
	},
	Option: function(string, value) {
		if(M$.CheckIE56()) return;
		
		if(string == "fixedPosition") {
			$("#MTool_Debug").dialog("option", "draggable", !value);
			
			M$.Debug.Option_FixedPosition_Enable(value);
			$("#MTool_Debug").bind("dialogresizestop", function(event, ui) {
				M$.Debug.Option_FixedPosition_Enable(value);
			});
			
			if(value) {
				M$.Debug.Option_FixedPosition_Position = value;
				M$.Debug.Option_FixedPosition_SetPosition();
				
				$(window).bind("resize", M$.Debug.Option_FixedPosition_SetPosition);
				$("#MTool_Debug").bind("dialogresize", M$.Debug.Option_FixedPosition_SetPosition);
			}
			else {
				$(window).unbind("resize", M$.Debug.Option_FixedPosition_SetPosition);
				$("#MTool_Debug").unbind("dialogresize", M$.Debug.Option_FixedPosition_SetPosition);
			}
		}
		
		if(string == "width") {
			$("#MTool_Debug").dialog("option", "width", value);
		}
		
		if(string == "height") {
			$("#MTool_Debug").dialog("option", "height", value);
		}
	},
	Option_FixedPosition_Position: ['left', 'top'],
	Option_FixedPosition_Enable: function(value) {
		if(M$.CheckIE56()) return;
		
		if(value) $(".MTool_Debug.ui-dialog").css({position:"fixed"});
		else $(".MTool_Debug.ui-dialog").css({position:"absolute"});
	},
	Option_FixedPosition_SetPosition: function() {
		if(M$.CheckIE56()) return;
		
		$("#MTool_Debug").dialog("option", "position", M$.Debug.Option_FixedPosition_Position);
	}
};

/************************************************************************
Is 1.0.0
************************************************************************/
MTool.Is = {
	Int: function(x) {
		var y = parseInt(x);
		if(isNaN(y)) return false;
		return x == y && x.toString() == y.toString();
	},
	PositiveInt: function(x) {
		return /^\d+$/.test(x);
	}
}

/************************************************************************
CheckIE56 1.0.0
************************************************************************/
MTool.CheckIE56 = function() {
	if(/MSIE [56].*Windows/.test(navigator.userAgent)) return true;
	return false;
}

/************************************************************************
GetHash 1.0.1
************************************************************************/
MTool.GetHash = function() {
	var url = window.location.href;
	var flag = url.indexOf("#");
	if(flag == "-1") return null;
	url = url.substring(flag);
	if(!url.substring(1)) return null;
	return url;
}

/************************************************************************
SetHash 1.0.0
************************************************************************/
MTool.SetHash = function(hash) {
	window.location.hash = hash;
}

/************************************************************************
UrlVariables 1.0.1
************************************************************************/
MTool.UrlVariables = {
	GetHash: function(url) {
		var flag = url.indexOf("#");
		if(flag == "-1") return null;
		url = url.substring(flag);
		return url;
	},
	GetQueryString: function(url) {
		var flag = url.indexOf("#");
		if(flag != "-1") {
			url = url.substring(0, flag);
		}
		flag = url.indexOf("?");
		if(flag == "-1") return null;
		url = url.substring(flag + 1);
		if(url == "") return null;
		return url;
	},
	GetFullScriptName: function(url) {
		var flag = url.indexOf("#");
		if(flag != "-1") {
			url = url.substring(0, flag);
		}
		flag = url.indexOf("?");
		if(flag != "-1") {
			url = url.substring(0, flag);
		}
		return url;
	},
	SetRandomKey: function(url, name) {
		return M$.UrlVariables.SetRequest(url, name, Math.random());
	},
	GetRequest: function(url, name) {
		var query_string = M$.UrlVariables.GetQueryString(url);
		if(!query_string) return null;
		var request_split = query_string.split("&");
		for(i = request_split.length - 1; i >= 0; i--) {
			if(request_split[i] == "") continue;
			var flag = request_split[i].indexOf("=");
			if(flag == "-1") {
				if(request_split[i] == name) return "";
				else continue;
			}
			var request_name = request_split[i].substring(0, flag);
			if(request_name != name) continue;
			var request = request_split[i].substring(flag + 1);
			return request;
		}
		return null;
	},
	SetRequest: function(url, name, value) {
		var url_temp = M$.UrlVariables.GetFullScriptName(url);
		var query_string = M$.UrlVariables.GetQueryString(url);
		if(!query_string) url_temp += "?" + name + "=" + value;
		else {
			if(M$.UrlVariables.GetRequest(url, name)) {
				var request_split = query_string.split("&");
				var flag;
				for(i = request_split.length - 1; i >= 0; i--) {
					if(request_split[i] == "") continue;
					var flag1 = request_split[i].indexOf("=");
					if(flag1 == "-1") {
						if(request_split[i] == name) {
							flag = i;
							break;
						}
						else continue;
					}
					var request_name = request_split[i].substring(0, flag1);
					if(request_name != name) continue;
					flag = i;
					break;
				}
				for(i = 0; i < request_split.length; i++) {
					if(i == 0) url_temp += "?";
					else url_temp += "&";
					if(i == flag) url_temp += name + "=" + value;
					else url_temp += request_split[i];
				}
			}
			else url_temp += "?" + M$.UrlVariables.GetQueryString(url) + "&" + name + "=" + value;
		}
		if(M$.UrlVariables.GetHash(url)) url_temp += M$.UrlVariables.GetHash(url);
		return url_temp;
	}
};

/************************************************************************
RightMenu_XP 1.0.0
require:
	* jquery.rightClick.js
	* MTool_RightMenu_XP_1152x864.css
	* Extend.png
************************************************************************/
MTool.RightMenu_XP = {
	active: false,
	css_dir: "",
	css: "MTool_RightMenu_XP_1152x864.css",
	image_dir: "",
	Begin: function() {
		if(!this.active) {
			this.active = true;
			$("head").append("<link rel=\"stylesheet\" type=\"text/css\" href=\"" + this.css_dir + this.css + "\" />");
			setTimeout("M$.RightMenu_XP.Begin_TimeOut()", 9);
		}
	},
	Begin_TimeOut: function() {
		$(".MTool_RightMenu_XP").css("opacity", 0);
	},
	BeginMenu: function(id) {
		$("body").prepend("<div id=\"" + id + "\" class=\"MTool_RightMenu_XP\"></div>");
		$("#" + id).mousedown(function(e) {
			return false;
		});
		$(document).mousedown(function(e) {
			if(!$.browser.mozilla || ($.browser.mozilla && e.button != 2)) {
				M$.RightMenu_XP.Hide(id);
			}
		});
	},
	AddFunction: function(id, image, content, extend, thaotac) {
		var insert = "<div class=\"Function\">";
		insert += "<span class=\"Image\">";
		if(image) insert += "<img width=\"13\" src=\"" + image + "\" />";
		insert += "</span>";
		insert += "<span class=\"Content\">";
		if(content[0]) insert += content[0];
		insert += "</span>";
		insert += "<span class=\"Extend\">";
		if(extend) insert += "<img src=\"" + this.image_dir + "Extend.png\" />";
		insert += "</span>";
		insert += "</div>";
		$("#" + id).append(insert);
		if(content[1] == "disable") $(".MTool_RightMenu_XP .Function:last span.Content").addClass("Content_Disable");
		$(".MTool_RightMenu_XP .Function:last").noContext()
		.mouseenter(function() {
			$(this).addClass("Function_Hover");
		}).mouseleave(function() {
			$(this).removeClass("Function_Hover");
		}).mouseup(function(e) {
			if(e.button == 0 || ($.browser.msie && e.button == 1)) {
				if($("span.Content", this).hasClass("Content_Disable")) return false;
				else if(thaotac) {
					thaotac();
				}
				M$.RightMenu_XP.Hide(id);
			}
		});
	},
	EndMenu: function(id) {
		if(/MSIE [567].*Windows/.test(navigator.userAgent)) {
			setTimeout("M$.RightMenu_XP.EndMenu_TimeOut('" + id + "')", 9);
		}
	},
	EndMenu_TimeOut: function(id) {
		var FixWidth = 0;
		$("#" + id + " .Function span.Content").each(function() {
			if($(this).outerWidth(true) > FixWidth) FixWidth = $(this).outerWidth(true);
		});
		var FixWidth = $(".MTool_RightMenu_XP .Function span.Image").outerWidth(true) + FixWidth + $(".MTool_RightMenu_XP .Function span.Extend").outerWidth(true);
		$(".MTool_RightMenu_XP .Function").css("width", FixWidth + "px");
	},
	Show: function(id, X, Y) {
		$("#" + id).css("margin-left", X - parseFloat($("body").css("margin-left"))).css("margin-top", Y - parseFloat($("body").css("margin-top")));
		$("#" + id).stop().css("visibility", "visible").animate({ opacity: 1 }, 100);
	},
	Hide: function(id) {
		$("#" + id).stop().css("visibility", "hidden").animate({ opacity: 0 });
	},
	Combine: function(Object, id) {
		$(Object).css("cursor", "default");
		$(Object).rightClick( function(e) {
			setTimeout("M$.RightMenu_XP.Show(\"" + id + "\", " + e.pageX + ", " + e.pageY + ")");
			return false;
		});
	}
};

/************************************************************************
Fix
-------------------------------------------------------------------------------------------
Fix.IE.png 1.0.0
require:
	* blank.gif
************************************************************************/
MTool.Fix = {
	IE: {
		png: function(url) {
			if(/MSIE [56].*Windows/.test(navigator.userAgent)) {
				var blank = new Image;
				blank.src = url;
				var imgs = document.getElementsByTagName("img");
				for (var i = imgs.length; --i >= 0;) {
					var img = imgs[i];
					var src = img.src;
					if (!/\.png$/.test(src))
						continue;
					var s = img.runtimeStyle;
					s.width = img.offsetWidth + "px";
					s.height = img.offsetHeight + "px";
					s.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "',sizingMethod='scale')";
					img.src = blank.src;
				}
			}
		}
	}
}

/************************************************************************
Ajax 1.0.2
************************************************************************/
MTool.Ajax = {
	ObjectToProcess: "#MTool.Ajax.ObjectToProcess",
	SetRandomKey: true,
	RandomKeyName: "MTool.Ajax.RandomKeyName",
	ProcessScroll: true,
	ProcessScrollTop: 0,
	TimeRecall: 100,
	OnFinish: function() {},
	Begin: function(url) {
		if(!M$.GetHash()) M$.SetHash(url);
	},
	Recall: function() {
		setInterval("M$.Ajax.AutoCheck()", this.TimeRecall);
	},
	Check: function(hash) {
		var url = M$.GetHash();
		if(url) url = url.substring(1);
		if(hash && hash.substring(0, 1) == "#") hash = hash.substring(1);
		if(hash == undefined || hash == url) {
			this.OnPrepare();
		}
		else M$.SetHash(hash);
	},
	AutoCheck: function() {
		var url = M$.GetHash();
		if(!url) {
			M$.SetHash(this.LastUrl);
			return;
		}
		if(url) url = url.substring(1);
		if(url != this.LastUrl) {
			this.LastUrl = url;
			this.Url = url;
			this.OnPrepare();
		}
	},
	OnPrepare: function() {
		this.OnLoad();
	},
	OnLoad: function() {
		if(this.SetRandomKey) {
			this.Url = M$.UrlVariables.SetRandomKey(this.Url, this.RandomKeyName);
		}
		$.ajax({
			url: this.Url,
			success: function(data) {
				M$.Ajax.OnComplete(data);
			},
			error: function(x, e) {
				M$.Debug.Append(M$.Language.L6 + "\n" + M$.Ajax.Error(x, e));
			}
		});
	},
	OnComplete: function(data) {
		$(M$.Ajax.ObjectToProcess).slideToggle("fast", function() {
			$(M$.Ajax.ObjectToProcess).html(data);
			$(M$.Ajax.ObjectToProcess).slideToggle("fast", function() {
				M$.Ajax.OnFinish();
			});
			if(M$.Ajax.ProcessScroll) $('html,body').animate({scrollTop: M$.Ajax.ProcessScrollTop}, "fast");
		});
	},
	Error: function(x, e) {
		if(e == "timeout") return M$.Language.L1;
		if(e == "parsererror") return M$.Language.L2;
		if(x.status == 0) return M$.Language.L3;
		if(x.status == 404) return M$.Language.L4;
		if(x.status == 500) return M$.Language.L5;
		return M$.Language.L7 + "\n" + x.responseText;
	}
};

/************************************************************************
DifferenceImage 1.0.0
************************************************************************/
MTool.DifferenceImage = {
	GetArray: function(standardWidth, standardHeight, width, height) {
		var typeArray;
		var size;
		var differenceSize;
		var standardRate = standardWidth / standardHeight;
		var rate = width / height;
		if(rate > standardRate) {
			typeArray = "w";
			if(width > standardWidth) {
				size = standardWidth;
				differenceSize = [0, parseInt(Math.abs((standardHeight - (standardWidth * height / width)) / 2))];
			}
			else {
				size = width;
				differenceSize = [parseInt(Math.abs((standardWidth - width) / 2)), parseInt(Math.abs((standardHeight - height) / 2))];
			}
		}
		else {
			typeArray = "h";
			if(height > standardHeight) {
				size = standardHeight;
				differenceSize = [parseInt(Math.abs((standardWidth - (width * standardHeight / height)) / 2)), 0];
			}
			else {
				size = height;
				differenceSize = [parseInt(Math.abs((standardWidth - width) / 2)), parseInt(Math.abs((standardHeight - height) / 2))];
			}
		}
		return [typeArray, size, differenceSize];
	},
	GetString: function(standardWidth, standardHeight, width, height) {
		var DI = this.GetArray(standardWidth, standardHeight, width, height);
		var insert;
		if(DI[0] == "w") {
			insert = "width='" + DI[1] + "' style='margin-left: " + DI[2][0] + "px; margin-top: " + DI[2][1] + "px' ";
		}
		else {
			insert = "height='" + DI[1] + "' style='margin-left: " + DI[2][0] + "px; margin-top: " + DI[2][1] + "px' ";
		}
		return insert;
	}
};
