function jumpToAnchor(anchorName) {
   window.location = window.location + "#"+ anchorName;
}

function swapImage(newImgSrc, imgId)
{
	imgObj = document.getElementById(imgId);
	imgObj.src= newImgSrc;
}

function switchArea(hideArea, showArea)
{
	hideElement(hideArea);
	showElement(showArea);
}

function showElement(elementName) {
	document.getElementById(elementName).style.display = 'block';
}

function hideElement(elementName) {
	document.getElementById(elementName).style.display = 'none';
}
 
function countdown(time, id, expiredUrl) 
{
	countdownDiv = document.getElementById(id);

	if(countdownDiv)
	{
		minutes = Math.floor(time / 60);  
		seconds = time % 60;
		countdownDiv.innerHTML = minutes + 'min ' + seconds + 'sec'; 
		
		if(time <= 0) 
			window.location.replace(expiredUrl);
		else 
			setTimeout('countdown(' + --time + ',"' + id + '","' + expiredUrl + '");', 1000);
	}
}

function eitherOr(targetObj, oppositeObj)
{
	targetObj.style.backgroundColor="#ffffff";
	
	oppositeObj.value="";
	oppositeObj.style.backgroundColor="#e0e0e0";
}

function clearFilterForm(oForm) 
{	   
	var elements = oForm.elements;	   
	oForm.reset();

	for(i=0; i<elements.length; i++) 
	{
		if(elements[i].id.indexOf('filter_') >= 0)
		{
			field_type = elements[i].type.toLowerCase();
			switch(field_type) 
			{
				case "text":
				case "password":
				case "textarea":
				case "hidden":  
					elements[i].value = "";
					break;
		       
				case "radio":
				case "checkbox":
					if (elements[i].checked) 
					{
						elements[i].checked = false;
					}
					break;
	
				case "select-one":
				case "select-multi":
					elements[i].selectedIndex = -1;
					break;
	
				default:
					break;
			}
		}
	}
}


function checkAll(listName, item)
{
	var objList = document.getElementsByName(listName);
	for (var i = 0; i < objList.length; i++) 
		if (objList[i].type == 'checkbox') 
			objList[i].checked = item.checked;
	
	// To check the trigger for All too.
	var objList = document.getElementsByName("chkall");	 
	for (var i = 0; i < objList.length; i++) 
		if (objList[i].type == 'checkbox') 
			objList[i].checked = item.checked;
}

function trim(stringToTrim) {
	return stringToTrim ? stringToTrim.replace(/^\s+|\s+$/g,"") : '';
}

function clone(srcObj)
{
    var obj = (srcObj instanceof Array) ? [] : {};

    for(var i in srcObj)
    {
        if(srcObj[i] && typeof srcObj[i] == "object")
        {
            obj[i] = clone(srcObj[i]);
        }
        else
        {
            obj[i] = srcObj[i];
        }
    }

    return obj;
}

function getKeyCount(arr)
{
	var i = 0;

	for(var key in arr)
	{
		i++;
	}

	return i;
}

function arrayIndexOf(array, value) 
{
	for(var pos =0; pos < array.length; pos++)
	{
		if(array[pos] == value)
			return pos;
	}
	return -1;
}

function processAjaxSuccessResult(ajaxResult)
{
	if(ajaxResult["result"] != "success")
	{
		displayMsg(ajaxResult);
		return false;
	}

	return true;
}

function processAjaxErrorResult(ajaxResult)
{
	var methodResult = JSON.parse(ajaxResult);
	window.location.replace(methodResult['errorUrl'] + "?methodResult=" + ajaxResult);
}

function getNestedExceptionMessage(e)
{
	var resultList = [];
	var t = e;

	do
	{
		resultList.push(t["message"]);
	}
	while(t = t["previous"]);

	return resultList; 
}

function displayMsg(methodResult)
{
	var result = methodResult["result"];
	var data = methodResult["data"];

	if(result == "warning")
	{
		warningMsg(getWarningMsg(getNestedExceptionMessage(data)));
	}
	else if(result == "error")
	{
		errorMsg(getErrorMsg(getNestedExceptionMessage(data)));
	}
	else
	{
		successMsg(data);
	}
}

function getWarningMsg(warningList)
{
	var msg = "The data you entered seems to be incorrect. Please correct the following warnings and resubmit: <ul>";

	for(var i = 0; i < warningList.length; i++)
	{
		msg += "<li>" + warningList[i] + "</li>";
	}

	msg += "</ul>";

	return msg;
}

function getErrorMsg(errorList)
{
	var msg = "The data you entered seems to be incorrect. Please correct the following errors and resubmit: <ul>";

	for(var i = 0; i < errorList.length; i++)
	{
		msg += "<li>" + errorList[i] + "</li>";
	}

	msg += "</ul>";

	return msg;
}

function setEmptyStrIfNull(v)
{
	return v ? v : "";
}

(function ($){
	$.fn.serializeByName = function()
	{
		var criteriaList = [];

		this.each(function(){
			var v = $(this).serialize();
			criteriaList.push(v == "" ? encodeURIComponent(this.name) + "=" : v);
		});
	
		return criteriaList.join("&");
	}

	$.fn.sortSelect = function()
	{
		var node = $("option", this);

		var sortResult = $.makeArray(node).sort(function(a, b){
			return $(a).text() > $(b).text() ? 1 : -1;
		});

		$(this).empty().html(sortResult);
	}

	$.fn.resetContainer = function()
	{
		$(this).each(function(){
			var t = this.type;
			var tag = this.tagName.toLowerCase();

			if(t == "text" || t == "password" || tag == "textarea")
			{
				this.value = this.defaultValue;
			}
			else if(t == "checkbox" || t == "radio")
			{
				this.checked = this.defaultChecked;
			}
			else if(tag == "select")
			{
				this.selectedIndex = 0;

				$("option", this).each(function(){
					this.selected = this.defaultSelected;
				});
			}
		});
	}

	$.emptyUrlParamValues = function(urlParam)
	{
		return new String(urlParam).replace(/=([^&]*)&/gi, "=&");
	}

	$.clearDateField = function(dateFieldId)
	{
		$.datepicker._clearDate($("#" + dateFieldId));
	}
})(jQuery);