/*
 * This file provide common javascript functions.
 * 
 * Please add detail description of your function before you created.
 * Also, please add necessary comment when you modified.
 * 
 * Thanks.
 * 
 * Jim.Bi
 */

/**
 * Enable a disabled button. e.g. enableButton($("#button_id"))
 * enableButton($(".button_class"))
 */
function enableButton(button) {
	if(!button.is(".disabledButton")) return;
	button.removeClass("disabledButton");
	if (button.get(0).onkeypress == undefined) {
		return;
	}
	button.get(0).onclick = button.get(0).onkeypress;

}

/**
 * Disable a button. e.g. disableButton($("#button_id"))
 * disableButton($(".button_class"))
 */
function disableButton(button) {
	if(button.is(".disabledButton")) return;
	button.addClass("disabledButton");
	button.get(0).onkeypress = button.get(0).onclick;
	button.get(0).onclick = null;
}

/**
 * This function will find even columns in tbody element and add a 'even-row'
 * class, same as odd columns. The final effect is the styles between odd and
 * even columns will alternate.
 */
function zebraColumns() {
	$(".listTable tbody td:even").addClass("even-row");
	$(".listTable tbody td:odd").addClass("odd-row");
}

/**
 * This function will find even rows in tbody element and add a 'even-row'
 * class, same as odd rows. The final effect is the styles between odd and even
 * rows will alternate.
 */
function zebraRows(obj) {
	if (obj == undefined) {
		obj = $(".listTable");
	}

	obj.find(".even-row").removeClass("even-row");
	obj.find(".odd-row").removeClass("odd-row");

	obj.find("tbody tr:even").addClass("even-row");
	obj.find("tbody tr:odd").addClass("odd-row");
}

/**
 * This method can change the specified table to be sortable.
 * 
 * sortableTable("createdGroupsTable","last_post_date","Desc")
 * 
 * 
 * @param tableId -
 *            id property of the table
 * @param defaultSortField -
 *            class property of the span of column.
 * @param defaultSortType -
 *            sort type, Desc or Asc, please note that is case-sensitive;
 * @param callback -
 *            The callback function.
 * @return
 * 
 * NOTE: If you want any td element in the provided table cant been sorted, add
 * 'unsort' class to td element.
 */
function sortableTable(tableId, defaultSortField, defaultSortType, callback) {
	if ($("#" + tableId) == "undefined")
		return;
	sortFields = $("#" + tableId + " thead span:not(.unsort)");
	sortFields.addClass("link");

	// Click function of each column head.
	sortFields.click( function() {
		var sortType = "Desc";
		if ($(this).is(".sortAsc,.sortDesc")) {
			if ($(this).is(".sortDesc")) {
				$(this).removeClass("sortDesc");
				$(this).addClass("sortAsc");
				sortType = "Asc"; 
			} else {
				$(this).removeClass("sortAsc");
				$(this).addClass("sortDesc");
			}
		} else {
			$("#" + tableId + " .sortAsc").removeClass("sortAsc");
			$("#" + tableId + " .sortDesc").removeClass("sortDesc");
			$(this).addClass("sortDesc");
		}
		if ($.isFunction(callback)) {
			callback(tableId, $(this).attr('id'), sortType);
		}
	});

	if(defaultSortType.toLowerCase()=='desc'){defaultSortType="Desc"}
	if(defaultSortType.toLowerCase()=='asc'){defaultSortType="Asc"}
	
	sortFields.filter("[id='" + defaultSortField+"']")
			.addClass("sort" + defaultSortType);
}

/**
 * Use to add a default tip text of input element.
 * 
 * @return
 */
function initInputDefaultValue(inputObj, defaultValue) {
	inputObj.each( function() {
		if ($.trim(this.value) == "") {
			this.value = defaultValue;
		}
	});

	inputObj.focus( function() {
		if (this.value == defaultValue) {
			this.value = "";
		}
	});

	inputObj.blur( function() {
		if ($.trim(this.value) == "") {
			this.value = defaultValue;
		}
	});
}

function tinyMCEInit() {
	tinyMCE
			.init( {
				mode :"exact",
				elements :"userDesc",
				theme :"advanced",
				plugins :"safari,table",
				font_size_style_values :"8pt,10pt,12pt,14pt,18pt,24pt,36pt",
				theme_advanced_buttons1 :"bold,italic,underline,separator, fontselect, fontsizeselect, forecolor,justifyleft,justifycenter,justifyright,bullist,numlist",
				theme_advanced_buttons2 :"tablecontrols",
				theme_advanced_buttons3 :"",
				theme_advanced_toolbar_location :"top",
				theme_advanced_toolbar_align :"left",
				theme_advanced_path_location :"",
				plugin_insertdate_dateFormat :"%Y-%m-%d",
				plugin_insertdate_timeFormat :"%H:%M:%S",
				extended_valid_elements :"a[name|href|target|title|onclick],img[class|src|border=0|alt|title|hspace|vspace|width|height|align|onmouseover|onmouseout|name],hr[class|width|size|noshade],font[face|size|color|style],span[class|align|style]"
			});
}

function disabledTrue(object) {
	if (object.disabled) {
		return true;
	}
	object.disabled = true;
	object.style.color = "#9D9DA1";
	// alert(object.disabled);
	return false;
}

function disabledFalse(object) {
	object.disabled = false;
	object.style.color = "#000000";
	// alert(object.disabled);
}

function bookmarkItemReload(itemId, userId, referURL, itemType, itemDesc) {
	$
			.ajax( {
				type :"POST",
				url :ctx + "/bookmarkItem.u",
				data : {
					itemId :itemId,
					userId :userId,
					itemType :itemType,
					itemDesc:itemDesc
				},
				success : function(msg) {
					if (msg == 'true') {
						/*alertMessageInfo(
								"Bookmark successfully saved. Review bookmarked items on your My Stuff screen.",
								function() {
									location.reload();
								});*/
						location.reload();
					} else {
						if (itemType == 0)
							alertMessageInfo(
									"This Lesson is currently not accessible.",
									function() {
										location.reload();
									});
						if (itemType == 1)
							alertMessageInfo(
									"This Course is currently not accessible.",
									function() {
										location.reload();
									});
					}
				},
				error : function(XMLHttpRequest, textStatus, thrownError) {
					return;
				}
			});
}

function bookmarkItem(itemId, userId, referURL, itemType, itemDesc) {
	$
			.ajax( {
				type :"POST",
				url :ctx + "/bookmarkItem.u",
				data : {
					itemId :itemId,
					userId :userId,
					itemType :itemType,
					itemDesc:itemDesc
				},
				success : function(msg) {
					if (msg == 'true') {
						/*alertMessageInfo(
								"Bookmark successfully saved. Review bookmarked items on your My Stuff screen.",
								function() {
								});*/
					} else {
						if (itemType == 0)
							alertMessageInfo(
									"This Lesson is currently not accessible.",
									function() {
										location.reload();
									});
						if (itemType == 1)
							alertMessageInfo(
									"This Course is currently not accessible.",
									function() {
										location.reload();
									});
					}
				},
				error : function(XMLHttpRequest, textStatus, thrownError) {
					return;
				}
			});
}

// download file with original name
function downloadAttachment(fileName, pathUrl) {
	fileName = filterFileExtraChar(fileName);
	window.open(ctx + "/downLoadFile.u?filename=" + fileName + "&pathurl="
			+ pathUrl);
}

function filterFileExtraChar(str) {
	var p = str.lastIndexOf('.');
	var blank = "";
	if (p < 0) {
		blank = str;
	} else {
		blank = str.substr(0, p);
	}

	var temp = ReplaceAll(blank);
	var newstr = temp.replace(/[^\w]*/, '');
	if ($.trim(newstr).length == 0) {
		newstr = '_';
	}
	if (temp.indexOf("@", "#", "!", "~", "$", "^", "&", "*", "(", ")") >= 0) {
		newstr = '_';
	}
	var result = "";
	if (p < 0) {
		result = newstr;
	} else {
		result = newstr + str.substr(p, str.length);
	}
	while (result.indexOf("#") >= 0) {
		result = result.replace("#", "_");
	}
	while (result.indexOf("%") >= 0) {
		result = result.replace("%", "_");
	}
	while (result.indexOf("@") >= 0) {
		result = result.replace("@", "_");
	}
	while (result.indexOf("!") >= 0) {
		result = result.replace("!", "_");
	}
	while (result.indexOf("~") >= 0) {
		result = result.replace("~", "_");
	}
	while (result.indexOf("$") >= 0) {
		result = result.replace("$", "_");
	}
	while (result.indexOf("^") >= 0) {
		result = result.replace("^", "_");
	}
	while (result.indexOf("&") >= 0) {
		result = result.replace("&", "_");
	}
	while (result.indexOf("*") >= 0) {
		result = result.replace("*", "_");
	}
	while (result.indexOf("(") >= 0) {
		result = result.replace("(", "_");
	}
	while (result.indexOf(")") >= 0) {
		result = result.replace(")", "_");
	}

	return result;
}

function ReplaceAll(str) {
	while (str.indexOf(" ") >= 0) {
		str = str.replace(" ", "_");
	}
	return str;
}
