/***********************************************************************
*   MODULE:		utils.js                                                *
*   PROJECT:  G4_temporary_name                                        *
*   DATE:     21/09/2005                                               *
*   PURPOSE:  Retrieving data for embeded website.                     *
*             Common use and special scripts                           *
*   AUTHOR:   Leon Kladnitsky                                          *
*----------------------------------------------------------------------*
*                     (C) Copyright ELSPEC-LTD                         *
*                     ALL RIGHTS RESERVED                              *
************************************************************************/


////////////////////////////////////////////////////////////////////////////////
//
//      objRef: browser-independent object reference
//
////////////////////////////////////////////////////////////////////////////////

function objRef(elem)
{
	var obj_ref = NO_OBJ, num_val = -1;
	if (typeof elem == TYPE_OBJ){
    obj_ref = elem;
	}
	else if (typeof elem == TYPE_STR) {
		if (document.getElementById) {
			obj_ref = document.getElementById(elem); 
		}
		else if (document.all) {
			obj_ref = document.all[elem];
		}
		else if (document.layers) {
			obj_ref = document.layers[elem];
		}
		if (obj_ref == NO_OBJ) {
			if (elem.substring(0,WEBSTR_PREFIX.length) === WEBSTR_PREFIX && CF_TXT_PATCH_ENABLED) {
				num_val = eval(elem);
				obj_ref=objRef(STR_PREFIX+num_val);
			} 
			else if (elem.substring(0,PRMCODE_PREFIX.length) === PRMCODE_PREFIX && CF_PRM_PATCH_ENABLED) {
				num_val = eval(elem);
				obj_ref=objRef(PRM_PREFIX+num_val);
			}
			else if (elem.substring(0,EVENT_PREFIX.length) === EVENT_PREFIX && CF_LOGGER_PATCH_ENABLED) {
				num_val = eval(elem);
				obj_ref=objRef(EVT_PREFIX+num_val);
			}
		}
	}
	return obj_ref;
}


////////////////////////////////////////////////////////////////////////////////
//
//      newXMLobj:  creates new XMLHttpRequest object
//
////////////////////////////////////////////////////////////////////////////////

function newXMLobj()
{
	var xmlObj = NO_OBJ;

  try {
    xmlObj = new ActiveXObject("Msxml2.XMLHTTP");
  }
  catch (e) {
    try {
      xmlObj = new ActiveXObject("Microsoft.XMLHTTP");
    }
    catch (ee) {
      xmlObj = NO_OBJ;
    }
  }
  if (!xmlObj && window.XMLHttpRequest) {
    xmlObj = new XMLHttpRequest();
  }
	return xmlObj;
}


////////////////////////////////////////////////////////////////////////////////
//
//  showID:   hides object
//
////////////////////////////////////////////////////////////////////////////////

function showID(id)
{
	var obj = objRef(id);
	if (obj)
    showObj(obj);
}


////////////////////////////////////////////////////////////////////////////////
//
//  lineID:   hides object
//
////////////////////////////////////////////////////////////////////////////////

function lineID(id)
{
	var obj = objRef(id);
	if (obj)
    lineObj(obj);
}


////////////////////////////////////////////////////////////////////////////////
//
//  hideID:   hides object
//
////////////////////////////////////////////////////////////////////////////////

function hideID(id)
{
	var obj = objRef(id);
	if (obj)
    hideObj(obj);
}


////////////////////////////////////////////////////////////////////////////////
//
//  showObj:   hides object
//
////////////////////////////////////////////////////////////////////////////////

function showObj(obj)
{
  obj.style.display = VISIBLE_STYLE;
}


////////////////////////////////////////////////////////////////////////////////
//
//  lineObj:   hides object
//
////////////////////////////////////////////////////////////////////////////////

function lineObj(obj)
{
  obj.style.display = INLINE_STYLE;
}


////////////////////////////////////////////////////////////////////////////////
//
//  hideObj:   hides object
//
////////////////////////////////////////////////////////////////////////////////

function hideObj(obj)
{
	obj.style.display = HIDDEN_STYLE;
}


////////////////////////////////////////////////////////////////////////////////
//
//  prepareRequest:		prepares data request for provided server-side handler    
//
////////////////////////////////////////////////////////////////////////////////

function prepareRequest(reqStr,debugLevel)
{
  // default is DEBUG_OFF
	if (isNaN(debugLevel)) {
  	debugLevel=DEBUG_OFF;  
	}

	var conStr = document.forms[CONN_FORM]["cID"].value;
	var request = "/goform/"+reqStr+"?cID="+conStr;
	var usrStr = document.forms[CONN_FORM]["unID"].value;
	if (typeof usrStr != TYPE_UND && usrStr.length > 0)
		  request += "&unID="+usrStr
	if (debugLevel>DEBUG_OFF) addToLog("prepareRequest: " + request);
	return request;
}


////////////////////////////////////////////////////////////////////////////
//
//  setList:	populates drop-down control (selection input) 
//						with texts and values from arrays. If texts array is wrong/bad,
//						single option "None" is added with value "0".
//						If values array is not defined, option values are simply enumerated starting zero. 
//
//						Starting and ending indices are optional, if not provided, 
//						or erroneus/negative, then array boundaries are used. 
//
////////////////////////////////////////////////////////////////////////////

function setList(inpName, valArr, textArr, startIndex, endIndex, debugLevel)
{

	if (debugLevel>DEBUG_OFF) addToLog("setList: "+inpName);
	var newOpt;
	var ownValArr = [];
	var listConfig = objRef(inpName);
	var ownTextArr = []; //;
	var _converter = objRef("_conv"); 
	
  if (valArr && valArr.length) {
  	ownValArr = valArr;
  }
  else if (textArr && textArr.length)  {
		// if there are no values , create enumeration                                        || valArr.length < ownTextArr.length 
		if (debugLevel>DEBUG_OFF) addToLog("setList: No values - enumerating.");
		for (iii=0;iii<textArr.length;iii++) 
			ownValArr.push(iii);  	
	}
	else {
		if (debugLevel>DEBUG_OFF) addToLog("setList: No arrays!");		
		return;
	}

	var isConfList = (typeof WEB_LIST_ARRAY != TYPE_UND && textArr === WEB_LIST_ARRAY);
	// if there are no texts - 
	if (isNaN(textArr.length)) {  
		if (isNaN(textArr)) {
			if (debugLevel>DEBUG_OFF) addToLog("setList BAD textArr");		
			ownTextArr.push(str_920);
		}
	}
	else 
	{
		/* patch for languages display configuration , in this case we use WEB_LOGIN_TXT*/
		if (debugLevel>DEBUG_OFF) addToLog("sUse_webLoginSpecial = "+Use_webLoginSpecial);	
		if ((typeof WEB_LOGIN_TXT != TYPE_UND || !isConfList) && (Use_webLoginSpecial != false) ) 
		{
		 	ownTextArr = textArr;			
		}
		else {
			if (debugLevel>DEBUG_OFF) addToLog("setList WEB_LIST_ARRAY used");
			for (iii=0;iii<ownValArr.length;iii++) 
				ownTextArr.push(WEB_LIST_ARRAY[ownValArr[iii]-WEB_LIST_OFFSET-1]);  	
		}
	} 

	if (debugLevel>DEBUG_ON) addToLog("setList texts len: " + ownTextArr.length + " values len: " + ownValArr.length);
	if (debugLevel>DEBUG_ON) addToLog("setList texts: " + ownTextArr.toString() + " values: " + ownValArr.toString());

	// check the indices
	if ( isNaN(startIndex) || startIndex < 0 || startIndex >= ownTextArr.length )
		startIndex = 0;
	if ( isNaN(endIndex) || endIndex < 0 || endIndex > ownTextArr.length || endIndex <= startIndex )
		endIndex = ownTextArr.length;
		
	if (debugLevel>DEBUG_OFF) addToLog("setList startIndex: " + startIndex + " endIndex: " + endIndex);

	// clear existing options 
	clearList(listConfig);
	
	// create new options 
	for (iii=startIndex;iii<endIndex;iii++) {
  	newOpt = document.createElement("OPTION");
    newOpt.value = ownValArr[iii];
		
  	if (typeof WEB_LOGIN_TXT != TYPE_UND || isConfList || typeof ownTextArr[iii] == TYPE_STR)
  		_converter.innerHTML = ownTextArr[iii];    	
  	else 
  		_converter.innerHTML = WEB_TEXT_ARRAY[ownTextArr[iii]];

    if (document.all) {  /* IE */
	    newOpt.text = _converter.innerText
			listConfig.options.add(newOpt);
		}
		else if (document.getElementById) {   /* MZ */
  		newOpt.innerHTML = _converter.innerHTML;
			listConfig.add(newOpt,null);
		}
	}
	if (debugLevel>DEBUG_OFF) addToLog("setList: " + (endIndex-startIndex) + " set.");
}


////////////////////////////////////////////////////////////////////////////
//
//  setListTexts:	
//						populates drop-down control (selection input) 
//						with texts from array. If array is not defined, 
//						option texts are simply a numbers starting zero. 
//
////////////////////////////////////////////////////////////////////////////

function setListTexts(inpName, textArr, debugLevel)
{
	var listConfig = objRef(inpName);
	if (!listConfig)
		return;
	var listOptions = listConfig.options;
	var optionHTML, newOpt, iii=0;
	var listLen = Math.min(listOptions.length,textArr.length);
	if (debugLevel>DEBUG_OFF) addToLog("setListTexts: " + listLen + " items.");

	for (iii=0;iii<listLen;iii++) {
    newOpt = listOptions[iii];
    if (textArr[iii] == Number.MAX_VALUE) {
			optionHTML = WEB_UNIT_ARRAY[uni_66];
		}
		else {
			optionHTML = textArr[iii].toString() + SNGL_SPC + WEB_UNIT_ARRAY[uni_6];   //WEB_UNIT_ARRAY[eval(newOpt.id)];
		}

    if (document.all) {  /* IE */
	    newOpt.text = optionHTML
		}
		else if (document.getElementById) {   /* MZ */
  		newOpt.innerHTML = optionHTML;
		}
	}
}


////////////////////////////////////////////////////////////////////////////////
//
//  readResponse:  checks for basic JSON integrity in server handler response  
//
////////////////////////////////////////////////////////////////////////////////

function readResponse(transport,debugLevel)
{
  // default is DEBUG_OFF
	if (isNaN(debugLevel)) {
  	debugLevel=DEBUG_OFF;  
	}
	
	if (typeof DATA_XFER_FLAG != TYPE_UND && DATA_XFER_FLAG === NO_OBJ)
		return BAD_DATA;
		
	var Inf = Number.MAX_VALUE;	
	var callerName = readResponse.caller.toString();																		
	var handlerName = callerName.substring((TYPE_FNC).length,callerName.indexOf("("));

	if (transport.status != STATUS_OK || typeof transport.responseText != TYPE_STR) {
	  addToLog(handlerName+"readResponse bad status: "+transport.status);
	  return BAD_DATA;
  }

	var rt = transport.responseText;
	try {
		var serverData = eval('('+rt+')');
	}
	catch (e) {
	  addToLog(handlerName+"readResponse bad JSON: "+rt);
		// msgHint(rt,str_1246,FAIL_CLASS,HIDE_FUNC);		
	  return BAD_DATA;
	}

	var dataResponse = serverData.jsonData;

	if (typeof dataResponse == TYPE_UND || typeof dataResponse.res == TYPE_UND) {
	  addToLog(handlerName+"readResponse bad JSON data: "+rt);
		// msgHint(rt,str_1249,FAIL_CLASS,HIDE_FUNC);		
	  return BAD_DATA;
	}
	return dataResponse;
}


////////////////////////////////////////////////////////////////////////////////
//
//      addToLog: adds text to debug console, available only in FF 
//
////////////////////////////////////////////////////////////////////////////////

function addToLog(txt)
{
// 	return;
  if (("console" in window) && ("firebug" in console)) {
    console.info(txt);
  }
}


////////////////////////////////////////////////////////////////////////////////
//
//      clearList: 	clears options of drop-down control leaving only 
//									minlen topmost options 
//
////////////////////////////////////////////////////////////////////////////////

function clearList(inp,minlen,debugLevel)
{
  // default is DEBUG_OFF
	if (isNaN(debugLevel)) {
  	debugLevel=DEBUG_OFF;  
	}
	
	if (typeof inp == TYPE_UND || typeof inp.options != TYPE_OBJ) {
		addToLog("clearList: Bad control - " + inp.id);
	}
  // default is complete removal of options
	if (isNaN(minlen)) {
  	minlen=0;  
	}
	
	while (inp.options && inp.options.length>minlen) 
    if (document.all) inp.options.remove(minlen);
		else if (document.getElementById) inp.remove(minlen);
}

