var CALENDARMOUSEDOWN = false;
var CALENDAROFFSET = 0;
var CALENDARPARENTOFFSET = 0;
var CALENDARNUMTARGETS = 0;

var CALENDARTARGETMINL = []; // TARGETID => MIN FOR L POSITION BLOCK
var CALENDARTARGETMAXL = []; // TARGETID => MAX FOR L POSITION BLOCK
var CALENDARTARGETPEAK = []; // TARGETID => PIXEL OFFSET FOR PEAK
var CALENDARTARGETMERIDIAN = []; // TARGETID => PIXEL offset for MERIDIAN
var CALENDARTARGETMOVEAMOUNT = 5;

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 LBIMAGECACHE = [];
(function() {
   $.extend($.fn.disableTextSelect = function() {
      return this.each(function(){
         if($.browser.mozilla){//Firefox
            $(this).css('MozUserSelect','none');
         }else if($.browser.msie){//IE
            $(this).bind('selectstart',function(){return false;});
         }else{//Opera, etc.
            $(this).mousedown(function(){return false;});
         }
      });
   });


   $.extend($.fn.loading = function() {
      $(this).html("<center><img src=\"/images/loading.gif\"></center>");
   });

   $.preLoadImages = function() {
      var args_len = arguments.length;
      for (var i = args_len; i--;) {
         var cacheImage = document.createElement('img');
         cacheImage.src = arguments[i];
         LBIMAGECACHE.push(cacheImage);
      }
   }
})();

jQuery.extend({
   

    createUploadIframe: function(id, uri)
   {
         //create frame
            var frameId = 'jUploadFrame' + id;
            var iframeHtml = '<iframe id="' + frameId + '" name="' + frameId + 
               '" style="position:absolute; top:-9999px; left:-9999px"';
         if(window.ActiveXObject)
         {
                if(typeof uri== 'boolean'){
               iframeHtml += ' src="' + 'javascript:false' + '"';

                }
                else if(typeof uri== 'string'){
               iframeHtml += ' src="' + uri + '"';

                } 
         }
         iframeHtml += ' />';
         jQuery(iframeHtml).appendTo(document.body);

            return jQuery('#' + frameId).get(0);         
    },
    createUploadForm: function(id, fileElementId, data)
   {
      //create form  
      var formId = 'jUploadForm' + id;
      var fileId = 'jUploadFile' + id;
      var form = jQuery('<form  action="" method="POST" name="' + formId + '" id="' + 
         formId + '" enctype="multipart/form-data"></form>');   
      if(data)
      {
         for(var i in data)
         {
            jQuery('<input type="hidden" name="' + i + '" value="' + data[i] + '" />').appendTo(form);
         }        
      }     
      var oldElement = jQuery('#' + fileElementId);
      var newElement = jQuery(oldElement).clone();
      jQuery(oldElement).attr('id', fileId);
      jQuery(oldElement).before(newElement);
      jQuery(oldElement).appendTo(form);


      
      //set attributes
      jQuery(form).css('position', 'absolute');
      jQuery(form).css('top', '-1200px');
      jQuery(form).css('left', '-1200px');
      jQuery(form).appendTo('body');      
      return form;
    },

    ajaxFileUpload: function(s) {
        s = jQuery.extend({}, jQuery.ajaxSettings, s);
        var id = new Date().getTime()        
      var form = jQuery.createUploadForm(id, s.fileElementId, (typeof(s.data)=='undefined'?false:s.data));
      var io = jQuery.createUploadIframe(id, s.secureuri);
      var frameId = 'jUploadFrame' + id;
      var formId = 'jUploadForm' + id;    
        // Watch for a new set of requests
        if ( s.global && ! jQuery.active++ )
      {
         jQuery.event.trigger( "ajaxStart" );
      }            
        var requestDone = false;
        // Create the request object
        var xml = {}   
        if ( s.global )
            jQuery.event.trigger("ajaxSend", [xml, s]);
        // Wait for a response to come back
        var uploadCallback = function(isTimeout)
      {        
         var io = document.getElementById(frameId);
            try 
         {           
            if(io.contentWindow)
            {
                xml.responseText = io.contentWindow.document.body?io.contentWindow.document.body.innerHTML:null;
                   xml.responseXML = io.contentWindow.document.XMLDocument?io.contentWindow.document.XMLDocument:io.contentWindow.document;
                
            }else if(io.contentDocument)
            {
                xml.responseText = io.contentDocument.document.body?io.contentDocument.document.body.innerHTML:null;
                  xml.responseXML = io.contentDocument.document.XMLDocument?io.contentDocument.document.XMLDocument:io.contentDocument.document;
            }                 
            }catch(e)
         {
            jQuery.handleError(s, xml, null, e);
         }
            if ( xml || isTimeout == "timeout") 
         {           
                requestDone = true;
                var status;
                try {
                    status = isTimeout != "timeout" ? "success" : "error";
                    // Make sure that the request was successful or notmodified
                    if ( status != "error" )
               {
                        // process the data (runs the xml through httpData regardless of callback)
                        var data = jQuery.uploadHttpData( xml, s.dataType );    
                        // If a local callback was specified, fire it and pass it the data
                        if ( s.success )
                            s.success( data, status );
    
                        // Fire the global callback
                        if( s.global )
                            jQuery.event.trigger( "ajaxSuccess", [xml, s] );
                    } else
                        jQuery.handleError(s, xml, status);
                } catch(e) 
            {
                    status = "error";
                    jQuery.handleError(s, xml, status, e);
                }

                // The request was completed
                if( s.global )
                    jQuery.event.trigger( "ajaxComplete", [xml, s] );

                // Handle the global AJAX counter
                if ( s.global && ! --jQuery.active )
                    jQuery.event.trigger( "ajaxStop" );

                // Process result
                if ( s.complete )
                    s.complete(xml, status);

                jQuery(io).unbind()

                setTimeout(function()
                           {  try 
                              {
                                 jQuery(io).remove();
                                 jQuery(form).remove();  
                                 
                              } catch(e) 
                              {
                                 jQuery.handleError(s, xml, null, e);
                              }                          

                           }, 100)

                xml = null

            }
        }
        // Timeout checker
        if ( s.timeout > 0 ) 
      {
            setTimeout(function(){
                // Check to see if the request is still happening
                if( !requestDone ) uploadCallback( "timeout" );
            }, s.timeout);
        }
        try 
      {

         var form = jQuery('#' + formId);
         jQuery(form).attr('action', s.url);
         jQuery(form).attr('method', 'POST');
         jQuery(form).attr('target', frameId);
            if(form.encoding)
         {
            jQuery(form).attr('encoding', 'multipart/form-data');             
            }
            else
         {  
            jQuery(form).attr('enctype', 'multipart/form-data');        
            }        
            jQuery(form).submit();

        } catch(e) 
      {        
            jQuery.handleError(s, xml, null, e);
        }
      
      jQuery('#' + frameId).load(uploadCallback );
        return {abort: function () {}};   

    },

    uploadHttpData: function( r, type ) {
        var data = !type;
        data = type == "xml" || data ? r.responseXML : r.responseText;
        // If the type is "script", eval it in global context
        if ( type == "script" )
            jQuery.globalEval( data );
        // Get the JavaScript object, if JSON is used.
        if ( type == "json" )
            eval( "data = " + data );
        // evaluate scripts within html
        if ( type == "html" )
            jQuery("<div>").html(data).evalScripts();

        return data;
    }
})


var LightBuckets = {
   jQuery : $,

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

   initializeLayout : function() {
      var LightBuckets = this;

      // Splash
      $('.splashPage').unbind().mouseenter(function() {
         if ($(this).hasClass('splashPageOn'))
            return;

         $(this).css('cursor','pointer');
         $(this).css('background-color','#aaaaaa');
      }).mouseleave(function() {
         if ($(this).hasClass('splashPageOn'))
            return;

         $(this).css('background-color','');
      }).click(function() {
         if ($(this).hasClass('splashPageOn'))
            return;

         SPLASHBANNERPLAY = false;
         splashBannerLoad(this.id);

         return false;
      });

      // 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;
      });


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

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

         return false;
      });

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

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

         return false;
      });


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

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

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

      $('.videoSelect').unbind().mouseenter(function() {
         $(this).css('cursor','pointer');
      }).click(function() {
         var salt = getSalt();
         var videoid = this.id;

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

            if (check == 1) {
               $('#videoContent').html(json.content);

               var s1 = new SWFObject("/flv_player.swf","single","640","480","7");
               s1.addParam("allowfullscreen","true");
               s1.addVariable("file","/videos/" + json.filename);
               s1.addVariable("image","/videos/images/" + videoid + ".jpg");
               s1.write("mondoflvplayer");
            } else
               confirm("Invalid video selected");
         });

         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? This will not cancel an imaging plan")) {
            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;
      });

      $('.accountSubframeTargetTitle').unbind().mouseenter(function() {

         $(this).css('cursor','pointer');

         if ($(this).hasClass('accountSubframeTargetTitleOpen'))
            return;

         $(this).css('background-color','#f5f5f5');
      }).mouseleave(function() {
         $(this).css('background-color','');
      }).click(function() {
         // Set all arrows down
         $('img','.accountSubframeTargetTitle').attr("src","/images/arrowdown.gif");

         // Hide all
         $('.accountSubframeTargetBlock').hide();

         var parent = $(this).parent();

         // Are we open already?.... close it
         if ($(this).hasClass('accountSubframeTargetTitleOpen')) {
            $('.accountSubframeTargetBlock',parent).animate(
               {opacity : 0}, 500, function() {
               $(this).hide();
               $('.accountSubframeTargetTitleOpen').removeClass(
                  'accountSubframeTargetTitleOpen');
            });

         // Not open, so we open it now
         } else {
            $('.accountSubframeTargetTitleOpen').removeClass(
               'accountSubframeTargetTitleOpen');

            $(this).addClass('accountSubframeTargetTitleOpen');
            $('img',this).attr("src","/images/arrowup.gif");

            $('.accountSubframeTargetBlock',parent).css('opacity',0).show().animate(
               {opacity : 1}, 500, function() {
            });
         }

      });

      $('.accountRunTargetTitle').unbind().mouseenter(function() {

         $(this).css('cursor','pointer');

         if ($(this).hasClass('accountRunTargetTitleOpen'))
            return;
         $(this).css('background-color','#f5f5f5');
      }).mouseleave(function() {
         $(this).css('background-color','');
      }).click(function() {
         // Set all arrows down
         $('img','.accountRunTargetTitle').attr("src","/images/arrowdown.gif");

         // Hide all
         $('.accountRunTargetDetails').hide();

         var parent = $(this).parent();

         // Are we open already?.... close it
         if ($(this).hasClass('accountRunTargetTitleOpen')) {
            $('.accountRunTargetDetails',parent).animate(
               {opacity : 0}, 500, function() {
               $(this).hide();
               $('.accountRunTargetTitleOpen').removeClass('accountRunTargetTitleOpen');
            });

         // Not open, so we open it now
         } else {
            $('.accountRunTargetTitleOpen').removeClass('accountRunTargetTitleOpen');
            $(this).addClass('accountRunTargetTitleOpen');
            $('img',this).attr("src","/images/arrowup.gif");

            $('.accountRunTargetDetails',parent).css('opacity',0).show().animate(
               {opacity : 1}, 500, function() {
            });
         }
      });

      $('.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;
      });

      $('#accountPreviewPrev').unbind().disableTextSelect().mouseenter(function() {
         $(this).css('text-decoration','underline');
         $(this).css('cursor','pointer');
      }).mouseleave(function() {
         $(this).css('cursor','');
         $(this).css('text-decoration','none');
      }).click(function() {
         // See which one is currently visible
         var visibleID = "";
         if ($('.accountPreviewSmall:visible').length > 0)
            visibleID = $('.accountPreviewSmall:visible').attr("id");
         else
            visibleID = $('.accountPreviewLarge:visible').attr("id");

         if (visibleID.length <= 0)
            return;

         var currentTargetid = visibleID.split("_");
         currentTargetid = currentTargetid[1];

         // Hide all small
         $('.accountPreviewSmall').hide();

         // Hide all large
         $('.accountPreviewLarge').hide();

         $('#accountPreviewToggleLarge_' + currentTargetid).hide();
         $('#accountPreviewToggleThumb_' + currentTargetid).hide();

         // Now figure it all out...
         // Go through them all and figure out which we are on. Then take
         // The one after to display
         var set = false;
         var lastTarget = false;
         var numBefore = 0;

         $('.accountPreviewSmall').each(function() {
            if (!set) {
               if ($(this).attr("id") == "accountPreviewSmall_" + currentTargetid) {
                  var newid = lastTarget.attr("id");
                  var newtargetid = newid.split("_");
                  newtargetid = newtargetid[1];

                  $('#accountPreviewToggleLarge_' + newtargetid).show();
                  $('#accountPreviewSmall_' + newtargetid).show();

                  // Update the title
                  $('#accountPreviewTitle').html(
                     $('#accountPreviewTargetTitle_' + newtargetid).html());

                  set = true;
               } else {
                  numBefore++;
                  lastTarget = $(this);
               }

            }
         });

         // If there is not anymore, then empty out the next
         if (numBefore <= 1)
            $('#accountPreviewPrev').html('');

         $('#accountPreviewNext').html('&gt;&gt;');
      });


      $('#accountPreviewNext').unbind().disableTextSelect().mouseenter(function() {
         $(this).css('text-decoration','underline');
         $(this).css('cursor','pointer');
      }).mouseleave(function() {
         $(this).css('cursor','');
         $(this).css('text-decoration','none');
      }).click(function() {
         // See which one is currently visible
         var visibleID = "";
         if ($('.accountPreviewSmall:visible').length > 0)
            visibleID = $('.accountPreviewSmall:visible').attr("id");
         else
            visibleID = $('.accountPreviewLarge:visible').attr("id");

         if (visibleID.length <= 0)
            return;

         var currentTargetid = visibleID.split("_");
         currentTargetid = currentTargetid[1];

         // Hide all small
         $('.accountPreviewSmall').hide();

         // Hide all large
         $('.accountPreviewLarge').hide();

         $('#accountPreviewToggleLarge_' + currentTargetid).hide();
         $('#accountPreviewToggleThumb_' + currentTargetid).hide();

         // Now figure it all out...
         // Go through them all and figure out which we are on. Then take
         // The one after to display
         var found = false;
         var set = false;
         var hasMore = false;

         $('.accountPreviewSmall').each(function() {
            if (!set) {
               if (found) {
                  var newid = $(this).attr("id");
                  var newtargetid = newid.split("_");
                  newtargetid = newtargetid[1];

                  $('#accountPreviewToggleLarge_' + newtargetid).show();
                  $('#accountPreviewSmall_' + newtargetid).show();

                  // Update the title
                  $('#accountPreviewTitle').html(
                     $('#accountPreviewTargetTitle_' + newtargetid).html());

                  set = true;
               }

               if ($(this).attr("id") == "accountPreviewSmall_" + currentTargetid)
                  found = true;
            } else
               hasMore = true;
         });

         // If there is not anymore, then empty out the next
         if (!hasMore)
            $('#accountPreviewNext').html('');
         $('#accountPreviewPrev').html('&lt;&lt;');
      });

      $('.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;
      });

      $('#accountEmailAlertsToggle').mouseenter(function() {
         $(this).css('text-decoration', 'underline');
         $(this).css('cursor', 'pointer');
      }).mouseleave(function() {
         $(this).css('text-decoration', 'none');
      }).click(function() {
         // Email block hidden, show it
         if (!$('#accountEmailBlock').is(":hidden")) {
            $('#accountEmailBlock').hide();
            $('#accountProfileBlock').show();
            $(this).html("e-mail alerts");
         } else {
            $('#accountProfileBlock').hide();
            $('#accountEmailBlock').show();
            $(this).html("close e-mail alerts");
         }

         return false;
      });

      // time period subframes
      $('.addsubframesperiodtoggle').unbind().mouseenter(function() {
         $(this).css('color','#f7931e');
         $(this).css('cursor','pointer');
      }).mouseleave(function() {
         $(this).css('color','');
      }).click(function() {
         // Default visible, display period
         if($('#USExposureAddDefault').is(':visible')) {
            $('#USExposureAddDefault').hide();
            $('#USExposureAddPeriod').show();

            $(this).html("add subframes by count");


            // Hide the ability to add a target
            $('#USTab_addtarget').hide();
            $('#fullControlPeriodNote').hide();
         // Period visible, display default
         } else {
            $('#USExposureAddPeriod').hide();
            $('#USExposureAddDefault').show();
            $(this).html("add subframes for a time period");
            $('#USTab_addtarget').show();
            $('#fullControlPeriodNote').show();
         }
         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 parts = this.id.replace(/fullControlPlanning_/g, '').split(",");
         var name = parts[0];
         var targetid = parts[1];
         USPlanningToggle(targetid, 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 = 0;

         if ($('#USExposureAddDefault').is(':visible'))
            current = parseInt($('#USExposureDuration' + imgid).val());
            /* current = parseInt($('#USExposureDuration' + imgid,'#USExposureAddDefault').val()); */
         else
            current = parseInt($('#USExposureDuration' + imgid,'#USExposureAddPeriod').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 ($('#USExposureAddDefault').is(':visible'))
            $('#USExposureDuration' + imgid).val(current);
            /* $('#USExposureDuration' + imgid,'#USExposureAddDefault').val(current); */
         else
            $('#USExposureDuration' + imgid,'#USExposureAddPeriod').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;

         if ($('#USExposureAddDefault').is(':visible'))
            current = parseInt($('#USExposureDuration' + imgid).val());
            /* current = parseInt($('#USExposureDuration' + imgid,'#USExposureAddDefault').val()); */
         else
            current = parseInt($('#USExposureDuration' + imgid,'#USExposureAddPeriod').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;

         if ($('#USExposureAddDefault').is(':visible'))
            $('#USExposureDuration' + imgid).val(current);
            /* $('#USExposureDuration' + imgid,'#USExposureAddDefault').val(current); */
         else
            $('#USExposureDuration' + imgid,'#USExposureAddPeriod').val(current);

         return false;
      });



      $('.fullControlPlanningSpinnerPeriodP').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($('#USExposurePeriod' + imgid,'#USExposureAddPeriod').val());

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

         $('#USExposurePeriod' + imgid,'#USExposureAddPeriod').val(current);

         return false;
      });

      $('.fullControlPlanningSpinnerPeriodM').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($('#USExposurePeriod' + imgid,'#USExposureAddPeriod').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;

         $('#USExposurePeriod' + imgid,'#USExposureAddPeriod').val(current);

         return false;
      });


      // SkyView Notice
      $('#catalogNoticeClose').unbind().mouseenter(function() {
         $(this).css('background-color','#dddddd');
         $(this).css('cursor','pointer');
      }).mouseleave(function() {
         $(this).css('background-color','');
         $(this).css('cursor','');
      }).click(function() {
         $('#catalogNotice').hide();
         return false;
      });

      // Multitargeting 12/2010
      $('.tab').unbind().mouseenter(function() {
         if ($(this).hasClass('tabActive'))
            return;

         $(this).css('border-top', '1px solid #f7931e');
         $(this).css('border-left', '1px solid #f7931e');
         $(this).css('border-right', '1px solid #f7931e');
         $(this).css('cursor','pointer');
      }).mouseleave(function() {
         if ($(this).hasClass('tabActive'))
            return;

         $(this).css('border-top', '1px solid #e9e9e9');
         $(this).css('border-left', '1px solid #e9e9e9');
         $(this).css('border-right', '1px solid #e9e9e9');
         $(this).css('cursor','');
      }).click(function() {
         var id = this.id;
         fullControlLoadTab(id);
      });

      // Multitarget tabs
      $('.fullControlTabOrder').unbind().mouseenter(function() {
         $(this).css("background-color", "#f7931e");
         $(this).css('cursor','pointer');
      }).mouseleave(function() {
         $(this).css("background-color", "");

      }).click(function(e) {
         var id = this.id.split(",");
         var targetid = id[0];
         var direction = id[1];

         // Stop it from loading the tab itself
         e.stopPropagation();

         var salt = getSalt();

         // Load it
         $.get("/ajax_ustargetsortorder.php", { salt: salt,
            targetid : targetid, direction : direction}, function(data) {

            var json = evalJSON(data);

            if (parseInt(json.check) == 1) {
               window.location.reload();
            } else
               confirm("An error occured while loading the content. Refresh and try again");
         });


      });

      var tabBlockHeight = $('#fullControlTabSub').height();
      var tabHeight = $('.tab').outerHeight(true);

      // We know we have more than one row if we're greater than a single
      // row. Then we can figure out how many rows we have by seeing
      // the multiple of the tabBlocKHeight vs a single tab
      if (tabBlockHeight > tabHeight) {
         $('.fullControlTabControls').show();
         $('#fullControlTabR').unbind().mouseenter(function() {
            $(this).css('background-color','#f7931e');
            $(this).css('cursor','pointer');
         }).mouseleave(function() {
            $(this).css('background-color','');
         }).click(function() {
            // Obtain the current top offset for the tabSub
            // then figure out if theres more to move
            var top = $('#fullControlTabSub').position().top;

            // the last row is the tab block height - tab height
            if (top + tabBlockHeight - 2*tabHeight < 0) {
               return;
            } else {
               // Move it up one set
               var newTop = top - tabHeight;
               $('#fullControlTabSub').css("top", newTop + "px");
               if (newTop + tabBlockHeight - 2*tabHeight < 0)
                  $(this).hide();

               // Always show the left tab
               $('#fullControlTabL').show();
            }

         });

         $('#fullControlTabL').unbind().mouseenter(function() {
            $(this).css('background-color','#f7931e');
            $(this).css('cursor','pointer');
         }).mouseleave(function() {
            $(this).css('background-color','');
         }).click(function() {
            // Obtain the current top offset for the tabSub
            // then figure out if theres more to move
            var top = $('#fullControlTabSub').position().top;

            // the last row is the tab block height - tab height
            if (top >= 0) {
               return;
            } else {
               // Move it down one set
               var newTop = top + tabHeight;
               $('#fullControlTabSub').css("top", newTop + "px");

               if (newTop >= 0)
                  $(this).hide();

               // Always show the right tab
               $('#fullControlTabR').show();
            }
         });
      }

      if ($('.fullControlImagingPlanContentPage').length > 1) {
         // Set the top
         var pageHeight = $('.fullControlImagingPlanContentPage').height();
         var pagingHeight = $('.fullControlImagingPlanPaging').height();

         // Initialize the paging
         $('#fullControlImagingPlanPageR').unbind().mouseenter(function() {
            $(this).css('background-color','#f7931e');
            $(this).css('cursor','pointer');
         }).mouseleave(function() {
            $(this).css('background-color','');
         }).click(function() {
            var current = $('.fullControlImagingPlanContentPage:visible');
            var currentid = current.attr("id").split("_");
            currentid = parseInt(currentid[1]);

            // Check that there is more
            var numPages = $('.fullControlImagingPlanContentPage').length;

            if (currentid + 1 < numPages) {
               // Set the current one as hidden
               current.hide();

               // Set the next one as not hidden
               $('#imagingplantargetpage_' + (currentid + 1)).show();

               // Show the left
               $('#fullControlImagingPlanPageL').show();

               if (currentid + 2 >= numPages)
                  $(this).hide();

               // Update the page number
               $('#fullControlImagingPlanCurrent').html(currentid+2);
            }
         });

         // Initialize the paging
         $('#fullControlImagingPlanPageL').unbind().mouseenter(function() {
            $(this).css('background-color','#f7931e');
            $(this).css('cursor','pointer');
         }).mouseleave(function() {
            $(this).css('background-color','');
         }).click(function() {
            var current = $('.fullControlImagingPlanContentPage:visible');
            var currentid = current.attr("id").split("_");
            currentid = parseInt(currentid[1]);

            // Check that there is more
            var numPages = $('.fullControlImagingPlanContentPage').length;

            if (currentid - 1 >= 0) {
               // Set the current one as hidden
               current.hide();

               // Set the next one as not hidden
               $('#imagingplantargetpage_' + (currentid - 1)).show();

               // Show the right
               $('#fullControlImagingPlanPageR').show();

               if (currentid - 1 <= 0)
                  $(this).hide();

               // Update the page number
               $('#fullControlImagingPlanCurrent').html(currentid);
            }
         });



         var newTop = pageHeight - pagingHeight;
         $('.fullControlImagingPlanPaging').css("top", newTop + "px");
         $('.fullControlImagingPlanPaging').show();
      }

      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;

         USCalendarInitialize();

         CALENDARMOUSEDOWN = true;

         return false;
      });

      $('.calendarMoveBlockL').unbind().disableTextSelect().mouseenter(function() {
         $(this).css('cursor','pointer');
      }).mouseleave(function() {
         $(this).css('cursor','');
      }).click(function() {
         USCalendarInitialize();

         // initialize
         var block = $('#USScheduleDayBlock');
         var left = block.position().left;

         // move it left to x (pixels from left of calendar)
         x = left - CALENDARTARGETMOVEAMOUNT;

         // This is the movement range
         var rangeLeft = $('.calendarDayRange').position().left;
         var rangeRight = rangeLeft +
               $('.calendarDayRange').width();

         if (x < rangeLeft)
            return;

         var lastStart = USCalendarMoveTargetBlock(0, x, x);

         // failed to move to this point
         if (lastStart < 0)
            return;

         var lastTargetid = CALENDARNUMTARGETS - 1;
         // Calculate the lastEnd so we can set the width
         var lastEnd = $('#targetblock_' + lastTargetid).position().left + 
            $('#targetblock_' + lastTargetid).width();

         $('#USScheduleDayBlock').css({ left: x + "px",
            width: (lastEnd) + "px"});

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

         USCalendarMovedTime(x/parentWidth);
      });

      $('.calendarMoveBlockR').unbind().disableTextSelect().mouseenter(function() {
         $(this).css('cursor','pointer');
      }).mouseleave(function() {
         $(this).css('cursor','');
      }).click(function() {
         USCalendarInitialize();

         // initialize
         var block = $('#USScheduleDayBlock');
         var left = block.position().left;

         // move it left to x (pixels from left of calendar)
         x = left + CALENDARTARGETMOVEAMOUNT;

         // This is the movement range
         var rangeLeft = $('.calendarDayRange').position().left;
         var rangeRight = rangeLeft +
               $('.calendarDayRange').width();

         if (x < rangeLeft)
            return;

         var lastStart = USCalendarMoveTargetBlock(0, x, x);

         // failed to move to this point
         if (lastStart < 0)
            return;

         var lastTargetid = CALENDARNUMTARGETS - 1;
         // Calculate the lastEnd so we can set the width
         var lastEnd = $('#targetblock_' + lastTargetid).position().left + 
            $('#targetblock_' + lastTargetid).width();

         $('#USScheduleDayBlock').css({ left: x + "px",
            width: (lastEnd) + "px"});

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

         USCalendarMovedTime(x/parentWidth);
      });


      $('.calendarReturn').unbind().mouseenter(function() {
         $(this).css('cursor','pointer');
      }).mouseleave(function() {
         $(this).css('cursor','');
      }).click(function() {
         var salt = getSalt();

         $.get("/ajax_uscalendar.php", { salt: salt, c : 'setbrowsedate', date : 0
            }, function(data) {
            var json = evalJSON(data);

            if (parseInt(json.check) == 1) {
               window.location.reload();
            } else
               confirm("An error occured. Refresh the page and try again");

         });
      });



      $('.calendarChangeDateDay').unbind().mouseenter(function() {
         $(this).css('background-color','#aaaaaa');
         $(this).css('cursor','pointer');
      }).mouseleave(function() {
         var id = this.id.split(",");
         var color = id[1];

         $(this).css('background-color','#' + color);
         $(this).css('cursor','');
      }).click(function() {
         var id = this.id.split(",");
         var date = id[0];

         var salt = getSalt();

         $.get("/ajax_uscalendar.php", { salt: salt, c : 'setbrowsedate', date : date
            }, function(data) {
            var json = evalJSON(data);

            if (parseInt(json.check) == 1) {
               window.location.reload();
            } else
               confirm("An error occured. Refresh the page and try again");

         });
      });


      $('.calendarChangeDateL,.calendarChangeDateR').unbind().mouseenter(function() {
         $(this).css('background-color','#aaaaaa');
         $(this).css('cursor','pointer');
      }).mouseleave(function() {
         $(this).css('background-color','#eeeeee');
         $(this).css('cursor','');
      }).click(function() {
         var dates = this.id.split(",");
         var current = dates[0];
         var query = dates[1];

         var salt = getSalt();

         $.get("/ajax_uscalendar.php", { salt: salt, c : 'changedate', current : current,
            query : query }, function(data) {
            var json = evalJSON(data);

            if (parseInt(json.check) == 1) {
               $('#calendarChangeDateBlock').html(unescape(json.response));
               LightBuckets.initializeCalendar();
            } else
               confirm("An error occured. Refresh the page and try again");

         });
      });


      $('.calendarChangeDate').unbind().mouseenter(function() {
         $(this).css('cursor','pointer');
      }).mouseleave(function() {
         $(this).css('cursor','');
      }).click(function() {
         if (!$('#calendarChangeDateBlock').is(':hidden')) {
            $('#calendarChangeDateBlock').hide();
            return;
         }

         // Load the visual calendar
         var date = this.id;

         var salt = getSalt();

         var position = $(this).offset();
         var contentPosition = $('.content').offset();

         var pL = position.left - contentPosition.left;
         var pT = position.top - contentPosition.top;

         var width = $('#calendarChangeDateBlock').width();

         $('#calendarChangeDateBlock').css('left', (pL+ 20) + "px");
         $('#calendarChangeDateBlock').css('top', (pT) + "px").show();

         setLoadingSM("calendarChangeDateBlock");

         $.get("/ajax_uscalendar.php", { salt: salt, c : 'load', date : date
            }, function(data) {
            var json = evalJSON(data);

            if (parseInt(json.check) == 1) {
               $('#calendarChangeDateBlock').html(unescape(json.response));
               LightBuckets.initializeCalendar();
            } else
               confirm("An error occured. Refresh the page and try again");

         });



      });
   },

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

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

   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();
      });

   },



   initializeGallery : function() {
      $('.galleryListFrame').unbind().mouseenter(function() {
         $('.galleryListFrameBody', this).css('opacity', 0.8);
      }).mouseleave(function() {
         $('.galleryListFrameBody', this).css('opacity', 0.5);
      });

      $('.uploadifyButtonUpload,.uploadifyButtonCancel,.galleryButtonGo,.galleryButtonStop'
         ).unbind().mouseenter(function() {
         $(this).css('cursor','pointer');
      }).mouseleave(function() {
         $(this).css('cursor','');
      });

      $('.uploadifyButtonUpload,.galleryButtonGo').mouseenter(function() {
         $(this).css('background-color', '#77bf70');
      }).mouseleave(function() {
         $(this).css('background-color', '#b6edb1');
      });

      $('.uploadifyButtonCancel,.galleryButtonStop').mouseenter(function() {
         $(this).css('background-color', '#b77373');
      }).mouseleave(function() {
         $(this).css('background-color', '#cdadad');
      });

      $('input,textarea','.galleryManageCaptionRow').unbind().focus(function(e) {
         $('.galleryManageCaptionHighlight',$(this).parent()).show();
      }).blur(function(e) {
         $('.galleryManageCaptionHighlight',$(this).parent()).hide();
      }).click(function() {
         if ($(this).attr("type") == 'checkbox') {
            if ($(this).is(':checked')) {
               var id = $(this).attr("id");
               // Undo all of the other ones
               $('input[type=checkbox]', '.galleryManageCaptionRow').each(function(e) {
                  if (id != $(this).attr("id"))
                     $(this).attr("checked", false);
               });
            }
         }
      });

      $('.galleryOrganizeThumb').mouseenter(function(e) {
         $(this).css('cursor','move');
      }).mouseleave(function() {
         $(this).css('cursor','');
      });

/*
      $('.galleryButtonGo,.galleryButtonStop').unbind.mouseenter(function() {
         $(this).css('cursor','pointer');
      }).mouseleave(function() {
         $(this).css('cursor','');
      });
*/

      $('.galleryOrganizeThumbDelete').unbind().mouseenter(function() {
         $(this).css('cursor','pointer');
         $(this).css('color', '#ffffff');
         $(this).css('background-color','#b30000');
      }).mouseleave(function() {
         $(this).css('cursor','');
         $(this).css('color', '#b30000');
         $(this).css('background-color','#aaaaaa');
      }).click(function() {
         if (!confirm("Are you sure you wish to delete this photo?"))
            return;

         var salt = getSalt();

         var id = this.id.split("_");
         var albumid = id[1];
         var photoid = id[2];

         var parent = $('#thumb_' + albumid + "_" + photoid);

         $.get('/ajax_organize.php', { albumid : albumid, salt : salt,
            photoid : photoid, c : "deletephoto" }, function(data) {

            var json = evalJSON(data);

            if (check(json)) {
               parent.animate({opacity:0.0},600,function() {
                  parent.remove();
               });
            } else {
               confirm("An error occured while deleting. Refresh and try again");
            }
         });
      });

      $('#galleryOrganizeAlbums').sortable({
         opacity: 0.6,
         cursor: 'move',
         update: function(event, ui) {
            var id = ui.item.attr("id").split("_");
            var albumid = id[1];
            var childid = id[2];

            var count = 0;
            var sortorder = 0;
            $('li', this).each(function() {
               count++;

               if (this.id == ui.item.attr("id"))
                  sortorder = count;
            });

            var salt = getSalt();

            $.get("/ajax_organize.php", { salt : salt, c : 'resortalbum',
               sortorder : sortorder, albumid : albumid, childid : childid }, 
               function(data) {

               var json = evalJSON(data);

               if (!check(json))
                  confirm("An error occured while trying to move this album. Refresh and try again");
            });
         }
      });


      $('#galleryOrganizeThumbs').sortable({
         opacity: 0.6,
         cursor: 'move',
         update: function(event, ui) {
            var id = ui.item.attr("id").split("_");
            var albumid = id[1];
            var photoid = id[2];

            var count = 0;
            var sortorder = 0;
            $('li', this).each(function() {
               count++;

               if (this.id == ui.item.attr("id"))
                  sortorder = count;
            });

            var salt = getSalt();

            $.get("/ajax_organize.php", { salt : salt, c : 'resortphoto',
               sortorder : sortorder, albumid : albumid, photoid : photoid }, 
               function(data) {

               var json = evalJSON(data);

               if (!check(json))
                  confirm("An error occured while trying to move this photo. Refresh and try again");
            });
         }
      });

      $('.galleryPhotoCommentDelete').unbind().mouseenter(function() {
         $(this).css('cursor','pointer');
      }).mouseleave(function() {
         $(this).css('cursor','');
      }).click(function() {
         var id = this.id.split("_");
         var photoid = id[1];
         var commentid = id[2];

         if (!confirm("Are you sure you wish to delete this comment?"))
            return;

         var salt = getSalt();

         $.get("/ajax_comments.php", { salt : salt, c : 'delete',
            commentid : commentid, photoid : photoid }, 
            function(data) {

            confirm(data);
            var json = evalJSON(data);

            if (check(json)) {
               $('#galleryPhotoComment_' + commentid).animate({opacity : 0.0}, 500, function() {
                  $(this).remove();
               });
            } else
               confirm("An error occured while trying to move this photo. Refresh and try again");
         });
      });

      $('.galleryCaptionEdit').unbind().mouseenter(function() {
         $(this).css("background-color", "#e5e5e5");
         $(this).css("cursor","pointer");
      }).mouseleave(function() {
         $(this).css("background-color", "");
         $(this).css("cursor","");
      }).click(function() {
         $('.galleryPhotoTitle').hide();
         $('.galleryPhotoDescription').hide();
         $('.galleryPhotoCaption').show();
      });
   },

   fullControlTargetsDelete : function() {
      if (!confirm("Are you sure you wish to delete all targets from your imaging plan?"))
         return;

      var salt = getSalt();

      $.get("/ajax_usdeletealltargets.php", { salt : salt }, function(data) {

         var json = evalJSON(data);
         if (check(json)) {
            window.location.reload();
         } else
            confirm("An error occured. Refresh and try again");

      });

   },

   fullControlPlanUpload : function() {
      $("#fullControlUploadLoading").ajaxStart(function(){
         $('#fullControlUploadForm').hide();
         $(this).show().loading();
      }).ajaxComplete(function(){
         $(this).hide();
         $('#fullControlUploadForm').show();

         $(this).unbind();
      });

      $.ajaxFileUpload (
         {
            url:'/ajax_runplanupload.php',
            secureuri:false,
            fileElementId:'fullControlPlanFile',
            dataType: 'json',
            //data:{name:'logan', id:'id'},
            success: function (data, status)
            {
               if (check(data)) {
                  confirm("Plan received successfully");
                  window.location.reload();
               } else {
                  confirm("An error occurred while processing your plan. Filter names must match " +
                     "the filter names of our observatory and all targets must have subframes");
               }
            },
            error: function (data, status, e)
            {
               alert(e);
            }
         }
      )

      return false;

   },

   videoScroll : function(value) {
      var videoDisplay = $('.videoDisplay');
      var ul = $('ul', videoDisplay);
      var videoWidth = ul.width();

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

      var handleWidth = $('.videoDisplayHandle').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;

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

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

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

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



   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;


         // Begin multitarget UI calculations

         // As we move the time, we need to start from index 0
         // As the start time and then we need to
         // test each of the limits.
         // - The start is always the leftmost requested time
         // - in between we have to calculate ideal positioning
         // - The right is always teh leftmost possible

         // This is the movement range
         var rangeLeft = $('.calendarDayRange').position().left;
         var rangeRight = rangeLeft +
               $('.calendarDayRange').width();

         if (x < rangeLeft)
            return;

         var lastStart = USCalendarMoveTargetBlock(0, x, x);

         if (lastStart < 0)
            return;

         var lastTargetid = CALENDARNUMTARGETS - 1;
         // Calculate the lastEnd so we can set the width
         var lastEnd = $('#targetblock_' + lastTargetid).position().left + 
            $('#targetblock_' + lastTargetid).width();

/*
         $('.calendarDayBlockTarget','#USScheduleDayBlock').each(function() {
            // Already decided it was not possible, forget it
            if (!possible)
               return;

            // Obtain the id of the target (index...)
            var id = this.id.split("_");
            var targetid = id[1];

               //rangeLeft, rangeRight, false);
            if (lastEnd < 0)
               possible = false;
         });
*/
/*
         // Not possible already, forget it
         if (!possible)
            return false;

         lastEnd = x;
         // Now actually update
         $('.calendarDayBlockTarget','#USScheduleDayBlock').each(function() {
            // Obtain the id of the target (index...)
            var id = this.id.split("_");
            var targetid = id[1];

            lastEnd = USCalendarMoveTargetBlock(targetid, x, lastEnd, 
               rangeLeft, rangeRight, true);

         });
*/

         //dayBlockWidth = lastRight - x;
         //dayBlockWidth = $('USScheduleDayBlock').width();

         // Now we need to adjust the width of the day block
         $('#USScheduleDayBlock').css({ left: x + "px",
            width: (lastEnd) + "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) {
   $('#' + objectName).val("...").attr("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 SPLASHBANNERPLAY = true;
var SPLASHBANNERCURRENT = 0;

function splashBannerPlay() {
   if (!SPLASHBANNERPLAY)
      return false;

   var found = false;
   var updated = false;


   if (SPLASHBANNERCURRENT == 0)
      SPLASHBANNERCURRENT = $('.splashPageOn').attr('id');


   // Get the banner slides going
   $('.splashPage', '.splashPagingBlock').each(function() {

      if (updated)
         return;

      if (found) {
         splashBannerLoad(this.id);
         updated = true;
         return;
      }

      if (this.id == SPLASHBANNERCURRENT) {
         found = true;
      }

   });

   // Did not update -- must be at the first
   if (!updated) {
      SPLASHBANNERCURRENT = $('.splashPage:first').attr('id');
      splashBannerLoad(SPLASHBANNERCURRENT);
   }


   setTimeout("splashBannerPlay()", 7000);
}

function splashBannerLoad(id) {
   $('.splashPageOn').addClass('splashPageOff').removeClass('splashPageOn');

   $('#' + id, '.splashPagingBlock').css('background-color','').removeClass('splashPageOff').addClass('splashPageOn');

   // Setup the link
   $('.contentBoxBannerLink').hide();

   $('#splashBannerLink' + id).show();

   SPLASHBANNERCURRENT = id;
}

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 accountLowPointsThresholdSet() {
   var salt = getSalt();
   var value = parseInt($('#accountLowPointThreshold').val());

   $.post("ajax_lowpointsthreshold.php", { salt: salt, value : value }, function(data) {
      var json = evalJSON(data);

      var check = parseInt(json.check);

      if (check == 1)
         confirm("Your point threshold has been saved");
      else
         confirm("An error occured while trying to save. Refresh and try again");
   });



}

function accountAlertUpdate() {
   var values = "";

   $('input','#accountEmailBlock').each(function() {
      var name = $(this).attr("name");

      var value = 0;
      if ($(this).is(":checked"))
         value = 1;

      if (values.length > 0)
         values += ",";

      values += name + ":" + value;
   });

   var salt = getSalt();
   values = escape(values);
   $.post("ajax_accountalerts.php", { salt: salt, values : values }, function(data) {
      var json = evalJSON(data);

      var check = parseInt(json.check);

      if (check == 1)
         confirm("Your alerts were saved");
      else
         confirm("An error occured while trying to save. Refresh and try again");
   });

}

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



//-----------------------------
// MULTITARGET 12/2010

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

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 USObservatoryMoreMax = 21;
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 (OLDONE)
   // if (USObservatoryMoreCurrent[observatoryid] <= 0)
      // USObservatoryMoreCurrent[observatoryid] = USObservatoryMoreTotal;
   // else if (USObservatoryMoreCurrent[observatoryid] > USObservatoryMoreTotal)
      // USObservatoryMoreCurrent[observatoryid] = 1;

   // BOUNDS : test if the slide exist
   if (! document.getElementById('observatoryNetworkSlide' + observatoryid + '_' + USObservatoryMoreCurrent[observatoryid]) )
   {
		if (delta > 0) {
      			USObservatoryMoreCurrent[observatoryid] = 1;
		} else {
			var i=USObservatoryMoreMax;
			while (! document.getElementById('observatoryNetworkSlide' + observatoryid + '_' + i))
				{ i--; }
      			USObservatoryMoreCurrent[observatoryid] = i;
		}
   }

   // 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);
*/
            // We should select the second to last target
            var numTabs = $('.tab').length;

            // Grab the second to last one (last is add)
            var tab = $('.tab:nth-child(' + (numTabs-3) + ')');

            var tabPosition = tab.position().top;

            fullControlLoadTab(tab.attr("id"));

            // Set the row correctly
            // then figure out if theres more to move

            var tabBlockHeight = $('#fullControlTabSub').height();
            var tabHeight = $('.tab').outerHeight(true);

            // Move it up one set
            var newTop = -tabPosition;
            $('#fullControlTabSub').css("top", newTop + "px");

            // Hide the right
            // We include this statement because the add target
            // tab might have gone to the next line
            if (tabPosition == tabBlockHeight - tabHeight)
               $('#fullControlTabR').hide();

            // Show the left
            $('#fullControlTabL').show();
         }
      }
   }
   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 USTargetDelete(targetid) {
   if (!confirm("Are you sure you wish to remove this target?"))
      return;

   var salt = getSalt();

   disableButton("USTargetDeleteButton");

   $.get("/ajax_ustargetdelete.php", { salt: salt, targetid : targetid,
      }, function(data) {
      var json = evalJSON(data);
      enableButton("USTargetDeleteButton");

      var result = parseInt(json.check);

      // Add a row to the exposure list
      if (result == 1) {
         // refresh upon deletion of target
         window.location.reload();
      } else {
         confirm("An error occured while attempting to delete this target");
         enableButton("USTargetDeleteButton");
      }
   });


}


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);
}

// Tab Loading
function fullControlLoadTab(tabId) {
   var thisTab = $('#' + tabId);

   // Set the tabActive as not active
   $('.tabActive').removeClass('tabActive');
   thisTab.addClass('tabActive');

   thisTab.css('border-top', '1px solid #e9e9e9');
   thisTab.css('border-left', '1px solid #e9e9e9');
   thisTab.css('border-right', '1px solid #e9e9e9');

   setLoadingSM('USPlanningTabContent');

   var id = tabId.split("_");

   var salt = getSalt();

   // Load it
   $.get("/ajax_usplanningload.php", { salt: salt,
      tab : id[1] }, function(data) {
      var json = evalJSON(data);

      if (parseInt(json.check) == 1) {
         $('#USPlanningTabContent').html(unescape(json.content));
         LightBuckets.initializeLayout();
         LightBuckets.initializeFullControl();
      } else
         confirm("An error occured while loading the content. Refresh and try again");
   });

}

// PERIOD
function USExposurePeriodAdd(targetid) {

/*
   var filterobj = document.getElementById('USExposureFilter');
   var filterindex = filterobj.selectedIndex;
   var binobj = document.getElementById('USExposureBin');
   var binindex = binobj.selectedIndex;

   var filter = filterobj.options[filterindex].value;
   var binid = binobj.options[binindex].value;

*/
   var filter = $('#USExposureFilter', '#USExposureAddPeriod').val();
   var binid = $('#USExposureBin', '#USExposureAddPeriod').val();
   var period = parseInt($('#USExposurePeriod', '#USExposureAddPeriod').val(), 10);
   var duration = parseFloat($('#USExposureDuration', '#USExposureAddPeriod').val(), 10);


   if (period <= 0 || duration <= 0) {
      confirm("Please check your numbers and try again");
      return;
   }

   var salt = getSalt();

   disableButton("USExposurePeriodAddButton");

   $.get("/ajax_usselectexposure.php", { salt: salt, targetid : targetid,
      period : period, filter : filter, duration : duration, bin : binid,
      }, function(data) {

      var json = evalJSON(data);

      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);
         $('#USExposureAddPeriod').hide();

         if (parseInt(json.plancanrun) == 1)
            $('#planExceedsDarknessWarning').hide();
         else
            $('#planExceedsDarknessWarning').show();


         $('#lengthBasedNotification').show();
         LightBuckets.init();

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

      enableButton("USExposurePeriodAddButton", "Add");

   });

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




// NONPERIOD

function USExposureAdd(targetid) {
/*
   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);
*/

   var filter = $('#USExposureFilter', '#USExposureAddDefault').val();
   var binid = $('#USExposureBin', '#USExposureAddDefault').val();
   var count = parseInt($('#USExposureCount', '#USExposureAddDefault').val(), 10);
   var duration = parseFloat($('#USExposureDuration', '#USExposureAddDefault').val(), 10);

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

   var salt = getSalt();

   disableButton("USExposureAddButton");

   $.get("/ajax_usselectexposure.php", { salt: salt, targetid : targetid,
      count : count, filter : filter, duration : duration, bin : binid,
      }, function(data) {


      var json = evalJSON(data);

      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);
*/

         if (parseInt(json.plancanrun) == 1)
            $('#planExceedsDarknessWarning').hide();
         else
            $('#planExceedsDarknessWarning').show();

         // max unguided subframe
         if (parseInt(json.exceededmaxunguided) == 1) {
            if ($('#catalogNotice').is(":hidden"))
               $('#catalogNotice').css("opacity", 0).show().animate({opacity:1},800,function() {});
         }
      }

      enableButton("USExposureAddButton", "Add");

   });

}

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

function USExposureEditCancel(exposureid) {
   $('#USExposureEdit' + exposureid).hide();
   $('#USExposureRow' + exposureid).show();
}
function USExposureEditSave(exposureid, targetid) {
   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();

   $.get("/ajax_useditexposure.php", { salt: salt, targetid : targetid,
      exposureid : exposureid, count : count, filter : filter, 
      duration : duration, bin : binid,
      }, function(data) {

      var json = evalJSON(data);
      var result = parseInt(json.result);

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


         if (parseInt(json.plancanrun) == 1)
            $('#planExceedsDarknessWarning').hide();
         else
            $('#planExceedsDarknessWarning').show();

         LightBuckets.init();
      }
   });
}



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();

               // Show the add default if it is not shown already
               $('#USExposureAddDefault').show();
               $('.addsubframesperiodtoggle').html('add subframes for a time period');

               // Show the addtarget tab (if we were period length this
               // would have been hidden
               $('#USTab_addtarget').show();

               $('#lengthBasedNotification').hide();


            });
            $('#fullControlYourImagingRun').html(unescape(json.imagingrun));
            $('#fullControlPlanningTotal').html(json.total);
            $('#fullControlMenu').html(json.menu);
            $('#fullControlPlanningFinished').html(json.planningnext);

            if (parseInt(json.plancanrun) == 1)
               $('#planExceedsDarknessWarning').hide();
            else
               $('#planExceedsDarknessWarning').show();

            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(targetid, name) {
   var salt = getSalt();
   var url = '/ajax_usplansettingtoggle.php?name=' + name + '&salt=' + salt +
      '&targetid=' + targetid;

   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(targetid) {
   $('#fcrowditheredit').hide();
   $('#fcrowdither').show();

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

   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(targetid) {
   $('#fcrowpositionangleedit').hide();
   $('#fcrowpositionangle').show();

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

   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(targetid, angle) {
   $(".fullControlPosAngToggle").html(angle);
   $('#USPlanSettingPosAngleInput').val(angle);
   $('#USTargetPA').val(angle);
   $('#yourimagingplanposang_' + targetid).html(angle);
}

function USSetRADec(targetid, ra, dec) {
   $('#USTargetRA').val(ra);
   $('#USTargetDec').val(dec);
   $('#USTargetRASpan').html(ra);
   $('#USTargetDecSpan').html(dec);
   $('#yourimagingplanra_'+ targetid).html(ra);
   $('#yourimagingplandec_' + targetid).html(dec);
}

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

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

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 USCalendarMoveTargetBlock(targetid, x, lastEnd) {
/*
   // Define the overlaying target block. This will actually
   // Contain the limits that we can move (left, left + width, etc)
   var targetLineL = 10000;
   var targetLineW = 0;

   // Go through the rise/set divs in the targetline to see which has
   // the smallest left. done this way because sometimes we do not
   // have a rise div
   $('div','#targetline_' + targetid).each(function() {
      var targetLineChildL = $(this).position().left;

      if (targetLineChildL < targetLineL)
         targetLineL = targetLineChildL;

      targetLineW += $(this).width();
   });


   var targetBlock = $('#targetblock_' + targetid);

   // Find the corresponding limit, can we move it?
   // Figure out the right most limit this target can go
   // in terms of the left point
   var targetMaxLeft = targetLineL +
      targetLineW - targetBlock.width();

   var targetMinLeft = targetLineL;
*/

   var targetMaxLeft = CALENDARTARGETMAXL[targetid];
   var targetMinLeft = CALENDARTARGETMINL[targetid];

   if (targetMinLeft < lastEnd)
      targetMinLeft = lastEnd;

   // Check if the max is less than the min
   // that means, not possible

   if (targetMaxLeft < targetMinLeft) {
      return -1;
   }


   var newLeftFromZero = targetMinLeft;
   var newLeft = newLeftFromZero - x;
/*
   if (targetid == 1)
      confirm(targetid + " => range: " + targetMinLeft + " " + targetMaxLeft + " x: " + x + 
         " lastEnd: " + lastEnd + " newleft: " + newLeft);
*/

   var targetBlock = $('#targetblock_' + targetid);
   var noFlipWidth = parseInt($('#calendarTargetWidth_' + targetid).val());
   var targetBlockEnd = newLeftFromZero + noFlipWidth;

   // If we are over the meridian then we need to add to the time
   // for a meridian flip.
   if (parseInt($('#observatoryRequiresMeridianFlip').val()) == 1) {
      if (newLeftFromZero < CALENDARTARGETMERIDIAN[targetid] &&
          targetBlockEnd > CALENDARTARGETMERIDIAN[targetid]) {

         var flipWidth = parseInt($('#calendarTargetWidthWithFlip_' + 
            targetid).val());

         // Add to it if the observatory requires a flip
         targetBlock.width(flipWidth);

         // Now check to see we still work out
         if (targetBlockEnd > targetMaxLeft)
            return -1;
      } else {
         //var noFlipWidth = parseInt($('#calendarTargetWidth_' + targetid).val());

         // Add to it if the observatory requires a flip
         targetBlock.width(noFlipWidth);

      }
      targetBlockEnd = newLeftFromZero + targetBlock.width();
   }

   // See if there is another target
   var nextTarget = targetid + 1;
   var nextStart = 0;

   if (nextTarget < CALENDARNUMTARGETS)
      nextStart = USCalendarMoveTargetBlock(nextTarget, x, targetBlockEnd);

   // Tell everything before that it did not work out
   if (nextStart < 0) {
      return -1;
   }

   // lastEnd is not x so we are not the beginning,
   // and nextStart is greater than 0 meaning we are not
   // the last one. Then we can adjust this one to be closest
   // to the peak. Also checks if there was space to the right meaning
   // that we have space to move (we are already to the leftmost)
   if (lastEnd != x && nextStart > 0 && targetBlockEnd < nextStart) {
      // Try to move this block over the peak
      var peak = CALENDARTARGETPEAK[targetid];
      var blockWidth = targetBlock.width();

      targetMaxLeft = (targetMaxLeft > nextStart - blockWidth) ? nextStart : 
               targetMaxLeft - blockWidth;

      // Peak is after the next start, then we move all the way right
      if (peak > nextStart)
         newLeftFromZero = targetMaxLeft;
      else if (peak < lastEnd)
         newLeftFromZero = targetMinLeft;
      // Somewhere in the middle
      else {
         //var noFlipWidth = parseInt($('#calendarTargetWidth_' + targetid).val());

         // Can we lay the target to the left of the peak?
         if (peak - blockWidth > lastEnd) {
            newLeftFromZero = peak - blockWidth;
            // Add to it if the observatory requires a flip
            if (parseInt($('#observatoryRequiresMeridianFlip').val()) == 1)
               targetBlock.width(noFlipWidth);
         }

         // Can we lay the target to the right of the peak?
         else if (peak + blockWidth < nextStart) {
            newLeftFromZero = peak;
            // Add to it if the observatory requires a flip
            if (parseInt($('#observatoryRequiresMeridianFlip').val()) == 1)
               targetBlock.width(noFlipWidth);
         }


         // Okay, i guess we leave it
      }

      newLeft = newLeftFromZero - x;
   }

   // Next target is good to go, we can update
   targetBlock.css("left", newLeft + "px");

   // We return the new left from zero so we can set any
   // middle blocks to a more ideal time (we now have a last
   // end and a next start
   return newLeftFromZero;
}

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 USCalendarInitialize() {

   // Lets preload all the data we need
   CALENDARNUMTARGETS = 0;

   $('.calendarDayBlockTarget','#USScheduleDayBlock').each(function() {
      // Obtain the id of the target (index...)
      var id = this.id.split("_");
      var targetid = id[1];

      var targetLineL = 10000;
      var targetLineW = 0;

      var targetPeak = 0;

      // Check for the meridian
      // if the targetline contains the rise and the set
      // then the meridian is either the end of the rise
      // or the start of the set.
      // If the length is greater than 1 for this targetid, then
      // we have a rise and a set. What if though we do the same
      // target multiple times? is that even plausible?... do we
      // print the target another time?..we should now for color
      // matching.
      if ($('div','#targetline_' + targetid).length > 1) {
         CALENDARTARGETMERIDIAN[targetid] = $(
            '.calendarDayTargetBlockSet',
            '#targetline_' + targetid).position().left;
      } else
         CALENDARTARGETMERIDIAN[targetid] = 0;


      // Go through the rise/set divs in the targetline to see which has
      // the smallest left. done this way because sometimes we do not
      // have a rise div
      $('div','#targetline_' + targetid).each(function() {
         var targetLineChildL = $(this).position().left;

         if (targetLineChildL < targetLineL)
            targetLineL = targetLineChildL;

         targetLineW += $(this).width();

         // Rising, peak is at the rightmost
         if ($(this).hasClass('calendarDayTargetBlockRise'))
            targetPeak = targetLineChildL + $(this).width();
         else if ($(this).hasClass('calendarDayTargetBlockSet'))
            targetPeak = targetLineChildL;
      });

      var targetBlock = $('#targetblock_' + targetid);

      CALENDARTARGETMINL[targetid] = targetLineL;
      CALENDARTARGETMAXL[targetid] = targetLineL + targetLineW - 
         targetBlock.width();

      // Set the peak
      CALENDARTARGETPEAK[targetid] = targetPeak;

      CALENDARNUMTARGETS++;
   });


}

function USCalendarMovedTime(date) {
   $('#USCalendarMovedTime').html('<img src="/images/loading.gif">');
   var salt = getSalt();

   $.get("/ajax_uscalendartime.php", { scale : date, salt: salt }, 
      function(data) {

      var json = evalJSON(data);

      var result = parseInt(json.result);

      //var meridianflip = parseint(json.meridianflip);

      if (result == 1)
         $('#USCalendarMovedTime').html(unescape(json.response));
   });

}

function USCalendarChooseTime(date) {
   var salt = getSalt();
   $('#USCalendarReserveButton').val('saving...').attr("disabled", true);

   $.get("/ajax_uscalendarchoosetime.php", { date: date, salt: salt }, 
      function(data) {

      var json = evalJSON(data);

      var check = parseInt(json.check);

      if (check == 1) {
         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();
      }
   });



/*

   $('#USCalendarReserveButton').val('saving...').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';
*/

   $('#easyDetailImage1_' + USEasyDetailValue).hide();
   $('#easyDetailImage2_' + USEasyDetailValue).hide();
   $('#easyDetailTime1_' + USEasyDetailValue).hide();
   $('#easyDetailTime2_' + USEasyDetailValue).hide();
   $('#easyDetailRate1_' + USEasyDetailValue).hide();
   $('#easyDetailRate2_' + USEasyDetailValue).hide();

   $('#easyDetailImage' + USEasyColorValue + "_" + value).show();
   $('#easyDetailTime' + USEasyColorValue + "_" + value).show();
   $('#easyDetailRate' + USEasyColorValue + "_" + value).show();


   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;

   $('#USEasySubmitButton').attr("disabled", true).val("Submitting...");

   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);
}

function USBookingSubmit() {
   var salt = getSalt();
   $('#USConfirmBookingButton').val('saving...').attr("disabled", true);

   $.get("/ajax_usconfirmbooking.php", { salt: salt }, 
      function(data) {

      var json = evalJSON(data);

      var check = parseInt(json.check);

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

         LightBuckets.init();
      }
   });
}

function USImagingPlanSubmit() {
   var salt = getSalt();
   $('#USImagingPlanSubmitButton').val('submitting to observatory...').attr("disabled", true);

   $.get("/ajax_ussubmitimagingplan.php", { salt: salt }, 
      function(data) {

      var json = evalJSON(data);

      var check = parseInt(json.check);

      if (check == 1)
         $('#USSubmitContent').html(json.response);
      else {

         confirm("There was an error submitting this plan to the observatory.");

         $('#USImagingPlanSubmitButton').val('Confirm and submit imaging plan'
            ).attr("disabled", true);


      }
   });
}

// 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();
}


//----------------------------
// Gallery


function check(json) {
   var check = parseInt(json.check);
   if (check == 0)
      return false;

   return true;
}


function galleryCaptionSave(albumid) {
   var values = "";

   $('textarea','#galleryManageCaptionBlock').each(function() {
      if (values.length > 0)
         values += "&";

      values += $(this).attr("id") + "=" + escape($(this).val());
   });

   var numCovers = $('input[type=checkbox]:checked', '.galleryManageCaptionRow').length;

   if (numCovers > 1) {
      confirm("Only one album cover should be checked. Error");
      return;
   } else if (numCovers == 1) {
      var obj = $('input[type=checkbox]:checked', '.galleryManageCaptionRow');

      values += "&" + obj.attr("id") + "=1";

   }

   var salt = getSalt();
   $("input[type='button']",'#galleryManageCaptionBlock').attr("disabled", true);

   $.post('/ajax_captionhandler.php', { albumid : albumid, salt : salt,
      values : values }, function(data) {

      var json = evalJSON(data);

      if (check(json)) {
         // Go to the album
         confirm("Saved");
         location.href = json.albumurl;
      } else {
         confirm(json.response);
         $("input[type='button']",'#galleryManageCaptionBlock').attr("disabled", false);
      }
   });

}

function galleryCaptionCancel(albumURL) {
   location.href = albumURL;
}

function galleryOrganizeSave(albumid) {
   var values = "";

   $('textarea','#galleryOrganizeInformation').each(function() {
      if (values.length > 0)
         values += "&";

      values += $(this).attr("id") + "=" + escape($(this).val());
   });

   var salt = getSalt();
   $("input[type='button']",'#galleryOrganizeInformation').attr("disabled", true);

   $.get('/ajax_organize.php', { albumid : albumid, salt : salt,
      c : "saveinformation", values : values }, function(data) {

      var json = evalJSON(data);

      if (check(json)) {
         // Go to the album
         confirm("Saved");
         $("input[type='button']",'#galleryOrganizeInformation').attr("disabled", false);
      } else {
         confirm("An error occured while saving. Refresh and try again");
      }
   });

}

function galleryOrganizeDelete(albumid) {
   if (!confirm("Are you sure you wish to delete this album and all of its contents?"))
      return;

   var salt = getSalt();
   $("input[type='button']",'#galleryOrganizeDelete').attr("disabled", true);

   $.get('/ajax_organize.php', { albumid : albumid, salt : salt,
      c : "deletealbum" }, function(data) {


      var json = evalJSON(data);

      if (check(json)) {
         location.href = json.redirect;
      } else {
         confirm("An error occured while deleting. Refresh and try again");
      }
   });
}

function galleryOrganizeCreateSubalbum(albumid) {
   var salt = getSalt();
   var title = $('textarea','#galleryOrganizeSubalbum').val();

   $("input[type='button']",'#galleryOrganizeDelete').attr("disabled", true);

   $.get('/ajax_organize.php', { albumid : albumid, salt : salt,
      title : title, c : "createsubalbum" }, function(data) {

      var json = evalJSON(data);

      if (check(json)) {
         $('#galleryOrganizeAlbums').html(json.content);
      } else {
         confirm("An error occured while creating album. Refresh and try again");
      }
   });
}

function gallerySetSelect(photoid) {
   var salt = getSalt();

   $.get('/ajax_adm.php', { photoid : photoid, salt : salt,
      c : "setselect" }, function(data) {

      var json = evalJSON(data);

      if (check(json)) {
         confirm(json.response);
      } else {
         confirm("An error occured while setting this. Refresh and try again");
      }
   });
}

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

   $.get('/ajax_start.php', { salt : salt }, function(data) {
      var json = evalJSON(data);

      if (check(json)) {
         location.href = json.response;
      } else {
         confirm("An error occured while attempting to create your album. Refresh and try again");
      }
   });
}

function galleryPermissionsSave(albumid) {
   var salt = getSalt();
   var values = "";

   $("input[type='checkbox']","#galleryOrganizePermissions").each(function() {
      if (values.length > 0)
         values += "&";

      var value = 0;
      if ($(this).is(":checked"))
         value = 1;

      values += $(this).attr("name") + "=" + value;
   });

   $("input[type='button']",'#galleryOrganizePermissions').attr("disabled", true);

   $.get('/ajax_organize.php', { albumid : albumid, salt : salt,
      values : values, c : "savepermissions" }, function(data) {

      var json = evalJSON(data);
      $("input[type='button']",'#galleryOrganizePermissions').attr("disabled", false);

      if (check(json)) {
         confirm("Permission settings saved");
      } else {
         confirm("An error occured while saving. Refresh and try again");
      }
   });
}

function galleryCommentPost(photoid, photohash) {
   var salt = getSalt();

   var comment = escape($('#galleryCommentText').val());

   $("input[type='button']",'#galleryCommentBlock').attr("disabled", true);

   $.post('/ajax_comments.php', { photoid : photoid, salt : salt,
      hash : photohash, comment : comment, c : "post" }, function(data) {

      var json = evalJSON(data);
      $("input[type='button']",'#galleryCommentBlock').attr("disabled", false);

      if (check(json)) {
         // Insert the comment to the comment area
         $(unescape(json.block)).insertBefore('#galleryCommentBlock').css("opacity", 0.0).animate(
            {opacity: 1}, 500, function() {
            $(this).css("opacity", 1);

            DUCATI.initializeGallery();
         });
      } else {
         confirm("An error occured while posting the comment. Repeat posts are not allowed, along with ones that are far too short");
      }
   });
}

function galleryPhotoCaptionCancel(photoid) {
   $('.galleryPhotoCaption').hide();
   $('.galleryPhotoTitle').show();
   $('.galleryPhotoDescription').show();
   $('.galleryPhoto').show();
}

function galleryPhotoCaptionSave(photoid) {
   var title = escape($('#galleryPhotoTitleEdit').val());
   var tags = escape($('#galleryPhotoTagsEdit').val());
   var description = escape($('#galleryPhotoDescriptionEdit').val());

   $('.galleryPhotoCaption').hide();
   $('.galleryPhotoCaptionSaving').show();

   var salt = getSalt();

   $.post('/ajax_photo.php', { photoid : photoid, salt : salt, tags : tags,
      title : title, description : description, c : "updatecaption" }, function(data) {

      var json = evalJSON(data);

      if (check(json)) {
         $('.galleryPhotoCaptionSaving').hide();
         $('.galleryPhotoTitle').html(json.title);
         $('.galleryPhotoDescription').html(json.description);
         $('.galleryPhotoTags').html(json.tags);


         galleryPhotoCaptionCancel(photoid);

         DUCATI.initializeGallery();
      } else {
         confirm("An error occured while saving. Please refresh and try again.");
      }
   });
}

function CalendarTimeSwitch()
{
	if ($('.calendarDayTimeLabel').is(':visible'))
	{
		$('.calendarDayTimeLabel').hide();
		$('.calendarDayTimeLabelUTC').show();
		$('.calendarSunset').hide();
		$('.calendarSunsetUTC').show();
		$('.calendarSunrise').hide();
		$('.calendarSunriseUTC').show();
		$('#calclock').attr('title', "UTC Time, click to switch to User Time");
	} else if ($('.calendarDayTimeLabelUTC').is(':visible')) {
		$('.calendarDayTimeLabelUSR').show();
		$('.calendarDayTimeLabelUTC').hide();
		$('.calendarSunsetUSR').show();
		$('.calendarSunsetUTC').hide();
		$('.calendarSunriseUSR').show();
		$('.calendarSunriseUTC').hide();
		$('#calclock').attr('title', "User Time, click to switch to Observatory Time");
	} else {
		$('.calendarDayTimeLabel').show();
		$('.calendarDayTimeLabelUSR').hide();
		$('.calendarSunset').show();
		$('.calendarSunsetUSR').hide();
		$('.calendarSunrise').show();
		$('.calendarSunriseUSR').hide();
		$('#calclock').attr('title', "Observatory Time, click to switch to UTC");
	}
}

