var defaultNumberOfDecimal = 0;
var maxNumberValue = 9999999999;
var minNumberValue = 0;
var defaultNumberValueStorage = new Array();

/*
Utility to Parse Collection of Element object
*/
function parseCollectionOfElementsFormToString(theElements) {
	var queryStringTemp = "";
	for (var i = 0; i < theElements.length; i++) {
		if (theElements[i].type != "checkbox") {
			queryStringTemp += "&" + theElements[i].name + "=" + escape(theElements[i].value);
		}
		else if (theElements[i].checked) {
			queryStringTemp += "&" + theElements[i].name + "=" + escape(theElements[i].value);
		}
	}
	
	return queryStringTemp;
}

function getFirstCheckedValueFromElementCollection(theElements) {
	for (var i = 0; i < theElements.length; i++) {
		if (theElements[i].type == "checkbox" || theElements[i].type == "radio") {
			if (theElements[i].checked) {
				return theElements[i].value;
			}
		}
	}
	return "";
}

function parseArrayOfStringToStringWithId(theArray, theId) {
	var queryStringTemp = "";
	for (var i = 0; i < theArray.length; i++) {
		queryStringTemp += "&" + theId + "=" + theArray[i];
	}
	
	return queryStringTemp;
}

/*
Utility to Check if there is any Checked Value of Checkbox Collection of Element object
*/
function checkValuesOfCheckboxCollection(theElements) {
	for (var i = 0; i < theElements.length; i++) {
		if (theElements[i].type == "checkbox") {
			if (theElements[i].checked) {
				return true;
			}
		}
	}
	return false;
}

function checkValuesOfCheckboxCollectionNotDisabled(theElements) {
	for (var i = 0; i < theElements.length; i++) {
		if (theElements[i].type == "checkbox") {
			if (theElements[i].checked && !theElements[i].disabled) {
				return true;
			}
		}
	}
	return false;
}

function countCheckValuesOfCheckboxCollection(theElements) {
	var theCount = 0;
	for (var i = 0; i < theElements.length; i++) {
		if (theElements[i].type == "checkbox") {
			if (theElements[i].checked) {
				theCount++;
			}
		}
	}
	return theCount;
}

/*
Utility to Check if there is any Checked Value of Radio Button Collection of Element object
*/
function checkValuesOfRadioCollection(theElements) {
	for (var i = 0; i < theElements.length; i++) {
		if (theElements[i].type == "radio") {
			if (theElements[i].checked) {
				return true;
			}
		}
	}
	return false;
}

/*
Utility to get the index of Checked Radio Button from collection of elements
*/
function getCheckedIndexOfRadioCollection(theElements) {
	for (var i = 0; i < theElements.length; i++) {
		if (theElements[i].type == "radio") {
			if (theElements[i].checked) {
				return i;
			}
		}
	}
	return -1;
}

//Utility to crop array of data by collection of input elements, sorted
function cropArrayDataByInputElements(theArray, theCol) {
	
	if ((theArray == null) || (theCol == null)) {
		return new Array();
	}
	
	var tempArrayValue;
	var tempColElement;
	var tempTheDifference = "";
	
	var innerIdx = 0;
	for (var i = 0; i < theArray.length; i++) {
		
		tempArrayValue = theArray[i];

		if (innerIdx >= theCol.length) {
			if (tempTheDifference.length > 0) {
				tempTheDifference += "," + tempArrayValue;
			}
			else {
				tempTheDifference += tempArrayValue;
			}
		}
		else {
			for (var j = innerIdx; j < theCol.length; j++) {
				tempColElement = theCol[j];
				
				if (tempArrayValue < tempColElement.value) {
					j = theCol.length;
					
					if (tempTheDifference.length > 0) {
						tempTheDifference += "," + tempArrayValue;
					}
					else {
						tempTheDifference += tempArrayValue;
					}
				}
				else if (tempArrayValue == tempColElement.value) {
					j = theCol.length;
					innerIdx++;
				}
				else {
					innerIdx++;
				}
			}
		}
	}
	
	if (tempTheDifference.length > 0) {
		return tempTheDifference.split(",");
	}
	else {
		return new Array();
	}
}

function setPointer(theRow, newColor){
	theRow.style.backgroundColor = newColor;
  return true;
}

function setPointerDependsElementChecked(theRow, newColor, elementName, excludeElementChecked) {
	
	if (excludeElementChecked) {
		var theSelectedRow = theRow.rowIndex;
		var allChecks = document.getElementsByName(elementName);
		var checkSelected = allChecks[theSelectedRow];

		if (!checkSelected.checked) {
			theRow.style.backgroundColor = newColor;
		}
	}
	else {
		theRow.style.backgroundColor = newColor;
	}
  return true;
}

/***
 * Fungsi2x pembantu javascript
 */

// Check or Uncheck all Checkbox with the same name
function checkAllCheckBox(elementName, valueArrayContainer, flagNotTrue, optionalFunctionForRow) {

	//Check Is Loading
	if (flagNotTrue) {
		return;
	}
	
	if (valueArrayContainer[elementName] != null) {
		
		valueArrayContainer[elementName] = !valueArrayContainer[elementName];

		//Get Elements
		var tempColCheckbox = document.getElementsByName(elementName);
		var tempTr;
		for (i = 0; i < tempColCheckbox.length; i++) {
			tempColCheckbox[i].checked = valueArrayContainer[elementName];
			if (optionalFunctionForRow) {
				tempTr = tempColCheckbox[i].parentNode;
				tempTr = tempTr == null ? null : tempTr.parentNode;
				if (tempTr != null) {
					optionalFunctionForRow(tempTr);
				}
			}
		}
	}
	return;
}

function checkAllCheckBoxNonOptional(elementName, valueArrayContainer, flagNotTrue) {

	//Check Is Loading
	if (flagNotTrue) {
		return;
	}
	
	if (valueArrayContainer[elementName] != null) {
		
		valueArrayContainer[elementName] = !valueArrayContainer[elementName];
	
		//Get Elements
		var tempColCheckbox = document.getElementsByName(elementName);
		var tempTr;
		for (i = 0; i < tempColCheckbox.length; i++) {
			tempColCheckbox[i].checked = valueArrayContainer[elementName];
		}
	}
	return;
}


// Mendapatkan string of features standard untuk new window
function getStandardNewWindowFeatures(windowWidth,windowHeight) {
  returned = "left=" + getWindowCenteredShowX(windowWidth) + ", top=" + getWindowCenteredShowY(windowHeight) + ", width=" + windowWidth + ", height=" + windowHeight + ", menubar=no, status=no, toolbar=no, scrollbars=yes, resizable=yes";
  return returned;
}

// Mendapatkan koordinat x agar window tampil di tengah2x layar
function getWindowCenteredShowX(windowWidth) {

  sWidth = screen.width;
  return (sWidth/2) - (windowWidth/2);
}

// Mendapatkan koordinat y agar window tampil di tengah2x layar
function getWindowCenteredShowY(windowHeight) {

  sHeight = screen.height;
  return (sHeight/2) - (windowHeight/2);
}

function closesSubWindow(windowRef) {
	if (windowRef) {
		windowRef.close();		
	}
	
	return null;
}

function resizeTableHeight(arrayOfCell, offset, doc) {
	
	doc=doc||document;
	
	if (offset == null) {
		offset = 0;
	}
	
	//Get Optimize Data Height
	var tableDataHeight = getMaxAvailableHeight(doc) + offset;
	
	if (arrayOfCell != null) {
		for (i = 0; i < arrayOfCell.length; i++) {
			arrayOfCell[i].height = "" + tableDataHeight + "px";
		}
	}
	return;
}

function resizeStyleHeight(arrayOfCell, offset, doc) {
	
	doc=doc||document;
	
	if (offset == null) {
		offset = 0;
	}
	
	//Get Optimize Data Height
	var tableDataHeight = getMaxAvailableHeight(doc) + offset;
	
	if (arrayOfCell != null) {
		for (i = 0; i < arrayOfCell.length; i++) {
			arrayOfCell[i].style["height"] = "" + tableDataHeight + "px";
		}
	}
	return;
}

//Currency Related
//Fungsi untuk menselect uang tanpa sign atau setelah sebuah karakter tertentu
function selectCurrency(theInput, theCharAfter) {
	
	if (theCharAfter == null) {
		theCharAfter = negativeSign;
	}
	
	var tempValue = theInput.value;
	var iStartIdx = 0;
	var iLength = tempValue.length;
	if (tempValue.indexOf(theCharAfter) >= 0) {
		iStartIdx = tempValue.indexOf(theCharAfter) + theCharAfter.length;
	}
	if (theInput.createTextRange) {
		var oRange = theInput.createTextRange();
		oRange.moveStart("character", iStartIdx);
		oRange.moveEnd("character", iLength - theInput.value.length);
		oRange.select();
	} else if (theInput.setSelectionRange) {
		theInput.setSelectionRange(iStartIdx, iLength);
	}
}

//Fungsi untuk menfilter input uang
function filterCurrencyInput(e, theInput) {
	
	//Check input
	if (!goodchars(e,digits+decimalPointDelimiter+negativeSign)) {
		window.alert("Input '" + String.fromCharCode(getkey(e)) + "' tidak valid!");
		return false;
	}
	
	var tempValue = theInput.value;
	if (isCharPartOfString(e, decimalPointDelimiter)) {
		if (tempValue.indexOf(decimalPointDelimiter) >= 0) {
			selectCurrency(theInput, decimalPointDelimiter);
			return false;
		}
	}

	if (isCharPartOfString(e, negativeSign)) {
		
		if (tempValue.indexOf(negativeSign) >= 0) {
			tempValue = tempValue.substring(1);
			theInput.value = tempValue;
		}
		//else {
		//	tempValue = negativeSign + tempValue;
		//}
		//theInput.value = tempValue;
		selectCurrency(theInput);
		return false;
	}
	return true;
}

function filterTelephone(e, theInput) {
	
	//Check input
	if (!goodchars(e,digits)) {
		window.alert("Input '" + String.fromCharCode(getkey(e)) + "' tidak valid!");
		return false;
	}
	
	var tempValue = theInput.value;
	if (isCharPartOfString(e, decimalPointDelimiter)) {
		if (tempValue.indexOf(decimalPointDelimiter) >= 0) {
			selectCurrency(theInput, decimalPointDelimiter);
			return false;
		}
	}

	if (isCharPartOfString(e)) {
		
		if (tempValue.indexOf(negativeSign) >= 0) {
			tempValue = tempValue.substring(1);
			theInput.value = tempValue;
		}
		
		selectCurrency(theInput);
		return false;
	}
	return true;
}

function checkCurrencyValidity(currency) {
	if (currency.indexOf(negativeSign) >= 0) {
		alert("Nilai '" + currency + "' tidak valid! Tidak boleh negatif");
		return false;
	}
	return true;
}

function returnToCurrency(value, maxNumDec, isToCurrency) {

	if (maxNumDec == null) {
		maxNumDec = defaultNumberOfDecimal;
	}
	
	//Master Check
	var masterCheck = parseFloat(value, 10);
	if (isNaN(masterCheck) || !isFinite(masterCheck)) {
		return "0" + (maxNumDec > 0 ? "." + createMaxLengthStringPostfixFillBy("", maxNumDec, "0") : "");
	}

	if (isToCurrency == null) {
		isToCurrency = true;
	}

	//Remove exponential before removing sign
	var expoOrder = 0;
	var expoIndex = value.indexOf("e");
	if (expoIndex >= 0) {
		expoOrder = parseInt(value.substring(expoIndex + 1), 10);
		value = value.substring(0, expoIndex);
	}

	//Remove any sign first
	var theSign = "";
	var theSignIndex = value.indexOf(negativeSign);
	if (theSignIndex == 0) {
		theSign = value.substring(0,1);
		value = value.substring(1);
	}
	var arrayOfStrings = value.split(negativeSign);
	value = "";
	for (var i=0; i < arrayOfStrings.length; i++) {
		value += arrayOfStrings[i];
	}

	//Proses Expo Info if Applicable
	if (expoOrder != 0) {
		var decimalIndex = value.indexOf(decimalPointDelimiter);
		var splittedValueTemp = value.split(decimalPointDelimiter);
		var tempValue = splittedValueTemp.join("");
		expoOrder = expoOrder + decimalIndex;
		if (expoOrder < 0) {
			tempValue = "0." + createMaxLengthStringPostfixFillBy("", ((expoOrder-1) * -1), "0") + tempValue;
		} else {
			expoOrder = expoOrder - (tempValue.length - decimalIndex);
			tempValue = tempValue + createMaxLengthStringPostfixFillBy("", ((expoOrder)), "0");
		}
		value = tempValue;
	}
	
	if (trim(value).length == 0) {
		return "0" + (maxNumDec > 0 ? "." + createMaxLengthStringPostfixFillBy("", maxNumDec, "0") : "");;
	}
	
	//Divide Integer Part and Decimal Part
	var decPart = 0;
	var intValue = "", tempIntValue = "", decValue = "", tempDecValue = 0.0;
	var intLength = 0, startIdx = 0, endIdx = 0;
	arrayOfStrings = value.split(decimalPointDelimiter);
	
	//Get Decimal Value and Format
	if (maxNumDec >= 0) {
		if (arrayOfStrings.length > 1) {
			for (var i = 1; i < arrayOfStrings.length; i++) {
				decValue += arrayOfStrings[i];
			}
			
			//Format Decimal
			if (maxNumDec < decValue.length) {
				
				while (decValue.length > maxNumDec) {
					decPart = parseFloat("1" + decValue.substring(0, decValue.length - 1) + "." + decValue.substring(decValue.length - 1, decValue.length), 10);
					decValue = "" + Math.round(decPart);
					decPart = parseInt(decValue.substring(0, 1));
					if (decPart > 1) {
						decPart -= 1;
						decValue = "0";
					}
					else {
						decPart = 0;
						decValue = decValue.substring(1);
					}
				}
			}
			
			//Final Check
			tempDecValue = parseFloat("0." + decValue, 10);
			decValue = tempDecValue == 0 ? "" : ("" + tempDecValue).substring(2);
		}

		//Finalisasi Decimal
		if ((decValue.length > 0) || (maxNumDec > 0)) {
			decValue = "." + createMaxLengthStringPostfixFillBy(decValue, maxNumDec, "0");
		}
	}
	

	//Get Integer Value and Format
	if (arrayOfStrings.length > 0) {
		arrayOfStrings[0] = arrayOfStrings[0].length > 0 ? arrayOfStrings[0] : 0;
		intValue = "" + (parseInt(arrayOfStrings[0], 10) + decPart);
		if (intValue.length > 0) {
			//Format Integer
			intLength = intValue.length;
			if (intLength > 3) {
				endIdx = intLength;
				do {
					startIdx = endIdx - 3;
					if (startIdx < 0) {
						startIdx = 0;
					}
					if (tempIntValue.length == 0) {
						tempIntValue = intValue.substring(startIdx, endIdx);
					}
					else {
						tempIntValue = intValue.substring(startIdx, endIdx) + (isToCurrency ? "," : "") + tempIntValue;
					}
					endIdx = startIdx;
				}
				while(startIdx > 0);
				intValue = tempIntValue;
			}
		}
		else {
			intValue = "0";
		}
	}
	else {
		intValue = "0";
	}
	
	if (parseFloat(intValue + decValue, 10) == 0) {
		return intValue + decValue;
	}
	else {
		return theSign + intValue + decValue;
	}
}

//Return all text input of currency to plain from Form Collection
function returnToPlainAllInCollection(theCol, isBypassValidity) {
	
	var tempInput;
	if (!isBypassValidity) {
		for (i = 0; i < theCol.length; i++) {
			tempInput = theCol[i];
			if (tempInput.type == "text") {
				if (((tempInput.attributes["class"].value == "textfieldNumberEditable") ||
					(tempInput.attributes["class"].value == "textfieldNumberReadonly")) && (!tempInput.disabled)) {
					if (!checkCurrencyValidity(tempInput.value)) {
						tempInput.focus();
						tempInput.select();
						return false;
					}
				}
			}
		}
	}
	for (i = 0; i < theCol.length; i++) {
		tempInput = theCol[i];
		if (tempInput.type == "text") {
			if (((tempInput.attributes["class"].value == "textfieldNumberEditable") ||
				(tempInput.attributes["class"].value == "textfieldNumberReadonly")) && (!tempInput.disabled)) {
					tempInput.value = returnToPlain(tempInput.value);
			}
		}
	}
	
	return true;
}

function selectContentAndFocus(theText) {
	
	if (theText.setSelectionRange) {
		theText.scrollIntoView(false);
	}
	selectCurrency(theText);
}

function returnToPlainAndSelectContent(theText) {
	
	if (theText.setSelectionRange) {
		theText.scrollIntoView(false);
	}
	theText.value = returnToPlain(theText.value);
	selectCurrency(theText);
}

function returnToPlain(currency) {
	
	var returnString = "";
	
	//Check Decimal Length
	var decLength = 0;
	var arrayOfStrings = currency.split(decimalPointDelimiter);
	if (arrayOfStrings.length > 1) {
		decLength = arrayOfStrings[1].length;
	}
	decLength = decLength == 0 ? null : decLength;

	//Remove thousand delimiter character
	arrayOfStrings = currency.split(',');
	currency = "";
	for (var i=0; i < arrayOfStrings.length; i++) {
		currency += arrayOfStrings[i];
	}

	//Get To Plain
	returnString = returnToCurrency(currency, decLength, false);
	return returnString;
}

//Number Related
//Fungsi untuk menfilter input angka
function filterNumberInput(e, theInput) {
	
	//Check input
	if (!goodchars(e,digits)) {
		window.alert("Input '" + String.fromCharCode(getkey(e)) + "' tidak valid!");
		return false;
	}
	
	return true;
}

//Fungsi untuk menfilter input angka dan alfabet
function filterAlphaNumberInput(e, theInput) {
	
	//Check input
	if (!goodchars(e,digits+lowercaseLetters+uppercaseLetters)) {
		window.alert("Input '" + String.fromCharCode(getkey(e)) + "' tidak valid!");
		return false;
	}
	
	return true;
}

function filterDecNumberInput(e, theInput,isNegative) {
	
	//Check input
	goods = digits+decimalPointDelimiter;
	if (isNegative) {
		goods = goods+"-";
	}
	if (!goodchars(e,goods)) {
		window.alert("Input '" + String.fromCharCode(getkey(e)) + "' tidak valid!");
		return false;
	}
	
	if (isCharPartOfString(e, decimalPointDelimiter)) {
		var tempValue = theInput.value;
		if (tempValue.indexOf(".") >= 0) {
			return false;
		}
	}

	if (isNegative) {
		if (isCharPartOfString(e, "-")) {
			var tempValue = theInput.value;
			if (tempValue.indexOf("-") >= 0) {
				return false;
			}
		}
	}
	return true;
}


//Fungsi untuk menfilter input periode
function filterPeriodeInput(e, theInput) {
	
	//Check input
	if (!goodchars(e,digits+"-")) {
		window.alert("Input '" + String.fromCharCode(getkey(e)) + "' tidak valid!");
		return false;
	}
	
	if (isCharPartOfString(e, "-")) {
		var tempValue = theInput.value;
		if (tempValue.indexOf("-") >= 0) {
			return false;
		}
	}
	
	return true;
}

//Parse Periode
function parsePeriode(txtInput, isOnFocus, isRequired) {
	
	if (isRequired == undefined) {
		isRequired = true;
	}
	
	var periodeTemp = txtInput.value;
	var bulanTemp = "";
	var tahunTemp = "";
	var tempValue;
	
	//Check apakah menggunakan '-'
	if (periodeTemp.indexOf("-") >= 0) {
		
		var tempArr = periodeTemp.split('-');
		bulanTemp = tempArr[0].length == 0 ? "0" : tempArr[0];
		tahunTemp = createMaxLengthStringPrefixFillBy(tempArr[1], 2, "0");
	}
	else {
		if ((periodeTemp.length <= 2) || (periodeTemp.length > 6)) {
			if (isOnFocus || (periodeTemp.length == 0 && !isRequired)) {
				resetClassAttribute(txtInput, "textfieldsatu");
			}
			else {
				resetClassAttribute(txtInput, "textfieldsatuerror");
			}
			if (periodeTemp.length == 0 && !isRequired) {
				return true;
			}
			else {
				return false;
			}
		}
		else {
			if (periodeTemp.length < 5) {
				bulanTemp = periodeTemp.substring(0, periodeTemp.length - 2);
				tahunTemp = periodeTemp.substring(periodeTemp.length - 2, periodeTemp.length);
			}
			else {
				bulanTemp = periodeTemp.substring(0, periodeTemp.length - 4);
				tahunTemp = periodeTemp.substring(periodeTemp.length - 4, periodeTemp.length);
			}
		}
	}
	
	//Validate Bulan
	tempValue = parseInt(bulanTemp, 10);
	if ((tempValue < 1) || (tempValue > 12)) {
		if (isOnFocus) {
			resetClassAttribute(txtInput, "textfieldsatu");
			return false;
		}
		else {
			resetClassAttribute(txtInput, "textfieldsatuerror");
			return false;
		}
	}
	
	//Parsed Periode
	txtInput.value = createMaxLengthStringPrefixFillBy(bulanTemp, 2, "0") + "-" + createMaxLengthStringPrefixFillBy(tahunTemp, 4, "20");
	resetClassAttribute(txtInput, "textfieldsatu");

	if (!isPeriodeExist(createMaxLengthStringPrefixFillBy(tahunTemp, 4, "20"),bulanTemp)) {
		resetClassAttribute(txtInput, "textfieldsatuerror");
		return false;
	}
	
	return true;
}

function resetClassAttribute(elemRef, className) {
	//for (g = 0; g < elemRef.attributes.length; g++) {
	//	alert(elemRef.attributes[g].name + "," + elemRef.attributes[g].value);
	//}
	//alert(elemRef.attributes["class"].value);
	elemRef.attributes["class"].value = className;
	//elemRef.setAttribute("class", className);
}

function createMaxLengthStringPrefixFillBy(theString, maxLen, fillBy) {
	
	var returned = theString;
	var i = maxLen - theString.length;
	
	if (i > 0) {
		for (j = 0; j < i; i = i - fillBy.length) {
			returned = (fillBy.length > i ? fillBy.substring(0, i) : fillBy) + returned;
		}
	}
	
	return returned;
}

function createMaxLengthStringPostfixFillBy(theString, maxLen, fillBy) {
	
	var returned = theString;
	var i = maxLen - theString.length;
	
	if (i > 0) {
		for (j = 0; j < i; i = i - fillBy.length) {
			returned =  returned + (fillBy.length > i ? fillBy.substring(0, i) : fillBy);
		}
	}
	
	return returned;
}

//Window Related
function getMaxAvailableHeight(doc) {
	doc = doc || document;
	var wSize = getWindowDimension(doc);

	var max_height = getTopScroll(doc) + wSize.height;
	return max_height;
}

function getMaxAvailableWidth(doc) {
	doc = doc || document;
	var wSize = getWindowDimension(doc);

	var max_width = wSize.width;
	return max_width;
}

function getWindowDimension(doc) {
	doc=doc||document;
	var w,h;
	if(self.innerHeight){
		w=self.innerWidth;
		h=self.innerHeight;
	}else{
		if(doc.documentElement&&doc.documentElement.clientHeight){
		w=doc.documentElement.clientWidth;
		h=doc.documentElement.clientHeight;
		}else{
			if(doc.body){
				w=doc.body.clientWidth;
				h=doc.body.clientHeight;
			}
		}
	}
	return {"width":w,"height":h};
}

function getTopScroll(doc){
	doc=doc||document;
	var t;
	if(doc.documentElement&&doc.documentElement.scrollTop){
		t=doc.documentElement.scrollTop;
	}else{
		if(doc.body){
			t=doc.body.scrollTop;
		}
	}
	return t;
}

/* siroj */

// update lov drop down lain berdasarkan ddArrIndex
var dropdownArr;
function updateDropdown(ddtarget,ddArrIndex) {
	var elem = document.getElementById(ddtarget);
	elem.options.length = 0;
	if (ddArrIndex > 0) {
		for (i=0; i<dropdownArr[ddArrIndex].length; i++) {
			var name = dropdownArr[ddArrIndex][i].split('|')[0];
			var id = dropdownArr[ddArrIndex][i].split('|')[1];
			elem.options[elem.options.length] = new Option(name,id);
		}
	}
}

function setElemValue(elemName,theValue) {
	var elem = document.getElementById(elemName);
	elem.value = theValue;
}

function readOnlyRadiobutton(elem) {
	elems = document.getElementsByName(elem.name);
	for (i0=0; i0<elems.length; i0++) {
		elems[i0].checked = elems[i0].defaultChecked;
	}
}

function highlightMenu(idMenu) {
	var treemenu = top.document.getElementById("treemenu");
	alert(treemenu+","+idMenu);
	treemenu.preSelectMenu(idMenu);
}

var isCurrentlyValidateLength = false;

function validateLength(e,elem,maxLength) {
	if (goodkey(e)) {
		return true;
	}
	if (elem.value.length >= maxLength) {
		if (!isCurrentlyValidateLength) {
			isCurrentlyValidateLength = true;
			alert("Data yang diisikan maksimal sepanjang "+maxLength+" karakter");
		}
		isCurrentlyValidateLength = false;
		return false;
	}
	return true;
}

function validateLengthAndTruncate(elem,maxLength) {
	if (isCurrentlyValidateLength) {
		return false;
	}
	if (elem.value.length > maxLength) {
		elem.value = elem.value.substring(0,maxLength);
		isCurrentlyValidateLength = true;
		alert("Data yang diisikan maksimal sepanjang "+maxLength+" karakter. Data selebihnya akan dihapus.");
		isCurrentlyValidateLength = false;
		//alert("truncate");
		return false;
	} else {
		return true;
	}
}


function findBnkBankById(elemIdBank,elemNamaBank) {
	var returnStatus = true;
	bnkBankService.findBnkBankByIdAndPemakai(elemIdBank.value,false, {
		async: false,
		callback: function(bnkBank) {
			if (bnkBank != null) {
				elemIdBank.value = bnkBank.idBank;
				if (elemNamaBank != null) {
					elemNamaBank.value = bnkBank.namaBank;
				}
				resetClassAttribute(elemIdBank, "textfieldsatu");
				returnStatus = true;
			} else {
				if (elemNamaBank != null) {
					elemNamaBank.value = "";
				}
				resetClassAttribute(elemIdBank, "textfieldsatuerror");
				returnStatus = false;
			}
		}
	});
	return returnStatus;
}

function isPeriodeExist(tahunVal,bulanVal) {
	var returnStatus = true;
	refStatusDataPeriodikService.isPeriodeExist(tahunVal,bulanVal, {
		async: false,
		callback: function(data) {
			if (data == true) {
				returnStatus = true;
			} else {
				returnStatus = false;
			}
		}
	});
	return returnStatus;
}

function validateNumberInputFormat(theInput,intLength,fracLength,isSign) {
	//Check input
	var tempValue = theInput.value;
	var intPart = "";
	var fracPart = "";
	var signPart = "";
	// skip empty
	if (tempValue.length <= 0) {
		return true;
	}
	format = "";
	if (isSign) {
		format += "(-)";
	}
	for (i=0; i<intLength; i++) {
		format += "#";
	}
	if (fracLength > 0) {
		format += ".";
		for (i=0; i<fracLength; i++) {
			format += "#";
		}
	}

	// delete negative sign
	signIndex = tempValue.indexOf("-");
	if (!isSign && signIndex >= 0) {
		alert("Format angka harus "+format);
		theInput.focus();
		theInput.value = "0";
		return false;
	}
	if (signIndex == 0) {
		tempValue = tempValue.substring(1);
		signPart = "-";
	} else 
	if (signIndex > 0) {
		alert("Format angka harus "+format);
		theInput.focus();
		theInput.value = "0";
		return false;
	}

	if (tempValue.indexOf(".") >= 0) {
		dotIndex = tempValue.indexOf(".");
		intPart = tempValue.substring(0,dotIndex);
		if (intPart.length > intLength) {
			alert("Format angka harus "+format);
			theInput.focus();
			theInput.value = "0";
			return false;
		}
		fracPart = tempValue.substring(dotIndex+1);
		if (fracPart.length > fracLength) {
			fracVal = parseFloat("1" + fracPart.substring(0, fracPart.length - 1) + "." + fracPart.substring(fracPart.length - 1, fracPart.length), 10);
			fracPart = "" + Math.round(fracVal);
			fracPart = fracPart.substring(1, fracPart.length);
			//alert(fracVal+" "+fracPart);
		}
	} else {
		// validate intLength only
		if (tempValue.length > intLength) {
			alert("Format angka harus "+format);
			theInput.focus();
			theInput.value = "0";
			return false;
		}
		intPart = tempValue;
		fracPart = "0";
	}
	//alert(intPart+" "+fracPart);
	theInput.value = signPart+intPart+decimalPointDelimiter+fracPart;
	return true;
}

function confirmPbxBeforeGotoDetil(tingkatanUser) {
	var elemPendapatPbx = null;
	switch (tingkatanUser) {
		case 0:
			elemPendapatPbx = document.getElementById("pendapatPby");
			break;
		case 1:
			elemPendapatPbx = document.getElementById("pendapatPb");
			break;
		case 2:
			elemPendapatPbx = document.getElementById("pendapatPbs");
			break;
		case 3:
			elemPendapatPbx = document.getElementById("pendapatPbe");
			break;
	}
	if (elemPendapatPbx != null && elemPendapatPbx.value.length > 0 && elemPendapatPbx.value != elemPendapatPbx.defaultValue) {
		return confirm("Pendapat anda belum disimpan, yakin ingin melihat detil ?");
	} else {
		return true;
	}
}

function validateDateDay(elemVal) {
	if (elemVal.length != 2) {
		return false;
	}
	intVal = parseInt(elemVal);
	if (intVal < 1 || intVal > 31) {
		return false;
	}
	return true;
}

function validateDateMonth(elemVal) {
	if (elemVal.length != 2) {
		return false;
	}
	intVal = parseInt(elemVal);
	if (intVal < 1 || intVal > 12) {
		return false;
	}
	return true;
}

function validateDateYear(elemVal) {
	if (elemVal.length != 4) {
		return false;
	}
	intVal = parseInt(elemVal);
	if (intVal < 1990 || intVal > 2090) {
		return false;
	}
	return true;
}

function validateDateDDMMYYYY(elem) {
	if (trim(elem.value).length != 10) {
		return false;
	}

	dateElems = elem.value.split("-");
	if (dateElems.length != 3) {
		return false;
	}
	// validate day
	if (!validateDateDay(dateElems[0])) {
		return false;
	}
	// validate month
	if (!validateDateMonth(dateElems[1])) {
		return false;
	}
	//validate year
	if (!validateDateYear(dateElems[2])) {
		return false;
	}
	return true;	
}

function validateDateMMYYYYYY(elem) {
	if (trim(elem.value).length != 8) {
		return false;
	}

	dateElems = elem.value.split("-");
	if (dateElems.length != 2) {
		return false;
	}

	// validate month
	if (!validateDateMonth(dateElems[1])) {
		return false;
	}
	//validate year
	if (!validateDateYear(dateElems[2])) {
		return false;
	}
	return true;	
}

function validateDateYYYY(elem) {
	if (trim(elem.value).length != 4) {
		return false;
	}
	if (!validateDateYear(trim(elem.value))) {
		return false;
	}
	return true;	
}

function isEndedWith(val,str) {
	return (val.toUpperCase().lastIndexOf(str.toUpperCase())) == (val.length-str.length);
}

/* siroj */

//rollover image
function MM_swapImgRestore() { 
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() { 
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { 
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { 
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
//rollover image end

// Disable Klik Kanan
var ErrMsg = "function disabled";
function disableRightClick(btnClick) {
    if (navigator.appName == "Netscape" && btnClick.which == 3) // check for netscape and right click
   {
        alert(ErrMsg);
        return false;
    }
    else if (navigator.appName =="Microsoft Internet Explorer" && event.button == 2) // for IE and Right Click
    {
        alert(ErrMsg);
        return false;
    }
}

//document.onmousedown = disableRightClick;

var message="function disabled";

function clickIE4()
{
    if (event.button==2)
    {
        alert(message);
        return false;
    }
}

function clickNS4(e)
{
    if (document.layers||document.getElementById&&!document.all)
    {
        if (e.which==2||e.which==3)
        {
            alert(message);
            return false;
        }
    }
}

if (document.layers)
{
    document.captureEvents(Event.MOUSEDOWN);
    document.onmousedown=clickNS4;
}
else if (document.all&&!document.getElementById)
{
    document.onmousedown=clickIE4;
}

// Disable Back
//history.forward(1);




