function getElement(namespace, formId, elementId) {
	return document.getElementById(namespace + ':' + formId + ':' + elementId);
}

function setAccDes(bankName, accNum, accDesc) {
	if ((bankName && accNum) && (bankName.value && accNum.value)) {
		accDesc.value = bankName.value
				+ accNum.value.substr(accNum.value.length - 4);
	}
}

function loadETSEcomIFrame(hostedPaymentsRootURL) {
	if(hostedPaymentsRootURL) {
		jQuery_n_p.ajax({
			type : "POST",
			dataType : 'jsonp',
			url : hostedPaymentsRootURL + '/init',
			beforeSend : function() {
				jQuery_n_p("#loaderImage").show();
				jQuery_n_p("#overlay").show();
			},
			complete : function() {
				jQuery_n_p("#loaderImage").hide();
				jQuery_n_p("#overlay").hide();
			}
		});
	} else {
		console.log("Payment URL is requried.");
	}
}

function validateFloat(obj, nLength, nPrecision, evt) {
	var strVal = new String(obj.value);
	var nIndexOfDot = strVal.indexOf('.');
	var nValidLength = ((nIndexOfDot == -1) ? strVal.length : strVal.length + 1);
	evt = (evt) ? evt : window.event;
	var charCode = (evt.which) ? evt.which : evt.keyCode;

	if (nValidLength < strVal.length) {
		alert('Maximum length can be ' + nLength);
		strVal = strVal.substring(0, nValidLength);
	}

	if (strVal.charAt(strVal.length - 1) != '.'
			|| nIndexOfDot != (strVal.length - 1)) {
		if (isNaN(parseFloat(strVal))) {
			obj.value = '0.00';
		} else {
			obj.value = parseFloat(strVal).toFixed(2);
		}
	}

	if (-1 != nIndexOfDot
			&& strVal.substring(nIndexOfDot + 1).length > nPrecision) {
		strVal = strVal.substring(0, strVal.length - 1);
		obj.value = strVal.toFixed(2);
	}

	if (charCode == 109) {
		obj.value = "0.00";
	}
}

function setCursorToEnd(elem, smartDeviceOnly) {
	var isSmartDevice = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
	if (smartDeviceOnly && !isSmartDevice) {
		return;
	}
	if (elem && elem.value) {
		window.setTimeout(function() {
			var curPos = elem.value.length;
			if (elem.createTextRange) {
				var range = elem.createTextRange();
				range.move('character', curPos);
				range.select();
			} else {
				elem.selectionStart = elem.selectionEnd = elem.value.length;
			}
		}, 1);
	}
}

function isNumber(evt) {
	evt = (evt) ? evt : window.event;
	var ctr = evt.ctrlKey;
	var charCode = (evt.which) ? evt.which : evt.keyCode;
	if(ctr){
		if(charCode == 97 || charCode == 99 || charCode == 118)return true;
	}
	if (charCode > 31 && (charCode < 48 || charCode > 57)) {
        return false;
    }
    return true;
}

function isAlpahebet(evt) {
	evt = (evt) ? evt : window.event;
	var charCode = (evt.which) ? evt.which : evt.keyCode;
	
	if((charCode > 64 && charCode < 91) || (charCode > 96 && charCode < 123)) {
			return true;
	}else{
		return false;
	}
}

function checkForCity(evt) {
	evt = (evt) ? evt : window.event;
	var charCode = (evt.which) ? evt.which : evt.charCode;

	// Arrow Up, Down, Left, Right, Backspace and Tab also doesn't work in
	// firefox
	var ignoredKeys = [ 8, 9, 37, 38, 39, 40 ];

	if (ignoredKeys.indexOf(event.which) >= 0 || (charCode > 64 && charCode < 91) || (charCode > 96 && charCode < 123)
			|| charCode == 32 || event.which === 0) {
		return true;
	} else {
		return false;
	}
}

function isDecimalNumber(elem, event) {
	var isValid = false;

	if (elem === undefined || elem == null) {
		return isValid;
	}

	var charCode = getCharCode(event);

	if ((charCode >= 48 && charCode <= 57)
			|| (event.key == '-' && elem.value == '')
			|| (event.key == '.' && elem.value.indexOf('.') < 0)
			|| (charCode == 46 && elem.value.indexOf('.') < 0)
			|| isAllowedKeyForNumber(charCode) || isShortKey(event, charCode)) {
		isValid = true;
	} else {
		isValid = false;
	}

	if (isValid && (event.key == '-' || event.key == '.')) {
		var value = elem.value + event.key;
		if (value == "-.") {
			elem.value = "-0";
		} else if (value == ".") {
			elem.value = "0";
		}
	}
	return isValid;
}

function isWholeNumber(evt) {
	var charCode = getCharCode(evt);

	if ((charCode >= 48 && charCode <= 57) || isAllowedKeyForNumber(charCode)
			|| isShortKey(event, charCode)) {
		return true;
	} else {
		return false;
	}
}

function getCharCode(evt) {
	evt = (evt) ? evt : window.event;
	var charCode = (evt.which) ? evt.which : evt.keyCode;
	return charCode;
}

function isAllowedKeyForNumber(charCode) {

	// backspace
	if (charCode == 8) {
		return true;
	}
	// tab
	else if (charCode == 9) {
		return true;
	}
	// enter
	else if (charCode == 13) {
		return true;
	}
	// shift
	else if (charCode == 16) {
		return true;
	}
	// ctrl
	else if (charCode == 17) {
		return true;
	}
	// alt
	else if (charCode == 18) {
		return true;
	}
	// left arrow
	else if (charCode == 37) {
		return true;
	}
	// right arrow
	else if (charCode == 39) {
		return true;
	}
	// otherwise
	else {
		return false;
	}
}

function isShortKey(evt, charCode) {
	var ctrlDown = evt.ctrlKey || evt.metaKey;

	// select all
	if (ctrlDown && (charCode == 65 || charCode == 97)) {
		return true;
	}
	// cut
	else if (ctrlDown && (charCode == 88 || charCode == 120)) {
		return true;
	}
	// copy
	else if (ctrlDown && (charCode == 67 || charCode == 99)) {
		return true;
	}
	// paste
	else if (ctrlDown && (charCode == 86 || charCode == 118)) {
		return true;
	}

	return false;
}

function allowKeyCodes(event, keyCodes) {
	var isAllowed = false;
	var charCode = getCharCode(event);
	for (var i = 0; i < keyCodes.length; i++) {
		if (charCode == keyCodes[i]) {
			isAllowed = true;
			break;
		}
	}
	return isAllowed;
}

function isSmartDevice(){
	if (/Android|webOS|iPhone|iPad|iPod|Tablet|BlackBerry/i
			.test(navigator.userAgent)
			|| (/Android|webOS|iPhone|iPad|iPod|BlackBerry/i
					.test(navigator.platform))) {
		return true;
	}else return false;
}
function adjustPopupInAndroidTablets(){
	if (/Android/i.test(navigator.userAgent) && window.innerWidth > 799) {
		jQuery_n_p(".chit-close-button").css("margin-bottom","20px");		
	}
}

function highlightCurrentLink(highlightElementId, normalCss, highlightCss) {
	var elements = document.getElementById(highlightElementId).parentElement.children;
	for (var i = 0; i < elements.length; i++) {
		if (elements[i].id == highlightElementId) {
			jQuery_n_p(elements[i]).removeClass(normalCss).addClass(
					highlightCss);
		} else {
			jQuery_n_p(elements[i]).removeClass(highlightCss).addClass(
					normalCss);
		}
	}
}

function showOnSmartDeviceLandscape (element) {
	if(element && isSmartDevice() && window.innerWidth > window.innerHeight){
		element.style.display = 'block';
	}
}

//remove empty columns from table if all rows contains no data against column
function removeEmptyColumnsFromTable(element) {

    //Process every table
    jQuery_n_p(element).each(function() {

	var isEmpty = true;

	// Process every table
	jQuery_n_p(this).children('tbody').children('tr').each(function() {
	    // If data is present inside of a given column let the row know
	    if (jQuery_n_p(this).last().has('a').length != 0) {
		isEmpty = false;
		// We stop after proving that at least one column in a row has data
		return false;
	    }
	});

	// If the whole row is empty remove it from the dom
	if (isEmpty) {
	    jQuery_n_p(this).children('tbody').children('tr').each(function() {

		jQuery_n_p(this).children('td').last().remove();
	    });
	}
    });
}

function removeQueryStringWithoutPageReload() {

	var uri = window.location.toString();

	if (uri.indexOf("?") > 0) {
	    uri = uri.substring(0, uri.indexOf("?"));
	    window.history.replaceState({}, document.title, uri);
	}
}

function reloadPage() {

	window.location.href = window.location.pathname;
}

function reloadPageWithParam(queryParam) {

	var url = window.location.href;    
	if (url.indexOf('?') > -1){
	   url += '&' + queryParam;
	}else{
	   url += '?' + queryParam
	}
	window.location.href = url;
}

function updateTimePickerPosition(element, datepicker) {

	var inputTopOffset = jQuery_n_p(element).offset().top;

	setTimeout(function() {

		var datePickerStyle = jQuery_n_p(datepicker).attr("dpDiv")
				.attr("style");

		var topIndex = datePickerStyle.indexOf("top");
		var styleLength = datePickerStyle.length;

		if (topIndex > 0) {

			var topStart = datePickerStyle.substring(topIndex, styleLength);
			var semiColumnIndex = topStart.indexOf(";");
			var topStyle = topStart.substring(0, semiColumnIndex);
			
			var newTopPosition = inputTopOffset + 30;
			var newTop = "top: " + newTopPosition + "px";
			
			var datePickerNewStyle = datePickerStyle.replace(topStyle, newTop);
			
			jQuery_n_p(datepicker).attr("dpDiv").attr("style",
					datePickerNewStyle);
		}

	}, 10);

}

function hideOverLayDiv() {

	jQuery_n_p('.ui-widget-overlay').hide();
}

function removeURLParameter(url, parameter) {

    //prefer to use l.search if you have a location/link object
    var urlparts= url.split('?');   
    if (urlparts.length>=2) {

        var prefix = encodeURIComponent(parameter)+'=';
        var pars = urlparts[1].split(/[&;]/g);

        //reverse iteration as may be destructive
        for (var i= pars.length; i-- > 0;) {    
            //idiom for string.startsWith
            if (pars[i].lastIndexOf(prefix, 0) !== -1) {  
                pars.splice(i, 1);
            }
        }

        if(pars.length > 0 ){
        	url= urlparts[0]+'?'+pars.join('&');	
        }else{
        	url= urlparts[0];
        }
        return url;
    } else {
        return url;
    }
}

function removeCreditCardParams() {

	var url = window.location.href;
	url = removeURLParameter(url, 'cmd');
	url = removeURLParameter(url, 'orderId');
	url = removeURLParameter(url, 'merchantId');
	url = removeURLParameter(url, 'responseCode');
	url = removeURLParameter(url, 'responseCodeText');
	url = removeURLParameter(url, 'cardTypeId');
	url = removeURLParameter(url, 'amount');
	url = removeURLParameter(url, 'isZeroDollarAuth');
	url = removeURLParameter(url, 'action');
	url = removeURLParameter(url, 'customerId');
	window.history.pushState({}, document.title, url);
}