// define namespace bugu
var bugu = bugu ? bugu : {};

// define namespace common under bugu
bugu.common = bugu.common ? bugu.common : {};

// define page error flag
bugu.common.errorFlag = false;

bugu.common.hasError = function () {
	return bugu.common.errorFlag;
};

bugu.common.isNull = function (htmlElementId) {
	var htmlElement = document.getElementById(htmlElementId);
	if (htmlElement.value == null || htmlElement.value.trim() == "") {
		return true;
	}
	return false;
}

bugu.common.isChecked = function (htmlElementId) {
	var htmlElement = document.getElementById(htmlElementId);
	if (htmlElement.checked == true) {
		return true;
	}
	return false;
}

bugu.common.isObject = function (htmlElementId) {
	var htmlElement = document.getElementById(htmlElementId);
	if (htmlElement) {
		return true;
	}
	return false;
}

bugu.common.error = function (htmlElementId, msg) {
	bugu.common.errorFlag = true;
	bugu.common.setErrorMsg(htmlElementId, msg)
};

bugu.common.normal = function (htmlElementId) {	
	bugu.common.recoverErrorMsg(htmlElementId);
};

bugu.common.setBackground = function (htmlElementId, value) {
	var htmlElement = document.getElementById(htmlElementId);
	htmlElement.style.background = value;	
};

bugu.common.setErrorMsg = function (htmlElementId, msg) {
	var htmlElement = document.getElementById(htmlElementId);
	htmlElement.innerHTML = msg;
};

bugu.common.recoverErrorMsg = function (htmlElementId) {
	var htmlElement = document.getElementById(htmlElementId);
	htmlElement.innerHTML = "";
};

bugu.common.hide = function (htmlElementId) {	
	bugu.common.setDisplay(htmlElementId, "none");
};

bugu.common.show = function (htmlElementId) {	
	bugu.common.setDisplay(htmlElementId, "");
};

bugu.common.setDisplay = function (htmlElementId, value) {	
	var htmlElement = document.getElementById(htmlElementId);
	htmlElement.style.display = value;	
};

bugu.common.isDisplaying = function (htmlElementId) {
	var htmlElement = document.getElementById(htmlElementId);
	return htmlElement.style.display != "none";
};

bugu.common.center = function (htmlElementId) {
	var htmlElement = document.getElementById(htmlElementId);
	htmlElement.style.left = (document.documentElement.scrollLeft + (document.documentElement.clientWidth - htmlElement.clientWidth) / 2) + "px";
	htmlElement.style.top = (document.documentElement.scrollTop + (document.documentElement.clientHeight - htmlElement.clientHeight) / 2) + "px";
};

bugu.common.isIE6 = function () {
	var browser=navigator.appName 
	var b_version=navigator.appVersion 
	var version=b_version.split(";"); 
	var trim_Version=version[1].replace(/[ ]/g,""); 
	if(browser=="Microsoft Internet Explorer" && trim_Version=="MSIE6.0"){
		return true;
	} else {
		return false;
	}
}

bugu.common.showPanel = function (div) {
	if (!bugu.common.bgDiv) {
		bugu.common.bgDiv = true;
		var tempHtmlDiv = document.createElement("div");
		document.body.appendChild(tempHtmlDiv);
		var text = "<div id=\"bgDiv\" style=\"border:0px;position:absolute;display:none;z-index:501;top:0px;left:0px;background-color:#000000;filter:alpha(opacity=80);-moz-opacity:.8;opacity:0.8;\"></div>";
		if (bugu.common.isIE6()) {
			text += "<iframe id=\"bgFrame\" src=\"about:blank\" style=\"border:0px;position:absolute;display:none;z-index:500;top:0px;left:0px;filter:alpha(opacity=0)\"></iframe>";
		}
		tempHtmlDiv.innerHTML =  text;
	}
	var htmlDiv = document.getElementById("bgDiv");
	htmlDiv.style.width = "1680px";
	htmlDiv.style.height = "1050px";
	document.documentElement.style["overflow"]="hidden";
	bugu.common.show("bgDiv");
	bugu.common.center("bgDiv");
	if (bugu.common.isIE6()) {
		var htmlFrame = document.getElementById("bgFrame");
		htmlFrame.style.width = "1680px";
		htmlFrame.style.height = "1050px";
		bugu.common.show("bgFrame");
		bugu.common.center("bgFrame");
	}
	bugu.common.show(div);
	bugu.common.center(div);
}

bugu.common.hidePanel = function (div) {
	document.documentElement.style["overflow"]="";
	if (bugu.common.bgDiv) {
		bugu.common.hide("bgDiv");
		if (bugu.common.isIE6()) {
			bugu.common.hide("bgFrame");
		}
	}
	bugu.common.hide(div);
}

bugu.common.changeCallbacksName = "gbl_change_callbacks";

bugu.common.getCallbacks = function (htmlInput) {
	var callbacks = htmlInput[bugu.common.changeCallbacksName];
	return callbacks ? callbacks : [];
};

bugu.common.fireCallbacks = function (htmlInput) {
	var callbacks = bugu.common.getCallbacks(htmlInput);
	for (var i = 0; i < callbacks.length; i++) {
		callbacks[i]();
	}
};

bugu.common.addCallback = function (htmlInput, callback) {
	var callbacks = htmlInput[bugu.common.changeCallbacksName];
	if (!callbacks) {
		callbacks = [];
		htmlInput[bugu.common.changeCallbacksName] = callbacks;
	}
	bugu.common.addToArray(callbacks, callback);
};

bugu.common.removeCallback = function (htmlInput, callback) {
	var callbacks = htmlInput[bugu.common.changeCallbacksName];
	if (callbacks) {
		bugu.common.removeFromArray(callbacks, callback);
		if (callbacks.length === 0) {
			delete htmlInput[bugu.common.changeCallbacksName];
		}
	}
};

bugu.common.observeInput = function (htmlInputName, callback) {
	var htmlInputs = document.getElementsByName(htmlInputName);
	if (htmlInputs) {
		// radio callback function
		var radioValue = "this value will almost be impossible to equal with any other.";
		callback.radioCallback = function () {
			// we register a onclick event for radio, so we should test whether value is actually changed
			var selected = false;
			for (var i = 0; i < htmlInputs.length; i++) {
				var htmlRadio = htmlInputs[i];
				selected |= htmlRadio.checked;
				if (htmlRadio.checked && htmlRadio.value != radioValue) {
					radioValue = htmlRadio.value;
					selected = true;
					callback();
					break;
				}
			}
			if (!selected && radioValue !== null) {
				radioValue = null;
				callback();
			}
		};
		// handle it as multiple
		htmlInputs = htmlInputs.length ? htmlInputs : [ htmlInputs ];
		// register for all inputs
		for (var i = 0; i < htmlInputs.length; i++) {
			var htmlInput = htmlInputs[i];
			if (bugu.common.stringEquals(htmlInput.type, "radio")) {
				// register onclick event for radio button because onchange event is not accurate for IE
				Event.observe(htmlInput, "click", callback.radioCallback);
				bugu.common.addCallback(htmlInput, callback.radioCallback);
			} else if (bugu.common.stringEquals(htmlInput.type, "checkbox")) {
				// register onclick event for checkbox because onchange event is not accurate for IE
				Event.observe(htmlInput, "click", callback);
				bugu.common.addCallback(htmlInput, callback);
			} else {
				Event.observe(htmlInput, "change", callback);
				bugu.common.addCallback(htmlInput, callback);
			}
		}
	}
};

bugu.common.stopObservingInput = function (htmlInputName, callback) {
	var htmlInputs = document.getElementsByName(htmlInputName);
	if (htmlInputs) {
		// handle it as multiple
		htmlInputs = htmlInputs.length ? htmlInputs : [ htmlInputs ];
		// unregister for all inputs
		for (var i = 0; i < htmlInputs.length; i++) {
			var htmlInput = htmlInputs[i];
			if (bugu.common.stringEquals(htmlInput.type, "radio")) {
				// for radio, unregister radio callback function
				bugu.common.removeCallback(htmlInput, callback.radioCallback);
				Event.stopObserving(htmlInput, "click", callback.radioCallback);
			} else if (bugu.common.stringEquals(htmlInput.type, "checkbox")) {
				bugu.common.removeCallback(htmlInput, callback);
				Event.stopObserving(htmlInput, "click", callback);
			} else {
				bugu.common.removeCallback(htmlInput, callback);
				Event.stopObserving(htmlInput, "change", callback);
			}
		}
		callback.radioCallback = null;
	}
};

bugu.common.getInputValue = function (htmlInputName) {
	var htmlInputs = document.getElementsByName(htmlInputName);
	if (htmlInputs) {
		// handle it as multiple
		htmlInputs = htmlInputs.length ? htmlInputs : [ htmlInputs ];
		var counter = { "radio" : 0, "other" : 0 };
		var values = [];
		for (var i = 0; i < htmlInputs.length; i++) {
			var htmlInput = htmlInputs[i];
			if (bugu.common.stringEquals(htmlInput.tagName, "select")) {
				// for select
				counter.other++;
				if (htmlInput.multiple) {
					// in multiple mode, adds an array
					var selectValues = [];
					for (var j = 0; j < htmlInput.options.length; j++) {
						var htmlOption = htmlInput.options[j];
						if (htmlOption.selected) {
							selectValues.push(htmlOption.value);
						}
					}
					values.push(selectValues);
				} else {
					// adds only the selected value in single mode
					if (htmlInput.selectedIndex >= 0) {
						values.push(htmlInput.options[htmlInput.selectedIndex].value);
					}
				}
			} else if (bugu.common.stringEquals(htmlInput.tagName, "input")) {
				if (bugu.common.stringEquals(htmlInput.type, "radio")) {
					// for radio
					counter.radio++;
					// radios for the same name is consider to be mutually exclusive
					if (htmlInput.checked) {
						values.push(htmlInput.value);
					}
				} else {
					counter.other++;
					if (bugu.common.stringEquals(htmlInput.type, "checkbox")) {
						// for checkbox
						if (htmlInput.checked) {
							values.push(htmlInput.value);
						}
					} else {
						// for text, hidden, file, password...
						values.push(htmlInput.value);
					}
				}
			} else if (bugu.common.stringEquals(htmlInput.tagName, "textarea")) {
				values.push(htmlInput.value);
			}
		}
		if ((counter.radio <= 0 && counter.other == 1) || counter.other <= 0) {
			if (values.length > 0) {
				return values[0];
			} else {
				return null;
			}
		} else {
			return values;
		}
	} else {
		return null;
	}
};

bugu.common.inputStack = [];

bugu.common.pushInputStatck = function (htmlInputName) {
	var inputStackString = "";
	var duplicate = false;
	for (var i = 0; i < bugu.common.inputStack.length; i++) {
		inputStackString += bugu.common.inputStack[i] + " ";
		if (bugu.common.inputStack[i] == htmlInputName) {
			duplicate = true;
		}
	}
	if (duplicate) {
		alert("Dead loop while setting input value(s), stack: " + inputStackString + htmlInputName);
	}
	bugu.common.inputStack.push(htmlInputName);
};

bugu.common.popInputStatck = function () {
	bugu.common.inputStack.pop();
};

bugu.common.setInputValue = function (htmlInputName, value) {
	bugu.common.pushInputStatck(htmlInputName);
	var htmlInputs = document.getElementsByName(htmlInputName);
	if (htmlInputs) {
		// handle it as multiple
		htmlInputs = htmlInputs.length ? htmlInputs : [ htmlInputs ];
		for (var i = 0; i < htmlInputs.length; i++) {
			var htmlInput = htmlInputs[i];
			var changed = false;
			if (bugu.common.stringEquals(htmlInput.tagName, "select")) {
				var previousSelectedIndex = htmlInput.selectedIndex;
				htmlInput.selectedIndex = -1;
				for (var j = 0; j < htmlInput.options.length; j++) {
					var htmlOption = htmlInput.options[j];
					htmlOption.selected = htmlOption.value == value;
				}
				changed = previousSelectedIndex != htmlInput.selectedIndex;
			} else if (bugu.common.stringEquals(htmlInput.tagName, "input")) {
				if (bugu.common.stringEquals(htmlInput.type, "radio") ||
						bugu.common.stringEquals(htmlInput.type, "checkbox")) {
					var previousChecked = htmlInput.checked;
					// for radio and checkbox
					htmlInput.checked = htmlInput.value == value;
					changed = previousChecked != htmlInput.checked;
				} else {
					changed = htmlInput.value != value;
					// for text, hidden, file, password...
					htmlInput.value = value;
				}
			} else if (bugu.common.stringEquals(htmlInput.tagName, "textarea")) {
				changed = htmlInput.value != value;
				htmlInput.value = value;
			}
			if (changed) {
				bugu.common.fireCallbacks(htmlInput);
			}
		}
	}
	bugu.common.popInputStatck();
};

bugu.common.setInputValues = function (htmlInputName, values) {
	bugu.common.pushInputStatck(htmlInputName);
	// use a map to speed up search
	var tester = {};
	if (typeof(values) == "string" || !values.length) {
		tester[values] = true;
	} else {
		for (var i = 0; i < values.length; i++) {
			tester[values[i]] = true;
		}
	}
	var htmlInputs = document.getElementsByName(htmlInputName);
	if (htmlInputs) {
		// handle it as multiple
		htmlInputs = htmlInputs.length ? htmlInputs : [ htmlInputs ];
		for (var i = 0; i < htmlInputs.length; i++) {
			var htmlInput = htmlInputs[i];
			if (bugu.common.stringEquals(htmlInput.tagName, "select") && htmlInput.multiple) {
				// for multiple select
				for (var j = 0; j < htmlInput.options.length; j++) {
					var htmlOption = htmlInput.options[j];
					htmlOption.selected = tester[htmlOption.value] == true;
				}
				bugu.common.fireCallbacks(htmlInput);
			} else if (bugu.common.stringEquals(htmlInput.tagName, "input") &&
					bugu.common.stringEquals(htmlInput.type, "checkbox")) {
				// checkbox
				htmlInput.checked = tester[htmlInput.value] == true;
				bugu.common.fireCallbacks(htmlInput);
			}
		}
	}
	bugu.common.popInputStatck();
};

bugu.common.clearInputValue = function (htmlInputName) {
	bugu.common.setInputValue(htmlInputName, "");
};

bugu.common.stringEmpty = function (s) {
	if (s) {
		return s.trim().length <= 0;
	}
	return true;
};

bugu.common.stringEquals = function (s1, s2, checkCase) {
	if (!s1 || !s2) {
		return s1 == s2;
	} else if (typeof(s1) == "string" && typeof(s2) == "string") {
		if (checkCase) {
			return s1.trim() == s2.trim();
		} else {
			return s1.trim().toUpperCase() == s2.trim().toUpperCase();
		}
	} else {
		return false;
	}
};

bugu.common.stringContains = function (container, value, checkCase) {
	if (!container || typeof(container) == "string" || !container.length) {
		return bugu.common.stringEquals(container, value);
	} else {
		for (var i = 0; i < container.length; i++) {
			if (bugu.common.stringEquals(container[i], value, checkCase)) {
				return true;
			}
		}
		return false;
	}
};

bugu.common.contains = function (container, value) {
	if (!container || typeof(container) == "string" || !container.length) {
		return container == value;
	} else {
		for (var i = 0; i < container.length; i++) {
			if (container[i] == value) {
				return true;
			}
		}
		return false;
	}
};

bugu.common.removeFromArray = function (container, value) {
	if (container || typeof(container) != "string" || container.length) {
		for (var i = 0; i < container.length; i++) {
			if (container[i] == value) {
				container.splice(i, 1);
				break;
			}
		}
	}
};

bugu.common.addToArray = function (container, value) {
	if (container || typeof(container) != "string" || container.length) {
		for (var i = 0; i < container.length; i++) {
			if (container[i] == value) {
				return;
			}
		}
		container.push(value);
	}
};

bugu.common.getSelectItem = function (select) {
	var key = "select_item";
	var htmlSelect = document.getElementById(select);
	for (var i = 0; i < htmlSelect.options.length; i++) {
		var htmlOption = htmlSelect.options[i];
		if (htmlOption.selected) {
			return htmlOption[key];
		}
	}
	return null;
};
	
bugu.common.buildCascadeSelect = function (selects, selectItems) {
	var marker = "cascade_marker";
	var key = "select_item";
	var select = selects[0];
	var htmlSelect = document.getElementById(select);
	// delete previously added options first
	var options2Delete = [];
	for (var i = 0; i < htmlSelect.options.length; i++) {
		var htmlOption = htmlSelect.options[i];
		if (htmlOption[marker]) {
			options2Delete.push(htmlOption);
		}
	}
	for (var i = 0; i < options2Delete.length; i++) {
		var htmlOption = options2Delete[i];
		htmlSelect.removeChild(htmlOption);
	}
	// add options
	if (selectItems && selectItems.length > 0) {
		for (var i = 0; i < selectItems.length; i++) {
			var selectItem = selectItems[i];
			var htmlOption = document.createElement("option");
			var htmlText = document.createTextNode(selectItem.label);
			htmlOption.appendChild(htmlText);
			htmlOption.value = selectItem.value;
			htmlOption[marker] = true;
			htmlOption[key] = selectItem; 
			htmlSelect.appendChild(htmlOption);
		}
	}
	// add listener
	if (!htmlSelect[marker]) {
		var handler = function () {
			if (selects.length > 1) {
				var leftSelects = selects.slice(1);
				var selectedHtmlOption = null;
				for (var i = 0; i < htmlSelect.options.length; i++) {
					var htmlOption = htmlSelect.options[i];
					if (htmlOption.selected) {
						selectedHtmlOption = htmlOption;
						break;
					}
				}
				var leftSelectItems = selectedHtmlOption != null ? (selectedHtmlOption[key] != null ? selectedHtmlOption[key].childItems : null) : null;
				bugu.common.buildCascadeSelect(leftSelects, leftSelectItems);
			}
		}
		bugu.common.observeInput(select, handler);
	}
	// fire change event
	bugu.common.fireCallbacks(htmlSelect);
};

bugu.common.validateNoNull = function (htmlElementId, msg) {
	if (bugu.common.isNull(htmlElementId)) {
		bugu.common.errorFlag = true;
		bugu.common.setErrorMsg(htmlElementId + "_result", msg);
		return false;
	} else {
		bugu.common.recoverErrorMsg(htmlElementId + "_result");
		return true;
	}
}

bugu.common.validateMaxLength = function (htmlElementId, msg, maxLength) {
	if (document.getElementById(htmlElementId).value.length > maxLength) {
		bugu.common.errorFlag = true;
		bugu.common.setErrorMsg(htmlElementId + "_result", msg);
		return false;
	} else {
		bugu.common.recoverErrorMsg(htmlElementId + "_result");
		return true;
	}
}

bugu.common.validateNoChecked = function (htmlElementId, msg) {
	if (!bugu.common.isChecked(htmlElementId)) {
		bugu.common.errorFlag = true;
		bugu.common.setErrorMsg(htmlElementId + "_result", msg);
		return false;
	} else {
		bugu.common.recoverErrorMsg(htmlElementId + "_result");
		return true;
	}
}

bugu.common.validateInteger = function (htmlElementId, msg, maxValue, minValue) {
	if(!/^\d+$/.test(document.getElementById(htmlElementId).value)) {
		bugu.common.errorFlag = true;
		bugu.common.setErrorMsg(htmlElementId + "_result", msg);
		return false;
	}
	
	if (parseInt(document.getElementById(htmlElementId).value,10) < parseInt(maxValue,10)) {
		bugu.common.errorFlag = true;
		bugu.common.setErrorMsg(htmlElementId + "_result", msg);
		return false;
	}

	if (parseInt(document.getElementById(htmlElementId).value,10) > parseInt(minValue,10)) {
		bugu.common.errorFlag = true;
		bugu.common.setErrorMsg(htmlElementId + "_result", msg);
		return false;
	}
	
	bugu.common.recoverErrorMsg(htmlElementId + "_result");
	return true;
}

bugu.common.validateDouble = function (htmlElementId, msg) {
	
	if(document.getElementById(htmlElementId).value.indexOf(".") == -1) {
		if(!/^\d+$/.test(document.getElementById(htmlElementId).value)) {
			bugu.common.errorFlag = true;
			bugu.common.setErrorMsg(htmlElementId + "_result", msg);
			return false;
		}
	} else {
		if(!/^\d+.\d+$/.test(document.getElementById(htmlElementId).value)) {
			bugu.common.errorFlag = true;
			bugu.common.setErrorMsg(htmlElementId + "_result", msg);
			return false;
		}
	}

	bugu.common.recoverErrorMsg(htmlElementId + "_result");
	return true;
}

bugu.common.validateDoubleComparer = function (htmlElementIdLess, htmlElementIdMore, htmlElementIdMsg, msg) {
	
	if (parseFloat(document.getElementById(htmlElementIdLess).value) > parseFloat(document.getElementById(htmlElementIdMore).value)) {
		bugu.common.errorFlag = true;
		bugu.common.setErrorMsg(htmlElementIdMsg, msg);
		return false;
	}
	
	bugu.common.recoverErrorMsg(htmlElementIdMsg);
	return true;
}
bugu.common.validateDate = function (htmlElementId, msg) {

	var oriValue = bugu.common.getInputValue(htmlElementId);
	if (oriValue == null || oriValue.trim() == "" || oriValue.length < 10) {
		bugu.common.errorFlag = true;
		bugu.common.setErrorMsg(htmlElementId + "_result", msg);
		return false;
	}
	
	var dateValue = oriValue.substring(0, 10);
	
	if(!/^\d{4}-\d{2}-\d{2}$/.test(dateValue)) {
		bugu.common.errorFlag = true;
		bugu.common.setErrorMsg(htmlElementId + "_result", msg);
		return false;
	}

	var arrDate = dateValue.split("-");

	var date = new Date(arrDate[0],(parseInt(arrDate[1],10) -1)+"",arrDate[2]);
	if(!(date.getYear() == arrDate[0] && date.getMonth() == (parseInt(arrDate[1],10) -1)+"" && date.getDate() == arrDate[2])) {
		bugu.common.errorFlag = true;
		bugu.common.setErrorMsg(htmlElementId + "_result", msg);
		return false;
	}
	
	bugu.common.recoverErrorMsg(htmlElementId + "_result");
	return true;
}

bugu.common.validateDateEarlier = function (htmlElementIdFrom, htmlElementIdTo, htmlElementIdMsg, msg) {

	var startDate = bugu.common.getInputValue(htmlElementIdFrom);
	var endDate = bugu.common.getInputValue(htmlElementIdTo);

	var arr1 = startDate.split("-");
	var arr2 = endDate.split("-");
	
	var date1 = new Date(arr1[0],(parseInt(arr1[1],10) -1)+"",arr1[2]);
	var date2 = new Date(arr2[0],(parseInt(arr2[1],10) -1)+"",arr2[2]);
	
	if (date1.getTime() > date2.getTime()) {
		bugu.common.errorFlag = true;
		bugu.common.setErrorMsg(htmlElementIdMsg, msg);
		return false;
	}
	
	bugu.common.recoverErrorMsg(htmlElementIdMsg);
	return true;
}

bugu.common.validateTime = function (timeValue) {
	
	var result = timeValue.match(/^\d{2}:\d{2}:\d{2}$/)
    
    if (result == null) {
		bugu.common.errorFlag = true;
		return false;
    }
    
    if (result[1] > 24 || result[2] > 60 || result[3] > 60) {
		bugu.common.errorFlag = true;
		return false;
    }
    
    return true;
}

bugu.common.validateTimeEarlier = function (htmlElementIdFrom, htmlElementIdTo, htmlElementIdMsg, msg) {

	var startTime = bugu.common.getInputValue(htmlElementIdFrom);
	var endTime = bugu.common.getInputValue(htmlElementIdTo);
	
	var arr1 = startTime.split(":");
	var arr2 = endTime.split(":");
	
	var time1 = parseInt(arr1[0],10)*60*60 + parseInt(arr1[1],10)*60;
	var time2 = parseInt(arr2[0],10)*60*60 + parseInt(arr2[1],10)*60;
	
	if (time1 < time2) {
		bugu.common.recoverErrorMsg(htmlElementIdMsg);
		return true;
	} else {
		bugu.common.errorFlag = true;
		bugu.common.setErrorMsg(htmlElementIdMsg, msg);
		return false;
	}
}

/*
  define file upload allow types and max size
  0 - image
  1 - document
  2 - compress file
  3 - course file
  4 - video file
*/
bugu.common.allowTypes = [["bmp","png","gif","jpg"],["zip","rar","doc","xls"],["zip","rar"],["zip","rar"],["flv"]];
bugu.common.allowSize = [1024*1024, 5*1024*1024, 10*1024*1024, 100*1024*1024];

// if file type is validated, return true, else false
bugu.common.validateFileType = function (htmlElementId, uploadTypeIndi, msg) {
	var htmlElement = document.getElementById(htmlElementId);
	var ary = htmlElement.value.split('.');
	var postfix = ary[ary.length-1];
	
	for (var i = 0; i < bugu.common.allowTypes[uploadTypeIndi].length; i++) {
		if (postfix.toLowerCase() == bugu.common.allowTypes[uploadTypeIndi][i]) {
			bugu.common.recoverErrorMsg(htmlElementId + "_result");
			return true;
		}
	}
	
	bugu.common.errorFlag = true;
	bugu.common.setErrorMsg(htmlElementId + "_result", msg);
	return false;
}

bugu.common.validateFileTypeByName = function (htmlElementName, uploadTypeIndi, msg) {
	var validateFlag = true;
	var htmlElement = document.getElementsByName(htmlElementName);
	var ary;
	var postfix;

	for (var i=0; i<htmlElement.length; i++) {
		if (htmlElement[i].value != null && htmlElement[i].value.trim() != "") {
			ary = htmlElement[i].value.split('.');
			postfix = ary[ary.length-1];
			
			validateFlag = false;
			for (var j = 0; j < bugu.common.allowTypes[uploadTypeIndi].length; j++) {
				if (postfix.toLowerCase() == bugu.common.allowTypes[uploadTypeIndi][j]) {
					validateFlag = true;
				}
			}
		}
	}

	if (validateFlag) {
		bugu.common.recoverErrorMsg(htmlElementName + "_result");
		return true;
	} else {
		bugu.common.errorFlag = true;
		bugu.common.setErrorMsg(htmlElementName + "_result", msg);
		return false;
	}
}

// if file size is validated, return true, else false
bugu.common.validateFileSize = function (htmlElementId, uploadTypeIndi) {

	var htmlElement = document.getElementById(htmlElementId);
	var fso=new ActiveXObject("Scripting.FileSystemObject");
	var uploadFile=fso.GetFile(htmlElement.value);
	
	if (uploadFile.size > bugu.common.allowSize[uploadTypeIndi]) {
		bugu.common.error(htmlElementId);
		return false;
	}
	
	bugu.common.normal(htmlElementId);
	return true;
}

/**  
*trim
*/  
String.prototype.trim=function(){      
    return this.replace(/(^\s*)|(\s*$)/g, '');   
}

/**  
*left trim
*/  
String.prototype.ltrim=function() {   
	return this.replace(/(^s*)/g,'');   
}   

/**  
*right trim
*/  
String.prototype.rtrim=function() {   
	return this.replace(/(s*$)/g,'');   
} 

/**  
*remove an element by pass content
*/  
Array.prototype.remove = function(elementContent){
	var indexNum = this.indexOf(elementContent);
	if (indexNum != -1) {
	 this.splice( indexNum, 1 );
	}
}

bugu.common.toggleCutContent = function (element, length, postfix) {
	element = document.getElementById(element);
	if (!element.fullContent) {
		element.fullContent = element.innerHTML;
	}
	if (element.contentCut) {
		element.innerHTML = element.fullContent;
	} else {
		var string = element.fullContent;
		if (string != null && string.length > length / 2) {
			var counter = 0;
			var index = 0;
			while(counter < length && index < string.length) {
				counter += string.charCodeAt(index) > 255 ? 2 : 1;
				index++;
			}
			element.innerHTML = string.substr(0, index) + postfix;
		}
	}
	element.contentCut = !element.contentCut;
} 

bugu.common.isContentCut = function (element) {
	return document.getElementById(element).contentCut;
}

bugu.common.resizeFrameHeight = function (frame) {
	var iframe = document.getElementById(frame);
	iframe.contentWindow.document.documentElement.style["overflow"]="hidden";
	var bHeight = iframe.contentWindow.document.body.scrollHeight;
	var height = bHeight;
	//var dHeight = iframe.contentWindow.document.documentElement.scrollHeight;
	//var height = Math.max(bHeight, dHeight);
	iframe.height =  height;
}

bugu.common.parseDay = function (dateString) {
	var tempArr = dateString.split("-");
	var day = parseInt(tempArr[2], 10);
	var month = parseInt(tempArr[1], 10);
	var year = parseInt(tempArr[0], 10);
	var time = new Date();
	time.setYear(year);
	time.setMonth(month - 1);
	time.setDate(day);
	time.setMinutes(0);
	time.setHours(0);
	time.setSeconds(0);
	time.setMilliseconds(0);
	return time;
}

bugu.common.parseTime = function (timeString) {
	var tempArr = timeString.split(":");
	var minutes = parseInt(tempArr[1], 10);
	var hours = parseInt(tempArr[0], 10);
	var time = new Date();
	time.setYear(1970);
	time.setMonth(0);
	time.setDate(1);
	time.setMinutes(minutes);
	time.setHours(hours);
	time.setSeconds(0);
	time.setMilliseconds(0);
	return time;
}

bugu.common.formatTime = function (time) {
	var hours = time.getHours();
	var minutes = time.getMinutes();
	return (hours >= 10 ? hours : '0' + hours) + ":" + (minutes >= 10 ? minutes : '0' + minutes);
}

bugu.common.adjustMinutes = function (time, adjustSize) {
	var minutes = time.getMinutes() + adjustSize;
	var adjustHours = minutes / 60;
	adjustHours = adjustHours > 0 ? Math.floor(adjustHours) : Math.ceil(adjustHours);
	var hours = time.getHours() + adjustHours;
	minutes = (minutes + 60) % 60;
	hours = (hours + 24) % 24;
	time.setMinutes(minutes);
	time.setHours(hours);
	return time;
}

bugu.common.navigateTo = function (url) {
	window.location.href = url;
}