
YAHOO.nolastar = function() {

  var $D = YAHOO.util.Dom;
  var $E = YAHOO.util.Event;
  var $C = YAHOO.util.Connect;
  var $ = $D.get
  
  var gallery;
  var max_zoom = 440;

  /*
  * Author: PPK (http://www.quirksmode.org/js/cookies.html)
  */
  function create_cookie(name,value,days) {
    if (days) {
      var date = new Date();
      date.setTime(date.getTime()+(days*24*60*60*1000));
      var expires = "; expires="+date.toGMTString();
    }
    else var expires = "";
    document.cookie = name+"="+value+expires+"; path=/";
  }
  

  /*
  * Author: PPK (http://www.quirksmode.org/js/cookies.html)
  */
  function read_cookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++) {
      var c = ca[i];
      while (c.charAt(0)==' ') c = c.substring(1,c.length);
      if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
    }
    return null;
  }
  

  /*
  * Author: PPK (http://www.quirksmode.org/js/cookies.html)
  */
  function erase_cookie(name) {
    create_cookie(name,"",-1);
  }

  // Browser "sniffing" and keypress lifted from Dustin Diaz 
  // http://dustindiaz.com/
  var ua = navigator.userAgent.toLowerCase();
  var isOpera = (ua.indexOf('opera') != -1);
	var isIE = (ua.indexOf('msie') != -1 && !isOpera); // not opera spoof
  		  
  function move(x, y) {
    // alert('x = '+x+' y = '+y);
    $D.setStyle('Image', 'left', x + 'px');
    $D.setStyle('Image', 'top', y + 'px');
    create_cookie('x', x);
    create_cookie('y', y);
    $('x').value = x;
    $('y').value = y;
  }

  function zoom(w, h) {
    if((w >= h && w >= max_zoom) || h >= max_zoom) {
      return;
    }
    $D.setStyle('Image', 'width', w + 'px');
    $D.setStyle('Image', 'height', h + 'px');
    create_cookie('w', w);
    create_cookie('h', h);
    $('w').value = w;
    $('h').value = h;
  }

  function flash(action) {
    $D.addClass(action, 'Selected');
    window.setTimeout("YAHOO.nolastar.flash_off();", 100);
  }

  function upload() {
    
    $D.setStyle('Error', 'display', 'none');
    $D.setStyle('NoImage', 'display', 'none');
    $D.setStyle('Uploading', 'display', 'block');

    tmp = document.createElement('iframe');
    tmp.id = 'uploader';
    tmp.name = 'uploader';

    tmp.style.position = 'absolute';
    tmp.style.top = '-1000px';
    tmp.style.left = '-1000px';
    //tmp.style.top = '0px';
    //tmp.style.left = '0px';

    document.body.appendChild(tmp);
    
    if (isIE) { // Safari will choke on this:
      window.frames['uploader'].name = "uploader";
    }

    $('Form').target = 'uploader';
    $('Form').setAttribute('target', 'uploader');
    $('Form').action = '/upload/';
    $('Form').submit();

  }

  return {
    
    reset_upload: function() {

      $D.setStyle('Error', 'display', 'none');
      $D.setStyle('NoImage', 'display', 'none');
      if($('uploader')) {
        document.body.removeChild($('uploader'));
      }
      $('Form').target = '';
      $('Form').action = '/3/';

      // Safari won't reset this field, so we destroy and rebuild it
      newFile = document.createElement('input');
      newFile.setAttribute('type', 'file');
      newFile.setAttribute('name', 'image');
      newFile.setAttribute('id', 'image_upload');
      newFile.setAttribute('class', 'File');
      
      oldFile = $('image_upload');
      fileParent = oldFile.parentNode;
      fileParent.replaceChild(newFile, oldFile);
      
    },

    flash_off: function() {
      $D.removeClass($('Controls').getElementsByTagName('li'), 'Selected');
    },

    response: function(mode) {
      $D.setStyle('Uploading', 'display', 'none');
      if(mode == 0) {
        $D.setStyle('Error', 'display', 'block');
      } else {
        YAHOO.nolastar.reset_upload();
        $('Form').submit();
      }
    },

    control: function(e, action) {
      
      if(e) {
        $E.stopEvent(e); 
      }

      if(!action) {
        action = this.parentNode.id;
      } else {
        flash(action);
      }
      
      pan = 5;
      zoomin = 1.05;
      zoomout = .95;

      x = Number($D.getStyle('Image', 'left').replace('px', ''));
      y = Number($D.getStyle('Image', 'top').replace('px', ''));
      w = Number($D.getStyle('Image', 'width').replace('px', ''));
      h = Number($D.getStyle('Image', 'height').replace('px', ''));

      if(action == 'Left') {
        move(x - pan, y);
      } else if(action == 'Right') {
        move(x + pan, y);
      } else if(action == 'Up') {
        move(x, y - pan);
      } else if(action == 'Down') {
        move(x, y + pan);
      } else if(action == 'Center') {
        move(190 - (w / 2), 190 - (h / 2));
      } else if(action == 'ZoomIn') {
        zoom(w * zoomin, h * zoomin);
      } else if(action == 'ZoomOut') {
        zoom(w * zoomout, h * zoomout);
      }
      
    },
    
    help: function(e) {
      $D.removeClass(document.getElementsByTagName('dt'), 'Selected');
      $D.setStyle(document.getElementsByTagName('dd'), 'display', 'none');
      pres = document.getElementsByTagName('pre');
      if(pres.length > 0) {
        $D.setStyle(pres, 'display', 'none');
      }
      if(this.nextSibling.tagName && this.nextSibling.tagName.toLowerCase() == 'dd') {
        $D.setStyle(this.nextSibling, 'display', 'block');
      } else {
        $D.setStyle(this.nextSibling.nextSibling, 'display', 'block');
      }

      if(pres.length > 0) {
        $D.setStyle(this.getElementsByTagName('pre'), 'display', 'block');
      }
      $D.addClass(this, 'Selected');
    },

    popup: function(e) {
      $E.stopEvent(e);
      var theWindow = window.open(this.href);
      theWindow.focus();
      return theWindow;
    },

    press: function(e) {

			switch (YAHOO.util.Event.getCharCode(e)) {

				case(43):
					YAHOO.nolastar.control(e, 'ZoomIn');
				break;
				case(45):
					YAHOO.nolastar.control(e, 'ZoomOut');
				break;

				case(37):
					YAHOO.nolastar.control(e, 'Left');
				break;
				case(63234): // safari thinks this means left
				  YAHOO.nolastar.control(e, 'Left');
				break;
				case(39): // Right
				  YAHOO.nolastar.control(e, 'Right');
				break;
				case(63235): // safari thinks this means right
			    YAHOO.nolastar.control(e, 'Right');
				break;
				case(38): // Up key
					YAHOO.nolastar.control(e, 'Up');
				break;
				case(63232): // safari thinks this means up
				  YAHOO.nolastar.control(e, 'Up');
				break;
				case(40): // Down key
					YAHOO.nolastar.control(e, 'Down');
				break;
				case(63233): // safari thinks this means down
				  YAHOO.nolastar.control(e, 'Down');
				break;
				case(44): // IE Left?
			    YAHOO.nolastar.control(e, 'Left');
				break;
				case(46): // IE Right?
			    YAHOO.nolastar.control(e, 'Right');
				break;
			}
    },

    gallery_show: function(id) {

      $('selected_image').value = gallery[id].firstChild.src;
      create_cookie('selected_image', id);

      $D.setStyle(gallery, 'display', 'none');
      $D.setStyle(gallery[id], 'display', 'block');

      if(id == 1) {
        $D.setStyle('Left', 'display', 'none');
      } else {
        $D.setStyle('Left', 'display', 'block');
      }
      if(id == gallery.length - 1) {
        $D.setStyle('Right', 'display', 'none');
      } else {
        $D.setStyle('Right', 'display', 'block');
      }

    },

    gallery_move: function() {
      
      for(i = 0; i < gallery.length; i++) {
        if($D.getStyle(gallery[i], 'display') == 'block') {
          if(this.id == 'Left') {
            next = i - 1;
          } else {
            next = i + 1;
          }
          break;
        }
      }
      
      if(gallery[next]) {
        YAHOO.nolastar.gallery_show(next);
      }

    },

    init_gallery: function() {

      gallery = $D.getElementsByClassName('Gallery', 'li', 'Gallery');
      
      if(gallery.length == 0) {
        return;
      }

      id = read_cookie('selected_image');

      if(gallery[id]) {
        YAHOO.nolastar.gallery_show(id);
      } else {
        YAHOO.nolastar.gallery_show(1);
      }

      $E.on(['Left', 'Right'], 'click', YAHOO.nolastar.gallery_move);

    },

    init_controller: function() {

      $E.on(this.getElementsByTagName('img'), 'click', YAHOO.nolastar.control);

      if (isIE) {
        YAHOO.util.Event.on('Main', 'keypress', YAHOO.nolastar.press);
      } else {
        YAHOO.util.Event.on(window, 'keypress', YAHOO.nolastar.press);
      }

			if(read_cookie('x')) {
        $E.onAvailable('Image', function() { move(read_cookie('x'), read_cookie('y')); zoom(read_cookie('w'), read_cookie('h')) });
			} else {
        $E.onAvailable('Image', function() { 
          w = Number($D.getStyle('Image', 'width').replace('px', ''));
          h = Number($D.getStyle('Image', 'height').replace('px', ''));
          move(190 - (w / 2), 190 - (h / 2)); zoom(w, h); 
        });
			}

    },

    init_help: function() {
      $E.on(this.getElementsByTagName('dt'), 'click', YAHOO.nolastar.help);
    },

    init: function() {
      inlines = $D.getElementsByClassName('InlineLogo', 'span', 'Main');
      for(i = 0; i < inlines.length; i++) {
        var newImg = document.createElement('img');
        newImg.src = '/assets/i/logo.nolastar.small.gif';
        inlines[i].parentNode.replaceChild(newImg, inlines[i]);
      }
      
      $E.on('Back', 'click', function(e) { $E.stopEvent(e); history.back(); });
      $E.on(['option_upload', 'option_gallery', 'option_cd'], 'change', 
        function(e) { 
          erase_cookie('x'); 
          erase_cookie('y'); 
          erase_cookie('w'); 
          erase_cookie('h') 
      });

      YAHOO.util.Event.onAvailable('Error', function() { 
        $E.on($('Error').getElementsByTagName('img'), 'click', function(e) { 
          YAHOO.nolastar.reset_upload() 
        });
      });

      YAHOO.util.Event.onAvailable('NoImage', function() { 
        $E.on($('NoImage').getElementsByTagName('img'), 'click', function(e) { 
          YAHOO.nolastar.reset_upload() 
        });
      });
      
      popups = $D.getElementsByClassName('Pop', 'a', 'Main');
      if(popups.length > 0) {
        $E.on(popups, 'click', YAHOO.nolastar.popup);
      }

    },

    submit: function(e) { 

      $E.stopEvent(e);

      if($('Form').action == '/3/' || $('Form').action.substr(-2, 1) == '3') {
        radios = $('Form').upload;
        for(i = 0; i < radios.length; i++) {
          if(radios[i].checked && radios[i].value == 'upload') {
            if($('image_upload').value != '') {
              return upload();
            } else {
              $D.setStyle('NoImage', 'display', 'block');
              return false;
            }
          }
        }
      }
      
      $('Form').submit();

    }

  };

}();

YAHOO.util.Event.on('Next', 'click', YAHOO.nolastar.submit);
YAHOO.util.Event.onContentReady('Controls', YAHOO.nolastar.init_controller);
YAHOO.util.Event.onAvailable('Help', YAHOO.nolastar.init_help);
YAHOO.util.Event.onContentReady('Main', YAHOO.nolastar.init);
YAHOO.util.Event.onAvailable('Right', YAHOO.nolastar.init_gallery, 'Gallery');


