/*
 *   Gear Studio, gear-studio.com
 *   Copyright (C) 2000-2009
 *   Zakaz uzywania skryptu bez zgody Gear Studio.
 */
     // Ustawienia
     var Settings = {
          // Włącz
          'on' : function( name ) {
               Cookie.write( 'settings[' + name + ']', '1', { path : PHP.cookie } );
          },

          // Wyłącz
          'off' : function( name ) {
               Cookie.write( 'settings[' + name + ']', '0', { path : PHP.cookie } );
          },

          // Sprawdź stan
          'isSet' : function( name ) {
               var v = Cookie.read( 'settings[' + name + ']' );
               return ( v == 1 || v == 0 );
          },

          // Jest włączona
          'isOn' : function( name ) {
               return ( Cookie.read( 'settings[' + name + ']' ) == 1 );
          },

          // Jest wyłączona
          'isOff' : function( name ) {
               return ( Cookie.read( 'settings[' + name + ']' ) == 0 );
          }
     };

     var Ajax = {

          // Odpowiedz serwera
          response : {},

          // Ostatnia odpowiedz serwera
          lastResponse : {},
          
          update : {},

          // Zapytanie
          Request : new Request( {

               // Metoda
               method : 'post',

               // Kodowanie
               encoding : 'utf-8',

               // Asynchronicznie
               async : true,

               onRequest : function() {
                    Message.show( 'Ładowanie...' );
               },

               // Gdy sukces
               onSuccess : function( response ) {
                    // Odczytaj odpowiedź
                    Ajax.lastResponse = Ajax.response;
                    Ajax.response = JSON.decode( response );

                    // Odpowiedź jest poprawna?
                    if( Ajax.response )
                    {
                         for( var id in Ajax.response )
                         {
                              var element = $(id);
                              Ajax.update[id] = true;

                              if( !Ajax.lastResponse[id] )
                                   Ajax.lastResponse[id] = element.innerHTML.trim();

                              var e = new Element( 'div' );
                              e.innerHTML = Ajax.response[id];
                              Ajax.response[id] = e.innerHTML.trim();

                              if( Ajax.lastResponse[id] == Ajax.response[id] )
                                   Ajax.update[id] = false;
                              else if( Settings.isOn( 'fx' ) )
                                   element.fade( 0 );
                         }

                         setTimeout( function() {
                              for( var id in Ajax.response )
                              {
                                   if( !Ajax.update[id] )
                                        continue;

                                   var element = $(id);

                                   element.innerHTML = Ajax.response[id];

                                   if( Settings.isOn( 'fx' ) )
                                        element.fade( 1 );

                                   Ajax.makeLinks( element );
                                   Ajax.makeForms( element );
                              }

                              Message.hide();
                         },  500 );
                    }
                    else {
                         Message.show( 'Błąd ładowania strony.' );
                         Message.hide( 1000 );
                    }
               },

               // Gdy blad
               onFailure : function() {
                    Message.show( 'Błąd ładowania strony.' );
                    Message.hide( 1000 );
               }
          } ),

          // Podmiana linków
          makeLinks : function( element )
          {
               var links = element.getElements( 'a' );
               for( var i = 0; i < links.length; i++ )
               {
                    var link = $( links[i] );
                    //if( !link.hasClass( 'hardlink' ) )
                    {
                         // Odnośnik do podstrony
                         match = link.href.match( new RegExp( '^' + PHP.http + '([a-zA-Z0-9\/\-]*)$', 'i' ) );
                         if( match ) {
                              if( match[1] != 'rss' ) {
                                   link.url = PHP.http + match[1];
                                   link.removeEvents( 'click' );
                                   link.addEvent( 'click', function( event ) {
                                        if( Settings.isOn( 'ajax' ) )
                                        {
                                             event.stop();

                                             Ajax.Request.cancel();
                                             Ajax.Request.send( {
                                                  method : 'post',
                                                  url : this.url,
                                                  data : 'ajax=1'
                                             } );
                                        }
                                   } );

                                   continue;
                              }
                         }

                         // Odnośnik do obrazka
                         match = link.href.match( new RegExp( '^' + PHP.http + '((.*?)\.(gif|png|jpg|jpeg))$', 'i' ) );
                         if( match )
                         {
                              link.img = PHP.http + match[1];
                              Preview.add( match[1] )
                              link.removeEvents( 'click' );
                              link.addEvent( 'click', function( event ) {
                                   event.stop();
                                   Preview.show( this.img );
						} );

						continue;
                         }

                         // Link zewnętrzny
                         link.target = '_blank';
                    }
               }
          },

          // Podmiana Form
          makeForms : function( element )
          {
               var forms = element.getElements( 'form' );
               for( var i = 0; i < forms.length; i++ )
               {
                    var form = $( forms[i] );

                    for( var n = 0; n < form.length; n++ )
                    {
                         var submit = $( form.elements[n] );

                         if( submit.type == 'submit' )
                         {
                              match = form.action.match( new RegExp( '^' + PHP.http + '(.*?)$', 'i' ) );
                              if( match )
                              {
                                   submit.url = PHP.http + match[1];
                                   submit.removeEvents( 'click' );
                                   submit.addEvent( 'click', function( event ) {
                                        if( Settings.isOn( 'ajax' ) )
                                        {
                                             event.stop();

                                             Ajax.Request.cancel();
                                             Ajax.Request.send( {
                                                  method : 'post',
                                                  url : this.url,
                                                  data : this.form.toQueryString() + '&ajax=1'
                                             } );
                                        }
                                   } );
                              }

                              break;
                         }
                    }
               }
          }
     };

     var Body, Message, Preview;

     window.addEvent( 'domready', function() {
          Body = $('body');
          Body.removeClass( 'noscript' );
          
          // Wiadomości
          Message = new Element( 'div', { 'id' : 'message' } );
          Body.adopt( Message );
          
          Message.timer = false;
          Message.setStyle( 'opacity', 0 );
          Message.show = function( message ) {
               $clear( this.timer );

               if( Settings.isOn( 'fx' ) )
                    this.fade( 0.8 );
               else
                    this.setStyle( 'opacity', 0.8 );
               this.setStyle( 'display', 'block' );
               this.innerHTML = message;
          };
          Message.hide = function( timeout ) {
               $clear( this.timer );

               if( timeout )
                    this.timer = setTimeout( this.hide, timeout );
               else
               {
                    if( Settings.isOn( 'fx' ) )
                         this.fade( 0 );
                    else
                         this.setStyle( 'opacity', 0 );
               }
          };

          // Podgląd
          Preview = new Element( 'img', { 'id' : 'preview' } );
          Body.adopt( Preview );

          Preview.images = {};
          Preview.image = {};
          Preview.timer = false;
          Preview.top = 0;
          Preview.left = 0;
          Preview.setStyle( 'opacity', 0 );
          Preview.addEvent( 'click', function() { Preview.hide() } );
          Preview.add = function( src ) {
               if( this.images[src] )
                    return this.images[src];

               var image = new Image();
               image.error = false;
               image.onerror = function() {
                    this.error = true;
               }
               image.src = src;

               this.images[src] = image;
                    
               return image
          };
          Preview.show = function( src ) {
               $clear( this.timer );

               this.image = this.add( src );

               this.check();
          };
          
          Preview.hide = function( src ) {
               $clear( this.timer );
               
               if( Settings.isOn( 'fx' ) )
                    this.fade( 0 );
               else
                    this.setStyle( 'opacity', 0 );
          };
          
          Preview.check = function() {
               if( this.image.complete ) {
               		var w = window.innerWidth ? window.innerWidth : ( document.body.clientWidth ? document.body.clientWidth : ( document.documentElement.clientWidth ? document.documentElement.clientWidth : 1024 ) );
					var h = window.innerHeight ? window.innerHeight : ( document.body.clientHeight ? document.body.clientHeight : ( document.documentElement.clientHeight ? document.documentElement.clientHeight : 768 ) );
                    if( this.image.width > w || this.image.height > h )
                         var scale = Math.min( w / this.image.width, h / this.image.height );
                    else
                         var scale = 1;

                    this.width = this.image.width * scale;
                    this.height = this.image.height * scale;

                    this.src = this.image.src;
                    
                    this.left = window.getScrollLeft();
                    this.top = window.getScrollTop();
                    
                    this.setStyle( 'left', this.left + ( window.getWidth() - this.width ) * 0.5 );
                    this.setStyle( 'top', this.top + ( window.getHeight() - this.height ) * 0.5 );
                    
                    if( Settings.isOn( 'fx' ) )
                         this.fade( 1 );
                    else
                         this.setStyle( 'opacity', 1 );

                    this.setStyle( 'display', 'block' );
                    
                    this.move();
               }
               else if( this.image.error )
                    this.hide();
               else
                    this.timer = setTimeout( function() { Preview.check(); }, 100 );
          };

          Preview.move = function() {
               if( Settings.isOn( 'fx' ) ) {
                    var left = window.getScrollLeft();
                    var diff = Math.abs( left - this.left ) * 0.05;
                    if( this.left < left ) {
                         this.left += diff;
                    }
                    else if( this.left > left ) {
                         this.left -= diff;
                    }

                    var top = window.getScrollTop();
                    var diff = Math.abs( top - this.top ) * 0.05;
                    if( this.top < top ) {
                         this.top += diff;
                    }
                    else if( this.top > top ) {
                         this.top -= diff;
                    }
               }
               else {
                    this.left = window.getScrollLeft();
                    this.top = window.getScrollTop();
               }
               
               this.setStyle( 'left', this.left + ( window.getWidth() - this.width ) * 0.5 );
               this.setStyle( 'top', this.top + ( window.getHeight() - this.height ) * 0.5 );
               
               this.timer = setTimeout( function() { Preview.move(); }, 10 );
          }

          // Obsługa menu ustawień
          var settings = {
               'fx' : 'fx',
               'ajax' : 'ajax'
          };
          
          for( var id in settings )
          {
               var element = $( id );
               if( element )
               {
                    element.setting = settings[id];
                    with( element )
                    {
                         if( !Settings.isSet(setting ) )
                              Settings.on( setting );

                         // Start
                         if( Settings.isOn( setting ) )
                              setStyle( 'opacity', 1 );
                         else
                              setStyle( 'opacity', 0.4 );
                         setStyle( 'display', 'block' );

                         addEvent( 'click', function( event ) {
                              event.stop();

                              if( Settings.isOn( this.setting ) )
                                   Settings.off( this.setting );
                              else
                                   Settings.on( this.setting );

                              if( Settings.isOn( 'fx' ) )
                              {
                                   if( Settings.isOn( this.setting ) )
                                        this.fade( 1 );
                                   else
                                        this.fade( 0.4 );
                              }
                              else
                              {
                                   if( Settings.isOn( this.setting ) )
                                        setStyle( 'opacity', 1 );
                                   else
                                        setStyle( 'opacity', 0.4 );
                              }
                         } );
                    }
               }
          }

          // Przyciski menu
          var menu_buttons = $$('#menu_warp .menu_button');
          
          // Przycisk startowy
          $('menu_start').setStyle( 'z-index', menu_buttons.length + 1 );

          // Rób podświetlane przyciski
          for( var i = 0; i < menu_buttons.length; i++ )
          {
               // Przycisk
               var menu_button = menu_buttons[i];
               // Podświetlenie przycisku
               var menu_button_blink = menu_button.getElement( 'span' );

               if( menu_button_blink )
               {
                    menu_button.blink = menu_button_blink;

                    // Domyślne style
                    with( menu_button_blink )
                    {
                         setStyle( 'opacity', 0 );
                         setStyle( 'display', 'block' );
                    }
                    
                    // Zdarzenia
                    with( menu_button )
                    {
                         setStyle( 'z-index', menu_buttons.length - i );

                         addEvent( 'mouseover', function() {
                              if( Settings.isOn( 'fx' ) )
                                   this.blink.fade( 1 );
                              else
                                   this.blink.setStyle( 'opacity', 1 );
                         } );

                         addEvent( 'mouseout', function() {
                              if( Settings.isOn( 'fx' ) )
                                   this.blink.fade( 0 );
                              else
                                   this.blink.setStyle( 'opacity', 0 );
                         } );
                    }
               }
          }

          // Podświetlanie pierwszego przycisku i loga jednocześnie
          // Logo
          var logo = $('logo');
          // Podświetlone logo
          var logo_blink = $('logo_blink');

          // Domyślne style podświetlenia logo
          with( logo_blink )
          {
               setStyle( 'opacity', 0 );
               setStyle( 'display', 'block' );
          }

          // Podświetlanie logo
          with( logo )
          {
               addEvent( 'mouseover', function() {
                    if( Settings.isOn( 'fx' ) )
                    {
                         logo_blink.fade( 1 );
                         menu_buttons[0].blink.fade( 1 );
                    }
                    else
                    {
                         logo_blink.setStyle( 'opacity', 1 );
                         menu_buttons[0].blink.setStyle( 'opacity', 1 );
                    }

               } );

               addEvent( 'mouseout', function() {
                    if( Settings.isOn( 'fx' ) )
                    {
                         logo_blink.fade( 0 );
                         menu_buttons[0].blink.fade( 0 );
                    }
                    else
                    {
                         logo_blink.setStyle( 'opacity', 0 );
                         menu_buttons[0].blink.setStyle( 'opacity', 0 );
                    }
               } );
          }
          menu_buttons[0].removeEvents();
          menu_buttons[0].addEvent( 'mouseover', function() {
               logo.fireEvent( 'mouseover' );
          } );
          menu_buttons[0].addEvent( 'mouseout', function() {
               logo.fireEvent( 'mouseout' );
          } );
          
          // Zinicjuj AJAXa na linkach
          Ajax.makeLinks( $('body') );

          // Zinicjuj AJAXa na formach
          Ajax.makeForms( $('body') );
          
          /*
          var minis = [];

          function minisRandomize() {
               for( var i = 0; i < minis.length; i++ )
               {
                    var mini = minis[i];
                    mini.addx = Math.random( 2 ) - 1;
                    mini.addy = Math.random( 2 ) - 1;
               }
          }

          function minisUpdate() {
               for( var i = 0; i < minis.length; i++ )
               {
                    var mini = minis[i];
                    if( mini.image.complete && !mini.image.error )
                    {
                         if( mini.x < 0 )
                              mini.addx = Math.random( 1 );
                         else if( mini.x > mini.image.width - mini.width )
                              mini.addx = -Math.random( 1 );

                         if( mini.y < 0 )
                              mini.addy = Math.random( 1 );
                         else if( mini.y > mini.image.height - mini.height )
                              mini.addy = -Math.random( 1 );

                         mini.x += mini.addx;
                         mini.y += mini.addy;

                         mini.setStyle( 'background-position', -Math.round( mini.x ) + 'px ' + -Math.round( mini.y ) + 'px' );
                    }
               }
          }

          function minisMake() {
               minis = [];
               var minims = $$( 'div.lastscreen' );
               for( var i = 0; i < minims.length; i++ )
               {
                    var mini = $( minims[i] );

                    var image = mini.getStyle( 'background-image' ).match( /url\((\'|\"|)(.+)(\'|\"|)\)/ )[2];
                    if( image )
                    {
                         mini.setStyle( 'background-position', '0px 0px' );

                         mini.addx = Math.random( 2 ) - 1;
                         mini.addy = Math.random( 2 ) - 1;

                         mini.width = mini.getStyle( 'width' ).match( /^[0-9]+/ )[0];
                         mini.height = mini.getStyle( 'height' ).match( /^[0-9]+/ )[0];

                         mini.x = Math.random( mini.width );
                         mini.y = Math.random( mini.height );

                         mini.image = new Image();
                         mini.image.src = image;
                         mini.image.error = false;
                         mini.image.onerror = function() {
                              this.error = true;
                         };

                         minis.push( mini );
                    }
               }
          }

          setInterval( minisUpdate, 10 );
          setInterval( minisRandomize, 5000 );
          */
     } );