var validator = new Array();
var validatorMode = new Array();

String.prototype.trim = function() {
	return this.replace(/^\s+|\s+$/g,"");
}
String.prototype.ltrim = function() {
	return this.replace(/^\s+/,"");
}
String.prototype.rtrim = function() {
	return this.replace(/\s+$/,"");
}

function isString (value) {
	return value.match(/^([a-zA-Z0-9_]+)$/);
}

function isNumber (value) {
	return value.match(/^([0-9]+)$/);
}

function getField (value) {
	var elementFieldList = document.getElementById("fieldList");
	var text = elementFieldList.value.match("-"+value+"(#[0-9])+-");
	if ( text != null ) return text[0];
	return text;
}

function fieldExist (value) {
	if ( getField (value) != null ) {
		return true;
	} else {
		return false;
	}
}

function addFieldList ( value, sorting ) {
	var elementFieldList = document.getElementById("fieldList");
	elementFieldList.value = elementFieldList.value + value + "#" + sorting + "-";
}

function removeFieldList ( value ) {
	var elementFieldList = document.getElementById("fieldList");
	elementFieldList.value = elementFieldList.value.replace(eval("/-"+value+"(#[0-9])+-/"), "-");
}

function editFieldList ( oldValue, newValue, sorting ) {
	var elementFieldList = document.getElementById("fieldList");
	elementFieldList.value = elementFieldList.value.replace(eval("/-"+oldValue+"(#[0-9])+-/"), "-"+newValue+"#"+sorting+"-");
}

function alvButtonClick(element) {
	var name = element.id.substring(4);
	elementHidden = document.getElementById("ALV_" + name);
	if ( elementHidden.value == 1 ) {
		element.src = "../images/abap/" + name + "_NAC.GIF";
		elementHidden.value = 0;
	} else {
		element.src = "../images/abap/" + name + ".GIF";
		elementHidden.value = 1;
	}
}

function validate (element) {
	elementName = element.id;
	trim	(element);
	ucase (element);
	if ( isString (element.value) ) {
		successMsg (element, "");
		return true;
	} else {
		errorMsg (element, "");
		return false;
	}
}

function validateNumber (element) {
	elementName = element.id;
	trim	(element);
	ucase (element);
	if ( isNumber (element.value) ) {
		successMsg (element, "");
		return true;
	} else {
		errorMsg (element, "");
		return false;
	}
}

function successMsg (element, message) {
	elementName = element.id;
	notifier = document.getElementById(elementName+"Validator");
	notifier.innerHTML = "<img src=\"../images/valid.png\" alt=\"Valid\" />" + message;
}

function errorMsg (element, message) {
	elementName = element.id;
	notifier = document.getElementById(elementName+"Validator");
	notifier.innerHTML = "<img src=\"../images/error.png\" alt=\"Error\" />" + message;
}

function ucase (element) {
	element.value = element.value.toUpperCase();
}

function trim (element) {
	element.value = element.value.trim();
}

function addField() {
	document.getElementById("columnName").value = "";
	document.getElementById("columnName").className = "";
	document.getElementById("columnNameValidator").innerHTML = "<img src=\"../images/blank.png\" heigth=\"20px\" width=\"20px\" />";
	document.getElementById("sortingMode").selectedIndex = 0;
	document.getElementById("sortingModeValidator").innerHTML = "<img src=\"../images/blank.png\" heigth=\"20px\" width=\"20px\" />";
	document.getElementById("inpOldName").value = "";
	document.getElementById("cmdCreateField").value = "Add";
	document.getElementById("cmdDeleteField").style.display = "none";
	displayColumnAddPanel ();
}


function editField (element) {
	var fieldData = getField(element.innerHTML);
	var fieldArray = fieldData.slice(1,fieldData.length-1).split("#");
	document.getElementById("columnName").value = element.innerHTML;
	document.getElementById("columnName").className = "";
	document.getElementById("columnNameValidator").innerHTML = "<img src=\"../images/valid.png\" alt=\"Valid\" width=\"20px\" />";
	document.getElementById("sortingMode").selectedIndex = fieldArray[1];
	sortChange ( document.getElementById("sortingMode") );
	document.getElementById("inpOldName").value = element.innerHTML;
	document.getElementById("cmdCreateField").value = "Edit";
	document.getElementById("cmdDeleteField").style.display = "inline";
	displayColumnAddPanel ();
}

/* START PAI */

function createField () {
	var fieldName = document.getElementById("columnName").value;
	
	var elemSorting = document.getElementById("sortingMode");
	var sortingMode = elemSorting.options[elemSorting.selectedIndex].value;
	
	var oldName = document.getElementById("inpOldName").value;
	/* Field list */
	var elemFieldList = document.getElementById("fieldList");
	
	if ( isString (fieldName) && ( fieldName==oldName || !fieldExist(fieldName) ) ) {
		var element = document.getElementById("stdColumn");
		if ( oldName == "" ) {
			var newColumn = element.cloneNode(true);
		} else {
			var newColumn = document.getElementById("lv_" + oldName);
		}
		
		newColumn.id = "lv_" + fieldName;
		newColumn.name = "lv_" + fieldName;
		newColumn.style.display = "inline";
		newColumn.style.padding = "0px";
		newColumn.style.margin = "0px";
		newColumn.style.border = "none";
		newColumn.getElementsByTagName("th")[0].innerHTML = fieldName.toUpperCase();
		var inputField = newColumn.getElementsByTagName("input")[0];
		inputField.id = "FLD_" + fieldName.toUpperCase();
		inputField.name = "FLD_" + fieldName.toUpperCase();
		inputField.value = fieldName.toUpperCase();
		
		if ( oldName == "" ) {
			element.parentNode.insertBefore(newColumn,element);
			addFieldList ( fieldName, sortingMode );
		} else {
			editFieldList ( oldName, fieldName, sortingMode );
		}
		hideColumnAddPanel ();
	} else {
		elemWrong = document.getElementById("columnName");
		if ( !isString (fieldName) ) {
			validate (elemWrong);
		} else {
			errorMsg (elemWrong,"");
		}
	}
}

function createFieldAbort () {
	hideColumnAddPanel();
}

function deleteField () {
	var oldName = document.getElementById("inpOldName").value;
	rEs(document.getElementById("lv_" + oldName));
	removeFieldList ( oldName );
	hideColumnAddPanel();
}

/* END PAI */

/* PRIVATE METHOD */

function displayColumnAddPanel () {
	elemColumnAdd = document.getElementById("columnAdd");
	elemColumnAdd.style.display = "block";
}

function hideColumnAddPanel () {
	elemColumnAdd = document.getElementById("columnAdd");
	elemColumnAdd.style.display = "none";
}

function rEs(tO) { 
	var i, n; 
	if (!tO) { return false; }
  if (!tO.nodeName) { if (tO.length) for (n=tO.length; n--;) rEs(tO[n]); }
  else tO.parentNode.removeChild(tO);
}

function validateSubmit ( ) {
	var result = true;
	
	for (x in validator) {
		var elementValidate = document.getElementById(validator[x]);
		if ( validatorMode[x] == "alphanum" && !validate(elementValidate) ) result = false;
		if ( validatorMode[x] == "num" && !validateNumber(elementValidate) ) result = false;
	}

	if ( result ) {
		document.alvForm.submit();
	}
}

function addValidator ( name, mode ) {
	var last = validator.length;
	validator[last] = name;
	validatorMode[last] = mode;
}

function removeValidator ( name ) {
	for (x in validator) {
		if ( name == validator[x] ) {
			delete validator[x];
			delete validatorMode[x];
		}
	}
}

function disableSelection ( name ){
	var target = document.getElementById(name);
	if (typeof target.onselectstart!="undefined") //IE route
		target.onselectstart=function(){return false;}
	else if (typeof target.style.MozUserSelect!="undefined") //Firefox route
		target.style.MozUserSelect="none";
	else //All other route (ie: Opera)
		target.onmousedown=function(){return false;}
	target.style.cursor = "default";
}

function alvTypeChange ( element ) {
	if ( element.value == 1 ) showDynnr ();
	else hideDynnr ();
}

function showDynnr () {
	var dynnr = document.getElementById("dynnrContainer");
	dynnr.style.display = "inline";
	addValidator ( "dynnr", "num" );	
}

function hideDynnr () {
	var dynnr = document.getElementById("dynnrContainer");
	dynnr.style.display = "none";
	removeValidator ( "dynnr" );	
}

function sortChange ( element ) {
	elementName = element.id;
	notifier = document.getElementById(elementName+"Validator");
	switch ( element.selectedIndex ) {
		case 1:	
			notifier.innerHTML = "<img src=\"../images/abap/S_B_SRTU.GIF\" alt=\"Ascending\" width=\"20px\" />";
			break;	
		case 2:
			notifier.innerHTML = "<img src=\"../images/abap/S_B_SRTD.GIF\" alt=\"Descending\" width=\"20px\" />";
			break;
		default:
			notifier.innerHTML = "<img src=\"../images/blank.png\" heigth=\"20px\" width=\"20px\" />";
			break;
	}
}	
