
var oProperty = []

oProperty['agent'] = navigator.userAgent.toLowerCase()
oProperty['ie'] = document.all && !window.opera;
oProperty['fr'] = oProperty['agent'].indexOf( 'firefox' ) != - 1
oProperty['dom'] = document.getElementById;
oProperty['iebody'] = (document.compatMode == 'CSS1Compat') ? document.documentElement : document.body;
oProperty['delim'] = '.'



function ClearObj( oObj ){
  var bIsCheck = false;
  while( oObj.value.charAt( 0 ) == ' ' ) {
    oObj.value = oObj.value.substring( 1, oObj.value.length );
  }
  return true;
}

//  ---------------------------------------

function TrimObj( oObj, sChar ){
  if ( ! IsSet( sChar ) ) {
    sChar = ' ';
  }
  while( '' + oObj.value.charAt( oObj.value.length - 1 ) == sChar ) {
    oObj.value = oObj.value.substring( 0, oObj.value.length - 1 );
  }

}

function GetObjById( sId ){
  try{
    if ( document.getElementById( sId ) ) {
      return document.getElementById( sId )
    }
    return null;
  }
  catch( oError ){
    MyError( oError );
    return null;
  }
}

//  ---------------------------------------

function GetObjByName( sName ){
  try{
    aObj = document.getElementsByName( sName )
    // alert( aObj[0] )
    if ( IsSet( aObj ) && aObj.length > 0  ) {
      return aObj[0]
    }
    return null;
  }
  catch( oError ){
    MyError( oError );
    return null;
  }
}

function Create( sTag ){
  return document.createElement( sTag )
}
function CreateText( sText ){
  return document.createTextNode( sText )
}

//  ---------------------------------------

function IsSet( oObject ){
  if ( typeof( oObject ) == 'undefined' ) {
    return false;
  }
  if ( oObject == null ) {
    return false;
  }
  return true;
}

//  ---------------------------------------

function MyError( oError ){
    alert( GetErrorDescription( oError ) );
}

//  ---------------------------------------

function GetErrorDescription( oError ){
  if ( IsSet( oError.description ) ) {
    return oError.description;
  }
  else{
    return oError.message;
  }
}

function CenterObject( oObj ) {

/*top: expression(
    parseInt(document.body.scrollTop, 10) + "px"
);
*/
//ObjectDescr(document)
// alert( document.body.scrollTop )
  var iScrollTop  = ( oProperty['ie'] ) ? oProperty['iebody'].scrollTop : window.pageYOffset;
  var iScrollLeft = ( oProperty['ie'] ) ? oProperty['iebody'].scrollLeft : window.pageXOffset;

  var iDocWidth   = ( oProperty['ie'] ) ? oProperty['iebody'].clientWidth : window.innerWidth;
  var iDocHeight  = ( oProperty['ie'] ) ? oProperty['iebody'].clientHeight: window.innerHeight;

  var iObjWidth   = oObj.offsetWidth;
  var iObjHeight  = oObj.offsetHeight;

  oObj.style.left = iScrollLeft + (iDocWidth / 2) - (iObjWidth / 2) + 'px';
  oObj.style.top  =  iScrollTop  + (iDocHeight / 2) - (iObjHeight / 2) + 'px';
//oObj.style.top = iScrollTop + 100 + 'px'
  oObj.style.width = iObjWidth
  oObj.style.heigth = iObjHeight
//  ObjectDescr(oObj)
//alert( window.pageYOffset )
}
//  ---------------------------------------

/* Функции создания Элементов */
function Input( oArgs ){
  var oCtrl = document.createElement( "input" )
  oCtrl.type = 'text'
  
  oCtrl.className = (oArgs.className || oArgs.type=="button")?"":"hand_input"

  for ( sName in oArgs ) {
      oCtrl[sName] = oArgs[ sName ]
  }
  return oCtrl
}

//  ---------------------------------------

function ObjectDescr( oObj ){
  var oTextArea = document.createElement( 'textarea' )
  oTextArea.rows = 30
  oTextArea.cols = 40
  var sStr = ''
  if ( ! IsSet( oObj ) ) {
    sStr = 'NULL'
  }
  else{
    for ( sProp in oObj ) {
      sStr = sStr + '\r\n'  + sProp + ':' + oObj[sProp]
    }
  }
  var oText = document.createTextNode( sStr )
  Append( oText, oTextArea )
  Append( oTextArea )
}

//  ---------------------------------------

function Append( oChild, oParent ){
  try{
    if ( ! IsSet( oParent ) ) {
      var oParent = i_oFirstNode
    }
    oParent.appendChild( oChild )
  }
  catch( oError ){
    alert( 'Критическая ошибка на странице' )
  }
}
/* */
function CopyObject(oObj, sType ){
    var oObjCopy = document.createElement( sType )
    oObjCopy.innerHTML =oObj.innerHTML

    return oObjCopy
}
function SelectText( oInput ){
  if ( oInput.selectionStart ) {
    var end = oInput.value.length;
    oInput.setSelectionRange(0,end);
    oInput.focus();
    //alert(1)
  }
  if ( oInput.createTextRange ){
    var oRange = oInput.createTextRange();
    oRange.collapse(false);
    oRange.select();
  }
}
function Document( ){
  /* Создание документа */
  this.Create = function ( sTag, oArg, oParent ){
    try{
      var oElement = document.createElement( sTag )
      for ( sName in oArg ) {
        oElement[ sName ] = oArg[ sName ]
      }
      if ( IsSet( oParent ) ){
        oDocument.Append ( oElement, oParent )
      }
      return oElement
    }catch( oError ){
        alert( 'Ошибка при создании элемента :' + sTag  )
    }
  }
  this.CreateText = function ( sText, oParent  ){
    oElement = document.createTextNode( sText )
    if ( IsSet( oParent ) ){
      oDocument.Append ( oElement, oParent )
    }
    return oElement
  }
  this.Append = function ( oChild, oParent ){
    try{
      if ( ! IsSet( oParent ) ) {
        var oParent = i_oFirstNode
      }
      oParent.appendChild( oChild )
    }catch( oError ){
      alert( 'Ошибка при добавлении элемента' )
    }
  }
  this.GetParentNodeOfElement = function ( sNode,  oElement ){
     try{
      sNode = sNode.toUpperCase( )
      var oParent = oElement
  //    alert( oParent.parentNode.nodeName )
  //    return
      do{
        if ( !IsSet( oParent.parentNode ) ){
          oParent = null
          break
        }
        oParent = oParent.parentNode
        if ( oParent.nodeName == sNode ){
          break;
        }
      }while( IsSet( oParent.parentNode ) )
      return oParent
    }catch( oError ){
      alert( 'Ошибка получение узла-потомка' )
    }
  }
  this.GetElementByName = function ( sName ) {
   var aElement = document.getElementsByName( sName )
   if ( IsSet( aElement[ 0 ] ) ){
      return aElement[ 0 ]
   }else{
      return null
   }
  }
  this.SetElementByName = function( sName, oArgs ){
    var aElement = document.getElementsByName( sName )
//    alert(aElement[ 0 ])
    for( iElement = 0; iElement < aElement.length; iElement++ ){
      SetElement( aElement[ iElement ], oArgs )
    }

  }
  this.SetElementById = function (sId, oArgs ){
    var oElement = GetObjById( sId )
    if ( IsSet( oElement ) ){
       SetElement( oElement, oArgs )
    }
  }
  var SetElement = function( oElement, oArgs ){
    try {
      for ( sName in oArgs ){
        oElement[ sName ] = oArgs[ sName ]
//        alert(sName + '::' + oArgs[ sName ])
      }
    }catch( oError ){
      alert( 'Ошибка установки свойств элемента' + oError )
    }
  }
  this.ErrorInValue = function( sName, oArgs ){
    var aElement = document.getElementsByName( sName )
   // alert( aElement.length )
    var sOldClassName = aElement[ 0 ].className
    aElement[ 0 ].className = 'wrong-value'
    alert( oArgs.descr )
    aElement[ 0 ].className = sOldClassName
    aElement[ 0 ].focus( )
//    aElement[ 0 ].value = '123'
    //alert(134)
    //alert( aElement[ 0 ].className)
  }
}

  var UrlTranslit = function( str, allow_slashes )
  {
   var slash = "";
   if (allow_slashes) slash = "\\/";
   var LettersFrom = "абвгдезиклмнопрстуфыэйхё";
   var LettersTo   = "abvgdeziklmnoprstufyejxe";
   var Consonant = "бвгджзйклмнпрстфхцчшщ";
   var Vowel = "аеёиоуыэюя";
   var BiLetters = {
     "ж" : "zh", "ц" : "ts",  "ч" : "ch",
     "ш" : "sh", "щ" : "sch", "ю" : "ju", "я" : "ja"
                   };

   str = str.replace( /[_\s\.,?!\[\](){}]+/g, "_");
   str = str.replace( /-{2,}/g, "_");
   str = str.replace( /_\-+_/g, "_");

   str = str.toLowerCase();


   //here we replace ъ/ь
   str = str.replace(
      new RegExp( "(ь|ъ)(["+Vowel+"])", "g" ), "j$2");
   str = str.replace( /(ь|ъ)/g, "");

   //transliterating
   var _str = "";
   for( var x=0; x<str.length; x++)
    if ((index = LettersFrom.indexOf(str.charAt(x))) > -1)
     _str+=LettersTo.charAt(index);
    else
     _str+=str.charAt(x);
   str = _str;

   var _str = "";
   for( var x=0; x<str.length; x++)
    if (BiLetters[str.charAt(x)])
     _str+=BiLetters[str.charAt(x)];
    else
     _str+=str.charAt(x);
   str = _str;

   str = str.replace( /j{2,}/g, "j");

   str = str.replace( new RegExp( "[^"+slash+"0-9a-z_\\-]+", "g"), "");
   str = str.replace(/^\s+|\s+$|\_+$/g,"");
//   alert( str )
   return str;
 }
 

oDocument = new Document( )
//  ---------------------------------------

var c_sFirstNodeId = '@@@FirstNode@@@'
document.write( '<div style="position:absolute;top:0;left:0;width:100%;" id="' + c_sFirstNodeId + '">Loading<\/div>' )
var i_oFirstNode = GetObjById( c_sFirstNodeId )
i_oFirstNode.innerHTML = ''
