/*
 * 0 - IE
 * 1 - FFox
 * 2- Opera
 * 3 - Netscape
 */
var navigator_type = -1;


	function push(arr, val) {
		arr[arr.length] = val;
	}
	
	function setRadioValue(form, fieldname, value) {
		//for (formindex = 0; formindex < form.length; formindex++)
		//	if (form.elements[formindex].name == fieldname && form.elements[formindex].value == value)
		//		if (form.elements[formindex].checked != true)
		//			form.elements[formindex].checked = true;
		if(form[fieldname]){
			var list = form[fieldname];
			var len = list.length;
			for(var i = 0; i < len ; i++){
				if(list[i].value == value){
					if(list[i].checked != true){
						list[i].checked = true;
					}
				}	
			}
		}else{
			var len = form.length;
			var element = form.elements;
			for (formindex = 0; formindex < len; formindex++)
				if (element[formindex].name == fieldname && element[formindex].value == value)
					if (element[formindex].checked != true)
						element[formindex].checked = true;
		}
		
	}
	
	function disableControl(form, fieldname, disabled) {
		//for (formindex = 0; formindex < form.length; formindex++)
		//	if (form.elements[formindex].name == fieldname)
		//		form.elements[formindex].disabled = (disabled == true) ? true : "";
		if(form[fieldname]){
			var list = form[fieldname];
			var len = list.length;
			for(var i = 0; i < len ; i++){
				list[i].disabled = (disabled == true) ? true : "";
			}
		}else{
			var len = form.length;
			var element = form.elements;
			for (formindex = 0; formindex < len; formindex++)
				if (element[formindex].name == fieldname)
					element[formindex].disabled = (disabled == true) ? true : "";
		}
	}

	//This function is deprecated, use getCheckboxValues instead. 
	function getCheckValues(form, fieldname) {
		var a = new Array();
		var len = form.length;
		for (formindex = 0; formindex < len; formindex++)
			if (form.elements[formindex].name == fieldname && form.elements[formindex].checked)
				push(a, form.elements[formindex].value);
		return a;
	}
	
	function getCheckboxValues(fieldname, document, form) {
		if (isNavigatorFirefox() || isNavigatorNetscape()) {
			return getCheckValues(form, fieldname);
		}
		var a = new Array();
		var selectcontrols = getElementById(fieldname, document);
		if (selectcontrols != null) {
			var len = selectcontrols.length;
			if (!(len > 0)) { //len is undefined
				return getCheckValues(form, fieldname);
			}
			for (selectindex = 0; selectindex < len; selectindex++)
				if (selectcontrols[selectindex].checked)
					push(a, selectcontrols[selectindex].value);
		}
		return a;
	}

	function setCheckValue(form, fieldname, value) {
		var len = form.length;
		for (formindex = 0; formindex < len; formindex++)
			if (form.elements[formindex].name == fieldname && form.elements[formindex].value ==value)
				if (form.elements[formindex].checked != true)
					form.elements[formindex].checked = true;
		//if(document[form][fieldname]){
		//	var list = document[form][fieldname];
		//	var len = list.length;
		//	for(var i = 0; i < len ; i++){
		//		if(list[i].value == value){
		//			if(list[i].checked != true){
		//				list[i].checked = true;
		//			}
		//		}	
		//	}
		//}else{
		//	var len = form.length;
		//	var element = document[form][elements];
		//	for (formindex = 0; formindex < len; formindex++)
		//		if (element[formindex].name == fieldname && element[formindex].value ==value)
		//			if (element[formindex].checked != true)
		//				element[formindex].checked = true;
		//}
	}

	function resetCheckValue(form, fieldname, value) {
		var len = form.length;
		for (formindex = 0; formindex < len; formindex++)
			if (form.elements[formindex].name == fieldname && form.elements[formindex].value ==value)
				if (form.elements[formindex].checked == true)
					form.elements[formindex].checked = false;
	}
	
	function getRadioValue(form, fieldname) {
		//for (formindex = 0; formindex < form.length; formindex++)
		//	if (form.elements[formindex].name == fieldname && form.elements[formindex].checked)
		//		return form.elements[formindex].value;
		if(form[fieldname]){
			var list = form[fieldname];
			if (list.checked) {
				return list.value;
			}
			var len = list.length;
			for(var i = 0;i< len ;i++){
				if(list[i].checked){
					return list[i].value;
				}
			}
		}else{
			var len = form.length;
			var element = form.elements;
			for (formindex = 0; formindex < len; formindex++)
				if (element[formindex].name == fieldname && element[formindex].checked)
					return element[formindex].value;
		}
		return null;
	}
	
	function getSelectValue(form, fieldname) {
		selectctrl = getControl(form, fieldname);
		return selectctrl[selectctrl.selectedIndex].value;
	}
	
	function getSelectText(form, fieldname) {
		selectctrl = getControl(form, fieldname);
		return selectctrl[selectctrl.selectedIndex].text;
	}

	function getControl(form, fieldname) {
		//for (formindex = 0; formindex < form.length; formindex++)
		//	if (form.elements[formindex].name == fieldname)
		//		return form.elements[formindex];
		//return null;
		if(form[fieldname]){
			return form[fieldname];
		}else{
			var len = form.length;
			var element = form.elements;
			for (formindex = 0; formindex < len; formindex++)
			if (element[formindex].name == fieldname)
				return element[formindex];
			return null;
		}
	}

	
//		changeOptions(document.agform.testselect, );
//		table = getElementById("maintable", document);
//		if (state == 0) {
//			state = 1;
//			hideRows(table, [3,4,5,6,7,8]);
//		}
//		else {
//			state = 0;
//			showRows(table, [3,4,5,6,7,8]);
//		}
	
	function getInputHTML(type, name, value, values, event) {
		s = '<input type="' + type + '" name="';
		s = s + name;
		s = s + '" value="';
		s = s + value;
		s = s + '"';
		found = false;
		for (valindex = 0; valindex < values.length; valindex++)
			if (values[valindex] == value)
				found = true;
		if (found == true)
			s = s + ' checked="checked"';
		if (event) {
			s = s + " " + event;
		}
		s = s + ">";
		return s;
	}

	function getCheckHTML(name, value, values, event) {
		return getInputHTML('checkbox', name, value, values, event);
	}
	
	function getRadioHTML(name, value, values, event) {
		return getInputHTML('radio', name, value, values, event);
	}
	
	function getInputHTMLFull(type, name, checkedvalues, event, texts, values) {
		var s = "";
		for (i = 0; i < texts.length; i++) {
			s += getInputHTML(type, name, values[i], checkedvalues, event);
			s += texts[i];
			if (i < texts.length-1) {
				s += '<br>';
			}
		}
		return s;
	}
	
	function getCheckHTMLFull(name, checkedvalues, event, texts, values) {
		return getInputHTMLFull('checkbox', name, checkedvalues, event, texts, values);
	}
	
	function getRadioHTMLFull(name, checkedvalues, event, texts, values) {
		return getInputHTMLFull('radio', name, checkedvalues, event, texts, values);
	}
	
	function getElementById(name, doc) {
		//Detect IE5.5+
		if (isNavigatorMSIE()){
			if (doc.all)
				return doc.all[name];
			if (doc.getElementById)
				return doc.getElementById(name);
		}
		//firefox
		if(isNavigatorFirefox()){
			var i = 0;
			var j = 0;
			if (doc instanceof HTMLDocument){
				if(doc.getElementById(name)!= null){
					return doc.getElementById(name);
				}else{
					for(i = 0;i < doc.forms.length;i++){
						var elements = doc.forms[i].elements;
						for(j = 0;j < doc.forms[i].elements.length; j++){
							if(elements[j].name == name){
								return elements[j];
							}
						}
					}
				}
			}else{
				if(document.getElementById(name)!= null){
					return document.getElementById(name);
				}else
				var doc_els = doc.elements;
				for(j = 0; j < doc.elements.length; j++){
					if(doc_els[j].name == name || doc_els[j].id == name){
						return doc_els[j];
					}
				}
			}
		}
		//detect Netscape 4.7+
		if (isNavigatorNetscape()){
			//
		}
		//Opera
		if(isNavigatorOpera()){
			if (doc.all || doc.all != null)
				return doc.all[name];
			if (doc.getElementById)
				return doc.getElementById(name);
		}
		
	}
	
	function hideRows (table, rowIndices) {
	   if (table && table.rows) {
	     for (var rowindex = 0; rowindex < rowIndices.length; rowindex++)
	       table.rows[rowIndices[rowindex]].style.display = 'none';
	   }
	}

	function hideRow(table, rowIndex) {
       table.rows[rowIndex].style.display = 'none';
	}

	function showRow(table, rowIndex) {
       table.rows[rowIndex].style.display = '';
	}

	function showRows (table, rowIndices) {
	   if (table && table.rows) {
	     for (var rowindex = 0; rowindex < rowIndices.length; rowindex++)
	       table.rows[rowIndices[rowindex]].style.display = '';
	   }
	}
	
	function selectArray(allopts, fk) {
		var res_array = new Array();
		var res_index = 0;
		var allopts_length = allopts.length;
		for (var alloptsindex = 0; alloptsindex < allopts_length; alloptsindex++) {
			foundopt = false;
			if (allopts[alloptsindex].length > 2) {
				optfk = allopts[alloptsindex][2];
				found = false;
				for (indexjsa = 0; indexjsa < optfk.length; indexjsa++)
					for (indexksa = 0; indexksa < fk.length; indexksa++)
						if (optfk[indexjsa] == fk[indexksa])
							foundopt = true;
			}
			else
				foundopt = true;
			if (foundopt == true) {
				res_array[res_index] = new Array(allopts[alloptsindex][0], allopts[alloptsindex][1]);
				res_index = res_index + 1;
			}
		}
		return res_array;
	}

	function selectArray2(allopts, fk) {
		res_array = new Array();
		res_index = 0;
		for (alloptsindex = 0; alloptsindex < allopts.length; alloptsindex++) {
			foundopt = false;
			if (allopts[alloptsindex].length > 2) {
				optfk = allopts[alloptsindex][2];
				found = false;
				for (indexjsa = 0; indexjsa < optfk.length; indexjsa++)
						if (optfk[indexjsa] == fk)
							foundopt = true;
			}
			else
				foundopt = true;
			if (foundopt == true) {
				res_array[res_index] = new Array(allopts[alloptsindex][0], allopts[alloptsindex][1]);
				res_index = res_index + 1;
			}
		}
		return res_array;
	}

	function selectArrayByString(allopts, fk) {
		var res_array = new Array();
		var res_index = 0;
		var allopts_length = allopts.length;
		for (var alloptsindex = 0; alloptsindex < allopts_length; alloptsindex++) {
			foundopt = false;
			if (allopts[alloptsindex].length > 2) {
				optfk = allopts[alloptsindex][2];
				found = false;
				if (optfk == fk)
					foundopt = true;
			}
			else
				foundopt = true;
			if (foundopt == true) {
				res_array[res_index] = new Array(allopts[alloptsindex][0], allopts[alloptsindex][1]);
				res_index = res_index + 1;
			}
		}
		return res_array;
	}
	
	function changeSelectOptionsByMap(select, map) {
		opts = getArrayFromMap(map);
		changeSelectOptions(select, opts);
	}
	
	function getArrayFromMap(map) {
		var opts = new Array();
		for (var el in map) {
			push(opts, new Array(el, map[el]));
		}
		return opts;
	}
	
	function changeSelectOptions(select, array) {
		changeSelectOptionsAndSetDefault(select, array, null);
	}
	
	function changeSelectOptionsAndSetDefault(select, array, defaultValue) {
		changeOptionsInSelect(select, array, defaultValue, true);
	}
	
	function changeOptionsInSelect(select, array, defaultValue, rewriteSelectValueWithDefaultValue) {
		var array_length = array.length;
		if (!containsValue(array, defaultValue)) {
			defaultValue = null;
		}
		
		var selectvalue = "";
		
		if (select.options.length > 0 && select.selectedIndex >= 0){
			selectvalue = select.options[select.selectedIndex].value;
		}
		if (rewriteSelectValueWithDefaultValue && defaultValue != null) {
			selectvalue = defaultValue;
		}
		select.length = 0;
		var valueseli = [];
		var selectedValuePresent = false;
		if (!rewriteSelectValueWithDefaultValue) {
			for (var selectindex1 = 0; selectindex1 < array_length; selectindex1++) {
				valueseli = array[selectindex1];
				if (valueseli[0] == selectvalue) {
					selectedValuePresent = true;
				}
			}
		}
		for (var selectindex1 = 0; selectindex1 < array_length; selectindex1++) {
			var bool_selected = false;
			valueseli = array[selectindex1];
			if (valueseli[0] == selectvalue || !rewriteSelectValueWithDefaultValue && !selectedValuePresent && valueseli[0] == defaultValue) {
				bool_selected = true;
			}
			select.options.add(new Option(valueseli[1], valueseli[0], false, bool_selected));
		}
	}
	
	function containsValue(array, value){
		if (value != null) {
			for (var i = 0; i < array.length; i++) {
				if (value == array[i][0]) {
					return true;
				}
			}
		}
		
		return false;
	}
	
	function isInArray(array, value){		
		for(var i =0; i<= array.length; i++){
			if(value == array[i]){
				return true;
			}
		}
		return false;
	}
	
	function getRowById(table, rowid) {
	   if (table && table.rows) {
	     for (var rowindex = 0; rowindex < table.rows.length; rowindex++)
	     	if (table.rows[rowindex].id == rowid)
	     		return rowindex;
	   }
	   return null;
	}
	
	function isRowVisible(tableId, rowId) {
		var table = getElementById(tableId, document);
		return table.rows[getRowById(table, rowId)].style.display != 'none';
	}

	function changeRadio(form, radio, array) {
		reset = false;
		for (i = 0; i < form.elements.length; i++){
			if (form.elements[i].name == radio){
				cont = true;
				for (j = 0; j < array.length; j++){
					if (form.elements[i].value == array[j][0]){
						cont = false;
						break;
					}
				}
				if (form.elements[i].checked && cont){
					reset = true;
				}
				form.elements[i].disabled = cont;
			}
		}
		if (reset){
			for (i = 0; i < form.elements.length; i++){
				if (form.elements[i].name == radio){
					if (!form.elements[i].disabled){
						form.elements[i].checked = true;
						break;
					}
				}
			}
		}
	}
	function getRowById(table, rowid) {
	   if (table && table.rows) {
	     for (var rowindex = 0; rowindex < table.rows.length; rowindex++)
	     	if (table.rows[rowindex].id == rowid)
	     		return rowindex;
	   }
	   return null;
	}
	
	function updateRowView(tableId, rowId, condition) {
		var table = getElementById(tableId, document);
		if (condition) {
			showRow(table, getRowById(table, rowId));
		} else {
			hideRow(table, getRowById(table, rowId));
		}
	}
	
	function updateTableView(table, condition, firstRowName, precedingRowCount, lastRowName, followingRowCount){
		var firstRowIndex = getRowById(table, firstRowName) - precedingRowCount;
		var lastRowIndex = getRowById(table, lastRowName) + followingRowCount;
		for (var i = firstRowIndex; i <= lastRowIndex; i++){
			if (condition) {
				table.rows[i].style.display = '';
			} else {
				table.rows[i].style.display = 'none';
			}
		}
	}

	function getSelCtrlValue(name, form){
		controlselect = getControl(form, name);
		if (controlselect.length == 0) return "";
		if (controlselect.selectedIndex == -1) {
			// need patch this bug
			for (selindex = 0; selindex < controlselect.options.length; selindex++) {
				if (controlselect.options[selindex] == getElementById(name, document).value) {
					controlselect.selectedIndex = selindex;
					return controlselect.options[controlselect.selectedIndex].value
				}
			}
			controlselect.selectedIndex = 0;
			return getElementById(name, document).value;
		}
		return controlselect.options[controlselect.selectedIndex].value;
	}
	
	function setSelValue(name, form, value) {
		controlselect = getControl(form, name);
		for (selindex = 0; selindex < controlselect.options.length; selindex++) {
			if (controlselect.options[selindex].value == value) {
				controlselect.selectedIndex = selindex;
			}
		}
	}
	
	function deleteSelectOptionsByIndex(selectControl, idx) {
		if (navigator_type == -1){
			isNavigatorMSIE();
			isNavigatorOpera();
			isNavigatorFirefox();
		}
		if (navigator_type == 0 || navigator_type == 2){
			selectControl.options.remove(idx);
		}
		if (navigator_type == 1){
			selectControl.remove(idx);	
		}
	}
	
	function deleteSelOptionsByValue(selectControl, val) {
		var selectControl_length = selectControl.length;
		for (var i = 0; i < selectControl_length; i++) {
			if (selectControl.options[i].value == val) {
				deleteSelectOptionsByIndex(selectControl, i);
				selectControl.value;
				return;
			}
		}
	}
	
	function isNavigatorMSIE() {
		if(navigator_type == -1){
			navigator_type = navigator.appVersion.indexOf("MSIE") != -1? 0: -1;
								
		}
		return navigator_type == 0;
	}

	function isNavigatorOpera() {
		if(navigator_type == -1){
			if(navigator.userAgent.indexOf("Opera") != -1){
				var versionindex=navigator.userAgent.indexOf("Opera") + 6;
				if (parseInt(navigator.userAgent.charAt(versionindex)) >= 8) {
					navigator_type = 2;
				}
			}	
		}
		return navigator_type == 2;
	}
	
	function isNavigatorFirefox() {
		if (navigator_type == -1){
			if(navigator.userAgent.indexOf("Firefox") != -1){
				var versionindex=navigator.userAgent.indexOf("Firefox") + 8;
				if (parseInt(navigator.userAgent.charAt(versionindex)) >= 1) {
					navigator_type = 1;
				}
			}	
		}
		return navigator_type == 1;
	}

	function isNavigatorNetscape() {
		if(navigator_type == -1){
			if (navigator.appName=="Netscape" && parseFloat(navigator.appVersion) >= 4.7){
				navigator_type = 3;
			}	
		}		
		return navigator_type == 3;
	}
	
	function findElement(doc, name) {
		var element = '' + getElementById(name, doc);
		return element != "undefined";
	}

	function getRowsArray(tableobject, startid, endid) {
		var startrownum = getRowById(tableobject, startid);
		var endrownum = getRowById(tableobject, endid);
		var rowsarray = new Array();
		for (rowidx = startrownum; rowidx <= endrownum; rowidx++) {
			push(rowsarray, rowidx);
		}
		return rowsarray;
	}
	
	function clearSelect(sel){
		while (sel.childNodes.length) {
    		if (sel.firstChild.tagName == 'OPTGROUP') {
        		while (sel.firstChild.childNodes.length) {
            		sel.firstChild.removeChild(sel.firstChild.firstChild);
        		}
    		}
    		sel.removeChild(sel.firstChild);
		}
	}
	
	function prepareCheckBoxes(name, checkedValues, opts, event) {
		var result = "";
		for (var i = 0; i < opts.length; i++) {
			result += getCheckHTML(name, opts[i][0], checkedValues, event);
			result += opts[i][1];
			if (i < opts.length - 1) {
				result += "<br>";
			}
		}
		return result;
	}
	
	function dictList2opts(list) {
		var opts = new Array();
		for (var i = 0; i < list.length; i++) {
			push(opts, new Array(list[i].code, list[i].title));
		}
		return opts;
	}
	
	function addAction2Event(event, action) {
		var result = action+';';
		if (event) {
			var text = event+'';
			result = text.substring(text.indexOf('{')+1, text.indexOf('}'))+ ' ' + action + ';';
		}
		return result;
	}
	
	Array.prototype.contains = function ( needle ) {
		for (i in this) {
	       	if (this[i] == needle)
	       		return true;
	   		}
		return false;
	}

	