var arr_opacThread = {}; // prevent multiple parallel threads on "correct" img

function opacity(id, opacStart, opacEnd, millisec, idx) {
	if (idx == undefined) {
		ele = document.getElementById(id);
		idx = "";
	}
	else {
		tmpele = document.getElementsByName(id);
		ele = tmpele[idx];
	}


    if (arr_opacThread[id+idx])
    	return;
    //speed for each frame
    var speed = Math.round(millisec / 100);
    var timer = 0;
    var i=0; // very imp line - don't remove this
    var processingCorrect = (ele.src.search("correct") != -1);
    if (processingCorrect)
    	arr_opacThread[id+idx] = 1;
    //determine the direction for the blending, if start and end are the same nothing happens
    if(opacStart > opacEnd) {
        for(i = opacStart; i >= opacEnd; i-=2) {
            setTimeout("changeOpac(" + i + ",'" + id + "','" + idx + "')",(timer * speed));
            timer++;
        }
	    if (processingCorrect)
	    	setTimeout("arr_opacThread['"+id+idx+"'] = 0",(timer * speed))
    } else if(opacStart < opacEnd) {
      for(i = opacStart; i <= opacEnd; i+=2)
            {
            setTimeout("changeOpac(" + i + ",'" + id + "','" + idx + "')",(timer * speed));
            timer++;
        }
	    if (processingCorrect)
	    	setTimeout("arr_opacThread['"+id+idx+"'] = 0",(timer * speed))
    }
}

//change the opacity for different browsers
function changeOpac(opacity, id, idx) {
	if (idx == "")
    		object = document.getElementById(id);
	else {
    		tmpobject = document.getElementsByName(id);
    		object = tmpobject[idx];
    	}
    	if (String(object.src).indexOf("erroricon") != -1) // stop the fade out threads in case of error
    		opacity = 100;
	object.style.opacity = (opacity / 100);
	object.style.MozOpacity = (opacity / 100);
	object.style.KhtmlOpacity = (opacity / 100);
	object.style.filter = "alpha(opacity=" + opacity + ")";
}

function hideErrorCSS(objId, ErrMsgDivId, StatusObjId) {
	var obj = document.getElementById(objId)
	obj.className = '';
	document.getElementById(ErrMsgDivId).style.display = 'none';
	document.getElementById(StatusObjId).style.display = 'none';
	if (obj.parentNode && obj.parentNode.name && obj.parentNode.name == "borderele") {
		obj.parentNode.className = "";
	}
	return true;
}

function hideErrorCSSFromName(objName, ErrMsgDivName, StatusObjName, idx) {
	if (idx != undefined) { // isArray is 1
		var obj = document.getElementsByName(objName), ErrMsgDiv = document.getElementsByName(ErrMsgDivName), StatusObj = document.getElementsByName(StatusObjName);
		obj[idx].className = '';
		ErrMsgDiv[idx].style.display = 'none';
		StatusObj[idx].style.display = 'none';
		if (obj[idx].parentNode && obj[idx].parentNode.name && obj[idx].parentNode.name == "borderele") {
			obj[idx].parentNode.className = "";
		}
		return true;
	}
	else // we may need to add support here (later)
		return false;
}

function showErrMsg(arr_params) {
	var i;
	arr_params['ErrDivObj'].style.display = "";
	arr_params['ErrDivObj'].innerHTML = "<img src=\""+Images_Path+"/error.gif\">"+arr_params['ErrorMsg'];

	if (arr_params['EleToFocus']) {
		if (arr_params['EleToFocus']["isArray"]) {
			for (i=0; i<arr_params['EleToFocus'].length; ++i) {
				arr_params['EleToFocus'][i].className = "errorcss";
				if (!arr_params['noborder'] && arr_params['EleToFocus'][i].parentNode && arr_params['EleToFocus'][i].parentNode.name && arr_params['EleToFocus'][i].parentNode.name == "borderele") {
			//		var border = document.getElementById(arr_params['ErrDivObj'].id + "_border");
			//		if (border) border.className = "errorcss";
					arr_params['EleToFocus'][i].parentNode.className = "errorcss";
				}
			}
		}
		else
			arr_params['EleToFocus'].className = "errorcss";
			if (!arr_params['noborder'] && arr_params['EleToFocus'].parentNode && arr_params['EleToFocus'].parentNode.name && arr_params['EleToFocus'].parentNode.name == "borderele") {
		//		var border = document.getElementById(arr_params['ErrDivObj'].id + "_border");
		//		if (border) border.className = "errorcss";
				arr_params['EleToFocus'].parentNode.className = "errorcss";
			}
	}
	if (arr_params['StatusObj']) {
		if (arr_params['StatusObj']["isArray"]) {
			for (i=0; i<arr_params['StatusObj'].length; ++i) {
				arr_params['StatusObj'][i].style.display = "";
				arr_params['StatusObj'][i].src = Images_Path+"/erroricon1.gif";
				opacity(arr_params['StatusObj'][i].id, 99, 100, 1);
			}
		}
		else {
			arr_params['StatusObj'].style.display = "";
			arr_params['StatusObj'].src = Images_Path+"/erroricon1.gif";
			opacity(arr_params['StatusObj'].id, 99, 100, 1);
		}
	}
	if (!arr_params['ob']) {
		ErrorDetails[arr_params["HName"]] = 1;
		if (arr_params['EleToFocus']) {
			if (!alreadyFocussed) {
				alreadyFocussed = true;
				if (arr_params['EleToFocus']["isArray"]) {
					arr_params['EleToFocus'][0].focus();
				}
				else {
					arr_params['EleToFocus'].focus();
				}
			}
		}
	}
}

function v_init(arr_v_override) {
	var i;
	var _tmpImg = new Image(); _tmpImg.src = Images_Path+"/error.gif"; // preload
	arr_v = arr_v_override ? arr_v_override : arr_v;
	if ( !df ) {
		df = document.forms[0];
	}
	var f_list, p_masterlist, p_list, f_str = '';
	for(elementName in arr_v) {
		if (arr_v[elementName]["isArray"]) {
			arr_ele = df.elements[elementName];
			for (ec=0; ec<arr_ele.length; ++ec) {
				for(eventName in arr_v[elementName]['events']) {
					f_list = arr_v[elementName]['events'][eventName]['fname'].toString().split("|X|");
					p_masterlist = new String(arr_v[elementName]['events'][eventName]['param']).split("|X|");
					if ( f_list.length <= 0 ) {
						break;
					}
					for(i=0; i<f_list.length; ++i) {
						f_str = f_str + f_list[i] + '(' + p_masterlist[i] + (p_masterlist[i] != '' ? ',' : '') + ec + ');';
					}
					eval("df.elements['" + elementName + "'][" + ec + "]." + eventName + "= function() {\
						eval(\"" + f_str + "\");\}");
					f_str = '';
				}
			}
		}
		else {
			for(eventName in arr_v[elementName]['events']) {
				f_list = arr_v[elementName]['events'][eventName]['fname'].toString().split("|X|");
				p_masterlist = new String(arr_v[elementName]['events'][eventName]['param']).split("|X|");
				if ( f_list.length <= 0 ) {
					break;
				}
				for(i=0; i<f_list.length; ++i) {
					f_str = f_str + f_list[i] + '(' + p_masterlist[i] + ');';
				}
				eval("df.elements['" + elementName + "']." + eventName + "= function() {\
					eval(\"" + f_str + "\");\}");
				f_str = '';
			}

		}
	}
}

function rm_trim(inputString)
{
        if (typeof inputString != "string") { return inputString; }

        var temp_str = '';
        temp_str = inputString.replace(/[\s]+/g,"");
        if(temp_str == '')
                return "";

        var retValue = inputString;
        var ch = retValue.substring(0, 1);
        while (ch == " ")
        {
                retValue = retValue.substring(1, retValue.length);
                ch = retValue.substring(0, 1);
        }
        ch = retValue.substring(retValue.length-1, retValue.length);
        while (ch == " ")
        {
                retValue = retValue.substring(0, retValue.length-1);
                ch = retValue.substring(retValue.length-1, retValue.length);
        }
        while (retValue.indexOf("  ") != -1)
        {
          retValue = retValue.substring(0, retValue.indexOf("  ")) + retValue.substring(retValue.indexOf("  ")+1, retValue.length);
        }
        return retValue;
}

