
var strSeperator = "."; 
var strSeperatorTime = ":"; 
var DF_ENUM	=	1;
var DF_REAL	=	3;
var DF_INT1	=	4;
var DF_INT2	=	5;
var DF_INT4	=	6;
var DF_STR	=	8;
var DF_DATE	=	9;
var DF_LLAT	=	11;	// Int4 ddmmssssf
var DF_LLON	=	12;	// Int4 dddmmssssf
var DF_LSCL	=	13 ;// Int scale
var DF_MEMO	=	14;
var DF_LAT	=	15;// Real8
var DF_LON	=	16;// Real8
var DF_ANG	=	17;// Real8
var DF_TEXT	=	18;	// Long binary array
var DF_BINARY =	19;// Long binary array
var DF_F4_100 =20;	
var err = 0; // Set the error code to a default of zero
if(navigator.appName == "Netscape") 
{
	if (navigator.appVersion < "5") 
	{
		isNav4 = true;
		isNav5 = false;
	}
	else if (navigator.appVersion > "4") 
	{
			isNav4 = false;
			isNav5 = true;
	}
}
else
{
	isIE4 = true;
}

function focusElement( mess, elem )
{
  alert( mess );
  elem.focus();
  return false;
}

function getFieldName( from )
{
  var papa=from.parentNode.parentNode;
  return papa.getElementsByTagName("B")[0].innerHTML;
}


function validateValues( docs )
{
  var inputs = docs.getElementsByTagName("INPUT");
  var err="Wrong value for field \"";
  
  for( var i=0; i<inputs.length; i++ )
  {
    var type=Number($(inputs[i]).attr('AttrType') );
	if( isNaN( type ) )
     	type=0;
    var val = $(inputs[i]).attr('value');//inputs[i].getAttribute( "value" );
    if( !val.length || type==0)
      continue;

    if( type > DF_REAL && type < DF_STR )// int
    {
      var charpos=val.search("[^0-9]");
      if( charpos >= 0 )
        return focusElement(err+getFieldName(inputs[i])+"\"", inputs[i]);
    }
    else if( type==DF_STR )
    {
      var max=parseInt( $(inputs[i]).attr('maxlength') );
      if( !isNaN(max) && val.length > max )
        return focusElement(err+getFieldName(inputs[i])+"\"", inputs[i]);
    }
    else if( type==DF_DATE )
      if( !isDateTimeVal(val))
        return focusElement(err+getFieldName(inputs[i])+"\"", inputs[i]);
  }
  
  return true;
}

function CheckFormats(vObjName, e, vCheck)
{
	var err="Wrong value for field \"";
	
	var type=Number( $(vObjName).attr('AttrType') );
	if( isNaN( type ) )
     	type=0;
    var val =  $(vObjName).attr('value') ;

    if( !val.length || type==null)
		return true;
	else
	{
		if( type > DF_REAL && type < DF_STR )// int
		 	return NumberFormat(vObjName, e, vCheck) ;
		else if( type == DF_STR )
	    {
	      var max=parseInt( $(vObjName).attr('maxlength') );
		    if( !isNaN(max) && val.length > max )
		        return focusElement( err, vNumberName);
			else
				return true;
	    }
		else if( type==DF_DATE )
			return DateFormat(vObjName, e, vCheck) ;
		else if( type==DF_REAL )
			return RealFormat(vObjName, e, vCheck) ;
		else
			return true;
	}
}

function RealFormat(vNumberName, e, NumberCheck) 
{
	var vNumberValue =vNumberName.value;
	var whichCode = (window.Event) ? e.which : e.keyCode;
	var strCheck = '47,48,49,50,51,52,53,54,55,56,57,58,59,95,96,97,98,99,100,101,102,103,104,105';
	if (strCheck.indexOf(whichCode) == -1) 
	{
		var charpos=vNumberValue.search("[^0-9.,-]");
		if( charpos >= 0 )
		{
			vNumberName.value = vNumberName.value.substr(0, (vNumberValue.length-1));
			return false;
		}
		else
			vNumberName.value = vNumberName.value.replace(",",".");
	}
	if (whichCode == 8) //Ignore the Netscape value for backspace. IE has no value
		return false;
	else 
	{
		if(NumberCheck)
		{
			var charpos=vNumberValue.search("[^0-9.,-]");
			
		    if( charpos >= 0 )
			{
				alert("Wrong value for field");
				vNumberName.value = "";
				vNumberName.focus();
				return true;
			}
			else
				vNumberName.value = vNumberName.value.replace(",",".");
		}
	}
}

function NumberFormat(vNumberName, e, NumberCheck) 
{
	var vNumberValue =vNumberName.value;
	var whichCode = (window.Event) ? e.which : e.keyCode;
	//var numCheck = "0123456789";
	var charpos=vNumberValue.search("[^0-9]");
	if( charpos >= 0 )
	{
			vNumberName.value = vNumberName.value.substr(0, (vNumberValue.length-1));
			return false;
	}
	if (whichCode == 8) //Ignore the Netscape value for backspace. IE has no value
		return false;
	else 
	{
		if(NumberCheck)
		{
			var charpos=vNumberValue.search("[^0-9]");
		    if( charpos >= 0 )
			{
				alert("Wrong value for field");
				vNumberName.value = "";
				vNumberName.focus();
				return true;
			}
		}
	}
}

// Automatic Formatting For Date Fields 
function DateFormat(vDateName,  e, dateCheck) 
{
	var vDateValue = vDateName.value;
	var whichCode = (window.Event) ? e.which : e.keyCode;

	//Eliminate all the ASCII codes that are not valid
	var alphaCheck = " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.:/-";
	if (alphaCheck.indexOf(vDateValue) >= 1 || vDateValue.length > 16) 
	{
			vDateName.value = vDateName.value.substr(0, (vDateValue.length-1));
			return false;
	}
	if (whichCode == 8) //Ignore the Netscape value for backspace. IE has no value
		return false;
	else 
	{
		//Create numeric string values for 0123456789/
		//The codes provided include both keyboard and keypad values
		var strCheck = '33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,95,96,97,98,99,100,101,102,103,104,105';
		if ( !whichCode || (whichCode > 32 && whichCode < 60 ) || ( whichCode > 94 && whichCode < 106 )) 
		{
		  var strCheck = vDateValue.replace( / /, "" );
			if ( ((strCheck.length < 10 && dateCheck && strCheck.length <8 ) || (strCheck.length > 10 && strCheck.length < 15 && dateCheck)) && (strCheck.length >=1)) 
			{
					alert("Incorrect format of date. \n\r Enter date in a format \n\r dd.mm.yyyy hh:mm or dd.mm.yyyy");
					
					vDateName.value = "";
					vDateName.focus();
					return true;
			}
// Reformat date to format that can be validated. dd.mm.yyyy hh:mm
			if (vDateValue.length >= 16  && dateCheck) 
			{
				// Additional date formats can be entered here and parsed out to
				// a valid date format that the validation routine will recognize.
					dtAr = vDateName.value.split(" ");
					if (dtAr.length == 1)
					{
					
						var mDay = vDateName.value.substr(0,2);
						var mMonth = vDateName.value.substr(3,2);
						var mYear = vDateName.value.substr(6,4);
					}
					else 
					{
						if (dtAr.length == 2) 
						{
							var dateAr = dtAr[0].split(".");
							if (dateAr.length != 3)
								return false;
							var mDay = dateAr[0];
							var mMonth = dateAr[1];
							var mYear = dateAr[2];
							
							var timeAr = dtAr[1].split(":");
							if (timeAr.length != 2)
								return false;
							var mHH = timeAr[0];
							var mMM = timeAr[1];
						}
						else
							return false;
					}
			
				// Store reformatted date to new variable for validation.
				//if (mYear.length == 2  && dateCheck) 
				//{
					//Turn a two digit year into a 4 digit year
					//var mToday = new Date();
					//If the year is greater than 30 years from now use 19, otherwise use 20
					//var checkYear = mToday.getFullYear() + 30; 
					//var mCheckYear = '20' + mYear;
					//if (mCheckYear >= checkYear)
					//	mYear = '19' + mYear;
					//else
					//	mYear = '20' + mYear;
				//} 
				var vDateValueCheck = mDay+strSeperator+mMonth+strSeperator+mYear +" " + mHH +strSeperatorTime +mMM;
				if (!dateValid(vDateValueCheck)) 
				{
					//alert(vDateValueCheck);
					alert("Incorrect value of date. \n\r Enter date in a format \n\r dd.mm.yyyy hh:mm");
					vDateName.value = "";
					vDateName.focus();
					return true;
				}
				return true;
			}
			else 
			{
				if (vDateValue.length == 2) 
				{
					vDateName.value = vDateValue+strSeperator;
				}
				if (vDateValue.length == 5) 
				{
					vDateName.value = vDateValue+strSeperator;
				}
				if (vDateValue.length == 10) 
				{
					vDateName.value = vDateValue+" ";
				}
				if (vDateValue.length == 13) 
				{
					vDateName.value = vDateValue+strSeperatorTime;
				}
				return true;
	   		}
		
			if (vDateValue.length == 16 && dateCheck) 
			{
				if (!dateValid(vDateName)) 
				{
					// Un-comment the next line of code for debugging the dateValid() function error messages
					//alert(err);  
					alert("Incorrect value of date. \n\r Enter date in a format \n\r dd.mm.yyyy hh:mm");
					vDateName.focus();
					vDateName.select();
			   }
			}
			return false;
		}
		else 
		{
			// If the value is not in the string return the string minus the last
			// key entered.
			
			if( vDateName.value.charAt( vDateName.value.length ) == 32 )
			  vDateName.value = vDateName.value.substr(0, (vDateValue.length-1));
			return false;
		}
   }
}

// Automatic Formatting For Time Fields 
function TimeFormat(vDateName,  e, dateCheck) 
{
	var vDateValue = vDateName.value;
	var whichCode = (window.Event) ? e.which : e.keyCode;

	//Eliminate all the ASCII codes that are not valid
	var alphaCheck = " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.:/-";
	if (alphaCheck.indexOf(vDateValue) >= 1) 
	{
			vDateName.value = vDateName.value.substr(0, (vDateValue.length-1));
			return false;
	}
	if (whichCode == 8) //Ignore the Netscape value for backspace. IE has no value
		return false;
	else 
	{
		//Create numeric string values for 0123456789/
		//The codes provided include both keyboard and keypad values
		var strCheck = '47,48,49,50,51,52,53,54,55,56,57,58,59,95,96,97,98,99,100,101,102,103,104,105';
		if (strCheck.indexOf(whichCode) != -1) 
		{
				
			if (((vDateValue.length < 5 && dateCheck && vDateValue.length !=5) || (vDateValue.length > 5 )) && (vDateValue.length >=1)) 
			{
					alert("Incorrect value of time. \n\r Enter time in a format \n\r  hh:mm");
					vDateName.value = "";
					vDateName.focus();
					return true;
			}
// Reformat date to format that can be validated.  hh:mm
			if (vDateValue.length >= 5 && dateCheck) 
			{
			
				if (!isTimeVal(vDateValue)) 
				{
					//alert(vDateValueCheck);
					alert("Incorrect value of time. \n\r Enter time in a format \n\r  hh:mm");
					vDateName.value = "";
					vDateName.focus();
					return true;
				}
				return true;
			}
			else 
			{
				if (vDateValue.length == 2) 
				{
					vDateName.value = vDateValue+strSeperatorTime;
				}
	
				return true;
	   		}
		
			if (vDateValue.length == 5 && dateCheck) 
			{
				if (!isTimeVal(vDateValue)) 
				{
					// Un-comment the next line of code for debugging the dateValid() function error messages
					//alert(err);  
					alert("Incorrect value of time. \n\r Enter time in a format  \n\r  hh:mm");
					vDateName.focus();
					vDateName.select();
			   }
			}
			return false;
		}
		else 
		{
			// If the value is not in the string return the string minus the last
			// key entered.
			
			vDateName.value = vDateName.value.substr(0, (vDateValue.length-1));
			return false;
		}
   }
}

function dateValid(objName)
{
	return isDateTimeVal(objName);
}

// check DateTime
function isDateTimeVal(str)
{
	if (str == "")
		return true;
		
	while( str.length > 0 )
	{
	  var c = str.charAt( str.length -1 );
	  if( c == " " )
	    str = str.substr( 0, str.length - 1 );
	  else
	    break;
	}
	
	dtAr = str.split(" ");

	if (dtAr.length == 1)
		return isDateVal(dtAr[0]);
	else {
		if (dtAr.length == 2) {
			return isDateVal(dtAr[0]) && isTimeVal(dtAr[1]);
		}
		else
			return false;
	}
}

function isDateVal(str)
{
	var dateAr = str.split(".");
	if (dateAr.length != 3)
		return false;
	else {
		var ad = new Date(dateAr[2], dateAr[1]-1, dateAr[0]);
		var yea = ad.getFullYear() ;
   		//var yea = (dateAr[2].length == 4) ? ad.getFullYear() : ad.getYear();
		if( yea < 1950 )
			return false;
   		return ((parseInt(dateAr[0], 10) == ad.getDate()) && ((parseInt(dateAr[1], 10) - 1) == ad.getMonth()) && (parseInt(dateAr[2]) == yea));
	}
}

function isTimeVal(str)
{
	var timeAr = str.split(":");
	if (timeAr.length != 2)
		return false;
	else {
		var at = new Date(1900, 00, 01, timeAr[0], timeAr[1]);
		return ((parseInt(timeAr[0], 10) == at.getHours()) && ((parseInt(timeAr[1], 10)) == at.getMinutes()));
	}
}
function str2Date(dateStr, type)
{
	var result = "";
	if (dateStr != "")
	{
		var ss = (String(dateStr)).split(" ");
		if (type == 1) // time date
		{
			var dd = ss[1];
			var tt = ss[0]
		}
		else // date time
		{
			var dd = ss[0];
			var tt = ss[1]
		}
		var dateAr = String(dd).split(".");
		var timeAr = String(tt).split(":");
		if(timeAr.length==3)
			result = new Date(dateAr[2], dateAr[1]-1, dateAr[0], timeAr[0], timeAr[1], timeAr[2]);
		else
		{
			if(timeAr.length==2)
				result = new Date(dateAr[2], dateAr[1]-1, dateAr[0], timeAr[0], timeAr[1]);
			else
				result = new Date(dateAr[2], dateAr[1]-1, dateAr[0]);
		}
		
	}
	else
		result = new Date();
	return result;
}

var newWin  =	0;

function closeAll()
{

}
function closeAll_()
{
	w = newWin;
	if ( typeof(w)=="object" && w!=null && (!w.closed) ) 
	{
		w.close();
	}
}

function getValueByAttrType( obj )
{
	ret = "";

	var type = $(obj).attr('Atype');
	var acro = $(obj).attr('acro');
	
	if( type == DF_ENUM  && acro !="ressta")
	{
		ret = 0 ;
		ret =  $(obj).attr('checked');//obj.checked;
		if( ret )
			ret = 1;
		else
			ret = 0;
	}
	else if( type == DF_ENUM && acro =="ressta" )
	{
		ret = "" ;
		ret = Number( $(obj).attr('value') );// + 1;
	}
	else //if( type == DF_STR)
	{
		ret = "" ;
		ret = $(obj).attr('value');
	}
	return ret;
}

function restoreandSave( obj )
{
	t = OnEdit( obj );
	
	restore( obj );
	
}

function restore( obj )
{
	var papa = obj.parentNode;
	
	papa.onclick = $(papa).attr('t');
	
	var objT = $(obj).attr('value');
	
	val = "<B>" + $(obj[objT]).attr('text') + "</B>";
	
	papa.removeChild( obj );
	papa.innerHTML = val;
	
}

function restoreSt( obj )
{
	var papa = obj.parentNode;
	papa.onclick = $(papa).attr('t');
	var objT = $(obj).attr('selectedIndex');
	val = "<B>" + $(obj[objT]).attr('text') + "</B>";
	
	papa.removeChild( obj );
	papa.innerHTML = val;
	
}

function createElem( obj, list )
{
	val = obj.innerHTML;
	if( val == "undefined" )
		val = "";
	
	id = "el" + $(obj).attr('oid');

	if( list == null)
	{

		var el = document.createElement( "INPUT" );
		obj.innerHTML = "";
		obj.appendChild( el );
		el.outerHTML = el.outerHTML.substring( 0, 6 ) + " id=\"" +  id + "\" onclick=\"restoreandSave(this)\" value=\"" + val + "\"></INPUT>";
		
	}
	else
	{
		var el = document.createElement( "SELECT" );
		obj.appendChild( el );
		obj.innerHTML = "";

		$(obj).removeAttr("onclick");

		$(el).attr({id:id,acro:'ressta',Atype:1,onblur:"restoreSt(this)",onchange:"OnEdit(this)",value:"this.text"});

			/*	
		str = el.outerHTML.substring( 0, 7 ) + " id=\"" +  id + "\"";
		str +=" acro=\"ressta\" Atype=\"1\"";
		str +=" onblur=\"restoreSt(this)\"";
		str +=" onchange=\"OnEdit(this)\" value=\"this.text\">";
		*/
		var ss = (String(list)).split("|");

		for(var i=0; i < ss.length; i++ )
		{

			txt = ss[i];
			if( txt == "" )
				continue;
			var ss1 = (String(txt)).split("-");
			value = ss1[0];
			txt = ss1[1];
/*
			var option = new Option(txt, value); 
			el.appendChild( option );                
*/
			var op = document.createElement( "OPTION" );

			if( "<B>" + txt + "</B>" == val ) 
				$(op).attr({selected:"selected"});

			$(op).attr({value:value});	
			//$(op).attr({txt:txt});	
			$(op).text(txt);
			el.appendChild( op );
			
			//$(el).append( option );
			/*
			 if ($.browser.msie)                 
			 	el.add(option);                  
			 else                       
			 	el.add(option, null); 
			//$(el).append( op );
			
			str = "<OPTION";

			if( "<B>" + txt + "</B>" == val ) 
				 str += " selected";
			str += " value=\'" + ( value ) + "\'";
			str += ">";
			str += txt;
			str += "</OPTION>";
			$("el").append(str);
			*/
			
		}
		
		//el.outerHTML = str + "</SELECT>";
		//$(obj).append( el );
		
//alert(el.innerHTML);
		
	}
	
	el = document.getElementById( id );
	el.focus();

}
function createElemT( obj, list )
{
	val = obj.innerHTML;
	if( val == "undefined" )
		val = "";
	id = "el" + obj.oid;
	if( list == null)
	{
		var el = document.createElement( "INPUT" );
		obj.innerHTML = "";
		obj.appendChild( el );
		el.outerHTML = el.outerHTML.substring( 0, 6 ) + " id=\"" +  id + "\" onclick=\"restoreandSave(this)\" value=\"" + val + "\"></INPUT>";
	}
	else
	{
		var el = document.createElement( "SELECT" );
		obj.innerHTML = "";
		obj.appendChild( el );
		obj.t = obj.onclick;
		obj.onclick = "";
		str = el.outerHTML.substring( 0, 7 ) + " id=\"" +  id + "\"";
		str +=" acro=\"ressta\" Atype=\"1\"";
		str +=" onblur=\"restoreSt(this)\"";
		str +=" onchange=\"OnEdit(this)\" value=\"this.text\">";
		
		var ss = (String(list)).split("|");

		for(var i=0; i < ss.length; i++ )
		{
			txt = ss[i];
			if( txt == "" )
				continue;
			var ss1 = (String(txt)).split("-");
			value = ss1[0];
			txt = ss1[1];
			str += "<OPTION";

			if( "<B>" + txt + "</B>" == val ) 
				 str += " selected";
			str += " value='" + ( value ) + "'";
			str += ">";
			str += txt;
			str += "</OPTION>";
		}
		
		el.outerHTML = str + "</SELECT>";
		
	}
	
	el = document.getElementById( id );
	el.focus();

}
function OnNewElem( obj, list )
{
	createElemT( obj, list);
	 window.event.cancelBubble = true; //для IE
}


