// the below messages are here to remove dependency of lov to formValidation.js
nuf.lovNotFoundEl = '\u0394\u03B5\u03BD \u03C5\u03C0\u03AC\u03C1\u03C7\u03B5\u03B9 \u03BF \u03BA\u03C9\u03B4\u03B9\u03BA\u03CC\u03C2 \u03C0\u03BF\u03C5 \u03BA\u03B1\u03C4\u03B1\u03C7\u03C9\u03C1\u03AE\u03C3\u03B1\u03C4\u03B5 \u03C3\u03C4\u03BF \u03C0\u03B5\u03B4\u03AF\u03BF "%1"';
nuf.lovNotFoundEn = 'Invalid code entered in field "%1"';
nuf.lovChangeHandlers = {} //added 5/7/14: allow easy handling on lov change values.

function addLovChangeHandler(fieldid /**string, id of lov*/, functionref /** function reference */) {
	__lovChangeHandlers[fieldid] = functionref;
}

function removeLovChangeHandler(fieldid /**string, id of lov*/) {
	__lovChangeHandlers[fieldid] = null;
}


function __lovNotFound() {
	if (__lang == "EL")return __lovNotFoundEl;
	return __lovNotFoundEn;
}

function launchLovSecureMultiselect( fieldId, destinationJsp, lovKey, lovheight, lovwidth ) {
	
	if (typeof (__lov__checkLaunch) == 'function') {
		if (! __lov__checkLaunch(fieldId))return;
	}
	
	if (!lovheight)lovheight=500;
	if (!lovwidth)lovwidth=660;
	 	
	// add the correct first param separator
	destinationJsp += (destinationJsp.indexOf('?') == -1)
					? '?'
					: '&';  
	destinationJsp += "&fieldId=" + fieldId; 
	destinationJsp += "&lovKey=" + lovKey;
	
	var calWindow =launchCenter(destinationJsp,'LOV', lovheight, lovwidth, 'scrollbars=yes');
	calWindow._lovFieldId = fieldId;
	if (window.__lov__selected) {
		calWindow.__lov__selected = __lov__selected;
	}
	if (__lovChangeHandlers[fieldId]) {
		__lovChangeHandlers[fieldId]();
	}
}

function launchLovSecure( fieldId, destinationJsp, lovKey, lovheight, lovwidth ) {
	
	if (typeof (__lov__checkLaunch) == 'function') {
		if (! __lov__checkLaunch(fieldId))return;
	}
	
	if (!lovheight)lovheight=500;
	if (!lovwidth)lovwidth=660;
	
	// add the correct first param separator
	destinationJsp += (destinationJsp.indexOf('?') == -1)
					? '?'
					: '&';  
	destinationJsp += "&fieldId=" + fieldId; 
	destinationJsp += "&lovKey=" + lovKey;
	
	var calWindow = launchCenter(destinationJsp,'LOV', lovheight, lovwidth, 'scrollbars=yes');
	calWindow._lovField = fieldId;
	if (window.__lov__selected) {
		calWindow.__lov__selected = __lov__selected;
	}
	if (__lovChangeHandlers[fieldId]) {
		__lovChangeHandlers[fieldId]();
	}
}

function setLovSecureDatasource(fieldId,newDataSource) {
	var f = $f(fieldId);
	var globalLovKey = f.globalLovKey;
	var vurl = __contextPath + '/LovServlet';
	var vars = {"action":"setDataSource", "globalLOVKey": globalLovKey, "newDataSource": newDataSource};
	$j.ajax({	cache: false,
				async: true,
				type: "POST",  
				dataType:'text', // return type is text, 1=sucess
				url: vurl, 
				data: vars,
				timeout: 10*1000, // allow up to 10 seconds
				success: function(){},
				error: defaultAjaxErrorHandler // this is defined in formValidation.js
			});
}

//called from the blur event to search for the code entered in the textbox
function getLovValueSecure(fieldId,lovKey) {
		
    var lovField = document.getElementById(fieldId);
    var lovHidden = document.getElementById('_' + fieldId);
    var lovFieldDisplay = document.getElementById('Display_' + fieldId);
	
    if (!lovField.value) {
        LovClearAllFields(fieldId);
        return;
    }

    if (lovHidden.value == lovField.value && lovFieldDisplay.innerText.trim()) {
        //means that the user selected from the jsp window
        return;
    }

    var vars = new Array();

    vars['globalLOVKey'] = lovKey;
    vars['lovFieldId'] = fieldId;
    vars['lovValue'] = lovField.value;
	
	var jro /* jroAttribute */= getSafeJroAttr(fieldId);
	if(jro){
		if (jro.forceUpperCase) {
			vars['lovValue'] = upperCaseFieldC(vars['lovValue']);
		}
	}
	
    ajaxCaller.shouldDebug = false;
    ajaxCaller.postForPlainText(__contextPath + '/LovServlet', vars, onLovResponse, 'lov' + fieldId);

}


// called from key up of the control and clears the description
function clearLovField2(lovid) {

    var fld = document.getElementById(lovid).value;
    var hidden = document.getElementById('_' + lovid).value;
    var disp = document.getElementById('Display_' + lovid);
	
	if (fld != hidden) {
        if (disp) {
            disp.innerText = '';
			if (window.__lov__selected) {
				__lov__selected(lovid);
			}
			if (__lovChangeHandlers[lovid]) {
				__lovChangeHandlers[lovid]();
			}
		} else {
            alert('Error: Cant find span:' + 'Display_' + lovid);
        }
    }

}

//called from the image click of the lov and opens the lov page
function launchLov2(destinationJsp, fieldId, sqlDataSource, pageSize, lovheight, lovwidth, colLabel, lovPageTitle) {
	
	if (typeof (__lov__checkLaunch) == 'function') {
		if (! __lov__checkLaunch(fieldId))return;
	}
	
	//return if no sql passed
	if(!sqlDataSource)return;
	
    if (!lovheight)lovheight=500;
	if (!lovwidth)lovwidth=660;
	
    if (!lovPageTitle)
        lovPageTitle = 'LOV';

    // add the correct first param separator
    destinationJsp += (destinationJsp.indexOf('?') ==  - 1) ? '?' : '&';
    destinationJsp += "&sqlDataSource=" + sqlDataSource;
    destinationJsp += "&pageSize=" + pageSize;
    destinationJsp += "&fieldId=" + fieldId;
    destinationJsp += "&colLabel=" + colLabel;
    destinationJsp += "&lovPageTitle=" + lovPageTitle;

    var calWindow = launchCenter(destinationJsp, 'LOV', lovheight, lovwidth, 'scrollbars=yes');
    calWindow._lovFieldId = fieldId;
    if (window.__lov__selected) {
        calWindow.__lov__selected = __lov__selected;
    }
	if (__lovChangeHandlers[fieldId]) {
		__lovChangeHandlers[fieldId]();
	}
}

//called from the blur event to search for the code entered in the textbox
function getLovValue(fieldId,sqlDataSource) {
	if(! sqlDataSource ) {
		sqlDataSource = document.getElementById('__SQL' + fieldId).value;
	}
	if(! sqlDataSource ) {
		//alert('Error: no data source for LOV:' + fieldId);
		return;
	}
	
    var lovField = document.getElementById(fieldId);
    var lovHidden = document.getElementById('_' + fieldId);
    var lovFieldDisplay = document.getElementById('Display_' + fieldId);
	
    if (!lovField.value) {
        LovClearAllFields(fieldId);
        return;
    }

    if (lovHidden.value == lovField.value && lovFieldDisplay.innerText.trim()) {
        //means that the user selected from the jsp window
        return;
    }

    var vars = new Array();

    vars['sqlDataSource'] = sqlDataSource;
    vars['lovFieldId'] = fieldId;
    vars['lovValue'] = lovField.value;
	
	var jro /* jroAttribute */= getSafeJroAttr(fieldId);
	if(jro) {
		// this is here because cpcs includes the lov fields by instantiating HTMLLOVTExtBox	
		if (jro.forceUpperCase) {
			vars['lovValue'] = upperCaseFieldC(vars['lovValue']);
		}
		
	}
	
    ajaxCaller.shouldDebug = false;
    ajaxCaller.postForPlainText(__contextPath + '/LovServlet', vars, onLovResponse, 'lov' + fieldId);

}

function LovClearAllFields(fieldid) {
    document.getElementById(fieldid).value = '';
    document.getElementById('_' + fieldid).value = '';
    document.getElementById('Display_' + fieldid).innerHTML = '&nbsp;';
}

function onLovResponse(content, headers, callingContext) {

    if (!content) {return;}
		
	var jsondata=eval("("+content+")");  //retrieve result as an JavaScript object
	var err = jsondata['error'];
	var fieldid = jsondata['lovField'];
	var descr = jsondata['lovDescription'];

	if (err) {
		alert('Error from servlet:' + err);
		LovClearAllFields(fieldid);

	}  else {

		if (!descr) {
			if (nuf.formIsQuerymode) {
				//change: if nuf.formIsQuerymode then do not show error message
			} else {
				__lovHandleNotFound(fieldid);

			}

		} else {
			document.getElementById('_' + fieldid).value = document.getElementById(fieldid).value;
			document.getElementById('Display_' + fieldid).innerHTML = descr;
		}

		if (window.__lov__selected) {
			__lov__selected(fieldid);
		}
		if (__lovChangeHandlers[fieldid]) {
			__lovChangeHandlers[fieldid]();
		}
	}

}
function __lovHandleNotFound(fieldid) {

	var lovLabel = getJroAttrlabel(fieldid);
	alert(__lovNotFound().replace("%1", lovLabel));
	LovClearAllFields(fieldid);

}

// this function will run on the LOV popup window when a user selects a line.
function SelectValue(value,display) {

	var lovfieldid = window._lovFieldId;
	if(!lovfieldid) {
		// on the lov jsp page we have a hidden field with the fieldId
		lovfieldid = document.getElementById('fieldId').value;
	}
	
	if (window.opener && !window.opener.closed) {
		window.opener.document.getElementById(lovfieldid).value = value;
		window.opener.document.getElementById('_'+lovfieldid).value = value;
		window.opener.document.getElementById('Display_'+lovfieldid).innerHTML = display;
		
		if (window.__lov__selected) {
			__lov__selected(lovfieldid);
		} else if (window.opener.__lov__selected) {
			window.opener.__lov__selected(lovfieldid);
		}
		if (window.opener.__lovChangeHandlers[lovfieldid]) {
			window.opener.__lovChangeHandlers[lovfieldid]();
		}
		top.close();
		return true;
	} else {
		alert('opener is null');
		return false;
	}

}