/**
  * 
  *  Copyright (c) 2007, Ilico Data Incorporated
  *
 **/
 
var mousex = 0;
var mousey = 0;

var winOpenDuration = 0.5;
 
var aboutWin = null;
var contactWin = null;
var faqWin = null;
var browserNavWin = null;
var browserWin = null;
var latestWin = null;

var waitsrc = "/img/blue-bar-wait.gif";
var wait_i = new Image();
wait_i.src = waitsrc;
var waithtml = '<img src="' + waitsrc + '" alt="sending..." />';

var taskBarShowing = false;
var bgChooserWheelShowing = 0; // 0==hidden, 1==appearing, 2==fading, 3==shown
 
var buttons = new Array(); 
 
window.onload = init;
function init() {
  Element.hide('loading_div');  
  openInitialWindows();

  winCloseObserver = { 
    onDestroy: function(eventName, win) {
	    // put the window's content  back onto the page body where it'll be hidden
	    $A(document.getElementsByTagName('body')).last().appendChild($(win.getId().replace(/_win/, '_div'))); 
	    // empty the js var out.
	    if (win == browserNavWin) { browserNavWin = null; }
	    if (win == browserWin) { browserWin = null; }
	    if (win == aboutWin) { aboutWin = null; }
	    if (win == contactWin) { contactWin = null; }
	    if (win == faqWin) { faqWin = null; }
	    if (win == latestWin) { latestWin = null; }	  
  	} 
  }
   
  Windows.addObserver(winCloseObserver);
  
  Event.observe('taskBar', 'click', tbToTop);  
  Event.observe('taskBarRight', 'click', slideTaskBar);
  Event.observe('taskBarMain_reload', 'mousedown', reloadBttnEvent);
  Event.observe('taskBarMain_reload', 'mouseup', reloadBttnEvent);
  Event.observe('taskBarMain_reload', 'click', function(){history.go(0);});
  
  Event.observe('bg_tree', 'click', setBG);
  Event.observe('bg_sky1', 'click', setBG);
  Event.observe('bg_sky2', 'click', setBG);
  Event.observe('bg_def', 'click', setBG);
  
  // reset the reload button if someone balks on the reload click
  var trackMouseUp = function(e) {
    if (! Position.within('taskBarMain_reload', Event.pointerX(e), Event.pointerY(e))) {
	  var fake = new Object();
	  fake.type = 'mouseup';
	  reloadBttnEvent(fake);
	}
  };
  Event.observe(document, 'mouseup', trackMouseUp);

  var trackMouseMove = function(e) {
    mousex = Event.pointerX(e);
	mousey = Event.pointerY(e);
//	$('taskBarMain_status').innerHTML = mousex + ':' + mousey;
  };
  Event.observe(document, 'mousemove', trackMouseMove);  
}

function openInitialWindows() {
  // welcome 
    var welcomeWin = new Window('welcome_win', 
	 {
	   className: 'alphashadow', 
	   title: 'Welcome', 
	   width: 480,
	   height: 495,
	   top: 10,
	   left: 485,
	   showEffect: Element.show,
	   showEffectOptions: {duration: winOpenDuration}
	 });
    welcomeWin.setContent('welcome_div');
    welcomeWin.toFront();
    welcomeWin.setDestroyOnClose();
    //welcomeWin.setStatusBar((new OpacitySlider(welcomeWin, 0.7)).getHtml());
    welcomeWin.show();

  // navigate
    var navigateWin = new Window('navigate_win', 
	 {
	   className: 'alphashadow', 
	   title: 'Navigate&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;', 
	   width: 180,
	   height: 250,
	   closable: true,
	   top: 10,
	   left: 20,
	   showEffect: Element.show,
	   showEffectOptions: {duration: winOpenDuration}
	 });
    navigateWin.setContent('navigate_div');
    navigateWin.toFront();
    navigateWin.setDestroyOnClose();
    //navigateWin.setStatusBar((new OpacitySlider(navigateWin)).getHtml());
    navigateWin.show();	
	
  // latest news
    //showLatest();
}
	
function showBrowser(initUrl) {
  if (browserNavWin) {
    browserNavWin.show();
    browserNavWin.toFront();
  } else {  
   // mini-browser  nav bar
   browserNavWin = new Window('browserNav_win', 
	 {
	   className: 'alphashadow', 
	   title: 'Mini-Browser Address Bar', 
	   width: 380,
	   height: 40,
	   top: 20,
	   left: 215,
	   showEffectOptions: {duration: winOpenDuration}
	 });
    browserNavWin.setContent('browserNav_div');
    browserNavWin.toFront();
    browserNavWin.setDestroyOnClose();
    //browserNavWin.setStatusBar((new OpacitySlider(browserNavWin)).getHtml());
    browserNavWin.show();
   }

  if (browserWin) {
    browserWin.show();
    browserWin.toFront();
  } else {  
   // mini-browser 
   browserWin = new Window('browser_win', 
	 {
	   className: 'alphashadow', 
	   title: 'Mini-Browser', 
	   url: initUrl,
	   width: 600,
	   height: 400,
	   top: 110,
	   left: 215,
	   showEffectOptions: {duration: winOpenDuration}
	 });
    browserWin.toFront();
    browserWin.setDestroyOnClose();
    //browserWin.setStatusBar((new OpacitySlider(browserWin)).getHtml());
    browserWin.show();
   }
}

function browserGo(url) {
  var iframe = browserWin.getId() + '_content';
  $(iframe).src = url;
}

function showAbout() {
  if (aboutWin) {
    aboutWin.show();
    aboutWin.toFront();
	return;
  }
  aboutWin = new Window('about_win', 
	 {
	   className: 'alphashadow', 
	   title: 'About', 
	   width: 200,
	   height: 470,
	   top: 20,
	   left: 245,
	   showEffectOptions: {duration: winOpenDuration}
	 });
    aboutWin.setContent('about_div');
    aboutWin.toFront();
    aboutWin.setDestroyOnClose();
    //aboutWin.setStatusBar((new OpacitySlider(aboutWin)).getHtml());
	aboutWin.getContent().setStyle({'background': 'transparent url(/img/bluetile.gif)'}); /* http://www.k10k.net */
    aboutWin.show();
}

function showLatest() {
  if (latestWin) {
    latestWin.show();
    latestWin.toFront();
	return;
  }

  var maxX;
  var maxY;
  if (window.innerWidth) {
    maxX = window.innerWidth;
    maxY = window.innerHeight;
  } else if (document.all) {
    maxX = document.body.clientWidth;
    maxY = document.body.clientHeight;
  }

  var latest_winWidth = 400;
  var latest_winHeight = 450;

  var l = (maxX - latest_winWidth - 50) <= 0 ? 0 : maxX - latest_winWidth - 50;
  var t = (maxY - latest_winHeight - 50) <= 0 ? 0 : maxY - latest_winHeight - 50;

  var latestWin = new Window('latest_win', 
   {
	 className: 'alphashadow', 
	 title: 'Latest News', 
	 width: latest_winWidth,
	 height: latest_winHeight,
	 closable: true,
	 top: t,
	 left: l,
	 showEffect: Element.show,
	 showEffectOptions: {duration: winOpenDuration}
   });
  latestWin.setAjaxContent('/getLatest.php', {}, false, false);
  latestWin.toFront();
  latestWin.setDestroyOnClose();
  //latestWin.setStatusBar((new OpacitySlider(latestWin)).getHtml());
  latestWin.show();
}

function showFaq() {
  if (faqWin) {
    faqWin.show();
    faqWin.toFront();
	return;
  }
  faqWin = new Window('faq_win', 
	 {
	   className: 'alphashadow', 
	   title: 'Questions', 
	   width: 500,
	   height: 460,
	   top: 50,
	   left: 150,
	   showEffectOptions: {duration: winOpenDuration}
	 });
    faqWin.setContent('faq_div');
    faqWin.toFront();
    faqWin.setDestroyOnClose();
    //faqWin.setStatusBar((new OpacitySlider(faqWin)).getHtml());
	faqWin.getContent().setStyle({'background': 'transparent url(/img/bluetile.gif)'}); /* http://www.k10k.net */
    faqWin.show();
}

function showContact() {
  if (contactWin) {
    contactWin.show();
    contactWin.toFront();
	return;
  }
  contactWin = new Window('contact_win', 
	 {
	   className: 'alphashadow', 
	   title: 'Contact', 
	   width: 520,
	   height: 350,
	   top: 100,
	   left: 300,
	   showEffectOptions: {duration: winOpenDuration}
	 });
    contactWin.setContent('contact_div');
    contactWin.toFront();
    contactWin.setDestroyOnClose();
    //contactWin.setStatusBar((new OpacitySlider(contactWin)).getHtml());
	contactWin.getContent().setStyle({'background': 'transparent url(/img/bluetile.gif)'}); /* http://www.k10k.net */
    contactWin.show();
}

function contactSend(f) {
  $('contactfstatus').innerHTML = waithtml;
  Form.disable(f);
  var url = 'http://www.ilicodata.com/contact.php';
  var param = 'name=' + escape(f.cname.value) + '&email=' + escape(f.cemail.value) + '&msg=' + escape(f.cmsg.value);
  new Ajax.Request(url, {
        asynchronous: true,
        method: "post",
        parameters: param,
        onSuccess: function(req) {
		  var r = eval('(' + req.responseText + ')');
		  if (! r.error) {
		    $('contactfstatus').innerHTML = '<span class="updater">Message Sent.</span>';
            new Effect.Opacity('contactfstatus', 
						  { 
						   duration: 5.0,
						   from: 1.0,
						   to: 0.0,
						   transition: Effect.Transitions.sinoidal,
						   afterFinish: function() {
						                 $('contactfstatus').innerHTML = '';
									     new Effect.Opacity('contactfstatus', { to:1.0, duration:0.1 }); 
   									   }
						  } );
			}
		  Form.reset(f);
          Form.enable(f);
		},
		onFailure: function(req) {
		  $('contactfstatus').innerHTML = req.responseText;
          Form.enable(f);
		}
      });
	  
  return true;
}

function reloadBttnEvent(e) {
    if (e.type == 'mousedown') {
      $('taskBarMain_reload').setStyle({'backgroundImage': 'url(/img/reload-btn-press.png)'});
	} else if (e.type == 'mouseup') {
      $('taskBarMain_reload').setStyle({'backgroundImage': 'url(/img/reload-btn.png)'});
    }	  
}

function btnRegister(btn) {
  var btnId = $(btn).getId();
  buttons.push(btnId);
}

function tbToTop() {
  var z = Windows.maxZIndex + 5;
  $('taskBarShell').setStyle({zIndex: z});
}

function slideTaskBar() {
  // turn a deaf ear to clicks while sliding
  Event.stopObserving('taskBarRight', 'click', slideTaskBar, false);

  var x = Element.getDimensions('taskBarMain').width;
  if (taskBarShowing)
    x *= -1;
  
  new Effect.MoveBy('taskBar', 0, x, {
                        transition: Effect.Transitions.sinoidal,
					    afterFinish: function() { 
					      // update the global variable
                          taskBarShowing = !taskBarShowing; 
						  var newClass = 'tbrR';
						  var oldClass = 'tbrL';
						  if (taskBarShowing) {
						    newClass = 'tbrL';
							oldClass = 'tbrR';
						  }
						  // make the arrow point in the new direction
						  $('taskBarRight').addClassName(newClass);
						  $('taskBarRight').removeClassName(oldClass);

						  // start listening for clicks again
						  Event.observe('taskBarRight', 'click', slideTaskBar, false);
					   }});
}

function setBG(e) {
  var img = Element.getStyle(Event.element(e), 'background-image').replace(/tile-/, '');
  img = img.replace(/"/g, '');  // ie will put quotes into the url() that it returns, so we have to strip them out too.
  var oldImg = Element.getStyle($A(document.getElementsByTagName('body')).last(), 'background-image');
  $A(document.getElementsByTagName('body')).last().setStyle({'backgroundImage': img});
}


// ----------------------------------------------------------------------------- classes
var OpacitySlider = Class.create();
OpacitySlider.prototype = {

  initialize: function(win, initialValue) {
    // massage the creation parameters: make sure we have a window object and that 0 <= opacity <= 1
    if (typeof(win) != 'object')
	  win = Windows.getWindow(win);
	if ((! initialValue) || (typeof(initialValue) != 'number'))
	  initialValue = 1;
	initialValue = (initialValue > 1) ? 1 : initialValue;
	initialValue = (initialValue < 0) ? 0 : initialValue;
    this.winId = win.getId();
	
	// let the window object know that we're going to have some control over it.
	win.setSlider(this);
	
	// create a shell to hold the widget
	var sliderShell = document.createElement('div');
	sliderShell.innerHTML = '<div id="' + this.winId + '_slider_track" class="alphashadow_slider_track"><div id="' + this.winId + '_slider" class="alphashadow_slider"></div></div>';

	// add the shell div to the page's <body>
    $A(document.getElementsByTagName('body')).last().appendChild(sliderShell);

    // create the Slider functionality in the div	
    this.s = new Control.Slider(this.winId+'_slider', this.winId+'_slider_track', {
      sliderValue: 	initialValue,
	  onSlide: function(v) { win.setInnerOpacity(v, false); },
	  onChange: function(v) { win.setInnerOpacity(v, false); }
	});
	
	// set the inital opacity before the slider is moved for the first time.
	win.setInnerOpacity(initialValue, false);

	this.sliderDiv = sliderShell;
  },
  
  getHtml: function() {
    return this.sliderDiv;
  },

  getValue: function() {
    return this.s.getNearestValue();
  }
}; //  END OpacitySlider

