Admin = 0;

function __debug(txt) {
  if(window.console) window.console.log(txt);
}

var TwoSusans = {
 initialize: function() {
    TwoSusans.replaceFonts();
		
    // The minimum height = the height + margin of all static, non-stretching, non-floating elements
    // in #wallPaper
    TwoSusans.minimumHeight = 0;
    $$('#container div').each(function(div) {
	if(!div.hasClassName('fillVerticals'))
	  if(!div.getStyle('float').match(/left|right/))
	    TwoSusans.minimumHeight += div.getHeight();
      });

    $$('.buttons a').invoke('observe', 'click', function(ev) {
	var el = Event.element(ev); 
	var tgt = $(el.readAttribute('htmlfor')) || $(el.readAttribute('for'));
	if(tgt) tgt.click();
      });
    TwoSusans.resizeVerticals();

    Event.observe(document.onresize ? document : window, "resize", TwoSusans.resizeVerticals);

    var scroller = $('featured');

    if(scroller) TwoSusans.setupScroller(scroller);

    var login = $('login');

    if(login) {
      var frm = login.down('form');

      login.down('a').observe('click', function(ev) {
	  Event.stop(ev);
	  frm.show();
	  frm.username.focus();
	});
      login.down('.cancel').observe('click', function(ev) {
	  Event.stop(ev);
	  frm.hide();
	});
    }		
  },

 replaceFonts: function() {
    if(Admin || !$$ || !$(document.documentElement).hasClassName('images-on')) return;

    var replaceDefaults = {
    halign: "center",
    valign: "center",
    color: "3F358F",
    bg: "FFFFFF",
    a: 255,
    font: "AppleChancery"
    };
	  
    function textReplace(param) { 
      var lp = Object.extend(replaceDefaults, param);
      return function(el) {
	var dims = $(el).getDimensions();	     	     
	var looper = el;
	// Go to the bottom of any tree to capture the text
	while(looper.tagName) {
	  __debug("looper=" + looper.tagName);
	  looper = looper.firstChild;
	}
	var txt = looper.nodeValue;

	$(el).addClassName('replaced');

	var img = new Image();
	var h = el.clientHeight + "px";

	img.onload = function() {
	  img.style['display'] = 'none';
	  
	  el.style['height'] = h;
	  el.innerHTML = "<div><div style='height: " + h + "'>" + txt + "</div></div>";
	  el.down('div').appendChild(img);
	  el.down('div div').fade({duration: 0.4});
	  $(img).appear({duration: 0.4});
	}
	img.src = "fonts/?font=" + lp.font + "&text=" + escape(txt) + "&w=" + dims.width + "&h=" + dims.height  + "&c=" + lp.color + "&bg=" + lp.bg + "&a=" + lp.a;
      };
    }
    
    $$('.content h1').each(textReplace({}));
    $$('.content h2').each(textReplace({ color: "006C91" }));
    $$('#detail h3, #menu h3, .form h3').each(textReplace({ color: "005575", halign: "right" }));
  },

 setupScroller: function(scroller) {

    var left = $('scroll-left');
    var right = $('scroll-right');
    var scrollbox = scroller.down('.scroller');

    if(scroller && left && right) {
      scroller.position = 0;
      var kids = scrollbox.childElements();
      var lastKid = kids[kids.length-1];

      scroller.totalWidth = parseInt(lastKid.getStyle("left")) + parseInt(lastKid.getStyle("width")) + 50;

      TwoSusans.setupButton(scroller, left, "right");
      TwoSusans.setupButton(scroller, right, "left");
    }
  },

	
 lVheight: 0,

 resizeVerticals: function(ev) {
    TwoSusans.lVheight  = 0; // Manual adjustment goes here
		
    $$('.lessVertical').each(function(lV) { TwoSusans.lVheight += lV.getHeight(); });
		
    var lVheight = TwoSusans.lVheight;

    var vpDims = document.viewport.getDimensions();

    $$('.fillVertical').each(function(fV) {
	var pV = 0;

	fV.select('.lessVertical').each(function(lV) { pV += lV.getHeight(); });
	// Subtract border widths from new height
	var newHeight = (vpDims.height - lVheight + pV) - (fV.getHeight() - fV.clientHeight);

	var minHeight = TwoSusans.minimumHeight - lVheight + pV;
	if(newHeight > minHeight)
	  fV.style.height = newHeight + "px";
	else
	  fV.style.height = minHeight + "px";
      });
  },
	
 doNothing: function() { return false; },

 setupButton: function(scroller, button, dir) {   
    var mouseOver = function(ev) {
      var el = Event.element(ev);

      if(!scroller.scrolling) 
	el.style.backgroundImage = "url(images/" + el.readAttribute("hoverImg") + ")";

      el.hovering = true;
    }

    var mouseDown = function(ev) {
      var el = Event.element(ev);

      el.style.backgroundImage = "url(images/" + el.readAttribute("activeImg") + ")";
    }

    var mouseOut = function(ev) {
      var el = Event.element(ev);

      if(!scroller.scrolling)
	el.style.backgroundImage = "url(images/" + el.readAttribute("inactiveImg") + ")";

      el.hovering = false;
    }

    button.inactiveImg = new Image(); button.inactiveImg.src = "images/" + button.readAttribute("inactiveImg");
    button.hoverImg = new Image(); button.hoverImg.src = "images/" + button.readAttribute("hoverImg");
    button.activeImg = new Image(); button.activeImg.src = "images/" + button.readAttribute("activeImg");
    button.observe("mouseover", mouseOver);
    button.observe("mousedown", mouseDown);
    button.observe("mouseout", mouseOut);

    button.observe("mousedown", TwoSusans.scrollStart(scroller, dir));
  },

 scrollStart: function(scroller, dir) {
    return function(ev) {
      TwoSusans.scrollStopHandler = TwoSusans.scrollStop(scroller);

      $(document).observe("mouseup", TwoSusans.scrollStopHandler);
      $(document).observe("mouseout", TwoSusans.scrollStopHandler, true);
      $(document).observe("mousemove", TwoSusans.doNothing);

      scroller.button = Event.element(ev);

      if(scroller.scrolling) 
	clearInterval(scroller.scrolling);

      scroller.interval = 1;
      scroller.direction = dir;
      scroller.scrolling = setInterval(TwoSusans.scroll(scroller), 20);
    }
  },

 scroll: function(scroller) {
    var moveEl = scroller.down('.scroller');

    return function() {
      scroller.interval = 15;

      var scrollWindow = scroller.down('.scrollwindow');

      if(scroller.direction == "left" && 
	 scroller.position < scroller.totalWidth - scrollWindow.clientWidth) 
	scroller.position += scroller.interval;

      if(scroller.direction == "right" && scroller.position > 0) 
	scroller.position -= scroller.interval;


      moveEl.style.left = "-" + scroller.position + "px";
    }  
  },

 scrollStop: function(scroller) {
    return function(ev) {
      var el = scroller.button;
      var lel = Event.element(ev);

      if(ev && ev.type == "mouseout" && lel != document)
	return;

      $(document).stopObserving("mouseup", TwoSusans.scrollStopHandler);
      $(document).stopObserving("mouseout", TwoSusans.scrollStopHandler);
      $(document).stopObserving("mousemove", TwoSusans.doNothing);	

      if(el) {	
	if(el.hovering)
	  el.style.backgroundImage = "url(images/" + el.readAttribute("hoverImg") + ")";
	else
	  el.style.backgroundImage = "url(images/" + el.readAttribute("inactiveImg") + ")";
      }

      clearInterval(scroller.scrolling);
      scroller.scrolling = null;
    }
  },

 appendMessage: function(msg) {
    var msgContainer = $('message');

    if(msgContainer)
      msgContainer.appendChild(TwoSusans.messageBlock(msg));
  },

 appendError: function(msg) {
    var msgContainer = $('message');

    if(msgContainer)
      msgContainer.appendChild(TwoSusans.errorBlock(msg));
  },

 errorBlock: function(msg) {
    var newSpan = document.createElement("SPAN");
    newSpan.className = "error";
    newSpan.innerHTML = msg;   
    return newSpan;
  },

 messageBlock: function(msg) {
    var newSpan = document.createElement("SPAN");
    newSpan.className = "message";
    newSpan.innerHTML = msg;
    return newSpan;
  },

 processAsync: function(req, opts) {
    var res = req.responseText;
    var response = res && res.isJSON() && res.evalJSON();

    $$('.loading').invoke('hide');   

    if(response['errors'] && response['errors'].length) {
      $A(response['errors']).each(function(err) {
	  TwoSusans.appendError(err);
	});
    } 

    if(response['result'] == "ERROR" && opts.onError) { opts.onError(response); }
    else if(response['result'] == "SUCCESS" && opts.onSuccess) { opts.onSuccess(response); }   
  }


};

window.onload = TwoSusans.initialize;

