function findPos(obj) {
        var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	return {x:curleft,y:curtop};
}

function initMovie(){
          centeron =  0;
          moving = false;
          originalpos = new Object('uber1','uber2','uber3','uber4','uber5');
          originalheight = new Object('uber1','uber2','uber3','uber4','uber5');
          for (var i=1; i <= 5; i++){ 
            originalpos['uber'+i] = findPos($('uber'+i)).y
            originalheight['uber'+i] = Element.getDimensions('uber'+i).height

          };

          centeron = originalpos['uber5'];
}

function innerSize(){
         var x,y;
         if (self.innerHeight) // all except Explorer
            {
	    x = self.innerWidth;
	    y = self.innerHeight;
            }
         else if (document.documentElement && document.documentElement.clientHeight)
	      // Explorer 6 Strict Mode
              {
               x = document.documentElement.clientWidth;
	       y = document.documentElement.clientHeight;
               }
        else if (document.body) // other Explorers
             {
	     x = document.body.clientWidth;
	     y = document.body.clientHeight;
             }
      return {x:x,y:y};
}

function moved(object){
         var movedboo;
         var coords = new Array(2);
         coords = findPos($(object));
         size = innerSize();
         if (coords.x < ((0.5 * size.x) - 200)) movedboo = true; else {movedboo = false};
         return movedboo;
}

function restontitle(container){
         var target = (originalpos['uber2'] - originalheight[container] - 7);    // offset for drop-shadow is about 7
         var currenty = findPos($(container)).y;
         var diff = getDifference(target, currenty);

         return diff;
}

function getDifference(v, v2){          // (target, currentposition)
         if ( v >= v2 ) { diff = v - v2; return diff; }
         else { diff =  v2 - v; return -diff; } // account for wraparound at 0;

         }

function xsize(){
          var size = innerSize();
          return size.x;
          }

function restonredbox(){
          var diffy = 0;
          diffy = getDifference((originalpos['uber2'] - 7 - originalheight['uber4'] - originalheight['uber5']), findPos($('uber5')).y);
          return diffy;
          }


function movie(showme) {    // un-nest this un-holy messed-upness
        var currentgreen = currentblue = currentred = false;
         currentblue =  Element.visible('blueboxcontent');
         currentred  =  Element.visible('redboxcontent');

         greencontents = new Array('contactcontent','biocontent', 'networkcontent', 'archivecontent', 'whatsupcontent');
        for (var i = 0; i <= 4; i++) {
            if (Element.visible(greencontents[i])) {
              currentgreen = greencontents[i];
               }
        }
        function ingreen(arg){
          for (var i = 0; i <= 4; i++) {
            if (greencontents[i] == arg) { return true; }
            }
            return false;
              }


        if (moving == true) { return;}      // there must be a better way with all these libraries...
           else {
        if ( currentgreen == showme ) {
               moving = true;
               new Effect.BlindUp(currentgreen, {duration: 0.5, queue:{scope:'stowgreenini',limit:3},transition: Effect.Transitions.exponential});
               new Effect.MoveBy('uber5', (originalpos['uber5'] - findPos($('uber5')).y), 0, {duration:0.8,queue:{scope:'stowgreenini',limit:3},transition: Effect.Transitions.exponential});
               new Effect.MoveBy('uber1', 0, 190,  { delay:0.5,duration: 1.0 ,queue:{scope:'stowgreen',limit:5}});
               new Effect.MoveBy('uber2', 0, 190,  { delay:0.5,duration: 0.8 ,queue:{scope:'stowgreen',limit:5}});
               new Effect.MoveBy('uber3', 0, 190,  { delay:0.5,duration: 0.6 ,queue:{scope:'stowgreen',limit:5}});
               new Effect.MoveBy('uber4', 0, 190,  { delay:0.6,duration: 0.3 ,queue:{scope:'stowgreen',limit:5}});
               new Effect.MoveBy('uber5', 0, -190, {                queue:{position:'end',scope:'stowgreen',limit:5},transition: Effect.Transitions.slowstop});

              setTimeout("moving = false", 2400);
               }
           else if ( ( showme == 'blueboxcontent' ) && ( currentgreen ) ) {
                moving = true;
                if (currentred) {  new Effect.Phase('redboxcontent', {delay: 0.0}); }
                new Effect.Phase(currentgreen, { duration: 0.8 });
                new Effect.MoveBy('uber2',    0, 190, {delay: 1.2, duration: 0.5});
                new Effect.MoveBy('uber4',    0, 380, {delay: 0.5, duration: 0.4});
                new Effect.MoveBy('uber4', restontitle('uber4'), 0, {delay: 0.9, duration: 0.3});
                new Effect.MoveBy('uber5', restonredbox(), 0,  {delay: 0.9, duration: 0.3});
                showblue();
                setTimeout("moving = false", 1700);
                currentgreen = false;

               }
              else if (currentblue && (showme == 'blueboxcontent')){    // close bluebox
                     moving = true;
                     hideblue();
                     new Effect.MoveBy('uber2', 0, -190,  {delay: 0.0, duration: 0.5 });
                     new Effect.MoveBy('uber1', 0, 190,  {delay: 1.8, duration: 1.0 });
                     new Effect.MoveBy('uber2', 0, 190,  {delay: 1.9});
                     new Effect.MoveBy('uber5', (originalpos['uber5'] - findPos($('uber5')).y), 0, {delay: 1.3, duration: 1.2, transition: Effect.Transitions.slowstop });
                     new Effect.MoveBy('uber4', (originalpos['uber4'] - findPos($('uber4')).y), 0, {delay: 0.7, duration: 0.5});
                     new Effect.MoveBy('uber5', 0, -190, {delay: 2.5});
                     new Effect.MoveBy('uber4', 0, -380, {delay: 1.2, duration: 0.7, transition: Effect.Transitions.slowstop });
                     new Effect.MoveBy('uber4', 0, 190, {delay: 2.1, duration: 1.0 });
                     setTimeout("moving = false", 3600);
                     return;
                  }
                  else if (( showme == 'blueboxcontent' ) && !currentred && !currentgreen) {   // show bluebox from initial state

                       moving = true;
                        new Effect.MoveBy('uber1', 0, -190, {delay: 0.0, duration: 0.8});
                        new Effect.MoveBy('uber2', 0, -190, {delay: 0.0, duration: 0.8});
                        new Effect.MoveBy('uber2', 0,  190, {delay: 1.4, duration: 1.0});
                        new Effect.MoveBy('uber3', 0, -190, {delay: 0.0, duration: 1.0, transition: Effect.Transitions.slowstop});
                        new Effect.MoveBy('uber4', 0, -190, {delay: 0.0, duration: 0.5});
                        new Effect.MoveBy('uber4', 0, 380, {delay: 0.5, duration: 0.6});
                        new Effect.MoveBy('uber5', 0, 190, {delay: 0.0, duration: 0.4});
                        new Effect.MoveBy('uber4', restontitle('uber4'), 0, {delay: 1.1, duration: 0.6, transition: Effect.Transitions.slowstop});
                        new Effect.MoveBy('uber5', restonredbox(), 0,  {delay: 0.4, duration: 0.5, transition: Effect.Transitions.exponential});
                        showblue();
                       setTimeout("moving = false", 2400);
                       return;
                        }
                  else if ( (showme == 'blueboxcontent')  && currentred ) {

                       moving = true;
                        /* close red first, later try puff and appear for green instead */
                        new Effect.SlideUp('redboxcontent',  { delay: 0.0, duration: 0.6});
                        new Effect.Fade('redbox', {delay: 0.6, duration: 0.4});
                        new Effect.Appear('redbox', {delay: 1.5, duration: 1.0});
                        new Effect.MoveBy('uber2', 0,  190, {delay: 1.4, duration: 1.0});
                        new Effect.MoveBy('uber5', 0, 380, {delay: 0.2, duration: 0.4});
                        new Effect.MoveBy('uber4', restontitle('uber4'), 0, {delay: 0.6, duration: 0.4, transition: Effect.Transitions.slowstop});
                        new Effect.MoveBy('uber5', restonredbox(), 0,  {delay: 0.6, duration: 0.7});
                        showblue();
                        setTimeout("moving = false", 2000);
                        currentgreen = false;
                       }
                       else if ( currentblue && ingreen(showme) && ( showme != 'redboxcontent' ) ) {
                         // stow redbox and bluebox and show greenbox
                             
                             moving = true;
                             new Effect.ResizeTo('bluebox',  340, 80, {delay: 0.0, duration: 0.6} );
                             new Effect.Phase('blueboxcontent', {delay: 0.0, duration: 0.6} );
                             new Effect.MoveBy('uber2', 0, -190,  {delay: 0.0, duration: 0.5 });
                             new Effect.MoveBy('uber4', (originalpos['uber4'] - findPos($('uber4')).y), 0, {delay: 0.3, duration: 0.4});
                             new Effect.MoveBy('uber4', 0, -380, {delay: 0.7, duration: 0.6 });
                             new Effect.Phase(showme, {delay: 0.5, duration: 1.0});
                             new Effect.MoveBy('uber5', (centeronheight(showme, 'uber5')), 0, {delay: 0.5, duration: 1.0});
                             setTimeout("moving = false", 1500);
                             return;
                            }
                          else if  ( currentgreen && ingreen(showme)) {
                            // greenbox exchange only
                            moving = true;

                            new Effect.SlideUp(currentgreen, { duration:0.6,  afterFinish: function(){expandGreen(showme)} });
                            setTimeout("moving = false", 1500);
                            }
                            else if ( (showme == 'redboxcontent') && !currentred && currentblue ) {

                                 moving = true;
                                 new Effect.PhaseOut('redbox', {delay: 0.0, duration: 0.5});
                                 new Effect.PhaseIn('redbox', {delay: 1.0, duration: 0.2});
                                 new Effect.Phase('redboxcontent', {delay: 1.2, duration: 1.0});
                                 new Effect.MoveBy('uber5', (originalpos['uber4'] - findPos($('uber5')).y), 0, {delay: 0.6, duration: 0.7});
                                 new Effect.MoveBy('uber5', 0, -380,{delay: 1.3, duration: 1.0, transition: Effect.Transitions.slowstop });
                                 new Effect.MoveBy('uber4', (centeronheight(showme, 'uber4')), 0, {delay: 1.2, duration: 0.8});
                                 new Effect.ResizeTo('bluebox',  340, 80, {delay: 0.1, duration: 1.0} );
                                 new Effect.ResizeTo('uber3',  380, 80, {delay: 1.2, duration: 0.1} );
                                 new Effect.MoveBy('uber2', 0, -190,{delay: 0.5, duration: 0.5 });
                                 new Effect.Phase('blueboxcontent', {delay: 0.0, duration: 0.6} );
                                 setTimeout("moving = false", 2200);
                                 return;

                                 }
                            else if (( showme == 'redboxcontent')  && currentgreen ){

                                 moving = true;
                                 new Effect.PhaseOut(currentgreen, {delay: 0.0, duration: 0.7});
                                 new Effect.PhaseOut('greenbox', {delay: 0.8, duration: 1.0});
                                 new Effect.MoveBy('uber5', (originalpos['uber4'] - findPos($('uber5')).y), 0, {delay: 1.8, duration: 0.5});
                                 new Effect.MoveBy('uber5', 0, -380,{ delay: 2.3, duration: 1.2,  transition: Effect.Transitions.slowstop });
                                 new Effect.Appear('greenbox', {delay: 2.3, duration: 1.0});

                                 new Effect.MoveBy('uber4', 0,  380,{ delay: 0.0, duration: 0.6 });
                                 new Effect.MoveBy('uber4', (centeronheight(showme, 'uber4')), 0, {delay: 0.6, duration: 1.0});
                                 new Effect.Phase(showme, {delay: 1.0, duration: 1.0});
                                 setTimeout("moving = false", 2000);
                                 return;
                                 }
                            else if ( (showme == 'redboxcontent') && !currentred && !currentgreen && !currentblue ){

                                 moving = true;
                                 new Effect.MoveBy('uber1', 0, -190,{ duration: 1.0 });
                                 new Effect.MoveBy('uber2', 0, -190,{ duration: 1.0 });
                                 new Effect.MoveBy('uber3', 0, -190,{ duration: 1.0 });
                                 new Effect.MoveBy('uber5', 0, -190,{ duration: 1.0 });
                                 new Effect.MoveBy('uber5', -originalheight['uber4'], 0, {delay: 1.0, duration: 1.0 });
                                 new Effect.MoveBy('uber4', 0, 190,{ duration: 0.8 });
                                 new Effect.MoveBy('uber4', (centeronheight(showme, 'uber4')), 0, {delay: 0.8, duration: 0.8,transition: Effect.Transitions.slowstop});
                                 new Effect.Phase(showme, {delay: 1.0, duration: 0.6});
                                 setTimeout("moving = false", 2000);
                                 return;
                                }
                            else if ( showme == 'redboxcontent' && currentred){

                                 moving = true;
                                 new Effect.MoveBy('uber1', 0, 190,{delay: 0.6, duration: 1.4 });
                                 new Effect.MoveBy('uber2', 0, 190,{delay: 0.8, duration: 1.2 });
                                 new Effect.MoveBy('uber3', 0, 190,{delay: 1.0, duration: 1.0 });
                                 new Effect.MoveBy('uber5', 0, 190,{delay: 1.2, duration: 0.8});
                                 new Effect.MoveBy('uber5', originalheight['uber4'], 0, {delay: 0.0, duration: 0.8 });
                                 new Effect.MoveBy('uber4', 0, -190,{ delay: 1.2, duration: 0.8 });
                                 new Effect.MoveBy('uber4', (originalpos['uber4'] - findPos($('uber4')).y), 0, {delay: 0.0, duration: 0.8});
                                 new Effect.Phase(showme, {delay: 0.0, duration: 0.8});
                                 setTimeout("moving = false", 2000);
                                 return;
                                }
                               else if  ( currentred && ingreen(showme)) {
                                 moving = true;
                                 new Effect.MoveBy('uber5', (originalpos['uber5'] - findPos($('uber5')).y), 0, {delay: 0.0, duration: 0.8 });
                                 new Effect.MoveBy('uber5', 0, 380,{ delay: 0.8, duration: 1.0, transition: Effect.Transitions.exponential });
                                 new Effect.MoveBy('uber4', 0, -380,{ delay: 0.8, duration: 1.0, transition: Effect.Transitions.exponential, afterFinish:function(){expandGreen(showme)} });
                                 new Effect.MoveBy('uber4', (originalpos['uber4'] - findPos($('uber4')).y), 0, {delay: 0.0, duration: 0.8});
                                // new Effect.Phase(showme, {delay: 1.8, duration: 0.8});

                                 new Effect.Phase('redboxcontent', {delay: 0.1, duration: 0.7});
                               //  new Effect.MoveBy('uber5', (centeronheight(showme, 'uber5')-originalheight['uber5']), 0, {delay: 1.8, duration: 1.0});
                               // expandGreen(showme);
                                 setTimeout("moving = false", 2000);
                                 return;
                               }
                               else if  ( greencontents.grep(showme) && !currentgreen && !currentred && !currentblue )

                                 { // show greenbox from initial state


                                moving = true;
                                 new Effect.MoveBy('uber1', 0, -190,{queue:{scope:'greeninitial', limit:5},transition: Effect.Transitions.exponential });
                                 new Effect.MoveBy('uber2', 0, -190,{queue:{scope:'greeninitial', limit:5},transition: Effect.Transitions.exponential });
                                 new Effect.MoveBy('uber3', 0, -190,{queue:{scope:'greeninitial', limit:5},transition: Effect.Transitions.exponential });
                                 new Effect.MoveBy('uber4', 0, -190,{queue:{scope:'greeninitial', limit:5},transition: Effect.Transitions.exponential });
                                 new Effect.MoveBy('uber5', 0,  190,{queue:{scope:'greeninitial', limit:5},transition: Effect.Transitions.exponential, afterFinish:function(){expandGreen(showme)} });

                                 setTimeout("moving = false", 2000);
                                 return;
                            }


           };

} // movie

function centeronheight(showme, container){
         var targetpos = 0;
         var diff = 0;
         var currenty =  findPos($(container)).y;
         var currentheight =  Element.getDimensions(showme).height + 60;
         targetpos = ( ( centeron - currentheight ) / 2 );
         if (targetpos < 0){ targetpos = 4}
         diff = targetpos - currenty;

         return diff;
}

function showblue(){
        new Effect.ResizeTo('bluebox',  720, 80, {delay: 1.3, duration: 0.5, queue:{ scope:'showblue', limit:2},transition: Effect.Transitions.slowstop });
         new Effect.Appear('blueboxcontent', { queue:{position:'end', scope:'showblue',limit:2} });
     //   setTimeout("headingreplace()", 2100);
          return;
}

function expandGreen(show){
             new Effect.Appear(show,  {duration:1, scaleMode:'box', queue:{scope:'greenexpand', limit: 2} });
             new Effect.MoveBy('uber5', (centeronheight(show, 'uber5')), 0 , {duration:0.5, queue:{scope:'greenexpand', limit: 2},  transition: Effect.Transitions.slowstop })

}




function hideblue(){

         new Effect.MoveBy('uber3', 0, 190, {delay: 1.5} );
         new Effect.ResizeTo('bluebox',  340, 80, {delay: 0.3, duration: 0.7, transition: Effect.Transitions.slowstop} );
         new Effect.ResizeTo('uber3',  380, 80, {delay: 1.2, duration: 0.1} );
        // new Effect.ResizeTo('blueboxcontent', 200, 260, {delay: 0.6, duration: 0.1} );
         new Effect.Fade('blueboxcontent', {delay: 0.0, duration: 0.3, transition: Effect.Transitions.slowstop} );
         return;
}