function empty(){};

function me( object_id )
{

     if( typeof object_id == 'object' )
     {
         return object_id;
     }

     var element = document.getElementById( object_id );    
     
     if( element )
     {
         return element;
     }
     
     return false;
};

function mc( class_name, object_id, tagName  )
{
     var object = me( object_id );
     
     if( !object )
     {
    	    object = document;
     };	
     
     if( !tagName )
     {
          tagName = "*";
     }
     
     var allElements = object.getElementsByTagName( tagName );
     var elements    = new Array();
     
     if( allElements.length )
     {
	    for( var cE = 0; cE < allElements.length; cE++ )
	    {
		    if( allElements[ cE ].className == class_name )
		    {
			    elements[ elements.length ] = allElements[ cE ];	    
		    };
	    };	
     };
     
     
     return elements;
     
};

var moskAjax = {


};


moskAjax.createAjax = function()
{

         var object = false;

         if( window.XMLHttpRequest )
         {
             object = new XMLHttpRequest();

         }
         else if( window.ActiveXObject )
         {
         
              try
              {
                    object = new ActiveXObject( 'Msxml2.XMLHTTP' );              
              }
              catch( e )
              {
                    try
                    {
                        object = new ActiveXObject( 'Microsoft.XMLHTTP' );              
                    }
                    catch( e ){

                    };
              }

         }
         else
         {
             alert( 'The browser does not support AJAX' );
             return;
         }
         
         return object;
};



moskAjax.checkresponce = function( obj )
{

         if( obj.ajax.readyState  == 4 )
         { 
                try
                {
                     if( obj.ajax.status == 200 )
                     {

                          obj.done();                                                                       
                        
                          var json =  obj.ajax.getResponseHeader( 'X-JSON' );

                          if( json )
                          {
                          
                               eval( json );
                          }     
                          
                          moskAjax.evalScripts( obj.ajax.responseText );                          

                     }
                }
                catch( e ){};
         };
};


moskAjax.Request = function( urlToRequest, parameters ) 
{

        this.done    = empty();
        
        this.method  = 'GET';
        
        this.loadKey = false;
        
        this.loading = false;
        
        this.update  = false;
        
        this.timeout = false;
        
        for( param in parameters )
        {
             this[ param ] = parameters[ param ];
        }
        
        this.ajax = moskAjax.createAjax();
        

        if( !this.ajax )
        {
            return false;
        }

        this.ajax.open( this.method,  urlToRequest , true );       
        
        if( this.update )
        {
               var toUpdate = me( this.update );        
                
        }
        
        if( this.loading )
        {
    		  if( this.loadKey )
    		  {
	    	         Loading( this.loading, this.loadKey );        
	    	  }; 
	    	  
	    	  if( this.loadFunc )
	    	  {
	    		var string = eval( this.loadFunc );
	    		var el     = me( this.loading );
	    		el.innerHTML = string;
	    	  }
        };
        
        
        if( this.update )
        {

             this.ajax.setRequestHeader( 'Update-Node', this.update ); 
            
             if( !this.done )
             { 
              
                   this.done = function()
                              {

                                     if( toUpdate )
                                     {
                                          toUpdate.innerHTML =  this.ajax.responseText;
                                     };
                              };
             }       
                              
        }
        var tmpObj = this;
        
        this.ajax.onreadystatechange = function(){ 
                                                      if( moskAjax )
                                                      {                                                       
                                                         moskAjax.checkresponce( tmpObj ) 
                                                      }     
                                                 };

        this.ajax.setRequestHeader( 'Requested-By', 'AJAX' );
    
        
        if( this.parameters  )
        {
            this.ajax.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded;charset=UTF-8' );
            this.ajax.send( this.parameters ); 
        }
        else
        {
            this.ajax.setRequestHeader( 'Content-Type', 'text/html;charset=UTF-8' );
            this.ajax.send( null ); 
        }    
    
    
       
        if( this.timeout )
        {
            try
            { 
                 clearTimeout( this.timeToOut ); 
            }
            catch( e ){}
       
            var tmpObj = this;
            this.timeToOut = setTimeout( function() 
                                         {
                                             tmpObj.ajax.abort();
                                         }, this.timeout
                                        );
                                        

        }   
    
        
};

function jsLoad( url )
{
      location.href = url;
      
      return false;
};

function Load( url, params, cache )
{
     
      if( cache )
      {
            var cacheElement = me( cache );
            
            if( cacheElement )
            {
                  if( cacheElement.innerHTML )
                  {
                              me( params.update ).innerHTML = cacheElement.innerHTML;
                              return false;
                  }
                  else
                  {       
                        params.done = function( )
                        {
                                 me( params.update ).innerHTML = this.ajax.responseText;
                                 cacheElement.innerHTML = this.ajax.responseText;                                 
                        };
                  };   
            };        
      };

       new moskAjax.Request( url, params );

      return false;
};


function LoadByTime( url, params, timeParams )
{
        Load( url, params );
        
        try
        {
             clearTimeout( window[timeParams.time] );
        }
        catch( e ){}
           
        window[timeParams.time] = setTimeout(  function(){
                                                             LoadByTime( url, params, timeParams );
                                                         } , timeParams.timeout );
};

moskAjax.evalScripts = function( html )
{
           var div = document.createElement( 'div');
           div.innerHTML = html;
           var scripts = div.getElementsByTagName( 'script' );
                               
           for( var cS = 0; cS < scripts.length; cS++)
           {
                    if( !scripts[cS].getAttribute( "src" ) )
                    {
                             eval( scripts[cS].innerHTML );
                    };
           };
          return;        
};

Loading = function( loadElId, loadKey )
{
       var element = me( loadElId );
       var loading = '';

       switch( loadKey )
       {
       
           case 1:
                   loading = '<img src=\"img/loader.gif\" border="0">';
              break;      
	    case 2:
                   loading = '<img src=\"img/small_loader.gif\" border="0">';
                   element.innerHTML = loading;
                   return
              break;                    
           default: 
                   loading = 'please wait...';
              break;
       };
       
       var height = element.offsetHeight;
       
       element.innerHTML = "<div align=\"center\" style=\"padding-top: " + ( height / 2  )  + "px; height: " + ( height / 2 ) +"px; width: " + element.offsetWidth + "px;\">" + loading + "</div>";
};

Form =  {};

Form.jsSubmit = function( formId, hiddens )
{
       var eForm = me( formId );
       
       Form.addHidden( eForm, hiddens );       
       
       eForm.submit();
       
       return false;
};

Form.addHidden = function( eForm, hiddens )
{

       if( typeof hiddens == 'object' )
       {
             for( param in hiddens )
             {
                  var newHidden = document.createElement( 'input' );
                      newHidden.setAttribute( 'type', 'hidden' );
                      newHidden.name  = param;
                      newHidden.value = hiddens[ param ];
                
                     eForm.appendChild( newHidden );
             };
       };
};

Form.submit  = function( formId, params, hiddens )
{
       var eForm = me( formId );
       
       Form.addHidden( eForm, hiddens );

       var formValues  = Form.values( eForm );

       formValues = formValues.substr( 1 );    
       
       var submits = eForm.getElementsByTagName( "input" );
       for( var cS = 0; cS < submits.length; cS++ )
       {
             if( submits[ cS ].type == "submit" )
             {
                submits[ cS ].style.color = "gray";
                submits[ cS ].onclick = function(){ return false }
             };
             
       };

       var urlToRequest = eForm.action;
       
       if( eForm.method )
       {
           params.method = eForm.method;
       };
       
       if( !params.update )
       {
           params.update = formId;
       };
       
       if( !params.parameters )
       {
            params.parameters = "";
       };
       
       
       if( params.method.toUpperCase() == 'POST' )
       {
             params.parameters += formValues;
       }
       else
       {
             if( urlToRequest.indexOf( '?' ) )
             { 
                    urlToRequest = urlToRequest + "&" + formValues;         
             }
             else
             {
                    urlToRequest = urlToRequest + "?" + formValues.substring( 1, formValues.length ); 
             };
       };

       params.done = function()
       {
              var toUpdate = me( params.update );
              
              if( toUpdate )
              {
                   toUpdate.innerHTML =  this.ajax.responseText;
              };
              
              for( var cS = 0; cS < submits.length; cS++ )
              {
	             if( submits[ cS ].type == "submit" )
        	     {
	                    submits[ cS ].style.color = "";
        		    submits[ cS ].onclick = "";
	             };             
	      };
       };
 
       Load( urlToRequest, params );  



       return false;
};


Form.values = function( Element )
{
       var formElements = Element.childNodes;
       
       var formValues   = "";
       
       for( var cE = 0; cE < formElements.length; cE++ )
       {
                 var tagName = formElements[ cE ].tagName;
                 
                 if( tagName != '' && tagName != 'undefined' )
                 {
                           switch( tagName )
                           {
                                  case 'INPUT':

                                             switch( formElements[ cE ].type )
                                             {
                                                   case 'checkbox':
                                                         if( formElements[ cE ].checked )
                                                         {
                                                             formValues = formValues + "&" + urlencode( formElements[ cE ].name ) + "=" +  urlencode( formElements[ cE ].value );                                  
                                                         };
                                                      break;
                                                   case 'radio':
                                                         if( formElements[ cE ].checked )
                                                         {
                                                             formValues = formValues + "&" + urlencode( formElements[ cE ].name ) + "=" + urlencode( formElements[ cE ].value );                                  
                                                         };
                                                      break;        
                                                   default:
                                                         formValues = formValues + "&" + urlencode( formElements[ cE ].name ) + "=" + urlencode( formElements[ cE ].value );                                  
                                                      break;
                                             };                                           

                                      break;
                                  case 'TEXTAREA':
                                         formValues = formValues + "&" + urlencode( formElements[ cE ].name ) + "=" + urlencode( formElements[ cE ].value );                             
                                      break;
                                  case 'SELECT':
                                         formValues = formValues + "&" + urlencode( formElements[ cE ].name ) + "=" + urlencode( formElements[ cE ].value );                            
                                      break;            
                           }; 
                           
                          formValues = formValues + Form.values( formElements[ cE ] );
                 };
       }; 
      
       
       return formValues;

};

Form.setOptions = function( toSelect, fromElements, toElements, url )
{
	var toSelectNode = me( toSelect );
	
	set( toSelectNode, "disabled", true );    
	
	if( toElements.length )
	{
    		for( var cE = 0; cE < toElements.length; cE ++ )
    		{
    			set( toElements[ cE ], "disabled", true );
    		}; 
	};
	
	if( fromElements.length )
	{
	        for( var cE = 0; cE < fromElements.length; cE ++ )
	        {
	    		url = url + "&v" + ( cE + 1 ) + "=" + me( fromElements[ cE ] ).value;
	        };
	};
	
	toSelectNode.options.length = 0;
	
	Load( url, {
	             done: function()
	                   {  
	                          var result     =  this.ajax.responseText;
	                          var resultRows =  result.split( "@@" );

	                          if( resultRows.length )
	                          {
	                        	for( var cR = 0; cR < resultRows.length; cR ++)
	                        	{
	                        		var resultCols = resultRows[ cR ].split( "##" );

	                        		if( resultCols.length == 2 )
	                        		{
	                        			toSelectNode.options[ toSelectNode.options.length ] = new Option( resultCols[1], resultCols[ 0 ] );
	                        		};
	                        	};
	                          }; 

	                          set( toSelectNode, "disabled", false );
	                          
	                          if( toElements.length )
	                          {
	                        	for( var cE = 0; cE < toElements.length; cE++ )
	                        	{
	                        		set( toElements[ cE ], "disabled", false );
	                        	};
	                          };
	                          
	                   }
	           }
	    );	

};

Form.elements = function( elementId )
{
        var element = me( elementId );
        var elements = new Array();
        
        var inputs  = element.getElementsByTagName( 'input' );
        
        for( var cI = 0; cI < inputs.length; cI ++ )
        {
               elements[ elements.length ] = inputs[ cI ];  
        }
        
        var selects = element.getElementsByTagName( 'select' );
        
        for( var cS = 0; cS < selects.length; cS ++ )
        {
               elements[ elements.length ] = selects[ cI ];              
        };

        var textareas = element.getElementsByTagName( 'textarea' );
        
        for( var cS = 0; cS < textareas.length; cS ++ )
        {
               elements[ elements.length ] = textareas[ cI ];              
        };
        
        return elements;
            
};  

Form.update = function( url, params )
{
        elements = Form.elements( params.update );

        for( var cE = 0; cE < elements.length; cE ++ )
        {
              set( elements[ cE ], "disabled", true );
        };
        
        params.done = function()
        {
              var toUpdate = me( params.update );

              if( toUpdate )
              {
                    toUpdate.innerHTML =  this.ajax.responseText;
                    for( var cE = 0; cE < elements.length; cE ++ )
                    {
                          set( elements[ cE ], "disabled", false );
                    };
              };
        };                
        
        Load( url, params );
        
        return false;
};

inArray = function( needle, haystack )
{
       for( var cH = 0; cH < haystack.legnth; cH++ )
       {
               if( haystack[ cH ] == needle )
               {
                    return false;
               };       
       };  
       
       return false;
};
        
        
Cordinates = function( element )
{
          if( element.offsetParent )
          {
                 for( var posX = 0, posY = 0; element.offsetParent; element = element.offsetParent )
                 {
                      posX += element.offsetLeft;
                      posY += element.offsetTop;
                 }
                 
                 return [ posX, posY ];
          }
          else
          {
                 return[ element.x, element.y ];
          }
};

winSizes = function()
{
         
          var offsetX = 0;
          
          if( self.pageXOffset )
          {
                offsetX = self.pageXOffset      
          }          
          else if (document.documentElement && document.documentElement.scrollLeft )
          {
             
                offsetX = document.documentElement.scrollLeft;

          }
          else if( document.body )
          {
             
                offsetX = document.body.scrollLeft;
          }
          else
          {
                offsetX = document.body.scrollLeft;
          }
         
          var offsetY = 0;
          
          if (self.pageYOffset) 
          {
                offsetY = self.pageYOffset;

          }
          else if (document.documentElement && document.documentElement.scrollTop )
          {
             
                offsetY = document.documentElement.scrollTop;

          }
          else if( document.body )
          {
             
                offsetY = document.body.scrollTop;
          }
          else
          {
                offsetY = document.body.scrollTop;
          }

         
          var height = 0;
               
          if( self.innerHeight )
          {
                height = self.innerHeight;       
            
          }
          else if( document.documentElement && document.documentElement.clientHeight )
          {
                height = document.documentElement.clientHeight;
        
          }
          else if( document.body )
          {
                height = document.body.clientHeight;
          }
          else
          {
                height = document.body.clientHeight;
          }
          
          var  width = 0;
          
          if( self.innerWidth )
          {
               width = self.innerWidth;
          }
          else if( document.documentElement && document.documentElement.clientWidth )
          {
               width = document.documentElement.clientWidth;
          }
          else if( document.body )
          {
               width = document.body.scrollWidth;
          } 
          else if( document.documentElement )
          {
               width = document.documentElement.scrollWidth;
          }
          
          return [ width, height, offsetX, offsetY ];
        
};      

startListenEvent = function( objectTo, event, functionToExecute )
{
        if( objectTo.addEventListener )
        {
             objectTo.addEventListener( event, functionToExecute, false );             
        }
        else
        {
             objectTo.attachEvent( "on" + event , functionToExecute );
        }
};

endListenEvent   = function( objectTo, event )
{

        if( objectTo.removeEventListener )
        {             
             objectTo.removeEventListener( event, arguments.callee, false );
        }
        else
        {
            objectTo.detachEvent( "on" + event, arguments.callee );
        }
};

shadow = function( status )
{
        
        var hFrame = me( 'hFrame' );
        var hDiv   = me( 'hDiv' );
        
        var apFrame = false;
        var apDiv   = false;
        
        
        if( !hFrame )
        {
             hFrame  = document.createElement( 'iframe' );
             apFrame = true;
             hFrame.id = 'hFrame';
        }     
        
        if( !hDiv )
        {
             hDiv  = document.createElement( 'div' );
             apDiv = true;
             hDiv.id = 'hDiv';
        }
        
        winInfo = winSizes();
    
        
        set( hDiv, 'opacity', 0.3 );
        hDiv.id = 'hDiv';
        hDiv.style.backgroundColor = '#DADADA';
        hDiv.style.position        = 'absolute';
        hDiv.style.top             = '0px';
        hDiv.style.left            = '0px';
        hDiv.style.display         = status;
        hDiv.style.width           = ( winInfo[ 0 ] + winInfo[ 2 ] ) + "px";
        hDiv.style.height          = ( winInfo[ 1 ] + winInfo[ 3 ] ) + "px";
        hDiv.style.zIndex          = '800';

        

        set( hFrame, 'opacity', 0.3 );
        hFrame.id = 'hFrame';
        if( document.all )
        {
           hFrame.src = 'about:blank';
        }   
        else
        {
           hFrame.src = 'javascript:;';
        }
        hFrame.style.backgroundColor = '#DADADA';
        hFrame.style.position        = 'absolute';
        hFrame.style.top             = '0px';
        hFrame.style.left            = '0px';
        hFrame.style.display         = status;
        hFrame.style.width           = ( winInfo[ 0 ] + winInfo[ 2 ] ) +  "px";
        hFrame.style.height          = ( winInfo[ 1 ] + winInfo[ 3 ] ) + "px";
        hFrame.style.zIndex          = '800';
        
        if( apFrame )
        {
            document.body.appendChild( hFrame );
        }
        
        if( apDiv )
        {
            document.body.appendChild( hDiv );
        }       
       
};

get = function( object, property )
{

          object = me( object );

          if( property.length )
          {
               var propName = property.toUpperCase();
          
               switch( propName )
               {
                       case  'CLASS':      return  object.className;
                           break;
                       case  'HEIGHT':
                                      if(  object.style.height )
                                      {
                                           return value = parseInt( object.style.height );                                               
                                      }     
                                      return 0;  
                           break; 
                       case  'DISPLAY':
                                           return  object.style.display;     
                           break;             
                       case  'OVERFLOW':
                                           return  object.style.overflow;     
                           break;
                                            
                       case  'MARGINTOP':       
                    			   return parseInt( object.style.marginTop );
                           break;             
               };
          }
};

set = function( object, property, value )
{
          object = me( object );
          
          if( property.length )
          {
               var propName = property.toUpperCase();
          
               switch( propName )
               {
                       case  'CLASS':      object.className          =  value;     
                           break;
                       case  'OPACITY':    object.style.MozOpacity   =  value; 
                                           object.style.MozOpacity   =  value; 
                                           object.style.KHTMLOpacity =  value;
                                           object.style.opacity      =  value;
                                           object.style.filter = "alpha(opacity="+( value * 100 )+")";
                           break;                   
                       case  'HEIGHT':
                                           object.style.height       =  value + "px";                                               
                           break; 
                       case  'DISPLAY':
                                           object.style.display      =  value;     
                           break;             
                       case  'OVERFLOW':
                                           object.style.overflow     =  value;     
                           break;  
                       case  'DISABLED':
                    			   object.disabled           =  value;    
                           break;                  
                       case  'MARGINTOP':       
                    			   object.style.marginTop    =  value + "px";     
                           break;
                       default:
                                           object.setAttribute( property, value );     
                           break;             
                           
                              
               };
          }
         
};

checkBoxes = function( object, rangeId )
{
        if( !me( object ) )
        {
           return false;
        };
        
        var boxes = me( rangeId ).getElementsByTagName( 'input' );
        
        for( var cB = 0; cB < boxes.length; cB++ )
        {
        
                if( boxes[cB] != object && boxes[cB].getAttribute( 'type' ) == 'checkbox' )
                {
                       boxes[cB].checked = object.checked;
                };
        
        };

};

function setInTime( objectId, params, exists )
{

          var object = me(  objectId );
          
          if( object )
          {
                 if( !exists ) 
                 {
                         if( params.from < params.to )
                         {
                              object.way = '+';
                         }
                         else
                         {
                              object.way = '-';
                         }                                               
                 }
          

                 if( !exists &&  object.inProgress && object.way)
                 {
                       if( object.inProgress == object.way )
                       {
                             return false;
                       }         
                       else
                       {
                              object.way = false;
                              object.inProgress = false;
                              newValue  = get( object, params.property );                
                              params.from = newValue;
                              params.to   = params.from;
                              setInTime( objectId, params, false);              
                              return false;
                       }
                 }

                 
                 try
                 {
                       clearTimeout( window[ object.id + "_" + property ] );                 
                 }
                 catch( e ){};
                 
                 var propValue = get( object, params.property );                                               
                                
                 if( object.way == "+" )
                 {
                          if( propValue < params.to )
                          {
                          
                                object.inProgress = object.way;
                                propValue = propValue + params.step;
                                
                                if( propValue > params.to )
                                {
                            		propValue = params.to;
                                }
                                
                                set( object, 'display', 'block' );
                                set( object, params.property, propValue );

                                window[ object.id + "_" + params.property ] =  setTimeout( function(){
                                                                                                 setInTime( objectId, params, true )
                                                                                                }, params.timeOut );
                          }                  
                          else
                          {
                               object.way = false;    
                               object.inProgress = false;
                               
                               if( params.stop )
                               {
                                     eval( params.stop );
                               }
                          }       
                 }
                 else if( object.way == "-" )
                 {               

                          if( propValue > params.to )
                          {
                                object.inProgress = object.way;
                                propValue = propValue - params.step;
                                
                                if( propValue < params.to )
                                {
                            	      propValue = params.to;
                                }
                                
                                set( object, params.property, propValue );
                                set( object, 'display', 'block' );
                                window[ object.id + "_" + params.property ] =  setTimeout( function(){
                                                                                                 setInTime( objectId, params, true )
                                                                                                }, params.timeOut );
                          }                      
                          else
                          {
                               object.way = false;    
                               object.inProgress = false;
                               set( object, 'display', 'none' );

                               if( params.stop )
                               {
                                     eval( params.stop );
                               }
                          };       
                 };                                  
         };
};

function toggle( blockId, onOpen, onClose )
{
         var block = me( blockId );
         
         if( block )
         {
                var style = block.style.display;
        
                if( ( style == 'none' ) || ( ( style != 'block' ) && ( style != 'inline' ) ) )
                {
                       block.style.display = 'block';
                       eval( onOpen );
                }
                else
                {
                       block.style.display = 'none';
                       eval( onClose );
                }
         };  
};

set_cookie = function( cookie_name, cookie_value, cookie_days )
{	
	var date = new Date();
	date.setTime( date.getTime + ( cookie_days * 24 * 60 * 60 * 1000 ) );
	var expires = date.toGMTString();
	document.cookie = cookie_name + "=" + cookie_value + ";expires=" + expires +"; path=/";
};

get_cookie = function( cookie_name )
{
	regexpr = cookie_name + '=(.*?)(;|$)';
	var results = document.cookie.match (regexpr);
	if( results ){ return ( unescape ( results[1] ) ); }else{ return null; };
};

urlencode = function urlencode( string ) 
{
         var ret = string;
	 ret = ret.toString();
         ret = encodeURIComponent(ret);
         ret = ret.replace(/%20/g, '+');
         
         return ret;
};

function moskObject()
{
	this.loadFunctions = new Array();
};

moskObject.prototype.onload = function( functionString )
{
	this.loadFunctions[ this.loadFunctions.length ] = functionString;
};

moskObject.prototype.loadDocument = function()
{
	if( this.loadFunctions.length )
	{
		for( var cF = 0; cF < this.loadFunctions.length; cF++)
		{
			eval( this.loadFunctions[ cF ] );
		};
	};
};

mosk = new moskObject();

window.onload = function(){ mosk.loadDocument();  };         

