var CALENDARMOUSEDOWN = false;
var CALENDAROFFSET = 0;
var CALENDARPARENTOFFSET = 0;
var RUNTRACKPLAYBACKMOUSEDOWN = false;
var RUNTRACKPLAYBACKARROWMOUSEDOWN = false;
var RUNTRACKIMAGESMOUSEDOWN = false;
var RUNTRACKIMAGESARROWMOUSEDOWN = false;
var RUNTRACKACTIONRUNID = 0;
var RUNTRACKPARENTOFFSET = 0;
var RUNTRACKOFFSET = 0;
var RUNTRACKSCROLLSPEED = 200;
var RUNTRACKCURRENTPANEL = "playback";
var ACCOUNTPREVIEWMOUSEDOWN = false;
var ACCOUNTPREVIEWRUNID = 0;
var ACCOUNTPREVIEWSTARTY = 0;
var ACCOUNTPREVIEWSTARTX = 0;

var LightBuckets = {
   jQuery : $,

   init : function() {
      this.initializeLayout();
      this.initializeFullControl();
   },

   initializeLayout : function() {
      var LightBuckets = this;

      // Menu
      $('.menuItem').unbind().mouseenter(function() {
         var id = this.id.split(',');
         var active = parseInt(id[1]);

         if (active != 1)
            $(this).css('background-color', '#cccccc');

         $(this).css('cursor', 'pointer');
      }).mouseleave(function() {
         var id = this.id.split(',');
         var active = parseInt(id[1]);

         if (active != 1)
            $(this).css('background-color', '#e6e6e6');
      }).mousedown(function() {
         $(this).css('background-color', '#a0a0a0');

      }).click(function() {
         var id = this.id.split(',');
         var active = parseInt(id[1]);
         var url = id[2];

         location.href = url;

         return false;
         
      });

      // Observatory Network, More Details
      $('.observatoryDisplayMoreL').unbind().mouseenter(function() {
         $(this).css('cursor', 'pointer');
      }).click(function() {
         USObservatoryMore(this.id, -1);
         return false;
      });

      $('.observatoryDisplayMoreR').unbind().mouseenter(function() {
         $(this).css('cursor', 'pointer');
      }).click(function() {
         USObservatoryMore(this.id, 1);
         return false;
      });

      $('.observatoryDisplaySlideL').unbind().mouseenter(function() {
         $(this).css('cursor', 'pointer');
      }).click(function() {
         var handlePosition = $('#observatoryDisplayHandle').position();
         var handleWidth = $('#observatoryDisplayHandle').width();
         var handleHalf = parseInt(handleWidth/2);

         handlePosition.left += handleHalf;
         LightBuckets.telescopeNetworkScroll(handlePosition.left - 100);

         return false;
      });

      $('.observatoryDisplaySlideR').unbind().mouseenter(function() {
         $(this).css('cursor', 'pointer');
      }).click(function() {
         var handlePosition = $('#observatoryDisplayHandle').position();
         var handleWidth = $('#observatoryDisplayHandle').width();
         var handleHalf = parseInt(handleWidth/2);

         handlePosition.left += handleHalf;
         LightBuckets.telescopeNetworkScroll(handlePosition.left + 100);

         return false;
      });


      //
      $('.observatoryDisplay').each(function () {

         var sliderBlock = $('.observatoryDisplaySlider');
         var sliderWidth = sliderBlock.width();
         $('.observatoryDisplayHandle').unbind().mouseenter(function() {
            $(this).css('cursor', 'pointer');
         });

         var slider = $('.observatoryDisplaySlider').slider({ 
            animate: true,
            handle: '.observatoryDisplayHandle',
            min: 0, 
            max: sliderWidth,
            start: function (ev, ui) {
               //confirm("SliderWidth: " + sliderWidth + " & ObservatoryWidth: " + observatoryWidth);
            },
            slide: function (ev, ui) {
               LightBuckets.telescopeNetworkScroll(ui.value);
            }, 
            stop: function (ev, ui) {
              //ul.animate({ 'left' : '-' + ui.value + 'px' }, 500, 'linear');
            }
         });
      });

      $('.observatoryPhotoSelect').unbind().mouseenter(function() {
         $(this).css('cursor', 'pointer');
      }).click(function() {
         USSelectObservatory(this.id);

         return false;
      });

      // Full control
      $('.USSelectObservatory').unbind().click(function() {
         USSelectObservatory(this.id);
         return false;
      });

      $('.USSchedulingButton').unbind().mouseenter(function() {
         $(this).css('cursor', 'pointer');
      }).click(function() {
         var skip = $('#USSchedulingCalendarOptions').val();
         var id = this.id.split(",");
         var direction = id[0];
         var date = id[1];
         setLoadingSM('USSchedulingCalendar');
         var salt = getSalt();

         $.get("/ajax_usschedulingcalendar.php", { salt: salt, skip : skip, direction : direction,
            date : date }, function(data) {
            var json = evalJSON(data);
            var check = parseInt(json.check);

            if (check >= 0) {
               if (check == 0)
                  confirm("You have reached tonight's schedule");

               $('#USSchedulingNext').html(json.next);
               $('#USSchedulingPrevious').html(json.previous);
               $('#USSchedulingCalendar').html(json.response);

               LightBuckets.initializeLayout();
            }
         });

         return false;
      });

      $('.USSelectSchedule').click(function() {
         USSelectSchedule(this.id);
         return false;
      });

      $('.help img').unbind().mouseenter(function() {
         var id = $(this).parent().attr('id').replace(/help/g, '');

         // Get the position of this help icon
         var position = $(this).parent().position();

         var width = $('#helpon' + id).width();

         $('#helpon' + id).css('left', (position.left - width - 20) + "px");
         $('#helpon' + id).css('top', (position.top+10) + "px");
         $(this).css('cursor', 'pointer');
         $('#helpon' + id).show();
      }).mouseleave(function() {
         var id = $(this).parent().attr('id').replace(/help/g, '');
         $('#helpon' + id).hide();
      });

      $('.supportFAQCategory').unbind().mouseenter(function() {
         $(this).css('cursor','pointer');
         $(this).css('text-decoration','underline');
      }).mouseleave(function() {
         $(this).css('text-decoration','none');
      }).click(function() {
         FAQLoadCategory(this.id);
         return false;
      });

      $('.supportFAQQuestion').unbind().mouseenter(function() {
         $(this).css('cursor','pointer');
         $(this).css('text-decoration','underline');
      }).mouseleave(function() {
         $(this).css('text-decoration','none');
      }).click(function() {
         var id = this.id.replace(/FAQQuestion/g, '');
         FAQLoadQuestion(id);
         return false;
      });

      $('.supportFAQBackToCategories').unbind().mouseenter(function() {
         $(this).css('cursor','pointer');
         $(this).css('text-decoration','underline');
      }).mouseleave(function() {
         $(this).css('text-decoration','none');
      }).click(function() {
         FAQBackCategories();
         return false;
      });


      // Account
      $('.accountHistoryData').unbind().mouseenter(function() {
         var id = parseInt($(this).parent().attr('id').replace(/purchase/g, ""));

         if (!id)
            return false;

         $(this).css('cursor','pointer');
      }).click(function() {
         var id = parseInt($(this).parent().attr('id').replace(/purchase/g, ""));

         if (!id)
            return false;

         var salt = getSalt();

         $('#accountOverlayContentLeft').html('');
         $('#accountOverlayContentRight').html('');

         $('#accountOverlay').css("opacity", 0.0).show().animate({ "opacity" : 1.0}, 500, function() {
            setLoading('accountOverlayContentLeft');
            $('#accountOverlayContentRight').html('');
            $.get("ajax_accounthistorydetails.php", { salt: salt, purchaseid: id }, function(data) {
               var json = evalJSON(data);
               //$('#accountOverlayContent').html(json.response);
               $('#accountOverlayContentLeft').html(json.left);
               $('#accountOverlayContentRight').html(json.right);
               LightBuckets.initializeLayout();
            });
         });

         return false;
      });

      $('.accountHistoryDelete').unbind().mouseenter(function() {
         $(this).css('background-color','#e49797');
         $(this).css('cursor','pointer');
      }).mouseleave(function() {
         $(this).css('background-color','');
      }).click(function() {
         var id = parseInt($(this).parent().attr('id').replace(/purchase/g, ""));
         if (confirm("Delete this item?")) {
            accountHistoryDelete(id);
         }
         return false;
      });


      $('#accountHistoryOptions span').unbind().mouseenter(function() {
         $(this).css('background-color','#ffc26b');
         $(this).css('cursor','pointer');
      }).mouseleave(function() {
         $(this).css('background-color','#e5e5e5');
      }).click(function() {
         accountHistoryToggle(this.id);
         return false;
      });

      $('#accountHistoryPaging .pagingNumberOn span').unbind().mouseenter(function() {
         $(this).css('background-color','#ffc26b');
         $(this).css('cursor','pointer');
      }).mouseleave(function() {
         $(this).css('background-color','');
      }).click(function() {
         accountHistoryPage(parseInt(this.id));
         return false;
      });

      $('.accountField').unbind().mouseenter(function() {
         $(this).css('background-color','#e5e5e5');
         $(this).css('cursor','pointer');
      }).mouseleave(function() {
         $(this).css('background-color','#f5f5f5');
      }).click(function() {
         // Disable all of the others
         $('.accountField').each(function() {
            var id = this.id.replace(/profile/g, '');
            $('#profile' + id + 'on').hide();
            $(this).show();
         });

         var id = this.id.replace(/profile/g, '');
         $(this).hide();
         $('#profile' + id + 'on').show();
         return false;
      });

      $('.accountTab').unbind().mouseenter(function() {
         $(this).css('cursor','pointer');
      }).mouseleave(function() {
      }).click(function() {
         var salt = getSalt();
         var id = this.id.split(",");
         var field = id[0];
         var pid = id[1];
         setLoadingSM('accountContentBlock');

         $.get("ajax_accounthistorydetailsload.php", { salt: salt, tab: field, pid : pid }, function(data) {
            var json = evalJSON(data);
            $('#accountContentBlock').html(json.content);
            $('#accountTabBlock').html(json.tabs);
            LightBuckets.initializeLayout();
            LightBuckets.initializeRunTrack();
         });


         return false;
      });

      $('.accountPreviewLargeToggle').unbind().mouseenter(function() {
         $(this).css('cursor', 'pointer');
         $(this).css('color', '#000000');
      }).mouseleave(function() {
         $(this).css('color', '#555555');
      }).click(function() {
         var id = this.id.split('_');
         var runid = id[1];
         $('#accountPreviewSmall_' + runid).hide();
         $('#accountPreviewLarge_' + runid).show();
         $('#accountPreviewToggleLarge_' + runid).hide();
         $('#accountPreviewToggleThumb_' + runid).show();
         return false;
      });

      $('.accountPreviewThumbToggle').unbind().mouseenter(function() {
         $(this).css('cursor', 'pointer');
         $(this).css('color', '#000000');
      }).mouseleave(function() {
         $(this).css('color', '#555555');
      }).click(function() {
         var id = this.id.split('_');
         var runid = id[1];
         $('#accountPreviewLarge_' + runid).hide();
         $('#accountPreviewSmall_' + runid).show();
         $('#accountPreviewToggleThumb_' + runid).hide();
         $('#accountPreviewToggleLarge_' + runid).show();
         return false;
      });



      $('.accountPreviewLarge').unbind().mouseenter(function() {
         $(this).css('cursor', 'move');
      }).mouseover(function() {
         $(this).css('cursor', 'move');
      }).mousedown(function(e) {
         if($.browser.mozilla){//Firefox
            $(this).css('MozUserSelect','none');
         }else if($.browser.msie){//IE
            $(this).bind('selectstart',function(){return false;});
         }

         ACCOUNTPREVIEWMOUSEDOWN = true;

         var id = this.id.split('_');
         var runid = id[1];

         var width = $('#accountPreviewLargeContents_' + runid).width();
         var height = $('#accountPreviewLargeContents_' + runid).height();

/*
         $('#accountPreviewLargeOverlay_' + runid).width(width);
         $('#accountPreviewLargeOverlay_' + runid).height(height);
*/

         ACCOUNTPREVIEWRUNID = runid;

         ACCOUNTPREVIEWSTARTY = e.pageY;
         ACCOUNTPREVIEWSTARTX = e.pageX;
         disableSelection('accountPreviewLarge_' + runid);
         disableSelection('accountPreviewLargeContents_' + runid);
      });

      $('.accountHistoryClose').unbind().mouseenter(function() {
         $(this).css('cursor', 'pointer');
      }).click(function() {
         accountDetailsClose();
         return false;
      });

      $('.groupCreate').unbind().mouseenter(function() {
         $(this).css('cursor', 'pointer');
      }).click(function() {
         $('#groupCreateToggle').hide();
         $('#groupCreateBlock').show();
         return false;
      });


      $('.groupDelete').unbind().mouseenter(function() {
         $(this).css('cursor', 'pointer');
      }).click(function() {
         var id = this.id.split("_");
         var gid = id[1];

         if (confirm("Are you sure you wish to delete this group?\nAll points within the group will be added back to your point total.")) {
            groupDelete(gid);
         }

         return false;
      });


      $('.groupPointsAdd').unbind().mouseenter(function() {
         $(this).css('cursor', 'pointer');
      }).click(function() {
         var mid = this.id;
         $('#memberActions' + mid).hide();
         $('#memberActionsAddPoints' + mid).show();
         return false;
      });

      $('.groupPointsSubtract').unbind().mouseenter(function() {
         $(this).css('cursor', 'pointer');
      }).click(function() {
         var mid = this.id;
         $('#memberActions' + mid).hide();
         $('#memberActionsSubtractPoints' + mid).show();
         return false;
      });

      $('.groupMemberDelete').unbind().mouseenter(function() {
         $(this).css('cursor', 'pointer');
      }).click(function() {
         var id = this.id.split(',');
         var groupid = id[0];
         var mid = id[1];
         if (confirm("Are you sure you wish to remove this member from the group?"))
            groupMemberRemove(groupid, mid);

         return false;
      });

      this.initializeFeaturedImage();
   },

   initializeFeaturedImage : function() {
      $('.featuredImageGo').unbind().mouseenter(function() {
         $(this).css('cursor','pointer');
      }).click(function() {
         featuredImageGo(this.id);
         return false;
      });

      // Paging
      $('.featureImagePaging').click(function() {
         var page = parseInt(this.id);
         featuredImageLoad(page);
         return false;
      });

      $('.featureImageCancel').mouseenter(function() {
         $(this).css('cursor','pointer');
      }).click(function() {
         var page = parseInt(this.id);
         featuredImageLoad(page);
         return false;
      });


   },

   initializeCheckout : function() {
      $('.cartDelete').unbind().mouseenter(function() {
         $(this).css("cursor", "pointer");
      }).click(function() {
         cartDelete(this.id);
         return false;
      });
      $('.couponRemove').unbind().mouseenter(function() {
         $(this).css("cursor", "pointer");
      }).click(function() {
         couponRemove();
         return false;
      });


   },

   initializeFullControl : function() {
      $('.fullControlExposureEdit').unbind().mouseenter(function() {
         $(this).css("cursor", "pointer");
      }).click(function() {
         $('#USExposureRow' + this.id).hide();
         $('#USExposureEdit' + this.id).show();
         return false;
      });

      $('.fullControlExposureDelete').unbind().mouseenter(function() {
         $(this).css("cursor", "pointer");
      }).click(function() {
         if (confirm("Remove subframe(s) from your imaging plan?"))
            USExposureDelete(this.id);
         return false;
      });

      $('.fullControlPosAngToggle').unbind().mouseenter(function() {
         $(this).css("cursor", "pointer");
         $(this).css("background-color", "#f7931e");
      }).mouseleave(function() {
         $(this).css("background-color", "");
      }).click(function() {
         USPlanSettingPosAngleToggle();
         return false;
      });

      $('.fullControlDitherToggle').unbind().mouseenter(function() {
         $(this).css("cursor", "pointer");
         $(this).css("background-color", "#f7931e");
      }).mouseleave(function() {
         $(this).css("background-color", "");
      }).click(function() {
         USPlanSettingDitherToggle();
         return false;
      });

      $('.fullControlPlanningToggle').unbind().mouseenter(function() {
         $(this).css("cursor", "pointer");
         $(this).css("background-color", "#f7931e");
      }).mouseleave(function() {
         $(this).css("background-color", "");
      }).click(function() {
         var name = this.id.replace(/fullControlPlanning_/g, '');
         USPlanningToggle(name);
         return false;
      });

      $('.fullControlDelHold').unbind().mouseenter(function() {
         $(this).css("cursor", "pointer");
      }).click(function() {
         USHoldPointsDelete(this.id);
         return false;
      });

      $('.fullControlPlanningSpinnerCountP').unbind().mouseenter(function() {
         $(this).css("cursor", "pointer");
         $(this).css("background-color", '#f7931e');
      }).mouseleave(function() {
         $(this).css("background-color", '#ffffff');
      }).click(function() {
         var imgid = this.id;

         var current = parseInt($('#USExposureCount' + imgid).val());
         current++;

         $('#USExposureCount' + imgid).val(current);

         return false;
      });

      $('.fullControlPlanningSpinnerCountM').unbind().mouseenter(function() {
         $(this).css("cursor", "pointer");
         $(this).css("background-color", '#f7931e');
      }).mouseleave(function() {
         $(this).css("background-color", '#ffffff');
      }).click(function() {
         var imgid = this.id;

         var current = parseInt($('#USExposureCount' + imgid).val());
         current--;

         if (current < 0)
            current = 0;

         $('#USExposureCount' + imgid).val(current);

         return false;
      });



      $('.fullControlPlanningSpinnerDurationP').unbind().mouseenter(function() {
         $(this).css("cursor", "pointer");
         $(this).css("background-color", '#f7931e');
      }).mouseleave(function() {
         $(this).css("background-color", '#ffffff');
      }).click(function() {
         var imgid = this.id;

         var current = parseInt($('#USExposureDuration' + imgid).val());

         if (current < 10)
            current++;
         else if (current >= 10 && current < 60)
            current+=10;
         else if (current >= 60 && current < 300)
            current+=60;
         else {
            current += 300;
         }

         $('#USExposureDuration' + imgid).val(current);

         return false;
      });

      $('.fullControlPlanningSpinnerDurationM').unbind().mouseenter(function() {
         $(this).css("cursor", "pointer");
         $(this).css("background-color", '#f7931e');
      }).mouseleave(function() {
         $(this).css("background-color", '#ffffff');
      }).click(function() {
         var imgid = this.id;

         var current = parseInt($('#USExposureDuration' + imgid).val());
         if (current <= 10)
            current--;
         else if (current > 10 && current <= 60)
            current-=10;
         else if (current > 60 && current <= 300)
            current-=60;
         else {
            current -= 300;
         }



         if (current < 0)
            current = 0;

         $('#USExposureDuration' + imgid).val(current);

         return false;
      });



      this.initializeCalendar();
   },

   initializeCalendar : function() {

      $('.calendarChangeMonth').unbind().mouseenter(function() {
         $(this).css("cursor", "pointer");
      }).mouseleave(function() {
      }).click(function() {
         USCalendarChangeMonth(this.id);
         return false;
      });

      $('.calendarChooseDay').unbind().mouseenter(function() {
         $(this).css("cursor", "pointer");
      }).mouseleave(function() {
      }).click(function() {
         USCalendarChooseDay(this.id);
         return false;
      });

      $('#USScheduleDayBlock').unbind().mouseenter(function() {
         $(this).css("cursor", "move");
      }).mouseleave(function() {

      }).mousedown(function(e) {

         if($.browser.mozilla){//Firefox
            $(this).css('MozUserSelect','none');
         }else if($.browser.msie){//IE
            $(this).bind('selectstart',function(){return false;});
         }

         CALENDAROFFSET = e.pageX - $(this).offset().left;
         CALENDARPARENTOFFSET = $(this).parent().offset().left;
         CALENDARMOUSEDOWN = true;

         return false;
      });

   },

   initializeTargetingResults : function() {
      $('.usescopesTargetQueryResultLink').mouseenter(function() {
         $(this).css('cursor','pointer');
      }).mouseleave(function() {
      }).click(function() {
         USTargetQueryLoad(this.id);
         return false;
      });
   },

   initializeHome : function() {
      setTimeout("howPlay()", 5000);
   }, 

   initializeRunTrack : function() {
      $('.runTrackPlaybackScrollerScroll').unbind().mouseenter(function() {
         $(this).css('cursor','pointer');
      }).mousedown(function(e) {
         var runid = this.id.replace(/ARPlaybackScroller_/g, "");
         disableSelection('ARFrame_' + runid);

         RUNTRACKPLAYBACKMOUSEDOWN = true;
         RUNTRACKACTIONRUNID = runid;

         // Record offset of the parent
         RUNTRACKPARENTOFFSET = $(this).parent().offset().top;

         // Record how far down we are from the top of the scroller
         RUNTRACKOFFSET = e.pageY - $(this).offset().top;

         return false;
      });

      $('.runTrackPlaybackScrollerArrowDown').unbind().mouseenter(function() {
         $(this).css('cursor','pointer');
      }).mousedown(function(e) {
         var runid = this.id.replace(/ARPlaybackArrowDown_/g, "");
         disableSelection('ARFrame_' + runid);

         RUNTRACKPLAYBACKARROWMOUSEDOWN = true;
         RUNTRACKACTIONRUNID = runid;

         runTrackPlaybackArrow(runid, 1);

         return false;
      });


      $('.runTrackPlaybackScrollerArrowUp').unbind().mouseenter(function() {
         $(this).css('cursor','pointer');
      }).mousedown(function(e) {
         var runid = this.id.replace(/ARPlaybackArrowUp_/g, "");
         disableSelection('ARFrame_' + runid);

         RUNTRACKPLAYBACKARROWMOUSEDOWN = true;
         RUNTRACKACTIONRUNID = runid;

         runTrackPlaybackArrow(runid, -1);

         return false;
      });

      $('.runTrackContentImagesScroller').unbind().mouseenter(function() {
         $(this).css('cursor','pointer');
      }).mousedown(function(e) {
         var id = this.id.split("_");
         var runid = id[1];
         //var totalImages = id[2];

         disableSelection('ARFrame_' + runid);

         RUNTRACKIMAGESMOUSEDOWN = true;
         RUNTRACKACTIONRUNID = runid;

         // Record offset of the parent
         RUNTRACKPARENTOFFSET = $(this).parent().offset().top;

         // Record how far down we are from the top of the scroller
         RUNTRACKOFFSET = e.pageY - $(this).offset().top;

         return false;
      });

      $('.runTrackContentImagesArrowDown').unbind().mouseenter(function() {
         $(this).css('cursor','pointer');
      }).mousedown(function(e) {
         var runid = this.id.replace(/ARImagesArrowDown_/g, "");
         disableSelection('ARFrame_' + runid);

         RUNTRACKIMAGESARROWMOUSEDOWN = true;
         RUNTRACKACTIONRUNID = runid;

         runTrackImagesArrow(runid, 1);

         return false;
      });


      $('.runTrackContentImagesArrowUp').unbind().mouseenter(function() {
         $(this).css('cursor','pointer');
      }).mousedown(function(e) {
         var runid = this.id.replace(/ARImagesArrowUp_/g, "");
         disableSelection('ARFrame_' + runid);

         RUNTRACKIMAGESARROWMOUSEDOWN = true;
         RUNTRACKACTIONRUNID = runid;

         runTrackImagesArrow(runid, -1);

         return false;
      });

      $('.runTrackTab').unbind().mouseenter(function() {
         if (rgb2hex($(this).css('background-color')) == 'cccccc') {
            $(this).css('background-color', '#dddddd');
            $(this).css('cursor', 'pointer');
         }
      }).mouseleave(function() {
         if (rgb2hex($(this).css('background-color')) == 'dddddd')
            $(this).css('background-color', '#cccccc');
      }).click(function() {
         var id = this.id.split("_");
         var runid = id[1];
         var field = id[2];
         var value = 0;


         runTrackLoad(runid, field, value);
         return false;
      });

      $('.runTrackSubframe').unbind().mouseenter(function() {
         $(this).css('background-color', '#f7931e');
         $(this).css('cursor', 'pointer');
      }).mouseleave(function() {
         $(this).css('background-color', '');
      }).click(function() {
         var id = this.id.split("_");
         var runid = id[1];
         var exposureid = id[2];
         runTrackLoad(runid, "subframes", exposureid);
         return false;
      });

      $('.runTrackRightSubframe').unbind().mouseenter(function() {
         $(this).css('background-color', '#55BB55');
         $(this).css('cursor', 'pointer');
      }).mouseleave(function() {
         $(this).css('background-color', '#dadada');
      }).click(function() {
         var id = this.id.split("_");
         var runid = id[1];
         var exposureid = id[2];
         runTrackLoad(runid, "subframes", exposureid);
         return false;
      });

      $('.runTrackPlaybackSubframe').unbind().mouseenter(function() {
         $(this).css('cursor', 'pointer');
      }).mouseleave(function() {
      }).click(function() {
         var id = this.id.split("_");
         var runid = id[1];
         var exposureid = id[2];
         runTrackLoad(runid, "subframes", exposureid);
         return false;
      });

      $('.runTrackSkyThumb').unbind().mouseenter(function() {
         var id = this.id.split("_");
         var type = id[0];
         var runid = id[1];

         // Hide all
         $('#runTrackSkyImage_skyview_' + runid).hide();
         $('#runTrackSkyImage_allsky_' + runid).hide();
         $('#runTrackSkyImage_skyquality_' + runid).hide();

         // Show target
         $('#runTrackSkyImage_' + type + '_' + runid).show();
      });

   },

   telescopeNetworkScroll : function(value) {
      var observatoryDisplay = $('.observatoryDisplay');
      var ul = $('ul', observatoryDisplay);
      var observatoryWidth = ul.width();

      var sliderBlock = $('.observatoryDisplaySlider');
      var sliderWidth = sliderBlock.width();

      var handleWidth = $('.observatoryDisplayHandle').width();
      var handleHalf = parseInt(handleWidth/2);


      // Define the edges
      //var edgeWidth = 15;
      var edgeWidth = 22;

      // Deal with the slider position
      var offset = value - handleHalf;

      if (offset < 0)
         offset = 0;
      else if (offset > sliderWidth - handleWidth)
         offset = sliderWidth - handleWidth;

      $('.observatoryDisplayHandle').css('left', offset + "px");

      var trueMin = 0;
      var trueMax = sliderWidth - handleWidth - 2*edgeWidth;

      var contentOffset = parseInt((offset / (trueMax - trueMin)) * (observatoryWidth - sliderWidth - 2*edgeWidth));

      ul.css('left', '-' + contentOffset + 'px');

   }
};

// Initialization
$(document).ready(function(){
   LightBuckets.init();


   $(this).mousemove(function(e) {
      if (CALENDARMOUSEDOWN) {
         var x = e.pageX - CALENDARPARENTOFFSET - CALENDAROFFSET;
         if (x < 0)
            x = 0;

         var width = $('#USScheduleDayBlock').width();
         var parentWidth = $('#USScheduleDayBlock').parent().width();

         if (x + width > parentWidth)
            x = parentWidth - width;

         $('#USScheduleDayBlock').css("left", x + "px");
      } else if (RUNTRACKPLAYBACKMOUSEDOWN) {
         var runid = RUNTRACKACTIONRUNID;

         var y = e.pageY - RUNTRACKPARENTOFFSET - RUNTRACKOFFSET;

         if (y < 0)
            y = 0;

         var blockHeight = $('#ARPlaybackScrollBlock_' + runid).height();
         var scrollHeight = $('#ARPlaybackScroller_' + runid).height();

         if (y + scrollHeight > blockHeight)
            y = blockHeight - scrollHeight;

         $('#ARPlaybackScroller_' + runid).css('top', y + "px");

         // Compare the new y to the % of the height and adjust accordingly
         var percentScrolled = y / (blockHeight - scrollHeight);

         runTrackPlaybackMatchScroller(runid, percentScrolled);
      } else if (RUNTRACKIMAGESMOUSEDOWN) {
         var runid = RUNTRACKACTIONRUNID;

         var y = e.pageY - RUNTRACKPARENTOFFSET - RUNTRACKOFFSET;

         if (y < 0)
            y = 0;

         var blockHeight = $('#ARImagesScrollBlock_' + runid).height();
         var scrollHeight = $('#ARImagesScroller_' + runid).height();

         if (y + scrollHeight > blockHeight)
            y = blockHeight - scrollHeight;

         $('#ARImagesScroller_' + runid).css('top', y + "px");

         // Compare the new y to the % of the height and adjust accordingly
         var percentScrolled = y / (blockHeight - scrollHeight);

         runTrackImagesScroller(runid, percentScrolled);
      } else if (ACCOUNTPREVIEWMOUSEDOWN) {
         var runid = ACCOUNTPREVIEWRUNID;

         // Compare with the old offsets
         var offsetY = ACCOUNTPREVIEWSTARTY - e.pageY;
         var offsetX = ACCOUNTPREVIEWSTARTX - e.pageX;

         // Current
         var currentY = parseInt($('#accountPreviewLargeContents_' + runid).css('top').replace(/px/g, ""));
         var currentX = parseInt($('#accountPreviewLargeContents_' + runid).css('left').replace(/px/g, ""));

         // Boundaries
         var sizeY = $('#accountPreviewLargeContents_' + runid).height();
         var sizeX = $('#accountPreviewLargeContents_' + runid).width();

         // Parent
         var parY = $('#accountPreviewLarge_' + runid).height();
         var parX = $('#accountPreviewLarge_' + runid).width();

         var newX = currentX - offsetX;
         var newY = currentY - offsetY;

         if (newX < -sizeX + parX)
            newX = -sizeX + parX;
/*
         else if (newX > sizeX - parX)
            newX = sizeX - parX;
*/
         else if (newX > 0)
            newX = 0;

         if (newY < -sizeY + parY)
            newY = -sizeY + parY;
         else if (newY > 0)
            newY = 0;
/*
         else if (newY > sizeY - parY)
            newY = sizeY - parY;
*/

         $('#accountPreviewLargeContents_' + runid).css('top', newY + "px");
         $('#accountPreviewLargeContents_' + runid).css('left', newX + "px");
/*
         $('#accountPreviewLargeOverlay_' + runid).css('top', newY + "px");
         $('#accountPreviewLargeOverlay_' + runid).css('left', newX + "px");
*/

         ACCOUNTPREVIEWSTARTY = e.pageY;
         ACCOUNTPREVIEWSTARTX = e.pageX;
      }


   });

   $(this).mouseup(function(e) {
      if (CALENDARMOUSEDOWN) {
         var x = $('#USScheduleDayBlock').position().left;
         var width = $('#USScheduleDayBlock').parent().width();

         USCalendarMovedTime(x/width);

         CALENDARMOUSEDOWN = false;
         return false;
      } else if (RUNTRACKPLAYBACKMOUSEDOWN) {
         RUNTRACKPLAYBACKMOUSEDOWN = false;
         return false;
      } else if (RUNTRACKPLAYBACKARROWMOUSEDOWN) {
         RUNTRACKPLAYBACKARROWMOUSEDOWN = false;
         return false;
      } else if (RUNTRACKIMAGESMOUSEDOWN) {
         RUNTRACKIMAGESMOUSEDOWN = false;
         return false;
      } else if (RUNTRACKIMAGESARROWMOUSEDOWN) {
         RUNTRACKIMAGESARROWMOUSEDOWN = false;
         return false;
      } else if (ACCOUNTPREVIEWMOUSEDOWN) {
         ACCOUNTPREVIEWMOUSEDOWN = false;
         return false;
      }
   });



});

//-----------------------------


var ajaxObject = [];

function initializeMouse() {
/*
   document.onmousedown = lbMouseDown;
   document.onmousemove = lbMouseMove;
   document.onmouseup = lbMouseUp;
*/
}

function clearMouse() {
   document.onmousedown = null;
   document.onmousemove = null;
   document.onmouseup = null;
}

function lbMouseMove(ev) {
   ev = ev || window.event;
   var mousePos = mouseCoords(ev);

   if (USCalendarDragging) {
      var mousePos = mouseCoords(ev);
      var newX = mousePos.x - USCalendarClickOffsetX - USCalendarStartX;;

      // Check borders
      if (newX < 0)
         newX = 0;

      if (newX + USCalendarBlockWidth > USCalendarPeriodWidth)
         newX = USCalendarPeriodWidth - USCalendarBlockWidth;

      USCalendarElement.style.left = newX +'px';

   }
}

function lbMouseUp(ev) {
   ev = ev || window.event;

   if (USCalendarDragging)
      USCalendarMouseUp(ev);

}

function lbMouseDown(ev) {
/*
   ev = ev || window.event;

   mousePos = mouseCoords(ev);

   var mouseDownElement;

   if (window.event)
      mouseDownElement = ev.srcElement;
   else
      mouseDownElement = ev.target;

   if (mouseDownElement.className && 
       mouseDownElement.className == 'scheduleDayBlock' && 
       !USCalendarLoadingTime) {
      USCalendarMouseDown(ev);
   }
*/
}

function rgb2hex(rgbString) {
   var parts = rgbString
           .match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/)
   ;

   delete (parts[0]);
   for (var i = 1; i <= 3; ++i) {
       parts[i] = parseInt(parts[i]).toString(16);
       if (parts[i].length == 1) parts[i] = '0' + parts[i];
   }
   return parts.join('');
}

function createRequestObject() {
    var ajaxObj;
    var browser = navigator.appName;
    if(browser.indexOf('Microsoft') >= 0)
        ajaxObj = new ActiveXObject("Microsoft.XMLHTTP");
    else
        ajaxObj = new XMLHttpRequest();

    return ajaxObj;
}


function zeroPad(num, count) {
   var numZeropad = num + '';

   while(numZeropad.length < count)
      numZeropad = "0" + numZeropad;

   return numZeropad;
}

function removeApos(string) {
   return string.replace(/'/g, "");
}

function removeCol(string) {
   return string.replace(/:/g, "");
}

function evalJSON(responseText) {
   var json = eval('(' + responseText + ')');

   return json;
}

function getSalt() {
   return Math.floor(Math.random()*1000);
}


function getValueOf(objectName) {
   return document.getElementById(objectName).value;
}

function getSelectValueOf(objectName) {
   var selectObj = document.getElementById(objectName);
   var selectIndex = selectObj.selectedIndex;
   return selectObj.options[selectIndex].value;
}

function updateValueOf(objectName, value) {
   document.getElementById(objectName).value = value;
}

function hide(objectName) {
   document.getElementById(objectName).style.display = 'none';
}

function show(objectName) {
   document.getElementById(objectName).style.display = '';
}

function updateInnerHtml(objectName, value) {
   document.getElementById(objectName).innerHTML = value;
}

function getInnerHtml(objectName) {
   return document.getElementById(objectName).innerHTML;
}

function addInnerHtml(objectName, value) {
   var newValue = getInnerHtml(objectName) + value;
   updateInnerHtml(objectName, newValue);
}

function updateClassName(objectName, value) {
   document.getElementById(objectName).className = value;
}

function disableButton(objectName) {
   var button = document.getElementById(objectName);
   button.value = '...';
   button.disabled = true;
}

function enableButton(objectName, value) {
   var button = document.getElementById(objectName);
   button.value = value;
   button.disabled = false;
}

function test(string) {
   document.getElementById('test').value += "\n" + string;
}


function disableSelection(targetName){
   var target = document.getElementById(targetName);

   if (typeof target.onselectstart!="undefined") //IE route
      target.onselectstart=function(){return false}
   else if (typeof target.style.MozUserSelect!="undefined") //Firefox route
      target.style.MozUserSelect="none"
   else //All other route (ie: Opera)
      target.onmousedown=function(){return false}
   target.style.cursor = "default"
}



//---------------------------------------
// Mouse

function mouseCoords(ev){
   if(ev.pageX || ev.pageY){
      return {x:ev.pageX, y:ev.pageY};
   }

   if (document.documentElement) {
      return {
         x:ev.clientX + document.documentElement.scrollLeft - document.documentElement.clientLeft,
         y:ev.clientY + document.documentElement.scrollTop  - document.documentElement.clientTop
      };
   } else {
      return {
         x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,
         y:ev.clientY + document.body.scrollTop  - document.body.clientTop
      };
   }

}

function getMouseOffset(target, ev){
   ev = ev || window.event;
      
   var docPos    = getPosition(target);
   var mousePos  = mouseCoords(ev);
   return {x:mousePos.x - docPos.x, y:mousePos.y - docPos.y};
} 

function getPosition(e){
   var left = 0;
   var top  = 0;
   var count = 0;
   while (e.offsetParent){
      left += e.offsetLeft;
      top  += e.offsetTop;
      e     = e.offsetParent;
   }

   left += e.offsetLeft;
   top  += e.offsetTop;

   return {x:left, y:top}

}

function fadeRefresh(objectName, objectContent) {

   $('#' + objectName).animate({
      opacity: 0
   },function() {
      $(this).html(objectContent);

      LightBuckets.initializeLayout();

      $(this).animate({
         opacity: 100
      });
   });
}

function setLoading(objectName) {
   $('#' + objectName).html('<center><img src="/images/contentloading.gif"></center>');
}

function setLoadingSM(objectName) {
   $('#' + objectName).html('<center><img src="/images/loading.gif"></center>');
}

//---------------------------------------
// Menu
function menuOn(index) {
   document.getElementById('menu' + index).className = 'menuItemOn';
}

function menuOff(index) {
   document.getElementById('menu' + index).className = 'menuItem';
}

function menuDown(index) {
   document.getElementById('menu' + index).className = 'menuItemDown';
}

function howOn(index) {
   document.getElementById('how' + index).style.backgroundColor = '#f9f9f9';
   document.getElementById('how' + index).style.border = '1px solid #dddddd';
}

function howOff(index) {
   document.getElementById('how' + index).style.backgroundColor = '';
   document.getElementById('how' + index).style.border = '1px solid #ffffff';
}

var HOWAUTOPLAY = true;
var HOWCURRENT = "points";

function howPlay() {
   if (!HOWAUTOPLAY)
      return;

   var how = [];
   how[1] = "points";
   how[2] = "plan";
   how[3] = "run";
   how[4] = "data";

   var howLast = 4;
   var i = 1;

   for (i = 1; i <= howLast; i++) {
      if (HOWCURRENT == how[i])
         break;
   }
   i++;

   var next = (i <= howLast) ? i : 1;
   var name = how[next];
   HOWCURRENT = name;

   howLoad(name, true);
   setTimeout("howPlay()", 5000);
}

function howLoad(name, autoplay) {
   HOWAUTOPLAY = autoplay;
   var salt = getSalt();
   ajaxObject['howload' + salt] = createRequestObject();
   var subAjaxObj = ajaxObject['howload' + salt];
   var url = '/ajax_howload.php?name=' + name + '&salt=' + salt;

   subAjaxObj.onreadystatechange = function() {
      if (subAjaxObj.readyState == 4) {
         var json = evalJSON(subAjaxObj.responseText);

         updateInnerHtml("howDoesBlock", json.block);
         updateInnerHtml("howDoesBase", json.base);
      }
   }

   subAjaxObj.open("GET", url);
   subAjaxObj.send(null);
}

function featuredImageLoad(page) {
   var salt = getSalt();
   ajaxObject['featureimageload' + salt] = createRequestObject();
   var subAjaxObj = ajaxObject['featureimageload' + salt];
   var url = '/featuredimage/' + page + '/';

   subAjaxObj.onreadystatechange = function() {
      if (subAjaxObj.readyState == 4) {
         var json = evalJSON(subAjaxObj.responseText);
         var check = parseInt(json.check);

         if (check == 1) {
            updateInnerHtml("featuredImageCurrentBlock", json.current);
            updateInnerHtml("featuredImagePagingBlock", json.paging);
            //LightBuckets.initializeLayout();
            LightBuckets.initializeFeaturedImage();
         }

      }
   }

   subAjaxObj.open("GET", url);
   subAjaxObj.send(null);
}

function featuredImageGo(imageid) {
   var salt = getSalt();
   ajaxObject['featureimagego' + salt] = createRequestObject();
   var subAjaxObj = ajaxObject['featureimagego' + salt];
   var url = '/featuredimagego/' + imageid + '/';

   subAjaxObj.onreadystatechange = function() {
      if (subAjaxObj.readyState == 4) {
         var json = evalJSON(subAjaxObj.responseText);
         var check = parseInt(json.check);

         if (check == 1) {
            updateInnerHtml("featuredImageCurrentBlock", json.current);
            //updateInnerHtml("featuredImagePagingBlock", json.paging);
            //LightBuckets.initializeLayout();
            LightBuckets.initializeFeaturedImage();
         }

      }
   }

   subAjaxObj.open("GET", url);
   subAjaxObj.send(null);
}



//---------------------------------------
// News

var NEWSTOTAL = 0;
var NEWSCURRENT = 1;
function homeNewsInitialize(total) {
   NEWSTOTAL = total;

   setTimeout("homeNewsScroll()", 5000);
}

function homeNewsHide(id) {
   document.getElementById('homeNews' + id).style.display = 'none';
}

function homeNewsShow(id) {
   document.getElementById('homeNews' + id).style.display = '';
}

function homeNewsScroll() {
   var currentNews = NEWSCURRENT;



/*
   // Hide current news
   homeNewsHide(NEWSCURRENT);
*/

   NEWSCURRENT++;

   if (NEWSCURRENT > NEWSTOTAL)
      NEWSCURRENT = 1;

/*
   // Show current news
   homeNewsShow(NEWSCURRENT);
*/

   $('#homeNews' + currentNews).animate({
      opacity: 0
   },function() {
      $(this).hide();

      $('#homeNews' + NEWSCURRENT).css('opacity', 0).show().animate({
         opacity: 100
      }, 2000);
   });


   setTimeout("homeNewsScroll()", 5000);
}

//---------------------------------------
// Account functionality
var ACCOUNTHISTORYPAGE = 1;

function accountDetailsClose() {
   $('#accountOverlay').animate({ "opacity" : 0.0 }, 500, function() {
      $('#accountOverlayContent').html('');
      $(this).hide();
   });
}

function accountProfileCancel(name) {
   $('#profile' + name + "on").hide();
   $('#profile' + name).show();
}

function accountProfileUpdate(name) {
   var salt = getSalt();
   ajaxObject['accountprofile' + salt] = createRequestObject();
   var subAjaxObj = ajaxObject['accountprofile' + salt];
   var url = '/ajax_accountprofile.php';

   var value = escape($('#profileValue' + name).val());


   $('#profile' + name + "on").hide();
   $('#profile' + name).show();
   $('#profile' + name).html('...');

   var parameters = 'field=' + name + '&value=' + value + '&salt=' + salt;

   subAjaxObj.onreadystatechange = function() {
      if (subAjaxObj.readyState == 4) {
         var json = evalJSON(subAjaxObj.responseText);

         $('#profile' + name).html(json.value);

      }
   }

   subAjaxObj.open("POST", url, true);
   subAjaxObj.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
   subAjaxObj.setRequestHeader("Content-length", parameters.length);
   subAjaxObj.setRequestHeader("Connection", "close");
   subAjaxObj.send(parameters);
}

function accountHistoryPage(page) {
   setLoading("accountHistoryBlock");
   var salt = getSalt();
   ajaxObject['accounthistory' + salt] = createRequestObject();
   var subAjaxObj = ajaxObject['accounthistory' + salt];
   var url = '/ajax_accounthistory.php?page=' + page + '&salt=' + salt;
   subAjaxObj.onreadystatechange = function() {
      if (subAjaxObj.readyState == 4) {
         var json = evalJSON(subAjaxObj.responseText);
         ACCOUNTHISTORYPAGE = page;

         $('#accountHistoryBlock').html(json.accounthistory);
         LightBuckets.initializeLayout();
      }
   }

   subAjaxObj.open("GET", url);
   subAjaxObj.send(null);

}

function accountHistoryToggle(name) {
   setLoading("accountHistoryBlock");
   var salt = getSalt();
   ajaxObject['accounthistorytoggle' + salt] = createRequestObject();
   var subAjaxObj = ajaxObject['accounthistorytoggle' + salt];
   var url = '/ajax_accounthistorytoggle.php?name=' + name + '&salt=' + salt;
   subAjaxObj.onreadystatechange = function() {
      if (subAjaxObj.readyState == 4) {
         var json = evalJSON(subAjaxObj.responseText);

         $('#accountHistoryBlock').html(json.accounthistory);
         $('#accountHistoryOptions').html(json.accounttoggle);
         LightBuckets.initializeLayout();
      }
   }

   subAjaxObj.open("GET", url);
   subAjaxObj.send(null);


}

function accountHistoryDelete(purchaseid) {
   var salt = getSalt();
   ajaxObject['accounthistorydel' + salt] = createRequestObject();
   var subAjaxObj = ajaxObject['accounthistorydel' + salt];
   var url = '/ajax_accountdel.php?purchaseid=' + purchaseid + '&page=' + ACCOUNTHISTORYPAGE + '&salt=' + salt;

   subAjaxObj.onreadystatechange = function() {
      if (subAjaxObj.readyState == 4) {
         var json = evalJSON(subAjaxObj.responseText);

         // Fade out the row
         $('#purchase' + purchaseid).parent().animate({
            opacity: 0
         }, 500, function() {
            $(this).remove();

            var splitterid = $('#accountHistoryRows div:last').attr('id');

            // If we have a splitter, that means we deleted the last one --
            // Therefore if we don't, we should add one
            if (!splitterid.length) {
               $('#accountHistoryRows .purchaseRow:last').append(json.accounthistorysplitter);
            }

            // Tack on the new row
            $('#accountHistoryRows').append(json.accounthistoryrow);
            $('#accountHistoryPaging').html(json.accounthistorypaging);
            LightBuckets.initializeLayout();
         });

      }
   }

   subAjaxObj.open("GET", url);
   subAjaxObj.send(null);
}



//---------------------------------------
// Widget paging
function featureImagePage(page) {
   var salt = getSalt();
   ajaxObject['featureimage' + salt] = createRequestObject();
   var subAjaxObj = ajaxObject['featureimage' + salt];
   var url = '/ajax_featureimagepage.php?page=' + page + '&salt=' + salt;
   subAjaxObj.onreadystatechange = function() {
      if (subAjaxObj.readyState == 4) {
         var json = evalJSON(subAjaxObj.responseText);

         updateInnerHtml("featureImageContents", json.contents);
      }
   }

   subAjaxObj.open("GET", url);
   subAjaxObj.send(null);
}

function featureUSImagePage(page) {
   var salt = getSalt();
   ajaxObject['usfeatureimage' + salt] = createRequestObject();
   var subAjaxObj = ajaxObject['usfeatureimage' + salt];
   var url = '/ajax_usfeatureimage.php?sortorder=' + page + '&salt=' + salt;
   subAjaxObj.onreadystatechange = function() {
      if (subAjaxObj.readyState == 4) {
         var json = evalJSON(subAjaxObj.responseText);

         updateInnerHtml("USFeatureImageSplash", json.splash);
         updateInnerHtml("USFeatureImageText", json.text);
      }
   }

   subAjaxObj.open("GET", url);
   subAjaxObj.send(null);
}


function newsPreviewPage(page) {
   var salt = getSalt();
   ajaxObject['newspreview' + salt] = createRequestObject();
   var subAjaxObj = ajaxObject['newspreview' + salt];
   var url = '/ajax_newspage.php?page=' + page + '&salt=' + salt;
   subAjaxObj.onreadystatechange = function() {
      if (subAjaxObj.readyState == 4) {
         var json = evalJSON(subAjaxObj.responseText);

         updateInnerHtml("newsPreviewContents", json.contents);
      }
   }

   subAjaxObj.open("GET", url);
   subAjaxObj.send(null);

}

//---------------------------------------
// Observatory network
var observatoryNetworkActivated = 0;
var observatoryNetworkCurrentPanel = 1;
var observatoryNetworkTotalPanels = 6;

function observatoryNetworkHideAll() {
   var obsCount = OBSERVATORYIDS.length;
   for (var i = 0; i < obsCount; i++) {
      hide("observatoryNetworkImage_" + OBSERVATORYIDS[i]);
      observatoryNetworkOff(OBSERVATORYIDS[i]);
   }
}

function observatoryNetworkDisableAll() {
   var obsCount = OBSERVATORYIDS.length;
   for (var i = 0; i < obsCount; i++) {
      var obsid = OBSERVATORYIDS[i];
      //document.getElementById('observatoryNetworkList_' + obsid).onmouseout = "";

      document.getElementById('observatoryNetworkList_' + obsid).onmouseover = function() {
         var id = this.id.split("_");
         id = id[1];
         observatoryNetworkHighlight(id);
         document.body.style.cursor = 'pointer';
      }

      document.getElementById('observatoryNetworkList_' + obsid).onmouseout = function() {
         var id = this.id.split("_");
         id = id[1];
         document.body.style.cursor = '';
         observatoryNetworkUnhighlight(id);
      }


   }
}

function observatoryNetworkHighlight(obsid) {
   updateClassName('observatoryNetworkName_' + obsid, "textHeaderOn");
   updateClassName('observatoryNetworkPoints_' + obsid, "textHeaderOn");
}

function observatoryNetworkUnhighlight(obsid) {
   if (observatoryNetworkActivated == obsid)
      return;

   updateClassName('observatoryNetworkName_' + obsid, "textHeader");
   updateClassName('observatoryNetworkPoints_' + obsid, "textHeader");
}

function observatoryNetworkOn(obsid) {
   observatoryNetworkHideAll();
   hide("observatoryNetworkData");
   observatoryNetworkHighlight(obsid);

   show("observatoryNetworkImage_" + obsid);
}

function observatoryNetworkOff(obsid) {
   if (observatoryNetworkActivated == obsid)
      return;

   updateClassName('observatoryNetworkName_' + obsid, "textHeaderOff");
   updateClassName('observatoryNetworkPoints_' + obsid, "textHeaderOff");
}

function observatoryNetworkActivate(obsid) {
   observatoryNetworkDisableAll(obsid);
   observatoryNetworkActivated = obsid;

   var salt = getSalt();
   ajaxObject['observatorynetworkactivate' + salt] = createRequestObject();
   var subAjaxObj = ajaxObject['observatorynetworkactivate' + salt];
   var url = '/observatory/details/' + obsid + '/' + salt + '/';
   subAjaxObj.onreadystatechange = function() {
      if (subAjaxObj.readyState == 4) {
         var json = evalJSON(subAjaxObj.responseText);
         observatoryNetworkHideAll();

         observatoryNetworkHighlight(obsid);

         updateInnerHtml("observatoryNetworkData", json.contents);
         show("observatoryNetworkData");

         observatoryNetworkCurrentPanel = 1;
      }
   }

   subAjaxObj.open("GET", url);
   subAjaxObj.send(null);
}

function observatoryNetworkScroll(amount) {
   hide("LBONPanel" + observatoryNetworkCurrentPanel);

   observatoryNetworkCurrentPanel += amount;

   if (observatoryNetworkCurrentPanel < 1)
      observatoryNetworkCurrentPanel = observatoryNetworkTotalPanels;
   else if (observatoryNetworkCurrentPanel > observatoryNetworkTotalPanels)
      observatoryNetworkCurrentPanel = 1;

   show("LBONPanel" + observatoryNetworkCurrentPanel);
}

//---------------------------------------
// Content rollover
function contentWarningOn(message) {
   document.getElementById("contentWarning").innerHTML = message;
   document.getElementById("contentWarningBackground").style.display = '';
   document.getElementById("contentWarning").style.display = '';
}

function contentWarningOff() {
   document.getElementById("contentWarningBackground").style.display = 'none';
   document.getElementById("contentWarning").style.display = 'none';
}

var RollOn = false;
var RollOnTrigger = false;
var RollOnActive = false;
var RollOid = 0;
var RollType = '';

function contentRolloverOn(observatoryid, type) {
   RollOnTrigger = true;

   // Same ID and tyep as last time, then let's check
   if (RollOid == observatoryid && RollType == type) {
      // Are we already active?
      if (RollOn || RollOnActive)
         return;
   }

   RollOid = observatoryid;
   RollType = type;
   RollOnActive = true;

   show("contentRolloverBlock");
   updateInnerHtml('contentRollover', '<img src="/images/contentloading.gif">');

   var salt = getSalt();
   ajaxObject['rollover' + salt] = createRequestObject();
   var subAjaxObj = ajaxObject['rollover' + salt];

   var url = '/usescopes/rollover/' + observatoryid + '-' + type + '/';
   subAjaxObj.onreadystatechange = function() {
      if (subAjaxObj.readyState == 4) {
         var json = evalJSON(subAjaxObj.responseText);
         updateInnerHtml('contentRollover', json.content);
      }
   }
   subAjaxObj.open("GET", url);
   subAjaxObj.send(null);
}


function contentRolloverOff() {
   if (RollOn)
      return;

   RollOnTrigger = false;
   setTimeout("contentRolloverHide()", 1000);
}

function contentRolloverHide() {
   if (RollOn || RollOnTrigger)
      return;

   RollOnActive = false;

   show("contentRollover");
   hide("contentRolloverBlock");
}

function contentRollMouseover() {
   RollOn = true;
}

function contentRollMouseout() {
   RollOn = false;

   setTimeout("contentRolloverHide()", 1000);
}

var contentInformationSwitch = [];
function contentInformationToggle(name) {
   if (!contentInformationSwitch[name]) {
      show("contentInformation_" + name);
      contentInformationSwitch[name] = true;
   } else {
      hide("contentInformation_" + name);
      contentInformationSwitch[name] = false;
   }
}

function commentSubmit(db, idstring, id) {
   var salt = getSalt();
   ajaxObject['commentsubmit' + salt] = createRequestObject();
   var subAjaxObj = ajaxObject['commentsubmit' + salt];
   var text = escape(document.getElementById('commentText').value);

   var url = '/ajax_commentadd.php?db=' + db + '&idstring=' + idstring + '&id=' + id + '&salt=' + salt + '&comment=' + text;

   subAjaxObj.onreadystatechange = function() {
      if (subAjaxObj.readyState == 4) {
         var json = evalJSON(subAjaxObj.responseText);

         var check = parseInt(json.check);
         if (check == 0) {
            $('#commentError').show();
            $('#commentError').html(json.response);
         } else
            $('#commentBlock').html(json.response);

      }
   }

   subAjaxObj.open("GET", url);
   subAjaxObj.send(null);
}




//---------------------------------------
// FULL CONTROL
function USLoading() {
   $('#fullControlBody').html('<div class=\"contentBoxContainer\" style=\"min-height: 620px;\"><div class=\"contentBoxTop\"></div><div class=\"contentBoxContent\" style=\"min-height: 610px;\"><div class=\"contentBoxSub\"><center><img src=\"/images/contentloading.gif\"></center></div></div><div class=\"contentBoxBottom\"></div><div class=\"contentBoxTR\"></div><div class=\"contentBoxBR\"></div><div class=\"contentBoxTL\"></div><div class=\"contentBoxBL\"></div></div><div style=\"height: 1px; clear: both;\"></div>');
}

function USSelect(field, value) {
   //setLoading('fullControlBody');
   USLoading();

   var salt = getSalt();
   ajaxObject['usselect' + salt] = createRequestObject();
   var subAjaxObj = ajaxObject['usselect' + salt];
   var url = '/usescopes/select/' + field + '/' + value + '/' + salt + '/';
   subAjaxObj.onreadystatechange = function() {
      if (subAjaxObj.readyState == 4) {
         var json = evalJSON(subAjaxObj.responseText);
         var check = parseInt(json.check);

         if (check == 0) {

         } else {
            document.location.hash = json.currentstep;
            $('#fullControlBody').html(json.body);
            $('#fullControlMenu').html(json.menu);
            $('#fullControlYourImagingRun').html(unescape(json.imagingrun));

            // Check for holds
            $('#holdBlock').html(json.holdblock);

            LightBuckets.init();
         }
      }
   }

   subAjaxObj.open("GET", url);
   subAjaxObj.send(null);
}

function USSelectObservatory(observatoryid) {
   USSelect("observatory", observatoryid);
}

function USSelectSchedule(scheduleid) {
   USSelect("schedule", scheduleid);
}

function USSelectHolds() {
   USSelect("holds", 0);
}

//---------------------------------------















var USObservatoryMoreCurrent = [];
var USObservatoryMoreTotal = 15;

var USTargetLastQuery = '';
var USTargetQueryActive = false;
var USTargetQueryQueue = '';
var USTargetQueryQueueEM = 0;
var USPlanSettingPosAngle = false;
var USPlanSettingDither = false;
var USCalendarDragging = false;
var USCalendarMouseClicked = false;
var USCalendarLoadingTime = false;
var USCalendarElement;
var USCalendarStartX;
var USCalendarClickOffsetX;
var USCalendarBlockWidth = 0;
var USCalendarPeriodWidth = 610;
var USCalendarReservedStart = [];
var USCalendarReservedEnd = [];
var USEasyColorValue = 1;
var USEasyDetailValue = 1;

// Given an observatory id, change the panel that
// is currently shown
function USObservatoryMore(observatoryid, delta) {
   if (!USObservatoryMoreCurrent[observatoryid])
      USObservatoryMoreCurrent[observatoryid] = 1;


   // Hide the current one
   var currentSlide = USObservatoryMoreCurrent[observatoryid];

   $('#observatoryNetworkSlide' + observatoryid + '_' + currentSlide).hide();

   // Adjust it
   USObservatoryMoreCurrent[observatoryid] += delta;

   // Bounds
   if (USObservatoryMoreCurrent[observatoryid] <= 0)
      USObservatoryMoreCurrent[observatoryid] = USObservatoryMoreTotal;
   else if (USObservatoryMoreCurrent[observatoryid] > USObservatoryMoreTotal)
      USObservatoryMoreCurrent[observatoryid] = 1;


   // Display the new one
   currentSlide = USObservatoryMoreCurrent[observatoryid];

   $('#observatoryNetworkSlide' + observatoryid + '_' + currentSlide).show();

   return false;
}


function USSelectTarget() {
   var title = escape(document.getElementById('USTargetTitle').value);
   var ra = escape(document.getElementById('USTargetRA').value);
   var dec = escape(document.getElementById('USTargetDec').value);

   var warningColor = '#ffbbbb';

   if (!ra.length)
      document.getElementById('USTargetRA').style.backgroundColor = warningColor;
   else
      document.getElementById('USTargetRA').style.backgroundColor = '';

   if (!dec.length)
      document.getElementById('USTargetDec').style.backgroundColor = warningColor;
   else
      document.getElementById('USTargetDec').style.backgroundColor = '';

   if (!title.length)
      document.getElementById('USTargetTitle').style.backgroundColor = warningColor;
   else
      document.getElementById('USTargetTitle').style.backgroundColor = '';

   if (!ra.length || !dec.length || !title.length)
      return;

   // Generate random number
   var salt = getSalt();
   var url = '/ajax_usselecttarget.php?title=' + title + '&ra=' + ra + '&dec=' + dec + '&salt=' + salt;

   hide("USTargetAddBlock");
   show("USTargetLoadingBlock");

   ajaxObject['usselecttarget' + salt] = createRequestObject();
   var subAjaxObj = ajaxObject['usselecttarget' + salt];
   subAjaxObj.onreadystatechange = function() {
      if (subAjaxObj.readyState == 4) {
         var json = evalJSON(subAjaxObj.responseText);
         var response = parseInt(json.response);

         if (response == 1) {
            document.location.hash = json.currentstep;
            $('#fullControlBody').html(json.body);
            $('#fullControlMenu').html(json.menu);
            $('#fullControlYourImagingRun').html(unescape(json.imagingrun));
            LightBuckets.initializeLayout();
            LightBuckets.initializeFullControl();

            // Select target,zoom in
            catalogZoomTo(1);
         }
      }
   }
   subAjaxObj.open("GET", url);
   subAjaxObj.send(null);
}

function USSelectNewTarget() {
   hide("USTargetSelectedBlock");
   show("USTargetAddBlock");
}

function USTargetQuery(easymode) {
   var title = escape(document.getElementById('USTargetTitle').value);

   if (title.length <= 1 || title == USTargetLastQuery)
      return;

   if (USTargetQueryActive) {
      // Save the last query
      USTargetQueryQueue = title;
      USTargetQueryQueueEM = easymode;
      return;
   }

   USTargetQueryRun(title, easymode);
}


function USTargetQueryRun(title, easymode) {
   var salt = getSalt();
   ajaxObject['ustargetquery' + salt] = createRequestObject();
   var subAjaxObj = ajaxObject['ustargetquery' + salt];

   USTargetQueryActive = true;
   USTargetLastQuery = title;

   updateInnerHtml('USTargetQuery', '<img src="/images/loading.gif">');
   show('USTargetQuery');

   var url = '/ajax_ustargetquery.php?title=' + title + '&easymode=' + easymode + '&salt=' + salt;

   subAjaxObj.onreadystatechange = function() {
      if (subAjaxObj.readyState == 4) {
         // We already have one in the queue, lets just run that one
         if (USTargetQueryQueue.length > 0) {
            var title = USTargetQueryQueue;
            var em = USTargetQueryQueueEM;
            USTargetQueryQueue = '';
            USTargetQueryQueueEM = 0;
            USTargetQueryRun(title, em);
            return;
         }

         USTargetQueryActive = false;

         var json = evalJSON(subAjaxObj.responseText);
         updateInnerHtml('USTargetQuery', json.results);

         LightBuckets.initializeTargetingResults();
      }
   }

   subAjaxObj.open("GET", url);
   subAjaxObj.send(null);
}


function USTargetQueryLoad(object_title) {
   var object_title = object_title.split(";");
   var objectid = object_title[0];
   var title = object_title[1];
   var easymode = object_title[2];

   hide('USTargetQuery');
   updateValueOf('USTargetTitle',title);
   updateValueOf('USTargetRA', "...");
   updateValueOf('USTargetDec', "...");

   var url = '/usescopes/loadtarget/' + objectid + '/';

   var salt = getSalt();
   ajaxObject['ustargetload' + salt] = createRequestObject();
   var subAjaxObj = ajaxObject['ustargetload' + salt];

   subAjaxObj.onreadystatechange = function() {
      if (subAjaxObj.readyState == 4) {

         var json = evalJSON(subAjaxObj.responseText);

         updateValueOf('USTargetRA', json.raHours);
         updateValueOf('USTargetDec', json.decHours);

         //test(easymode);
         if (!easymode)
            USUpdateSkyView(json);
      }
   }

   subAjaxObj.open("GET", url);
   subAjaxObj.send(null);
}


function USExposureAdd() {
   var filterobj = document.getElementById('USExposureFilter');
   var filterindex = filterobj.selectedIndex;
   var binobj = document.getElementById('USExposureBin');
   var binindex = binobj.selectedIndex;

   var count = parseInt(document.getElementById('USExposureCount').value, 10);
   var filter = filterobj.options[filterindex].value;
   var binid = binobj.options[binindex].value;
   var duration = parseFloat(document.getElementById('USExposureDuration').value, 10);

   if (!count || duration <= 0)
      return;

   var salt = getSalt();

   disableButton("USExposureAddButton");

   var url = '/ajax_usselectexposure.php?count=' + count + '&filter=' + filter + '&duration=' + duration + '&bin=' + binid + '&salt=' + salt;
   ajaxObject['usselectexposure' + salt] = createRequestObject();
   var subAjaxObj = ajaxObject['usselectexposure' + salt];

   subAjaxObj.onreadystatechange = function() {
      if (subAjaxObj.readyState == 4) {
         var json = evalJSON(subAjaxObj.responseText);

         var result = parseInt(json.result);

         // Add a row to the exposure list
         if (result) {
            //USExposureAddRow(json.row);
            $('#USExposureList').append(json.row);
            $('.planImageProblem').hide();
            $('#fullControlYourImagingRun').html(unescape(json.imagingrun));
            $('#fullControlPlanningTotal').html(json.total);
            $('#fullControlMenu').html(json.menu);
            $('#fullControlPlanningFinished').html(json.planningnext);
            LightBuckets.init();

/*
            updateInnerHtml("USConsoleSteps", json.stepmap);
            updateInnerHtml("USChoices", json.choices);
*/
         }

         enableButton("USExposureAddButton", "Add");

      }
   }

   subAjaxObj.open("GET", url);
   subAjaxObj.send(null);
}

function USExposureAddRow(content) {
   addInnerHtml("USExposureList", content);
}

function USExposureEditCancel(exposureid) {
   $('#USExposureEdit' + exposureid).hide();
   $('#USExposureRow' + exposureid).show();
}
function USExposureEditSave(exposureid) {
   var filterobj = document.getElementById('USExposureFilter' + exposureid);
   var filterindex = filterobj.selectedIndex;
   var binobj = document.getElementById('USExposureBin' + exposureid);
   var binindex = binobj.selectedIndex;

   var count = parseInt(document.getElementById('USExposureCount' + exposureid).value, 10);
   var filter = filterobj.options[filterindex].value;
   var binid = binobj.options[binindex].value;
   var duration = parseFloat(document.getElementById('USExposureDuration' + exposureid).value, 10);

   if (!count || duration <= 0)
      return;

   USExposureEditCancel(exposureid);

   var salt = getSalt();
   var url = '/ajax_useditexposure.php?exposureid=' + exposureid + '&count=' + count + '&filter=' + filter + '&duration=' + duration + '&bin=' + binid + '&salt=' + salt;

   ajaxObject['useditexposure' + salt] = createRequestObject();
   var subAjaxObj = ajaxObject['useditexposure' + salt];

   subAjaxObj.onreadystatechange = function() {
      if (subAjaxObj.readyState == 4) {
         var json = evalJSON(subAjaxObj.responseText);
         var result = parseInt(json.result);

         if (result) {
            $("#USExposureBlock" + exposureid).html(json.row);
            $('#fullControlYourImagingRun').html(unescape(json.imagingrun));
            $('#fullControlPlanningTotal').html(json.total);
            LightBuckets.init();


         }

      }
   }

   subAjaxObj.open("GET", url);
   subAjaxObj.send(null);
}



function USExposureDelete(exposureid) {
   var salt = getSalt();
   var url = '/ajax_usdeleteexposure.php?exposureid=' + exposureid + '&salt=' + salt;

   ajaxObject['usdeleteexposure' + salt] = createRequestObject();
   var subAjaxObj = ajaxObject['usdeleteexposure' + salt];

   subAjaxObj.onreadystatechange = function() {
      if (subAjaxObj.readyState == 4) {
         var json = evalJSON(subAjaxObj.responseText);
         var result = parseInt(json.result);

         if (result == 1) {

            $("#USExposureBlock" + exposureid).animate({ opacity: 0 },function () {
               $(this).remove();

               if (parseInt(json.hasexposures) == 0)
                  $('.planImageProblem').show();
            });
            $('#fullControlYourImagingRun').html(unescape(json.imagingrun));
            $('#fullControlPlanningTotal').html(json.total);
            $('#fullControlMenu').html(json.menu);
            $('#fullControlPlanningFinished').html(json.planningnext);
            LightBuckets.init();

         }
      }
   }

   subAjaxObj.open("GET", url);
   subAjaxObj.send(null);
}

function USSkyViewQuery() {
   var title = escape(document.getElementById('USTargetTitle').value);
   var ra = escape(document.getElementById('USTargetRA').value);
   var dec = escape(document.getElementById('USTargetDec').value);

   if (!ra.length)
      return;
   else if (!dec.length)
      return;

   // Generate random number
   var salt = getSalt();

   var url = '/ajax_skyviewquery.php?title=' + title + '&ra=' + ra + '&dec=' + dec + '&salt=' + salt;

   ajaxObject['ustargetload' + salt] = createRequestObject();
   var subAjaxObj = ajaxObject['ustargetload' + salt];

   subAjaxObj.onreadystatechange = function() {
      if (subAjaxObj.readyState == 4) {
         var json = evalJSON(subAjaxObj.responseText);
         USUpdateSkyView(json);
      }
   }

   subAjaxObj.open("GET", url);
   subAjaxObj.send(null);
}

function USUpdateSkyView(json) {
   if (json.skychartquery) {
      // Correspond with catalogSkyFocusUpdate_handleResponse
      //document.getElementById("USTargetRA").value = json.skychartquery;
      document.getElementById("catalogFrame").innerHTML = json.skychartquery;
      FOCUSRA = json.ra;
      FOCUSDEC = json.dec;
      RA = json.ra;
      DEC = json.dec;
      catalogGridPanelX = 0;
      catalogGridPanelY = 0;
      catalogCurrentDirection = catalogDirectionHorizontal;

      LOCALTIME = json.localtime;

      ZOOM = MAXZOOMLEVEL + 1;
      catRFOVRange = [];
      catLastStaticPA = -1;
   }

}

function USPlanningToggle(name) {
   var salt = getSalt();
   var url = '/ajax_usplansettingtoggle.php?name=' + name + '&salt=' + salt;

   ajaxObject['usplansettingtoggle' + salt] = createRequestObject();
   var subAjaxObj = ajaxObject['usplansettingtoggle' + salt];

   subAjaxObj.onreadystatechange = function() {
      if (subAjaxObj.readyState == 4) {
         var json = evalJSON(subAjaxObj.responseText);
         var result = parseInt(json.result);

         if (result) {
            $('#fullControlPlanning_' + name).html(json.value);
            $('#fullControlYourImagingRun').html(unescape(json.imagingrun));
         } else
            updateInnerHtml("USPlanSettingToggleValue_" + name, "Err");
      }
   }

   subAjaxObj.open("GET", url);
   subAjaxObj.send(null);
}

function USPlanSettingDitherToggle() {
   $('#fcrowdither').hide();
   $('#fcrowditheredit').show();
}

function USPlanSettingDitherUpdate() {
   $('#fcrowditheredit').hide();
   $('#fcrowdither').show();

   var amount = escape($('#USPlanSettingDitherInput').val());
   var salt = getSalt();
   var url = '/ajax_usplansettingdither.php?amount=' + amount + '&salt=' + salt;

   ajaxObject['usplansettingdither' + salt] = createRequestObject();
   var subAjaxObj = ajaxObject['usplansettingdither' + salt];

   subAjaxObj.onreadystatechange = function() {
      if (subAjaxObj.readyState == 4) {
         var json = evalJSON(subAjaxObj.responseText);
         var result = parseInt(json.result);

         if (result) {
            $('#fullControlYourImagingRun').html(unescape(json.imagingrun));
            $(".fullControlDitherToggle").html(amount);

         } else
            $(".fullControlDitherToggle").html("err");
      }
   }

   subAjaxObj.open("GET", url);
   subAjaxObj.send(null);
}



function USPlanSettingPosAngleToggle() {
   $('#fcrowpositionangle').hide();
   $('#fcrowpositionangleedit').show();
}

function USPlanSettingPosAngleUpdate() {
   $('#fcrowpositionangleedit').hide();
   $('#fcrowpositionangle').show();

   var angle = escape($('#USPlanSettingPosAngleInput').val());
   var salt = getSalt();
   var url = '/ajax_usplansettingposangle.php?angle=' + angle + '&salt=' + salt;

   ajaxObject['usplansettingposangle' + salt] = createRequestObject();
   var subAjaxObj = ajaxObject['usplansettingposangle' + salt];

   subAjaxObj.onreadystatechange = function() {
      if (subAjaxObj.readyState == 4) {
         var json = evalJSON(subAjaxObj.responseText);
         var result = parseInt(json.result);

         angle = parseFloat(json.angle);

         if (result) {
            //$(".fullControlPosAngToggle").html(angle);
            $('#fullControlYourImagingRun').html(unescape(json.imagingrun));

            // Catalog
            if (angle < 0)
               catalogPASelect(0);
            else
               catalogPASelect(angle);
         } else
            updateInnerHtml("USPlanSettingPosAngleValue", "Err");
      }
   }

   subAjaxObj.open("GET", url);
   subAjaxObj.send(null);
}

function USSetPA(angle) {
   $(".fullControlPosAngToggle").html(angle);
   $('#USPlanSettingPosAngleInput').val(angle);
   $('#USTargetPA').val(angle);
   $('#yourimagingplanposang').html(angle);
}

function USSetRADec(ra, dec) {
   $('#USTargetRA').val(ra);
   $('#USTargetDec').val(dec);
   $('#USTargetRASpan').html(ra);
   $('#USTargetDecSpan').html(dec);
   $('#yourimagingplanra').html(ra);
   $('#yourimagingplandec').html(dec);
}

function USPlanSettingPosAngleOff() {
   updateValueOf("USPlanSettingPosAngleInput", "0.0");
   USPlanSettingPosAngleUpdate();
}

function USPlanSettingDitherOff() {
   updateValueOf("USPlanSettingDitherInput", "0.0");
   USPlanSettingDitherUpdate();
}

function USHoldPointsDelete(holdpointid) {
   var salt = getSalt();
   var url = '/ajax_usholdpointsdel.php?holdid=' + holdpointid + '&salt=' + salt;

   ajaxObject['usholdpointdel' + salt] = createRequestObject();
   var subAjaxObj = ajaxObject['usholdpointdel' + salt];

   subAjaxObj.onreadystatechange = function() {
      if (subAjaxObj.readyState == 4) {
         var json = evalJSON(subAjaxObj.responseText);
         var result = parseInt(json.result);

         if (result) {
            $("#USPointsRow" + holdpointid).animate({ opacity: 0 },function () {
               $(this).remove();
               updateInnerHtml("USManagePointsBlock", json.pointmanagementblock);
               LightBuckets.initializeFullControl();
            });

         }
      }
   }

   subAjaxObj.open("GET", url);
   subAjaxObj.send(null);
}

function USHoldPointsAdd() {
   var points = parseInt(getValueOf("USHoldPointsAmount"));

   if (points <= 0)
      return;

   var groupid = getSelectValueOf("USHoldPointsGroupid");

   var salt = getSalt();
   var url = '/ajax_usholdpointsadd.php?points=' + points + '&groupid=' + groupid + '&salt=' + salt;

   ajaxObject['usholdpointadd' + salt] = createRequestObject();
   var subAjaxObj = ajaxObject['usholdpointadd' + salt];

   disableButton("USHoldPointsButton");

   subAjaxObj.onreadystatechange = function() {
      if (subAjaxObj.readyState == 4) {
         var json = evalJSON(subAjaxObj.responseText);
         var result = parseInt(json.result);
         enableButton("USHoldPointsButton", "Add points");

         if (result) {
            updateInnerHtml("USManagePointsBlock", json.pointmanagementblock);
            var extra = parseInt(json.extra);
            if (extra)
               updateInnerHtml("USManagePointsExtraBlock", json.extrastr);

            LightBuckets.initializeFullControl();
         }
      }
   }

   subAjaxObj.open("GET", url);
   subAjaxObj.send(null);

}

function USRunNow(runid) {
   $('#USRunNow').hide();
   setLoading("USRunNowConfirmed");
   $('#USRunNowConfirmed').show();

   var salt = getSalt();
/*

   $.get("ajax_usnowrun.php", { salt: salt, runid : runid }, function(data) {
      var json = evalJSON(data);
      $('#USRunNowConfirmed').html(json.response);
   });
*/


   var url = '/ajax_usnowrun.php?runid=' + runid + '&salt=' + salt;

   ajaxObject['nowrun' + salt] = createRequestObject();
   var subAjaxObj = ajaxObject['nowrun' + salt];

   subAjaxObj.onreadystatechange = function() {
      if (subAjaxObj.readyState == 4) {
         var json = evalJSON(subAjaxObj.responseText);

         $('#USRunNowConfirmed').html(json.response);
      }
   }

   subAjaxObj.open("GET", url);
   subAjaxObj.send(null);
}



function USRunSubmit() {
   
   var salt = getSalt();
   var url = '/ajax_usrunsubmit.php?salt=' + salt;

   ajaxObject['runsubmit' + salt] = createRequestObject();
   var subAjaxObj = ajaxObject['runsubmit' + salt];

   disableButton("USRunSubmitButton");

   subAjaxObj.onreadystatechange = function() {
      if (subAjaxObj.readyState == 4) {
         var json = evalJSON(subAjaxObj.responseText);
         var result = parseInt(json.result);

         if (result) {
            updateInnerHtml("USRunBlock", json.response);
         }
      }
   }

   subAjaxObj.open("GET", url);
   subAjaxObj.send(null);

}

function USCalendarChangeMonth(date) {
   setLoading("USReserveBlock");
   var salt = getSalt();
   var url = '/calendar/changemonth/' + date + '/';

   ajaxObject['calendarmonth' + salt] = createRequestObject();
   var subAjaxObj = ajaxObject['calendarmonth' + salt];


   subAjaxObj.onreadystatechange = function() {
      if (subAjaxObj.readyState == 4) {
         var json = evalJSON(subAjaxObj.responseText);
         var result = parseInt(json.result);

         if (result) {
            $('#USReserveBlock').html(json.response);
            LightBuckets.initializeCalendar();
         }
      }
   }

   subAjaxObj.open("GET", url);
   subAjaxObj.send(null);

}

function USCalendarMonthReturn() {
   var salt = getSalt();
   var url = '/calendar/monthreturn/' + salt + '/';

   ajaxObject['calendarmonth' + salt] = createRequestObject();
   var subAjaxObj = ajaxObject['calendarmonth' + salt];

   setLoading("USConsoleLeft");

   subAjaxObj.onreadystatechange = function() {
      if (subAjaxObj.readyState == 4) {
         var json = evalJSON(subAjaxObj.responseText);
         var result = parseInt(json.result);

         if (result) {
            updateInnerHtml("USConsoleLeft", json.response);
            LightBuckets.initializeCalendar();
         }
      }
   }

   subAjaxObj.open("GET", url);
   subAjaxObj.send(null);
}

function USCalendarChooseDay(date) {
   var salt = getSalt();
   var url = '/calendar/chooseday/' + date + '/';

   ajaxObject['calendarday' + salt] = createRequestObject();
   var subAjaxObj = ajaxObject['calendarday' + salt];

   setLoading("USReserveBlock");

   subAjaxObj.onreadystatechange = function() {
      if (subAjaxObj.readyState == 4) {
         var json = evalJSON(subAjaxObj.responseText);
         var result = parseInt(json.result);

         if (result) {
            $('#USReserveBlock').html(json.response);
            LightBuckets.initializeCalendar();
            //initializeMouse();
            //disableSelection("USScheduleDayBlock");
         }
      }
   }

   subAjaxObj.open("GET", url);
   subAjaxObj.send(null);
}

function USCalendarMovedTime(date) {
   updateInnerHtml("USCalendarMovedTime", '<img src="/images/loading.gif">');
   var salt = getSalt();
   var url = '/calendar/movedtime/' + date + '/';

   ajaxObject['calendarmovedtime' + salt] = createRequestObject();
   var subAjaxObj = ajaxObject['calendarmovedtime' + salt];


   subAjaxObj.onreadystatechange = function() {
      if (subAjaxObj.readyState == 4) {
         var json = evalJSON(subAjaxObj.responseText);
         var result = parseInt(json.result);
         var meridianFlip = parseInt(json.meridianflip);


         if (result) {
            updateInnerHtml("USCalendarMovedTime", json.response);
         }

         // 01/18/2010
         // If the time we moved over is over a meridian flip
         // Then do something about it
         if (meridianFlip) {
            var meridianWidth = $('#USScheduleDayBlockWFlip').val();
            $('#USScheduleDayBlock').css('width', meridianWidth + "px");
         } else {
            var defaultWidth = $('#USScheduleDayBlockW').val();
            $('#USScheduleDayBlock').css('width', defaultWidth + "px");
         }
      }
   }

   subAjaxObj.open("GET", url);
   subAjaxObj.send(null);

}

function USCalendarChooseTime(date) {
   var salt = getSalt();
   var url = '/calendar/choosetime/' + date + '/';

   $('#USCalendarConfirmButton').val('submitting...');
   $('#USCalendarConfirmButton').attr('disabled', true);

   ajaxObject['calendartime' + salt] = createRequestObject();
   var subAjaxObj = ajaxObject['calendartime' + salt];


   subAjaxObj.onreadystatechange = function() {
      if (subAjaxObj.readyState == 4) {
         var json = evalJSON(subAjaxObj.responseText);
         var result = parseInt(json.result);

         if (result) {
            updateInnerHtml("USReserveBlock", json.response);
         } else
            updateInnerHtml("USCalendarMovedTime", json.response);

      }
   }

   subAjaxObj.open("GET", url);
   subAjaxObj.send(null);
}

// handle movement of the drag bar
function USCalendarMouseDown(ev) {
   USCalendarDragging = true;
   USCalendarElement = document.getElementById('USScheduleDayBlock');

   var mouseOffset = getMouseOffset(USCalendarElement, ev);

   if (!USCalendarStartX)
      USCalendarStartX = mousePos.x - mouseOffset.x - USCalendarExtractBlockLeft();

   USCalendarBlockWidth = USCalendarExtractBlockWidth();
   USCalendarClickOffsetX = mouseOffset.x;
}


function USCalendarExtractBlockWidth() {
   var width = USCalendarElement.style.width;
   var widthL = width.length;
   width = width.substr(0, widthL - 2);

   return parseInt(width, 10);
}

function USCalendarExtractBlockLeft() {
   var left = USCalendarElement.style.left;
   var leftL = left.length;
   left = left.substr(0, leftL - 2);

   return parseInt(left, 10);
}



function USCalendarMouseUp(ev) {
   USCalendarDragging = false;

   var mousePos = mouseCoords(ev);
   var newX = mousePos.x - USCalendarClickOffsetX - USCalendarStartX;;

   // Check borders
   if (newX < 0)
      newX = 0;

   if (newX + USCalendarBlockWidth > USCalendarPeriodWidth)
      newX = USCalendarPeriodWidth - USCalendarBlockWidth;

   var newXScale = newX / USCalendarPeriodWidth;

   USCalendarElement = null;

   USCalendarMovedTime(newXScale)
}

// Easy imaging
function USEasyDetailImage(value) {
   document.getElementById('easyDetailImage1_' + USEasyDetailValue).style.display = 'none';
   document.getElementById('easyDetailImage2_' + USEasyDetailValue).style.display = 'none';
   document.getElementById('easyDetailTime1_' + USEasyDetailValue).style.display = 'none';
   document.getElementById('easyDetailRate1_' + USEasyDetailValue).style.display = 'none';
   document.getElementById('easyDetailTime2_' + USEasyDetailValue).style.display = 'none';
   document.getElementById('easyDetailRate2_' + USEasyDetailValue).style.display = 'none';

   document.getElementById('easyDetailImage' + USEasyColorValue + "_" + value).style.display = '';
   document.getElementById('easyDetailTime' + USEasyColorValue + "_" + value).style.display = '';
   document.getElementById('easyDetailRate' + USEasyColorValue + "_" + value).style.display = '';

   USEasyDetailValue = value;
}


function USEasyHeaderComplete(stepnumber) {
   //document.getElementById("USEasyHeader" + stepnumber).className = "easyHeaderHighlight";
   document.getElementById("USEasyLoading" + stepnumber).style.display = "none";
   document.getElementById("USEasyCheck" + stepnumber).style.display = "";
}

function USEasyHeaderIncomplete(stepnumber) {
   document.getElementById("USEasyHeader" + stepnumber).className = "easyHeader";
   document.getElementById("USEasyLoading" + stepnumber).style.display = "none";
   document.getElementById("USEasyCheck" + stepnumber).style.display = "none";
}

function USSelectTargetEasy(stepnumber) {
   var title = escape(document.getElementById('USTargetTitle').value);
   var ra = escape(document.getElementById('USTargetRA').value);
   var dec = escape(document.getElementById('USTargetDec').value);

   var warningColor = '#ffbbbb';

   if (!ra.length)
      document.getElementById('USTargetRA').style.backgroundColor = warningColor;
   else
      document.getElementById('USTargetRA').style.backgroundColor = '';

   if (!dec.length)
      document.getElementById('USTargetDec').style.backgroundColor = warningColor;
   else
      document.getElementById('USTargetDec').style.backgroundColor = '';

   if (!title.length)
      document.getElementById('USTargetTitle').style.backgroundColor = warningColor;
   else
      document.getElementById('USTargetTitle').style.backgroundColor = '';

   if (!ra.length || !dec.length || !title.length)
      return;

   // Generate random number
   var salt = getSalt();
   var url = '/ajax_usselecttarget.php?title=' + title + '&ra=' + ra + '&dec=' + dec + '&easymode=1&salt=' + salt;

/*
   hide("USTargetAddBlock");
   show("USTargetLoadingBlock");
*/

   ajaxObject['usselecttarget' + salt] = createRequestObject();
   var subAjaxObj = ajaxObject['usselecttarget' + salt];
   subAjaxObj.onreadystatechange = function() {
      if (subAjaxObj.readyState == 4) {
         var json = evalJSON(subAjaxObj.responseText);
         var response = parseInt(json.response);

         if (response == 1) {
            hide("USTargetAddBlock");
            updateInnerHtml("USTargetHasBlock", json.easytarget);
            show("USTargetHasBlock");
            USEasyHeaderComplete(stepnumber);
            LightBuckets.initializeFullControl();
         }
      }
   }
   subAjaxObj.open("GET", url);
   subAjaxObj.send(null);
}

function USEasyColor(stepnumber, value) {
   // Generate random number
   var salt = Math.floor(Math.random()*1000);
   var field = "color";

   var url = '/ajax_useasyupdate.php?field=' + field + '&value=' + value + '&salt=' + salt;

   ajaxObject['usselectcolor' + salt] = createRequestObject();
   var subAjaxObj = ajaxObject['usselectcolor' + salt];
   subAjaxObj.onreadystatechange = function() {
      if (subAjaxObj.readyState == 4) {
         var json = evalJSON(subAjaxObj.responseText);
         var response = parseInt(json.response);

         if (response == 1) {
            // Disable one
            var disabled = (value == 1) ? 2 : 1;
            document.getElementById("USEasyColor" + disabled).className = "easyBoxChoiceOff";

            // Enable the other
            document.getElementById("USEasyColor" + value).className = "easyBoxChoiceOn";
            document.getElementById("USEasyColor" + value).style.backgroundColor = '';

            USEasyColorValue = value;
            sliderValue = parseInt(document.getElementById("USEasyDetail").innerHTML);
            USEasyDetailImage(sliderValue);

            USEasyHeaderComplete(stepnumber);
            //USEasyPreflight();
            updateInnerHtml("USEasySubmit", json.preflight);
         }
      }
   }
   subAjaxObj.open("GET", url);
   subAjaxObj.send(null);

}

function USEasyUpdate(field, value) {
   var salt = getSalt();

   var url = '/ajax_useasyupdate.php?field=' + field + '&value=' + value + '&salt=' + salt;

   ajaxObject['useasyupdate' + salt] = createRequestObject();
   var subAjaxObj = ajaxObject['useasyupdate' + salt];
   subAjaxObj.onreadystatechange = function() {
      if (subAjaxObj.readyState == 4) {
         var json = evalJSON(subAjaxObj.responseText);
         var response = parseInt(json.response);

         if (response == 1) {
            updateInnerHtml("USEasySubmit", json.preflight);
         }
      }
   }
   subAjaxObj.open("GET", url);
   subAjaxObj.send(null);
}

function USEasySubmit() {
   var salt = getSalt();

   var url = '/ajax_useasysubmit.php?salt=' + salt;

   ajaxObject['useasysubmit' + salt] = createRequestObject();
   var subAjaxObj = ajaxObject['useasysubmit' + salt];
   subAjaxObj.onreadystatechange = function() {
      if (subAjaxObj.readyState == 4) {
         var json = evalJSON(subAjaxObj.responseText);
         var response = parseInt(json.response);

         if (response == 1) {
            updateInnerHtml("USEasyContent", json.content);
         }
      }
   }
   subAjaxObj.open("GET", url);
   subAjaxObj.send(null);
}

// Console
function USBrowseObservatory(observatoryid) {
   var salt = getSalt();

   var url = '/ajax_usbrowseobservatory.php?observatoryid=' + observatoryid + '&salt=' + salt;

   ajaxObject['consolebrowseobservatory' + salt] = createRequestObject();
   var subAjaxObj = ajaxObject['consolebrowseobservatory' + salt];
   USConsoleLoading();
   subAjaxObj.onreadystatechange = function() {
      if (subAjaxObj.readyState == 4) {
         var json = evalJSON(subAjaxObj.responseText);
         var response = parseInt(json.response);

         if (response == 1) {
            updateInnerHtml("USConsoleInfo", json.content);
         }

         USConsoleUnloading();
      }
   }
   subAjaxObj.open("GET", url);
   subAjaxObj.send(null);
}

function USConsoleLoading() {
   updateInnerHtml('USConsoleLoading', '<img src="/images/loadingbar.gif">');
}

function USConsoleUnloading() {
   updateInnerHtml('USConsoleLoading', '');
}

function USAbortRun(oid) {
   if (confirm("Are you sure you wish to abort your imaging plan?")) {
      $('#USAbortBlock_' + oid).html("<i>Sending abort message to observatory...</i>");
      $.get("ajax_usabortrun.php", { salt: salt }, function(data) {
         var json = evalJSON(data);
         var result = parseInt(json.result);
         if (result == 1)
            $('#USAbortBlock_' + oid).html("<i>Ending Imaging Plan...</i>");
         else
            $('#USAbortBlock_' + oid).html("<i>Error. Attempt to refresh and try again.</i>");
      });
   }
}


//----------------------------------------------
// Cart
function cartPointPackageAdd() {
   document.getElementById('cartBlock').innerHTML = '<i>Adding to cart...</i>';

   $('#cartBlock').html("<i>Adding to cart...</i>");

   var salt = getSalt();
   var pointpackageid = $('#pointpackages').val();

   $.get("ajax_cart_addpointpackage.php", { salt: salt, pointpackageid : pointpackageid }, function(data) {
      var json = evalJSON(data);
      $('#cartBlock').html(json.response);
      LightBuckets.initializeCheckout();
   });

}

// Point cards
function cartPointCardPackageAdd() {
   $('#cartBlock').html("<i>Adding to cart...</i>");

   var salt = getSalt();
   var pointpackageid = $('#giftcardpackages').val();

   $.get("ajax_cart_addpointcardpackage.php", { salt: salt, pointcardpackageid : pointpackageid }, function(data) {
      var json = evalJSON(data);
      $('#cartBlock').html(json.response);
      LightBuckets.initializeCheckout();
   });

}

function cartDelete(cartid) {
   $('#cartBlock').html("<i>Deleting item from cart...</i>");

   var salt = getSalt();

   $.get("ajax_cart_remove.php", { salt: salt, cartid : cartid }, function(data) {
      var json = evalJSON(data);
      $('#cartBlock').html(json.response);
      LightBuckets.initializeCheckout();
   });
}

function couponAdd() {
   var couponCode = escape($('#cartCoupon').val());
   $('#cartCouponVerification').html("<i>Verifying...</i>");

   var salt = getSalt();
   $.get("ajax_addcoupon.php", { salt: salt, couponcode : couponCode }, function(data) {
      var json = evalJSON(data);
      $('#couponBlock').html(json.response);
      $('#cartBlock').html(json.cart);
      LightBuckets.initializeCheckout();
   });
}

function couponRemove() {
   var salt = getSalt();
   $.get("ajax_removecoupon.php", { salt: salt }, function(data) {
      var json = evalJSON(data);
      $('#couponBlock').html(json.response);
      $('#cartBlock').html(json.cart);
      LightBuckets.initializeCheckout();
   });
}


//----------------------------------------------
// Claim points
function claimPointsVerify() {
   var code = escape($('#claimPointsCode').val());
   var salt = getSalt();

   $.get("ajax_claimpointsverify.php", { salt: salt, code : code }, function(data) {
      var json = evalJSON(data);
      $('#claimPointsBlock').html(json.response);
   });
}
   
function claimPointsActivate(code) {
   code = escape(code);
   var salt = getSalt();

   $.get("ajax_claimpointsactivate.php", { salt: salt, code : code }, function(data) {
      var json = evalJSON(data);
      $('#claimPointsBlock').html(json.response);
   });

}     
      
//----------------------------------------------
// FAQ
var FAQQuestions = 0;
var FAQQuestion = 0;

function FAQBackCategories() {
   $('#FAQQuestions' + FAQQuestions).hide();
   $('#FAQCategoryBlock').show();
}

function FAQLoadCategory(faqid) {
   // Hide an already open one
   if (FAQQuestions > 0)
      $('#FAQQuestions' + FAQQuestions).hide();

   FAQQuestions = faqid;

   $('#FAQQuestions' + FAQQuestions).show();
}

function FAQLoadQuestion(qid) {
   if (FAQQuestion > 0) {
      $('#FAQAnswer' + FAQQuestion).hide();
      $('#FAQQuestion' + FAQQuestion).css('background-color', '');
   }

   FAQQuestion = qid;

   $('#FAQAnswer' + qid).show();
   $('#FAQQuestion' + FAQQuestion).css('background-color', '#e6e6e6');
}


//---------------------------------------
// SkyView information
var skyViewInformationShowing = false;
function skyViewInformation() {
   if (skyViewInformationShowing)
      hide("skyViewInformationBlock");
   else
      show("skyViewInformationBlock");

   skyViewInformationShowing = !skyViewInformationShowing;

}

//---------------------------------------
// RunTrack
function runTrackPlaybackArrow(runid, direction) {
   if (!RUNTRACKPLAYBACKARROWMOUSEDOWN)
      return;

   var y = parseInt($('#ARPlaybackScroller_' + runid).css('top').replace(/px/g, ""));

   var blockHeight = $('#ARPlaybackScrollBlock_' + runid).height();
   var scrollHeight = $('#ARPlaybackScroller_' + runid).height();

   // How about a % change
   var delta = parseInt(direction * 0.1 * (blockHeight - scrollHeight));

   y += delta;

   if (y < 0)
      y = 0;

   if (y + scrollHeight > blockHeight)
      y = blockHeight - scrollHeight;

   //$('#ARPlaybackScroller_' + runid).css('top', y + "px");
   $('#ARPlaybackScroller_' + runid).animate({'top' : y}, RUNTRACKSCROLLSPEED);

   // Compare the new y to the % of the height and adjust accordingly
   var percentScrolled = y / (blockHeight - scrollHeight);

   runTrackPlaybackMatchScroller(runid, percentScrolled);

   setTimeout('runTrackPlaybackArrow(' + runid + ',' + direction + ')', RUNTRACKSCROLLSPEED);
}

function runTrackPlaybackMatchScroller(runid, percentScrolled) {
   // Now adjust the actual playback content itself
   var contentHeight = $('#ARPlaybackBlock_' + runid).height();
   var containerHeight = $('#ARMain_' + runid + '_playback').height();

   var contentMoveable = contentHeight - containerHeight;

   $('#testP').val(percentScrolled);
   $('#testM').val(containerHeight);

   if (contentMoveable <= 0)
      return false;

   var newOffset = -(percentScrolled * contentMoveable);
   $('#testO').val(newOffset);

   // New offset
   //$('#ARPlaybackBlock_' + runid).animate({ "top" : newOffset }, RUNTRACKSCROLLSPEED);
   $('#ARPlaybackBlock_' + runid).css("top", newOffset + "px");

}

function runTrackImagesArrow(runid, direction) {
   if (!RUNTRACKIMAGESARROWMOUSEDOWN)
      return;

   var y = parseInt($('#ARImagesScroller_' + runid).css('top').replace(/px/g, ""));

   var blockHeight = $('#ARImagesScrollBlock_' + runid).height();
   var scrollHeight = $('#ARImagesScroller_' + runid).height();

   // How about a % change
   var delta = parseInt(direction * 0.1 * (blockHeight - scrollHeight));

   y += delta;

   if (y < 0)
      y = 0;

   if (y + scrollHeight > blockHeight)
      y = blockHeight - scrollHeight;

   $('#ARImagesScroller_' + runid).animate({'top' : y}, RUNTRACKSCROLLSPEED);

   // Compare the new y to the % of the height and adjust accordingly
   var percentScrolled = y / (blockHeight - scrollHeight);

   runTrackImagesScroller(runid, percentScrolled);

   setTimeout('runTrackImagesArrow(' + runid + ',' + direction + ')', RUNTRACKSCROLLSPEED);
}



function runTrackImagesScroller(runid, percentScrolled) {
   // Now adjust the actual playback content itself
   var contentHeight = $('#ARImagesContent_' + runid).height();
   var containerHeight = $('#ARImagesContainer_' + runid).height();

   var contentMoveable = contentHeight - containerHeight;

   $('#testP').val(percentScrolled);
   $('#testM').val(contentMoveable);

   if (contentMoveable <= 0)
      return false;

   var newOffset = -(percentScrolled * contentMoveable);
   $('#testO').val(newOffset);

   // New offset
   $('#ARImagesContent_' + runid).css("top", newOffset + "px");

}

function runTrackLoad(runid, field, value) {
   var salt = getSalt();
   field = field.toLowerCase();

   if (RUNTRACKCURRENTPANEL != field) {
      // Hide the current panel
      $('#ARMain_' + runid + "_" + RUNTRACKCURRENTPANEL).hide();

      // Disable the current tab
      $('#ARTab_' + runid + "_" + RUNTRACKCURRENTPANEL).css('background-color', '#cccccc');

      RUNTRACKCURRENTPANEL = field;

      // Show the new one
      $('#ARMain_' + runid + "_" + RUNTRACKCURRENTPANEL).show();
      $('#ARTab_' + runid + "_" + RUNTRACKCURRENTPANEL).css('background-color', '#f7931e');
   }

   // Playback automatically refreshes by itself
   if (field == "playback") {
      return false;
   }

   //$('#ARMain_' + runid + "_" + RUNTRACKCURRENTPANEL).html('loading...');
   $('#ARMain_' + runid + "_" + RUNTRACKCURRENTPANEL).html('<center><img src="/images/pixel_c.gif" height="250" width="1"><br/><img src="/images/loading.gif"></center>');

   $.get("/ajax_runtrackpanel.php", { salt: salt, runid : runid, field : field, value : value }, function(data) {
      var json = evalJSON(data);
      $('#ARMain_' + runid + "_" + field).html(json.response);
      LightBuckets.initializeRunTrack();
   });
}

function runTrackSubframeSelect(runid) {
   var exposureid = $('#runTrackSubframeSelect_' + runid).val();

   $('#runTrackSubframeContent_' + runid).html('<center><img src="/images/pixel_c.gif" height="220" width="1"><br/><img src="/images/loading.gif"></center>');
   var field = "subframes";
   var salt = getSalt();

   $.get("/ajax_runtrackpanel.php", { salt: salt, runid : runid, field : field, value : exposureid }, function(data) {
      var json = evalJSON(data);
      $('#ARMain_' + runid + "_" + field).html(json.response);
      LightBuckets.initializeRunTrack();
   });
}

var runTrackLiveCurrentSubframe = [];

function runTrackLiveSubframe(runid) {
   if (runTrackLiveCurrentSubframe[runid] > 0) {
      $('#ARSubframe_' + runid + '_' + runTrackLiveCurrentSubframe[runid]).fadeIn(2000).fadeOut(2000);
   }

   setTimeout("runTrackLiveSubframe(" + runid + ")", 500);
}

function runTrackLiveInitialize(runid) {
   runTrackLiveCurrentSubframe[runid] = 0;
   runTrackLiveRun(runid);
   runTrackLiveSubframe(runid);
}

var runTrackLiveWaiting = false;

function runTrackLiveRun(runid) {
   if (runTrackLiveWaiting)
      return;

   // Setup a timeout to constantly update the runTrack until a signal is
   // received which will mean to stop updating

   // First obtain the last row produced by runTrack
   var lastid = $('#ARPlaybackBlock_' + runid + ' > div:last').attr('id').split("_");
   var lastrow = lastid[2];
   var salt = getSalt();

   runTrackLiveWaiting = true;

   // Get the next X rows
   $.get("/ajax_runtracklive.php", { salt: salt, runid : runid, lrn : lastrow }, function(data) {
      var json = evalJSON(data);

      // Remove the last one
      $('#ARPlayback_' + runid + '_' + lastrow).remove();
      //test("Removing row: " + lastrow);

      var numRows = parseInt(json.numrows);

      //test("Appending " + numRows + " rows");

      // Have new rows, lets add to it
      if (numRows > 0) {
         $('#ARPlaybackBlock_' + runid).append(json.rows);
      }

      // Now update all of the fields
      var dataFields = json.datafields.split(",");

      for (var i = 0; i < dataFields.length; i++) {
         var fieldName = dataFields[i];
         $('#ARValue_' + runid + '_' + fieldName).html(json['data_' + fieldName]);
      }

      $('#ARValue_' + runid + '_camStat').html(json['data_camStat']);
      $('#ARValue_' + runid + '_actStat').html(json['data_actStat']);

      // Height
      $('#ARPlaybackBlock_' + runid).height(parseInt(json.contentheight));

      // Update the playback (auto scroll it)
      var y = $('#ARPlaybackScroller_' + runid).position().top;

      var blockHeight = $('#ARPlaybackScrollBlock_' + runid).height();
      var scrollHeight = $('#ARPlaybackScroller_' + runid).height();

      if (y + scrollHeight > blockHeight)
         y = blockHeight - scrollHeight;

      // Compare the new y to the % of the height and adjust accordingly
      var percentScrolled = y / (blockHeight - scrollHeight);
      //test(percentScrolled);

      if (percentScrolled == 1)
         runTrackPlaybackMatchScroller(runid, 1);

      // Still running if numRows is greater than or equal to 0. Set the timeout
      if (numRows >= 0)
         setTimeout('runTrackLiveRun(' + runid + ')', 4000);

      runTrackLiveCurrentSubframe[runid] = parseInt(json.imageCurrent);
      runTrackLiveWaiting = false;
   });
}

//--------------------------
// groups
function groupMemberActionsCancel(mid) {
   $('#memberActionsAddPoints' + mid).hide();
   $('#memberActionsSubtractPoints' + mid).hide();
   $('#memberActions' + mid).show();
}

function groupAddMemberPointsRun(groupid, mid) {
   var numPoints = Number($('#memberActionsAddPointsField' + mid).val());

   if (numPoints < 1)
      return;


   $('#memberActionsAddPoints' + mid).html("<i>Adding...</i>");
   var salt = getSalt();

   $.get("/ajax_group_memberaddpoints.php", { salt: salt, groupid: groupid, 
                                 memberid : mid, field : numPoints }, function(data) {
      var json = evalJSON(data);

      var check = parseInt(json.check);

      if (check == 1) {
         groupMemberActionsCancel(mid);
         // Adjust the pointage
         var userid = json.userid;
         $('#groupMemberPoints' + mid).html(json.pointsMember);
         $('#groupMemberPoints' + userid).html(json.pointsSelf);
      } else
         $('#memberActionsAddPoints' + mid).html(json.response);
   });
}

function groupSubtractMemberPointsRun(groupid, mid) {
   var numPoints = Number($('#memberActionsSubtractPointsField' + mid).val());

   if (numPoints < 1)
      return;


   $('#memberActionsSubtractPoints' + mid).html("<i>Subtracting...</i>");
   var salt = getSalt();

   $.get("/ajax_group_membersubtractpoints.php", { salt: salt, groupid: groupid, 
                                 memberid : mid, field : numPoints }, function(data) {
      var json = evalJSON(data);

      var check = parseInt(json.check);

      if (check == 1) {
         groupMemberActionsCancel(mid);
         // Adjust the pointage
         var userid = json.userid;

         $('#groupMemberPoints' + mid).html(json.pointsMember);
         $('#groupMemberPoints' + userid).html(json.pointsSelf);
      } else
         $('#memberActionsSubtractPoints' + mid).html(json.response);
   });
}

function groupMemberRemove(groupid, mid) {
   var salt = getSalt();

   $.get("/ajax_group_removemember.php", { salt: salt, groupid: groupid, 
                                 memberid : mid }, function(data) {
      var json = evalJSON(data);

      var check = parseInt(json.response);

      if (check == 1) {
         window.location.reload();
      } else
         confirm("Error");
   });
}

function groupMemberQuery(groupid) {
   var uname = escape($('#addmember').val());
   var salt = getSalt();

   $.get("/ajax_group_querymember.php", { salt: salt, groupid: groupid, 
                                 username : uname }, function(data) {
      var json = evalJSON(data);

      $('#addmemberBlock').html(json.response);
   });
}

function groupMemberAddRequest(groupid, mid) {
   var salt = getSalt();

   $.get("/ajax_group_addmemberrequest.php", { salt: salt, groupid: groupid, 
                                 memberid : mid }, function(data) {
      var json = evalJSON(data);

      var check = parseInt(json.check);

      if (check) {
         confirm("A request has been sent to he user to join the group");
         window.location.reload();
      } else {
         confirm(json.response);
      }
   });
}

function groupPointsRemove(groupid) {
   var numPoints = Number($('#removepoints').val());

   if (numPoints < 1)
      return;

   var salt = getSalt();

   $.get("/ajax_group_removepoints.php", { salt: salt, groupid: groupid, 
                                 value : numPoints }, function(data) {
      var json = evalJSON(data);
      var check = parseInt(json.check);

      if (check) {
         confirm("Points successfully transferred from the group to your account");
         window.location.reload();
      } else {
         $('#removepointsWarning').html(json.response);
      }
   });
}

function groupPointsAdd(groupid) {
   var numPoints = Number($('#addpoints').val());

   if (numPoints < 1)
      return;

   var salt = getSalt();

   $.get("/ajax_group_addpoints.php", { salt: salt, groupid: groupid, 
                                 value : numPoints }, function(data) {
      var json = evalJSON(data);
      var check = parseInt(json.check);

      if (check) {
         confirm("Points successfully transferred from your account to the group");
         window.location.reload();
      } else {
         $('#addpointsWarning').html(json.response);
      }
   });
}

function groupDelete(groupid) {
   var salt = getSalt();

   $.get("/ajax_group_delete.php", { salt: salt, groupid: groupid }, function(data) {
      var json = evalJSON(data);
      var check = parseInt(json.check);

      if (check) {
         confirm("Group deleted");
         window.location.reload();
      } else {
         confirm("An error occured while attempting to delete the group");
      }
   });
}

function groupCreate() {
   var salt = getSalt();
   var title = escape($('#groupCreateTitle').val());

   $.get("/ajax_group_create.php", { salt: salt, title : title }, function(data) {
      var json = evalJSON(data);
      var check = parseInt(json.check);

      if (check) {
         confirm("Group created");
         window.location.reload();
      } else {
         confirm(json.respones);
      }
   });
}


function groupCreateCancel() {
   $('#groupCreateBlock').hide();
   $('#groupCreateToggle').show();
}

