<?php
require("../../inc/lib.inc");
$Debug = 0;
$language = $lan;
$tmp1 = str_replace('.','_',$oidStr);
$id = 'ID_' . $sysId . '_' . $tmp1 . '_' . $order . '_ist' . $instanceNo;
$newId = "New".$id;
$inputID = 'Input'.$id;
$saveId = 'Save'.$id;


function getLevelWhere($objIdStr)
{
	$levelArr=explode('.',$objIdStr);
	for($j=0;$j<sizeof($levelArr);$j++){
		$levelNo=$j+1;
		${"level_$levelNo"}=$levelArr[$j];
		if($Debug) echo "<BR>levelArr[$j]={$levelArr[$j]}";
		if($j == 0){
			$levelWhere ="level_$levelNo='${"level_$levelNo"}'";
		}else{
			$levelWhere .=" AND level_$levelNo='${"level_$levelNo"}'";
		}
	}
	return($levelWhere);
}

function omcStrFill($string,$defLen,$fillWay='high',$fillChar='0'){
	if(strlen($string) <= $defLen){
		$fillLen=$defLen - strlen($string);
		for($i=0;$i<$fillLen;$i++){
			if($fillWay == 'low'){
				$string = $string.$fillChar;
			}else{
				$string = $fillChar.$string;
			}
		}
		return($string);
	}else{
		$errorInfo = "Error in omcStrFill:the defLen < lengh of string!!\\ndefLen=$defLen and string=$string!!";
		echo "<script language='javascript'>";  
		
		echo "window.alert(\"$errorInfo\");";	
		echo "history.go(-1)";
		echo "</script>";						
		exit();
		
		echo "<br>Error in omcStrFill : the defLen < lengh of string!!";
		echo "<br>defLen=$defLen and string=$string!!";
		exit();
	}
}

function getInnerValue($sysId,$oidStr,$order,$instanceNo=0,$otherWhereStr='',$showStr,$inputValueType)
{
	global $language,$Debug,$inputID;
	$sysIdArr	= explode('_',$sysId);
	$sysTypeNo	= $sysIdArr[0];
	$sysNo		= $sysIdArr[1];
	$subSysNo	= $sysIdArr[2];	
	$objDb		= 'OBJ_'.$sysTypeNo;
	$paramTable = 'param_'.$sysNo;
	
	$sysConfTable = 'OMC_PUB.sysConf';	
	$pubDb			='OMC_PUB';
	$paramConfTable	= $objDb.".paramConf";
	
	$maxLevelNum	= 10;
	$nInteger = 2;
	$nOctStr = 4;
	
	
	
	
	if(strlen($showStr)>0){
		echo "<input id=\"$inputID\" type=\"text\" class=\"text\" value=\"\" onchange=\"$chechFnc\">";
		return "";
	}
		
	if($Debug) echo "<br>$paramConfTable<br>";
	//----------------------
	//选择语言版本
	if($language == 'eng'){
		$objNameField=name_2;
		$objSetField=setTemplate_2 ; //语种2
	}else{	
		$objNameField=name_1;
		$objSetField=setTemplate_1 ; //语种1(默认语种)
	}
		
	if($Debug) echo "<br>getValue = $getValue";

	$objWhereStr = getLevelWhere($oidStr);
	
	$objSql = "SELECT $objNameField,$objSetField,valueType,length,minValue,maxValue FROM $paramConfTable WHERE $objWhereStr";
	$objResult	= mysqli_query($pubConn ,$objSql);
	$objRows	= @mysqli_fetch_array($objResult);
	$totalLen	= $objRows[length]*2;
	$objName	= $objRows[$objNameField];
	$setTemplate = $objRows[$objSetField];
	$valueType	= $objRows[valueType];
	$minValue	= $objRows[minValue];
	$maxValue	= $objRows[maxValue];
 
 	
	$paramSql = " SELECT initValue FROM $paramTable WHERE $objWhereStr $otherWhereStr AND instanceNo = '$instanceNo' ";
  	$v_Result = mysqli_query($pubConn,$paramSql);				
	$v_Row = mysqli_fetch_array($v_Result);
	$getValue = $v_Row[0];
		
		
	//explode by '[remark]'
	$remarkArr = explode('[remark]',$setTemplate);
	$remark  = $remarkArr[1];	
	//explode by '[unit]'
	$unitArr = explode('[unit]',$remarkArr[0]);
	
	//explode by '[u]'				
	$tlvArr = explode('[u]',$unitArr[$order]);

	//Unit Name
	if($Debug) echo "$tlvArr[0] : $tlvArr[1]";
	//explode by '-'
	$offsetArr = explode('-',$tlvArr[1]);
	$bgnOffsetArr = explode('.',$offsetArr[0]);
	$bgnByte = $bgnOffsetArr[0];
	$bgnBit  = $bgnOffsetArr[1];
	$endOffsetArr = explode('.',$offsetArr[1]);
	$endByte = $endOffsetArr[0];
	$endBit  = $endOffsetArr[1];
	$byteLen = $endByte - $bgnByte + 1;
	$byteValue = substr($getValue,$bgnByte*2,$byteLen*2);
	//--><-//$byteValue = strrev($byteValue);
		

	if($Debug) echo "<br>byteValue = $byteValue";
	$bitValue = '';
	if($bgnBit > 0 ||$endBit < 7)
	{
		if($Debug) echo "<br>$bgnBit > 0 ||$endBit < 7";
		$bitValue = HexDec($byteValue);
		$bitValue = DecBin($bitValue);
		if($Debug) echo "<br>bitValue = $bitValue";
		$bitLen   = $byteLen*8;//1 byte = 8 bit
		$bitValue = omcStrFill($bitValue,$bitLen,'high','0');
		if($Debug) echo "<br>omcStrFill($bitValue,$bitLen,'high','0')";
		
		$newBitValue='';
		for($byteNum=$bgnByte;$byteNum<=$endByte;$byteNum++){
			$tmpBitValue=substr($bitValue,($byteNum-$bgnByte)*8,8);
			if($DEBUG) echo "<br>$tmpBitValue=substr($bitValue,($byteNum-$bgnByte)*8,8)";
			$tmpBitValue = strrev($tmpBitValue);
			if($DEBUG) echo "<br>$tmpBitValue = strrev($tmpBitValue)";
			if($DEBUG) echo "<br>bitValue = $bitValue";
			$newBitValue=$newBitValue.$tmpBitValue;
		}
		
		$catBitLen = $endByte*8+$endBit - ($bgnByte*8+$bgnBit) + 1; //1 byte = 8 bit
		if($Debug) echo "<br>bitValue = substr($newBitValue,$bgnBit,$catBitLen)";
		$bitValue = substr($newBitValue,$bgnBit,$catBitLen);
		$bitValue = strrev($bitValue);
		if($Debug) echo "<br>bitValue = $bitValue";
	}

	//explode by '[v]'
	$valueArr = explode('[v]',$tlvArr[2]);
	//$operType = chop($valueArr[0]);
	$typeAddTitleArr = explode('[t]',$valueArr[0]);
	$operType = chop($typeAddTitleArr[0]);
	$titleStr = chop($typeAddTitleArr[1]);
	$valueArr[1] = chop($valueArr[1]);
	if($Debug) echo "<br>operType = $operType";
	switch($operType){
		case 'input':
		{
			//explode by '-'
			$defArr = explode('-',$valueArr[1]);
			switch($defArr[0]){
				case 'toDec':
					if(strlen($bitValue) > 0){
						$inputValue = BinDec($bitValue);
					}else{
						$inputValue = HexDec($byteValue);
					} 
					break;
				case 'keepDec':
					$inputValue = $byteValue;
					break;
				case 'toHex':
					echo "<br>Error:toHex";
					break;
				case 'keepHex':
					$inputValue = $byteValue;
					break;
				case 'toAscii':
					$charValue = "";
					if($bgnBit > 0 ||$endBit < 7){
						echo "<br>Error:toAscii";
						exit(1);
					}else{
						$tmpLen=strlen($byteValue);
						for($charCount=0;$charCount<$tmpLen;$charCount++){
							$unitByte = substr($byteValue,$charCount,2);
							$unitChar = chr(HexDec($unitByte)); // hex -> ascii
							if($Debug) echo "<br>unitChar=$unitChar";
							$charValue .= $unitChar;
							$charCount++;
						}
						$charValue = trim($charValue);
						$inputValue = $charValue;
					}
					break;
				default: 
					echo "<br>Error:valueType=$defArr[0]";
					break;
			}
			if($Debug) echo "<br>inputValue = $inputValue";
			switch($defArr[1]){
				case 'high':
					switch($defArr[2]){
						case '0':
							if($defArr[0] == 'toHex' || $defArr[0] == 'keepHex'){
								//$inputValue = str_replace('0','',$inputValue);
							}else{
								$inputValue = $inputValue - 0;
							}
							break;
						case 'E':
							echo "Error:high fill E";
							break;
						default: break;
					}
					break;
				case 'low':
					if ("toAscii" != $defArr[0]) {
						switch($defArr[2]){
							case '0':
								$inputValue = str_replace('00','',$inputValue);
								break;
							case 'E':
								$inputValue = str_replace('E','',$inputValue);
								break;
							case 'F':   //modify zane 20051004
								$inputValue = str_replace('F','',$inputValue);
								break;	
							default: break;
						}
					}
					break;
				default: break;
			}
			if($Debug) echo "<br>$valueType == $nOctStr";
			if($def_flag){
				$inputValue	= $defaultVaule;
			}			
			//echo "valueType:$valueType<br>";	
			//if($valueType == $nOctStr)
			//echo "getInner----inputValueType:$inputValueType<br>";
			//$inputValueType=$inputValueType+0;
			if($valueType==2)
			{
				$chechFnc = "checkInput(this,16)";

				if($defArr[0] == 'toAscii')
				{
					$inputLen = $byteLen;
					$chechFnc = "";
				}
				elseif($defArr[0] == 'toHex' || $defArr[0] == 'keepHex')
				{
					$inputLen = $byteLen *2;
				}
				else
				{
					$inputLen = $byteLen *3;
				}
				$inputSize = $inputLen + 2;
			}
			else
			{
				$chechFnc = "checkInput(this,10)";
			}
			
			//=============input type=====================
			$inputValueType=$inputValueType+0;
			//echo "getInner----inputValueType:$inputValueType<br>";
			//===only can input the dec num====
			if($inputValueType==1)
			{
				if($valueType == 4)
				{
					$maxValue=hexdec($maxValue);
					$minValue=hexdec($minValue);
				}
				else
				{
					$maxValue=$maxValue+0;
					$minValue=$minValue+0;
				}
				if($order>1)
					$chechFnc = "checkInput(this,10)";
				else
					$chechFnc = "checkInput(this,10,$maxValue,$minValue)";
			}
			//===only can input the hex num====
			else if($inputValueType==2)
			{
				$chechFnc = "checkInput(this,16)";
			}
			//====can input all character
			else if($inputValueType==3)
			{
				$chechFnc = "";
			}
			//=====can put only dec num but include blank
			else if($inputValueType==4)
			{
				$chechFnc = "checkInput_patch(this)";
			}
			
			
			
			echo "<input id=\"$inputID\" type=\"text\" class=\"text\" value=\"$inputValue\" size=\"$inputSize\" maxLength =\"$inputLen\" onchange=\"$chechFnc\">";		
			return $inputValue;
			break;
		}
		case 'select':
		{
			if($valueType == $nOctStr){
				if($bitValue != ''){
					$selectValue = BinDec($bitValue);
				}else{
					$selectValue = HexDec($byteValue);
				}
			}else{
				$selectValue=$byteValue;
			}
			if($def_flag){
				$selectValue	= $defaultVaule;
			}					
	
			if($Debug) echo "<br>bitValue = $bitValue";
			if($Debug) echo "<br>selectValue = $selectValue";
			if($Debug) echo "<br>$valueType =?= $nOctStr(nOctStr)";
			echo "<select id=\"$inputID\" size=\"1\">";
			$isSelected = 0;
			for($j=1;$j<sizeof($valueArr);$j++){
				//explode by '[opt]'
				$defArr = explode('[opt]',$valueArr[$j]);
				if(sizeof($defArr) < 2){
					echo "<option value=\"$selectValue\" selected>Reserved Value</option>";
					$selectshwo = "Reserved Value";
					break;
				}elseif($defArr[0] ==  $selectValue){
					echo "<option value=\"$defArr[0]\" selected>$defArr[1]</option>";
					$selectshwo ="$selectValue";
					$isSelected = 1;
				}else{
					echo "<option value=\"$defArr[0]\">$defArr[1]</option>";
				}
			}
			
			if($isSelected ==0 && $j == sizeof($valueArr)){
				echo "<option value=\"$selectValue\" selected>Undefined Value</option>";
				$selectshwo = "Undefined Value";			
			}
			echo "</select>";
			if($readonly){
				echo "$selectshwo";
			}	
			return $selectshwo;														
			break;
		}
		default: echo "<br>Error:operType =|$operType|";
			break;
	}//end of switch(..)
}//end getInnerValue

function getParamValue(&$titleStr,&$IniEquRead,$sysId,$oidStr,$order,$instanceNo=0,$otherWhereStr='',$inputValueType)
{
	global $language;
	//$Debug=1;
	$sysIdArr	= explode('_',$sysId);
	$sysTypeNo	= $sysIdArr[0];
	$sysNo		= $sysIdArr[1];
	$subSysNo	= $sysIdArr[2];	
	$objDb		= 'OBJ_'.$sysTypeNo;
	$paramTable = 'param_'.$sysNo;
	
	$sysConfTable = 'OMC_PUB.sysConf';	
	$pubDb			='OMC_PUB';
	$paramConfTable	= $objDb.".paramConf";
	
	$maxLevelNum	= 10;
	$nInteger = 2;
	$nOctStr = 4;
	
	
	
	if($language == 'eng'){
		$objNameField=name_2;
		$objSetField=setTemplate_2 ; //语种2
	}else{	
		$objNameField=name_1;
		$objSetField=setTemplate_1 ; //语种1(默认语种)
	}

	$objWhereStr = getLevelWhere($oidStr);
	
	$objSql = "SELECT $objNameField,$objSetField,valueType,length,minValue,maxValue FROM $paramConfTable WHERE $objWhereStr";
	$objResult	= mysqli_query($pubConn ,$objSql);
	$objRows	= @mysqli_fetch_array($objResult);
	$totalLen	= $objRows[length]*2;
	$objName	= $objRows[$objNameField];
	$setTemplate = $objRows[$objSetField];
	$valueType	= $objRows[valueType];
	$minValue	= $objRows[minValue];
	$maxValue	= $objRows[maxValue];
		
	//explode by '[remark]'
	$remarkArr = explode('[remark]',$setTemplate);
	$remark  = $remarkArr[1];	
	//explode by '[unit]'
	$unitArr = explode('[unit]',$remarkArr[0]);
	
	//explode by '[u]'				
	$tlvArr = explode('[u]',$unitArr[$order]);

	//Unit Name
	if($Debug) echo "$tlvArr[0] : $tlvArr[1]";
	//explode by '-'
	$offsetArr = explode('-',$tlvArr[1]);
	$bgnOffsetArr = explode('.',$offsetArr[0]);
	$bgnByte = $bgnOffsetArr[0];
	$bgnBit  = $bgnOffsetArr[1];
	$endOffsetArr = explode('.',$offsetArr[1]);
	$endByte = $endOffsetArr[0];
	$endBit  = $endOffsetArr[1];
	$byteLen = $endByte - $bgnByte + 1;
	
	$paramSql = " SELECT initValue,readValue FROM $paramTable WHERE $objWhereStr $otherWhereStr AND instanceNo = '$instanceNo' ";
  	$v_Result = mysqli_query($pubConn,$paramSql);				
	$v_Row = mysqli_fetch_array($v_Result);
	$initGetValue = $v_Row[0];
	$readGetValue = $v_Row[1];

	$initByteValue = substr($initGetValue,$bgnByte*2,$byteLen*2);
	$readByteValue = substr($readGetValue,$bgnByte*2,$byteLen*2);
	if($Debug) echo "<br>init:$initByteValue<br>read:$readByteValue";
	$readBitValue = '';
	if($bgnBit > 0 ||$endBit < 7)
	{
		$bitLen   = $byteLen*8;//1 byte = 8 bit
		$readBitValue = DecBin(HexDec($readByteValue));
		$readBitValue = omcStrFill($readBitValue,$bitLen,'high','0');
		
		$newBitValue='';
		for($byteNum=$bgnByte;$byteNum<=$endByte;$byteNum++){
			$tmpBitValue=substr($readBitValue,($byteNum-$bgnByte)*8,8);
			if($DEBUG) echo "<br>$tmpBitValue=substr($readBitValue,($byteNum-$bgnByte)*8,8)";
			$tmpBitValue = strrev($tmpBitValue);
			if($DEBUG) echo "<br>$tmpBitValue = strrev($tmpBitValue)";
			if($DEBUG) echo "<br>bitValue = $bitValue";
			$newBitValue=$newBitValue.$tmpBitValue;
		}
		
		
		$catBitLen = $endByte*8+$endBit - ($bgnByte*8+$bgnBit) + 1; //1 byte = 8 bit
		if($Debug) echo "<br>readBitValue = substr($newBitValue,$bgnBit,$catBitLen)";
		$readBitValue = substr($newBitValue,$bgnBit,$catBitLen);
		$readBitValue = strrev($readBitValue);
		if($Debug) echo "<br>readBitValue = $readBitValue";
	}
	$initBitValue = '';
	if($bgnBit > 0 ||$endBit < 7)
	{
		$bitLen   = $byteLen*8;//1 byte = 8 bit
		$initBitValue = DecBin(HexDec($initByteValue));
		$initBitValue = omcStrFill($initBitValue,$bitLen,'high','0');
		
		$newBitValue='';
		for($byteNum=$bgnByte;$byteNum<=$endByte;$byteNum++){
			$tmpBitValue=substr($initBitValue,($byteNum-$bgnByte)*8,8);
			if($DEBUG) echo "<br>$tmpBitValue=substr($initBitValue,($byteNum-$bgnByte)*8,8)";
			$tmpBitValue = strrev($tmpBitValue);
			if($DEBUG) echo "<br>$tmpBitValue = strrev($tmpBitValue)";
			if($DEBUG) echo "<br>bitValue = $bitValue";
			$newBitValue=$newBitValue.$tmpBitValue;
		}
		
		$catBitLen = $endByte*8+$endBit - ($bgnByte*8+$bgnBit) + 1; //1 byte = 8 bit
		if($Debug) echo "<br>initBitValue = substr($initBitValue,$bgnBit,$catBitLen)";
		$initBitValue = substr($newBitValue,$bgnBit,$catBitLen);
		$initBitValue = strrev($initBitValue);
		if($Debug) echo "<br>initBitValue = $initBitValue";
	}
	$IniEquRead = false;
	if(strlen($initBitValue)>0)
	{
		if($initBitValue==$readBitValue)
			$IniEquRead = true;
	}
	else
	{
		if($initByteValue == $readByteValue)
			$IniEquRead = true;
	}
	//explode by '[v]'
	$valueArr = explode('[v]',$tlvArr[2]);
	$typeAddTitleArr = explode('[t]',$valueArr[0]);
	$operType = chop($typeAddTitleArr[0]);
	$titleStr = chop($typeAddTitleArr[1]);
	$valueArr[1] = chop($valueArr[1]);

	if($Debug) echo "<br>operType = $operType";
	switch($operType)
	{
		case 'input':
		{
			//explode by '-'
			$defArr = explode('-',$valueArr[1]);
			if($Debug) echo "<br>defArr = $defArr[0],$defArr[1],$defArr[2]";
			switch($defArr[0])
			{
				case 'toDec':
					if(strlen($initBitValue) > 0){
						$initParsedValue = BinDec($initBitValue);
					}else{
						$initParsedValue = HexDec($initByteValue);
					} 
					break;
				case 'keepDec':
					$initParsedValue = $initByteValue;
					break;
				case 'toHex':
					echo "<br>Error:toHex";
					break;
				case 'keepHex':
					$initParsedValue = $initByteValue;
					break;
				case 'toAscii':
					$charValue = "";
					if($bgnBit > 0 ||$endBit < 7)
					{
						echo "<br>Error:toAscii";
						exit(1);
					}
					else
					{
						$tmpLen=strlen($initByteValue);
						for($charCount=0;$charCount<$tmpLen;$charCount++)
						{
							$unitByte = substr($initByteValue,$charCount,2);
							$unitChar = chr(HexDec($unitByte)); // hex -> ascii
							if($Debug) echo "<br>unitChar=$unitChar";
							$charValue .= $unitChar;
							$charCount++;
						}
						$charValue = trim($charValue);
						$initParsedValue = $charValue;
					}
					break;
				default: 
					echo "<br>Error:valueType=$defArr[0]";
					break;
			}
			if($Debug) echo "<br>initParsedValue = $initParsedValue";
			switch($defArr[1])
			{
				case 'high':
					switch($defArr[2])
					{
						case '0':
							if($defArr[0] == 'toHex' || $defArr[0] == 'keepHex'){
								//$initParsedValue = str_replace('0','',$initParsedValue);
							}else{
								$initParsedValue = $initParsedValue - 0;
							}
							break;
						case 'E':
							echo "Error:high fill E";
							break;
						default: break;
					}
					break;
				case 'low':
					if ("toAscii" != $defArr[0]) 
					{
						switch($defArr[2]){
							case '0':
								$initParsedValue = str_replace('00','',$initParsedValue);
								break;
							case 'E':
								$initParsedValue = str_replace('E','',$initParsedValue);
								break;
							case 'F':   //modify zane 20051004
								$initParsedValue = str_replace('F','',$initParsedValue);
								break;	
							default: break;
						}
					}
					break;
				default: break;
			}
			$returnValue = $initParsedValue;
			break;
		}
		case 'select':
		{
			if($valueType == $nOctStr){
				if($initBitValue != ''){
					$selectValue = BinDec($initBitValue);
				}else{
					$selectValue = HexDec($initByteValue);
				}
			}else{
				$selectValue=$initByteValue;
			}
			$isSelected = 0;
			for($j=1;$j<sizeof($valueArr);$j++){
				//explode by '[opt]'
				$defArr = explode('[opt]',$valueArr[$j]);
				if(sizeof($defArr) < 2){
					$selectShow = "Reserved Value";
					break;
				}elseif($defArr[0] ==  $selectValue){
					$selectShow =$defArr[1];
					$isSelected = 1;
				}else{
					//echo "<option value=\"$defArr[0]\">$defArr[1]</option>";
				}
			}
			
			if($isSelected ==0 && $j == sizeof($valueArr)){
				$selectShow = "Undefined Value";			
			}
			$returnValue = $selectShow;												
			break;
		}
		default: echo "<br>Error:operType =|$operType|";
			break;
	}//end of switch(..)
	if(strlen($returnValue)==0) $returnValue='--';
	return $returnValue;
}//end getParamValue

function setParamValue($unitValue,$sysId,$oidStr,$order,$instanceNo=0,$otherWhereStr='',$inputValueType)
{
	global $language;
	$Debug=0;
	$sysIdArr	= explode('_',$sysId);
	$sysTypeNo	= $sysIdArr[0];
	$sysNo		= $sysIdArr[1];
	$subSysNo	= $sysIdArr[2];	
	$objDb		= 'OBJ_'.$sysTypeNo;
	$paramTable = 'param_'.$sysNo;
	
	$sysConfTable = 'OMC_PUB.sysConf';	
	$pubDb			='OMC_PUB';
	$paramConfTable	= $objDb.".paramConf";
	
	$maxLevelNum	= 10;
	$nInteger = 2;
	$nOctStr = 4;
	
	
	
	if($Debug) echo "===================<br>unitValue:$unitValue<br>";
	//----------------------
	//选择语言版本
	if($language == 'eng'){
		$objNameField=name_2;
		$objSetField=setTemplate_2 ; //语种2
	}else{	
		$objNameField=name_1;
		$objSetField=setTemplate_1 ; //语种1(默认语种)
	}
		

	$objWhereStr = getLevelWhere($oidStr);
	
	$objSql = "SELECT $objNameField,$objSetField,valueType,length,minValue,maxValue FROM $paramConfTable WHERE $objWhereStr";
	$objResult	= mysqli_query($pubConn ,$objSql);
	$objRows	= @mysqli_fetch_array($objResult);
	$totalLen	= $objRows[length]*2;
	$objName	= $objRows[$objNameField];
	$setTemplate = $objRows[$objSetField];
	$valueType	= $objRows[valueType];
	$minValue	= $objRows[minValue];
	$maxValue	= $objRows[maxValue];
 
 	
	$paramSql = " SELECT initValue FROM $paramTable WHERE $objWhereStr $otherWhereStr AND instanceNo = '$instanceNo' ";
  	$v_Result = mysqli_query($pubConn,$paramSql);				
	$v_Row = mysqli_fetch_array($v_Result);
	$getValue = $v_Row[0];
	if($Debug) echo "<br>getValue = $getValue";
	
		
	//explode by '[remark]'
	$remarkArr = explode('[remark]',$setTemplate);
	$remark  = $remarkArr[1];	
	//explode by '[unit]'
	$unitArr = explode('[unit]',$remarkArr[0]);
	
	//explode by '[u]'				
	$tlvArr = explode('[u]',$unitArr[$order]);

	//Unit Name
	if($Debug) echo "<br>$tlvArr[0] : $tlvArr[1]";
	//explode by '-'
	$offsetArr = explode('-',$tlvArr[1]);
	$bgnOffsetArr = explode('.',$offsetArr[0]);
	$bgnByte = $bgnOffsetArr[0];
	$bgnBit  = $bgnOffsetArr[1];
	$endOffsetArr = explode('.',$offsetArr[1]);
	$endByte = $endOffsetArr[0];
	$endBit  = $endOffsetArr[1];
	$byteLen = $endByte - $bgnByte + 1;
	
	//explode by '[v]'
	$valueArr = explode('[v]',$tlvArr[2]);
	//$operType = chop($valueArr[0]);
	$typeAddTitleArr = explode('[t]',$valueArr[0]);
	$operType = chop($typeAddTitleArr[0]);
	$titleStr = chop($typeAddTitleArr[1]);
	$valueArr[1] = chop($valueArr[1]);

	if($Debug) echo "<br>operType = $operType";
	if($operType == 'select')
	{ //select
		if($valueType == $nOctStr)
			$changeTypeStr = 'toDec-high-0';
		else
			$changeTypeStr = 'keepDec-high-0';
	}
	else
	{
		$changeTypeStr = $valueArr[1];
	}
	$changeTypeArr = explode('-',$changeTypeStr);
	$changeType = $changeTypeArr[0];
	$fillWay	= $changeTypeArr[1];
	$fillChar	= $changeTypeArr[2];

	$setUnitValue = '';
	if($Debug)echo "<br>changeType:$changeType";
	switch($changeType)
	{
		case 'toDec':
			if($bgnBit > 0 ||$endBit < 7)
			{
				$bitLen = $byteLen*8 - $bgnBit - (7 - $endBit) ; //1 BYTE = 8 bit
				$bitValue = DecBin($unitValue);
				if($Debug)echo "<br>bitValue = $bitValue ";
				if($Debug)echo "<br>omcStrFill($bitValue,$bitLen,$fillWay,$fillChar)";
				$bitValue  = omcStrFill($bitValue,$bitLen,$fillWay,$fillChar);
				
				if($bgnByte!=$endByte){	
						if($DEBUG) echo "<br>substr($bitValue,0,1+$endBit)";
						$tmpBitValue=substr($bitValue,0,1+$endBit);
						$tmpOffset=$endByte.'.0-'.$endByte.'.'.$endBit;
						
						if($endBit==7){
							$tmpByteValue=omcStrFill(dechex(bindec($tmpBitValue)),2,$fillWay,$fillChar);
							$getValue = setBitValue($getValue,$tmpOffset,$tmpByteValue);
						}else
							$getValue = setBitValue($getValue,$tmpOffset,$tmpBitValue);
						
						if($DEBUG)echo "<br>$getValue = setBitValue($getValue,$tmpOffset,$tmpBitValue);";
						$newBitValue=$tmpBitValue;
						if($DEBUG) echo "<br>newBitValue=$newBitValue";					
						
						for($byteNum=$endByte-1;$byteNum >= $bgnByte;$byteNum--){
							if($DEBUG) echo "<br>substr($bitValue,($byteNum-($endByte-1))*8+1+$endBit,8)";
							$tmpBitValue=substr($bitValue,($byteNum-($endByte-1))*8+1+$endBit,8);
							
					
							if($byteNum == $bgnByte){
								$tmpOffset=$bgnByte.'.'.$bgnBit.'-'.$bgnByte.'.7';
								if($DEBUG)
									echo "<br>$getValue = setBitValue($getValue,$tmpOffset,$tmpBitValue);";
								if($bgnBit==0){
									$tmpByteValue=omcStrFill(dechex(bindec($tmpBitValue)),2,$fillWay,$fillChar);
									$getValue = setBitValue($getValue,$tmpOffset,$tmpByteValue);
								}else
									$getValue = setBitValue($getValue,$tmpOffset,$tmpBitValue);
							}else{
								$tmpOffset=$byteNum.'.0-'.$bgnByte.'.7';
								$getValue = setBitValue($getValue,$tmpOffset,dechex(bindec($tmpBitValue)));
							}
							
							if($DEBUG) echo "<br>$newBitValue.$tmpBitValue";
							$newBitValue=$newBitValue.$tmpBitValue;
							if($DEBUG) echo "<br>newBitValue=$newBitValue";
						}
						$bitValue=$newBitValue;	
					}
					
				$setUnitValue = $bitValue;
			}
			else
			{
				$setUnitValue = DecHex($unitValue);
				$strLen = $byteLen*2;
				$setUnitValue = omcStrFill($setUnitValue,$strLen,$fillWay,$fillChar);
				if($Debug) echo "<br>omcStrFill($setUnitValue,$strLen,$fillWay,$fillChar)";
			}
			if($Debug) echo "<br>setUnitValue = $setUnitValue";
			break;
		case 'keepHex':
			if($bgnBit > 0 ||$endBit < 7)
			{
				$bitLen = $endBit - $bgnBit +1;
				$bitValue = ($unitValue);
				if($Debug) echo "<br>bitValue = $bitValue ";
				$bitValue  = omcStrFill($bitValue,$bitLen,$fillWay,$fillChar);
				if($Debug) echo "<br>omcStrFill($bitValue,$bitLen,$fillWay,$fillChar)";
				$setUnitValue = $bitValue;
			}
			else
			{
				$setUnitValue = ($unitValue);
				$strLen = $byteLen*2;
				$setUnitValue = omcStrFill($setUnitValue,$strLen,$fillWay,$fillChar);
				if($Debug) echo "<br>omcStrFill($setUnitValue,$strLen,$fillWay,$fillChar)";
			}
			if($Debug) echo "<br>setUnitValue = $setUnitValue";
			break;
		case 'keepDec':
			//echo "<br>Error:keepDec";
			$setUnitValue = $unitValue - 0;
			break;
		case 'toHex':
			echo "<br>Error:toHex";
			break;
		case 'toAscii':
			if($bgnBit > 0 ||$endBit < 7){
				echo "<br>Error:toAscii";
				exit(1);
			}else{
				$tmpLen=strlen($unitValue);
				for($i=0;$i<$tmpLen;$i++){
					$unitChar = substr($unitValue,$i,1);
					$decValue = ord($unitChar); //ascii -> dec
					$setUnitValue .= DecHex($decValue);
					if(strlen($setUnitValue) < 2){
						$setUnitValue = '0'.$setUnitValue;
					}
				}
				$strLen = $byteLen*2;
				$setUnitValue = omcStrFill($setUnitValue,$strLen,$fillWay,$fillChar);
			}
			break;
		default: 
			echo "Error:Unknown valueType";
			break;
	}
	if($Debug) echo "<br>setUnitValue  = $setUnitValue ";
	//--><-//$lastValue = $setUnitValue.$lastValue;

	if($changeType=='toDec'&&($bgnBit > 0 ||$endBit < 7)&&$bgnByte!=$endByte)
		$setValue=$getValue;
	else
		$setValue = setBitValue($getValue,$tlvArr[1],$setUnitValue);
		
	$setValue = strtoupper($setValue);
	$updSql = "UPDATE $paramTable SET initValue = '$setValue'   
			WHERE $objWhereStr $otherWhereStr AND instanceNo = '$instanceNo'";
	if($DEBUG)
		echo "<br>updSql=$updSql";
	mysqli_query($pubConn,$updSql);	
	echo mysqli_error($pubConn);		
}//end setParamValue

//0:    flag
echo $flag;
echo "###";

if($flag=='getVar')//用户点击的是参数
{
    //1:    idName
	echo $newId;
	echo "###";
	
	//2:    innerStr
	$oldValue=getInnerValue($sysId,$oidStr,$order,$instanceNo,$otherWhereStr,$showStr,$inputValueType);
	if(strlen($doingOtherUlr)>0)
	{
    	$doingOtherUlr .= "&oldValue=$oldValue";
    	$doingOtherUlr=urlencode($doingOtherUlr);
    }
	echo "&nbsp;&nbsp;<span id=\"$saveId\" style=\"cursor:pointer\" onclick=\"javascript:getPar('saveVar','$language','$sysId','$oidStr','$order','$instanceNo','$inputID','$doingOtherUlr','$otherWhereStr','$showStr','$inputValueType');\"><font color=\"blue\"><b>&nbsp;SAVE&nbsp;<b></font></span>";
}

if($flag=='saveVar')//用户点击的是右边的‘Save’
{
	
    //1:    idName
	echo $id;
	echo "###";
	
	//2:    innerStr
	setParamValue($setValue,$sysId,$oidStr,$order,$instanceNo,$otherWhereStr,$inputValueType);
	$newValue = getParamValue($titleStr,$IniEquRead,$sysId,$oidStr,$order,$instanceNo,$otherWhereStr,$inputValueType);
	if(strlen($showStr))
	    echo $showStr;
	else
    	echo $newValue;
	echo "###";
	
	//3:    isEqual
	if($IniEquRead||strlen($showStr))	//initValue == readValue
	    echo "1";
	else 
	    echo "0";	
	echo "###";
	
	//4:    doingOtherUlr
	if(strlen($doingOtherUlr)>0)
	{
	    $doingOtherUlr .= "&newValue=$newValue";
	}
	echo $doingOtherUlr;
}
?>


