if(!window.Quickwebsoft_Common_Loaded){
	window.vQWSECBusy = false;
	
	function qws_Common() {
		this.vVersion = "3.0.0.0";
		this.vUserAgent=(navigator==null||navigator.userAgent==null)?'':navigator.userAgent.toLowerCase();
		this.vAppVersion=(navigator==null||navigator.appVersion==null)?'':navigator.appVersion;
		this.vAppMajorVersionNumber=parseInt(this.vAppVersion);
		this.vIsWin=this.vUserAgent.indexOf('win')>=0;
		this.vIsMac=this.vUserAgent.indexOf('mac')>=0;
		this.vIsOpera=this.vUserAgent.indexOf('opera')>=0;
		this.vIsSafari=this.vUserAgent.indexOf('safari')>=0;
		//this.vIsSafari13Plus=this.vIsSafari&&(this.vUserAgent.indexOf('safari/125.')==-1)&&(this.vUserAgent.indexOf('safari/85.')==-1);
		this.vIsKonqueror=this.vUserAgent.indexOf('konqueror')>=0;
		this.vIsIE=!this.vIsOpera&&(this.vUserAgent.indexOf('msie')>=0);
		this.vIsIEMac=this.vIsIE&&this.vIsMac;
		this.vIsIE3=this.vIsIE&&(this.vAppMajorVersionNumber<4);
		this.vIsIE4=this.vIsIE&&(this.vAppMajorVersionNumber==4)&&(this.vUserAgent.indexOf("msie 4")>=0);
		this.vIsIE55=this.vIsIE&&(this.vUserAgent.indexOf("msie 5.5")>=0);
		//this.vIsIE5=this.vIsIE&&(this.vUserAgent.indexOf("msie 5")>=0)&&!this.vIsIE55;
		//this.vIsIE55Plus=this.vIsIE&&!this.vIsIE3&&!this.vIsIE4&&!this.vIsIE5;
		this.vIsIE6=this.vIsIE&&(this.vUserAgent.indexOf("msie 6.0")>=0);
		//this.vIsIE6Plus=this.vIsIE&&!this.vIsIE3&&!this.vIsIE4&&!this.vIsIE5&&!this.vIsIE55&&!this.vIsIE6;
		//this.vIsMozilla=!this.vIsIE&&!this.vIsOpera&&((this.vUserAgent.indexOf('netscape')>0)||(this.vUserAgent.indexOf('mozilla')>=0))&&(this.vAppMajorVersionNumber>=5);

		//Get element's attribute.
		this.f_GetAttribute = function(vElement, vAttributeName, vDefaultValue) {
			if (vElement.getAttribute) {
				var vResult = vElement.getAttribute(vAttributeName, 0);
				if (vResult == null ||((vResult == "") && (!document.all))) {
					return vDefaultValue;
				};
				return vResult;
			} else {
				var vRegEx = new RegExp(":", "g");
				var vId = vElement.name.replace(vRegEx, "_");
				var vVarName = vId + "_" + vAttributeName;
				var vResult = eval(vVarName);
				if ((vResult == null) || (vResult == "")) {
					return vDefaultValue;
				};
				return vResult;
			};
		};

		//Set element's attribute
		this.f_SetAttribute = function(vElement, vAttributeName, vAttributeValue) {
			if (vElement.setAttribute) {
				vElement.setAttribute(vAttributeName, vAttributeValue, 0);
			} else {
				var vVarName = vElement.name + "_" + vAttributeName;
				eval("vVarName = vAttributeValue.toString();");
			};
		};

		this.f_GetElementById = function (vId) {
			if (document.getElementById) {
				return document.getElementById(vId);
			} else if (document.all) {
				return document.all[vId];
			} else if (document.layers) {
				var vElement = "";
				eval("vElement=document.['" + vId + "']");
				return vElement;
			} else {
				return null;
			};
		};
		
		this.f_AddEventListener = function (vElement, vEventName, vListener) {
			if (this.vIsIEMac) {
				return false;
			};
			if (vElement.attachEvent) {
				vElement.attachEvent("on" + vEventName, vListener);
				return true;
			} else if (vElement.addEventListener) {
				vElement.addEventListener(vEventName, vListener, false);
				return true;
			} else {
				eval("if (vElement.on" + vEventName + " != null) {");
				eval("var vOldEvent = vElement.on" + vEventName + ";");
				eval("vElement.on" + vEventName + " = function (e) {");
				eval("vOldEvent(e);");
				eval(vListener + "();");
				eval("};");
				eval("}else{");
				eval("vElement.on" + vEventName + "=vListener;");
				eval("};");
				return true;
			};
			
			return false;
		};

		this.f_RemoveEventListener = function (vElement, vEventName, vListener) {
			if (this.vIsIEMac) {
				return false;
			};
			if (vElement.detachEvent) {
				vElement.detachEvent("on" + vEventName, vListener);
				return true;
			} else if (vElement.removeEventListener) {
				vElement.removeEventListener(vEventName, vListener, false);
				return true;
			};
			
			return false;
		};

		this.f_GetElementLeft = function (vElement, vInitialPos, vDirection) {
			var vLeftPos = vElement.offsetLeft;
			if (vInitialPos) {
				vLeftPos = vInitialPos;
			};
			
			var vParent = vElement.offsetParent;
			
			while (vParent != null) {
				if (this.vIsIE) {
					if ((vParent.tagName != "TABLE") && (vParent.tagName != "BODY") && (vParent.clientLeft != null)) {
						vLeftPos += vParent.clientLeft;
					};
				} else if (vParent.tagName == "TABLE") {
					var vParentBorder = parseInt(vParent.border);
					if (isNaN(vParentBorder)) {
						var vParentFrame = vParent.getAttribute('frame');
						if (vParentFrame != null) {
							vLeftPos += 1;
						};
					} else if (vParentBorder > 0) {
						vLeftPos += vParentBorder;
					};
				};
				vLeftPos += vDirection * vParent.offsetLeft;
				vParent = vParent.offsetParent;
			};
			return vLeftPos;
		};
		
		this.f_GetElementTop = function (vElement, vInitialPos, vDirection) {
			var vTopPos = vElement.offsetTop;
			if (vInitialPos) {
				vTopPos = vInitialPos;
			};
			var vParent = vElement.offsetParent;
			while (vParent != null) {
				if(this.vIsIE) {
					if((vParent.tagName != "TABLE") && (vParent.tagName != "BODY") && (vParent.clientTop != null)) {
						vTopPos += vParent.clientTop;
					};
				} else if(vParent.tagName == "TABLE") {
					var vParentBorder = parseInt(vParent.border);
					if(isNaN(vParentBorder)) {
						var vParentFrame = vParent.getAttribute('frame');
						if(vParentFrame != null) {
							vTopPos += 1;
						};
					} else if(vParentBorder > 0) {
						vTopPos += vParentBorder;
					};
				};
				vTopPos += vDirection * vParent.offsetTop;
				vParent = vParent.offsetParent;
			};
			return vTopPos;
		};
		
		this.f_SetElementPos = function (vElement, vLeftPos, vTopPos) {
			vElement.style.position = "absolute";
			
			if (vElement.style.pixelLeft) {
				vElement.style.pixelLeft = vLeftPos;
				vElement.style.pixelTop = vTopPos;
			} else if (vElement.style.posLeft) {
				vElement.style.posLeft = vLeftPos.toString() + "px";
				vElement.style.posTop = vTopPos.toString() + "px";
			} else {
				vElement.style.left = vLeftPos.toString() + "px";
				vElement.style.top = vTopPos.toString() + "px";
			}
		};

		this.f_GetMouseX = function (vE, vElement) {
			var vX = vE.clientX;
			
			if (this.vIsSafari) {
				vX += document.body.offsetLeft;
			} else {
				vX += this.f_GetElementScrollLeft(vElement);
			};
			
			return vX;
		};
		
		this.f_GetMouseY = function (vE, vElement) {
			var vY = vE.clientY;
			
			if (this.vIsSafari) {
				vY += document.body.offsetTop;
			} else {
				vY += this.f_GetElementScrollTop(vElement);
			};
			
			return vY;
		};

		this.f_GetElementScrollLeft = function (vElement) {
			var vX = 0;
			if (document.body.scrollLeft != null) {
				var vParent = this.f_GetParentNode (vElement);
				while (vParent != null && vParent != document.body) {
					if (vParent.scrollLeft != null) {
						vX += vParent.scrollLeft;
					};
					
					vParent = this.f_GetParentNode (vParent);
				};
				
				vX += document.body.scrollLeft;
			} else if (window.pageXOffset != null) {
				vX += window.pageXOffset;
			};
			
			return vX;
		};
		
		this.f_GetElementScrollTop = function (vElement) {
			var vY = 0;
			if (document.body.scrollTop != null) {
				var vParent = this.f_GetParentNode (vElement);
				while (vParent != null && vParent != document.body) {
					if (vParent.scrollTop != null && vParent.tagName != "TR") {
						vY += vParent.scrollTop;
					};
					
					vParent = this.f_GetParentNode (vParent);
				};
				
				vY += document.body.scrollTop;
			} else if (window.pageYOffset != null) {
				vY += window.pageYOffset;
			};
			
			return vY;
		};
		
		this.f_GetParentNode = function (vElement) {
			if (vElement.parentElement != null) {
				return vElement.parentElement;
			} else if (vElement.parentNode != null) {
				return vElement.parentNode;
			} else {
				return null;
			};
		};
		
		this.f_IsMouseInElement = function (vE, vElement) {
			var vMouseX = this.f_GetMouseX(vE, vElement);
			var vMouseY = this.f_GetMouseY(vE, vElement);
			
			var vElementLeft = this.f_GetElementLeft(vElement, vElement.offsetLeft, 1);
			var vElementTop = this.f_GetElementTop(vElement, vElement.offsetTop, 1);
			var vElementRight = vElementLeft + vElement.offsetWidth;
			var vElementBottom = vElementTop + vElement.offsetHeight;
			
			return ((vMouseX < vElementLeft || vMouseX > vElementRight || vMouseY < vElementTop || vMouseY > vElementBottom) ? false : true);
		};
		
		this.qwsTED = function(vElementId){ // qwsToggleElementDisplay
			var vElement = this.f_GetElementById(vElementId);
			if (vElement != null){
			    if (vElement.style.display == "none"){
			        vElement.style.display = "";
			    } else {
			        vElement.style.display = "none";
			    };
			};
		};

		this.f_HasChildNode = function(vElement) {
			var vLen = vElement.childNodes.length;
			for (var i = 0; i < vLen; i++) {
				if (vElement.childNodes[i].nodeType != 3) {
					return true;
				};
			};
			
			return false;
		};
		this.f_AlignElements = function(vSrcId, vTargetId, vHorizAlign, vVertAlign){ //AlignElements
			var vSrc = this.f_GetElementById(vSrcId);
			var vTarget = this.f_GetElementById(vTargetId);
			if (vTarget != null && vSrc != null){
				var vSrcLeft = this.f_GetElementLeft(vSrc, vSrc.offsetLeft, 1);
				var vSrcTop = this.f_GetElementTop(vSrc, vSrc.offsetTop, 1);
				var vTargetLeft = vTarget.offsetLeft;
				var vTargetTop = vTarget.offsetTop;
				var vSrcWidth = vSrc.offsetWidth;
				var vSrcHeight = vSrc.offsetHeight;
				var vTargetWidth = vTarget.offsetWidth;
				var vTargetHeight = vTarget.offsetHeight;
				switch (vHorizAlign) {
					case "l": //left
						vTargetLeft = vSrcLeft - vTargetWidth;
						break;
					case "la": //left align
						vTargetLeft = vSrcLeft;
						break;
					case "c": //center
						vTargetLeft = vSrcLeft + (vSrcWidth - vTargetWidth) / 2
						break;
					case "ra": //right align
						vTargetLeft = vSrcLeft + vSrcWidth - vTargetWidth;
						break;
					case "r": // right
						vTargetLeft = vSrcLeft + vSrcWidth;
						break;
				}
				if (vTargetLeft < 2) { vTargetLeft = 2;};
				vTarget.style.left = vTargetLeft + "px";
				switch (vVertAlign) {
					case "t": //top
						vTargetTop = vSrcTop - vTargetHeight;
						break;
					case "ta": //top align
						vTargetTop = vSrcTop;
						break;
					case "m": //middle
						vTargetTop = vSrcTop + (vSrcHeight - vTargetHeight) / 2
						break;
					case "ba": //bottom align
						vTargetTop = vSrcTop + vSrcHeight - vTargetHeight;
						break;
					case "b": // bottom
						vTargetTop = vSrcTop + vSrcHeight;
						break;
				}
				if (vTargetTop < 2) { vTargetTop = 2;};
				vTarget.style.top = vTargetTop + "px";
			};
		};
	};
	
	if (typeof(qwsCommon) != "object") {
		var qwsCommon = new qws_Common();
	};

	window.Quickwebsoft_Common_Loaded=true;
};

