/* 
 * Various functions
 */

// detect browser capabilities
var capable = (document.getElementById && document.getElementsByTagName);
// used for image swapping
var imgSrc = '';
// used by image preloader
var arrTmpImage = [];


// Actions to run on typical page load
$(function() 
{
  // Activate the 'new window' links
  activate_newwin_links(); 

  // Validate signup form on keyup and submit
  $("#contactForm").validate();
});


// Run when page is loaded
//$(window).load(function(){
//}); 



// Mouseovers for the main nav (uses jQuery)
function activate_nav(nav)
{
  $(nav).hover(
    function() {
      if(this.id) {
        imgIn( this.id );
      } else {
        imgIn( $(this).find("img").attr("id") );
      }
    }, 
    function() {
      if(this.id) {
        imgOut( this.id );
      } else {
        imgOut( $(this).find("img").attr("id") );
      }
    } 
  );
}


// Programatically select a nav element
function selectNav(obj) {
  //alert( $(this).find("img").attr("id") );
  var imgId = "";
  // Disable other buttons
  $(obj).parents("ul:first").find("img").each(function(){
    if( $(this).attr("id") ){
      imgId = $(this).attr("id");
      imgNum = get_image(imgId);
      MImages[imgNum].swapped = 1;
      imgOut(imgId);
    }
  });

  // Enable the current button
  imgId = $(obj).find("img").attr("id");
  imgOn(imgId);
  imgNum = get_image(imgId);
  MImages[imgNum].swapped = 0;
}


// Change the profile picture
function changeProfilePic(obj) {
  var imgObj = $(obj).find("img");
  var imgSrc = imgObj[0].src.replace(/_on.gif/, "_big.jpg");
  $("#profilePic").attr("src", imgSrc);
}


// Make links with a class of 'newwin' open in a new window
function activate_newwin_links()
{
  var msg = "";
  var cont = true;
  $("a.newwin").click(function(){
    if( $(this).attr("rel") && $(this).attr("rel") != "" ) {
      msg = $(this).attr("rel");
      cont = confirm(msg);
    }
    if(cont) {
      popWindow(this.href,800,600,1);
    }
    return false;
  });
}


// MenuImage constructor
function MenuImage(img_id, img_out, img_in, img_act, swapped) 
{
    this.img_id = img_id;           // the image id
    this.img_out = new Image();     // the image to use when mouseout
    this.img_out.src = imageDir + img_out;
    this.img_in = new Image();      // the image to use when mouseover
    this.img_in.src = imageDir + img_in;
    this.img_act = new Image();     // the image when page active
    if(img_act) {
        this.img_act.src = imageDir + img_act;
    } else {
        this.img_act.src = '';
    }    
    this.swapped = swapped;         // register if the image is swapped
    this.over = 0;                  // register if the image is 'over'
}

// get an image from an image_id
function get_image(id)
{
    for(var a=0; a<=MImages.length; a++)
    {
        if(MImages[a] && MImages[a].img_id == id)
            return a;
    }
    return 0;
}

// swap in the image
function imgIn(image_id)
{
  var imgId = get_image(image_id);

  if(capable && MImages[imgId]) 
  {
    var theObj = MImages[imgId];
    var theImg = document.getElementById(theObj.img_id);
    if(theImg) {
      var filename = basename(theImg.src);

      // Don't swap if image is 'down' or currently active 
      if( filename.indexOf('_over') == -1 && filename.indexOf('_on') == -1 ) {
          theImg.src = MImages[imgId].img_in.src;
          MImages[imgId].swapped = 1;
      }
    }
  }
}

// swap in the image
function imgOn(image_id)
{
  var imgId = get_image(image_id);

  if(capable && MImages[imgId]) 
  {
    var theObj = MImages[imgId];
    var theImg = document.getElementById(theObj.img_id);
    if(theImg) {
      var filename = basename(theImg.src);

      theImg.src = MImages[imgId].img_act.src;
      MImages[imgId].swapped = 1;
    }
  }
} 

// swap out the image
function imgOut(image_id) 
{
  var imgId = get_image(image_id);

  if(capable && MImages[imgId]) 
  {
    theImg = document.getElementById(MImages[imgId].img_id);
    if(theImg) {
      // Only revert if "swapped" is true
      if(MImages[imgId].swapped) 
      {
          theImg.src = MImages[imgId].img_out.src;
          MImages[imgId].swapped = 0;
      }
    }
  }
}


/*
 * Functions to open links in a new window
 */
var newwin='';

// open a popup window
function popWindow(theUrl,width,height,full) {
    // use defaults if width and height were not supplied
    var ismoz = navigator.userAgent.indexOf("Gecko");
    var isie = navigator.userAgent.indexOf("MSIE");
    var default_width = 600;
    var default_height = 450;
    var offset_width = (isie != -1) ? 4 : 0;
    var offset_height = (isie != -1) ? 45 : 0;
    var popType = (full) ? ",scrollbars=yes,resizable=yes,status=yes,toolbar=yes,menubar=yes,location=yes,directories=yes" : ",scrollbars=no,resizable=no,status=no";
    
    var popWidth = (width) ? width + offset_width : default_width + offset_width;
    var popHeight = (height) ? height + offset_height : default_height + offset_height;
    var popLeft = self.screen.availWidth/2 - popWidth/2;
    var popTop = self.screen.availHeight/2 - popHeight/2;
    
    if(theUrl) {
        if(newwin)
            newwin.close();
        newwin = window.open(theUrl,'newwin','left='+popLeft+',top='+popTop+',width='+popWidth+',height='+popHeight+popType);
    }

    return;
}

function basename(path) {
  return path.replace(/\\/g,'/').replace( /.*\//, '' );
}

function dirname(path) {
  return path.replace(/\\/g,'/').replace(/\/[^\/]*$/, '');
}

// Preload an array of images
function preload(arrImages)
{
    for(var i=0; i<arrImages.length; i++) {
        arrTmpImage[i] = new Image;
        arrTmpImage[i].src = arrImages[i];
    }
}

// Change a form element's type in IE
function changeInputType(oldObject, oType) {
  var newObject = document.createElement('input');
  newObject.type = oType;
  if(oldObject.style.width) newObject.style.width = oldObject.style.width;
  if(oldObject.onclick) newObject.onclick = oldObject.onclick;
  if(oldObject.size) newObject.size = oldObject.size;
  if(oldObject.value) newObject.value = oldObject.value;
  if(oldObject.name) newObject.name = oldObject.name;
  if(oldObject.id) newObject.id = oldObject.id;
  if(oldObject.className) newObject.className = oldObject.className;
  oldObject.parentNode.replaceChild(newObject,oldObject);
  return newObject;
}



