function $()
{
  var elements = new Array();
  for (var i = 0; i < arguments.length; i++)
  {
    var element = arguments[i];
    if (typeof element == 'string')
      element = document.getElementById(element);
    if (arguments.length == 1)
      return element;
    elements.push(element);
  }
  return elements;
}

function getQueryStringParameter(paramName, url)
{
  var i;
  var len;
  var idx;
  var queryString;
  var params;
  var tokens;

  url = url || top.location.href;

  idx = url.indexOf( '?' );
  queryString = idx >= 0 ? url.substr( idx + 1 ) : url;
  params = queryString.split( '&' );

  for ( i = 0, len = params.length ; i < len ; i++ ) {
    tokens = params[i].split( '=' );
    if ( tokens.length >= 2 ) {
      if ( tokens[0] === paramName ) {
        return unescape( tokens[1] );
      }
    }
  }

  return null;
}

function togglePrintable()
{
  $('printable-styles').disabled = true;
  if ($('printable-toggle').innerHTML == 'Printable')
  {
    $('printable-toggle').innerHTML = 'Screen'
    $('printable-styles').disabled = false;
  }
  else
  {
    $('printable-toggle').innerHTML = 'Printable'
    $('printable-styles').disabled = true;
  }
}

function displayMail(server, login, display)
{ //usage: displayMail('sfmoma.org', 'edu', '');
  if (display != null)
    document.write('<a href=' + '"mai' + 'lto:' + login + '@' + server + '">' + display + '</a>');
  else
    document.write('<a href=' + '"mai' + 'lto:' + login + '@' + server + '">' + login + '@' + server + '</a>');
}

var nav = new Object();
nav.mousedOver = false;

function setupNav(e, args, me)
{
  var id = me[0];

  if ($(id) == undefined)
    return;

  var rootNode = $(id);
  var navNodes = rootNode.getElementsByTagName('LI');

  for (var i = 0; i < navNodes.length; i++)
  {
    var node = navNodes[i];

    if (node.parentNode != rootNode)
      continue;

    var image = node.getElementsByTagName('IMG')[0];

    if (image)
  	{
      node.overImage = new Image();
      node.overImage.src = node.getElementsByTagName('IMG')[0].src.replace('.gif', '_over.gif');

      if (node.className.indexOf('selected') != -1)
      {
        node.selectedOverImage = new Image();
        node.selectedOverImage.src = node.getElementsByTagName('IMG')[0].src.replace('_selected.gif', '_selected_over.gif');
      }
	}

    node.onmouseover = function()
    {
      if (nav.mousedOver)
        return;

      var image = this.getElementsByTagName('IMG')[0];

	  if (image == undefined)
	    return;

      if (this.className.indexOf('over') == -1 && this.className.indexOf('selected') == -1)
      {
        this.className += ' over';
        image.src = this.overImage.src;
      }
      else if (this.className.indexOf('over') == -1 && this.className.indexOf('current') == -1)
      {
        this.className += ' selected-over';
        image.src = this.selectedOverImage.src;
      }
      nav.mousedOver = true;
    }

    node.onmouseout = function()
    {
      var image = this.getElementsByTagName('IMG')[0];

	  if (image == undefined)
	    return;

      if (this.className.indexOf('over') != -1 && this.className.indexOf('current') == -1)
      {
        this.className = (this.className + '').replace('over', '');
        image.src = image.src.replace('_over.gif', '.gif');
      }
      else if (this.className.indexOf('over') != -1 && this.className.indexOf('selected') != -1)
      {
        this.className = (this.className + '').replace('selected-over', '');
        image.src = image.src.replace('_selected_over.gif', '.gif');
      }
      nav.mousedOver = false;
    }
  }
}

function selectNav(link, isCurrentPage)
{
  if (link == undefined)
    return;

  var image = link.getElementsByTagName('IMG')[0];

  if (image == undefined)
    return;

  if (link.className.indexOf('selected') == -1)
  {
    link.className += ' selected';
    image.src = image.src.replace('.gif', '_selected.gif');
    if (isCurrentPage)
      link.className += ' current';
  }
}

function setupHeaders()
{
  if (typeof sIFR == 'function')
  {
    var header = document.getElementsByTagName('H1')[0];
    if (header && header.className.indexOf('with-nav') != -1)
      sIFR.replaceElement(named({sSelector: 'h1.benton', sFlashSrc: baseDir + '/assets/movies/bentongothic.swf', sColor: '#333333', sBgColor: '#ffffff', nPaddingRight: 28, sWmode: 'transparent'}));
    else if (header)
      sIFR.replaceElement(named({sSelector: 'h1.benton', sFlashSrc: baseDir + '/assets/movies/bentongothic.swf', sColor: '#333333', sBgColor: '#ffffff', nPaddingLeft: 20, nPaddingRight: 28, sWmode: 'transparent'}));
    sIFR.replaceElement(named({sSelector: 'h2.benton', sFlashSrc: baseDir + '/assets/movies/bentongothic.swf', sColor: '#ffffff', sBgColor: '#1a1a1a', nPaddingTop: 5, nPaddingBottom: 5, nPaddingLeft: 12, nPaddingRight: 12, sWmode: 'transparent', sCase: 'upper'}));
  }
}

var play;
var firstPlay = true;
var rotator;
var imageIndex;

function autoplay(run, srcimage, totalDivs, link, pause)
{
  clearInterval(rotator);

  var pageControls;
  if (run != 0)
  {
    pageControls = YAHOO.util.Dom.getElementsByClassName('slideshow-control')
    for (var i = 0; i < pageControls.length; i++)
      YAHOO.util.Dom.replaceClass(pageControls[i], 'pause', 'play');
    if (!pause)
      rotate(srcimage, totalDivs);
    rotator = setInterval("rotate('" + srcimage + "', " + totalDivs + ")", 4500)
    if (link.className.indexOf('play') != -1)
      YAHOO.util.Dom.replaceClass(link, 'play', 'pause');
  }
  else
  {
    clearInterval(rotator);
    imageIndex = null;
    pageControls = YAHOO.util.Dom.getElementsByClassName('slideshow-control')
    for (var i = 0; i < pageControls.length; i++)
      YAHOO.util.Dom.replaceClass(pageControls[i], 'pause', 'play');
  }
}

function rotate(srcimage, allImages){
  var currentImagePath = srcimage.substring(0, srcimage.lastIndexOf('-') + 1);
  if (imageIndex)
    imageIndex = imageIndex + 1;
  else
    imageIndex = parseInt(srcimage.substring(srcimage.lastIndexOf('-') + 1, srcimage.length)) + 1;

  if (imageIndex == (allImages + 1))
    imageIndex = 1;
  if (imageIndex == -1)
    imageIndex = allImages - 1;

  selectLink(currentImagePath + imageIndex, true);
}

function activateCarousel(link)
{
  var viewerControl = this.nodeName ? this : link;
  var list = YAHOO.util.Dom.getNextSibling(viewerControl);
  imageIndex = null;

  var selectedListElement = YAHOO.util.Dom.getElementsByClassName('selected', 'li', list)[0];

  if (viewerControl.className != null)
    play = (viewerControl.className.indexOf('play') != -1) ? 1 : 0;
  else
    play = 0;

  autoplay(play, selectedListElement.id.replace('-dlink', ''), YAHOO.util.Dom.getChildren(list).length, viewerControl, firstPlay);
  firstPlay = false;
}

function setupDhtml()
{
  var playerControls = YAHOO.util.Dom.getElementsByClassName('slideshow-control', 'a');

  for (var i = 0;i < playerControls.length; i++)
    YAHOO.util.Event.addListener(playerControls[i], "click", activateCarousel, true);

  var links = document.getElementsByTagName('LI');

  for (var i = 0; i < links.length; i++)
  {
    var link = links[i];

    if (link.className.indexOf('dlink') == -1)
      continue;

    link.onclick = function()
    {
      autoplay(0);
      var id = this.id.replace('-dlink', '');

      if (this.parentNode.selectedId && this.parentNode.selectedId != id)
        selectLink(id);
    }

    if (link.parentNode.firstSelected == null)
    {
      var id = link.id.replace('-dlink', '');

      selectLink(id);
      link.parentNode.firstSelected = true;
    }
  }
  
  if (playerControls != '')
  {
    rotator = true;
    play = 1;
    activateCarousel(playerControls[0]);
  }
}

function selectLink(id, fade)
{
  var content = $(id + '-dcontent');
  var link = $(id + '-dlink');
  link.className += ' selected';
  content.className += ' selected';
  var previousContent = null;
  if (link.parentNode.selectedId)
  {
    previousContent = $(link.parentNode.selectedId + '-dcontent');
    deselectLink(link.parentNode.selectedId);
  }
  link.parentNode.selectedId = id;

  if (previousContent != null)
  {
    if (fade && YAHOO.widget.Effects && YAHOO.util.Easing)
    {
      var fadeOut = new YAHOO.widget.Effects.Fade(previousContent.getElementsByTagName('DIV')[0], {seconds:0.45});
      fadeOut.onEffectComplete.subscribe(function() {
        previousContent.style.display = 'none';
        content.style.display = 'block';
        var fadeIn = new YAHOO.widget.Effects.Appear(content.getElementsByTagName('DIV')[0],{seconds:0.45});
        fadeIn.onEffectComplete.subscribe(function() {
          return true;
        });
        fadeIn.animate();
      });
      fadeOut.animate();
    } else {
      previousContent.style.display = 'none';
      content.style.display = 'block';
    }
  } else {
    content.style.display = 'block';
  }
	// if (content.getElementsBySelector('object').length > 0) {
	// 	addPlayer();
	// }
}

function deselectLink(id)
{
  var link = $(id + '-dlink');
  var content = $(id + '-dcontent');

  link.className = (link.className + '').replace(' selected', '');
  content.className = (content.className + '').replace(' selected', '');
}

function toggleSearchOptions()
{
  if ($('more-search-options').isShowingMore)
  {
    $('simple-search').style.display = 'block';
    $('advanced-search-form').style.display = 'none';
    $('more-search-options').innerHTML = 'View advanced search options';
    $('more-search-options').isShowingMore = false;
  }
  else
  {
    $('simple-search').style.display = 'none';
    $('advanced-search-form').style.display = 'block';
    $('more-search-options').innerHTML = 'Return to basic search';
    $('more-search-options').isShowingMore = true;
  }
}

function selectOptionLocation()
{
	if (document.getElementById('select-auction-artwork').length == 0) return;
	var select = document.getElementById('select-location');
	select.onchange = function() { 
		var selectedOption = this.options[this.selectedIndex];
		if (selectedOption.value!="0") {
	  	window.open(selectedOption.value, "_self", "");
	 	}
	}
}

var featurePanel = false;

function launchFeature(url)
{
  $('feature-frame').src = url;
  if (!featurePanel)
    featurePanel = new YAHOO.widget.Panel('feature-panel', { close:true, modal:true });
	$('feature-panel').style.display = 'block';
  featurePanel.hideEvent.subscribe(function() {$('feature-frame').src = ''; $('feature-panel').style.display = 'none';}, this, true);
  featurePanel.render();
  featurePanel.show();
}

var surveyPanel = false;

function launchSurvey()
{
	var surveyed = YAHOO.util.Cookie.get('surveyed');
	/* todo: remove the query string version once testing is complete */
	if (surveyed == null || getQueryStringParameter('survey') == 'true')
	{
	  if (!surveyPanel)
	    surveyPanel = new YAHOO.widget.Panel('survey-panel', { close:true, modal:true });
		$('survey-panel').style.display = 'block';
	  surveyPanel.hideEvent.subscribe(function() {$('survey-frame').src = ''; $('survey-panel').style.display = 'none';}, this, true);
	  surveyPanel.render();
	  surveyPanel.show();
		YAHOO.util.Cookie.set('surveyed', true, { expires: new Date('January 1, 2025') }); 
	}
}

var downloadPanel = false;

function openDownload(panelId)
{
  if (!downloadPanel)
    downloadPanel = new YAHOO.widget.Panel(panelId, { close: true });
	$(panelId).style.display = 'block';
  downloadPanel.hideEvent.subscribe(function() {$(panelId).style.display = 'none';}, this, true);
  downloadPanel.render();
  downloadPanel.show();
}

var collectionSearchPanel = false;

function openCollectionSearch()
{
  if (!collectionSearchPanel)
    collectionSearchPanel = new YAHOO.widget.Panel('collection-search-panel', { close:true });
	$('collection-search-panel').style.display = 'block';
  collectionSearchPanel.hideEvent.subscribe(function() {$('collection-search-panel').style.display = 'none';}, this, true);
  collectionSearchPanel.render();
  collectionSearchPanel.show();
}

function validateForm(formId)
{
  var form = $(formId);
  var fields = form.getElementsByTagName('LI');
  var errorMessage = 'The following fields must be valid:\n\n';
  var hasErrors = false;
  var emailFilter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;

  for (var i = 0; i < fields.length; i++)
  {
    var field = fields[i];
	
    if (field.className.indexOf('required') != -1 || field.className.indexOf('email') != -1)
    {
      var input = field.getElementsByTagName('INPUT')[0];
      if ((field.className.indexOf('required') != -1 && input && input.value == '') || (field.className.indexOf('email') != -1 && !emailFilter.test(input.value)))
      {
        hasErrors = true;
        var fullLabel = field.getElementsByTagName('LABEL')[0].innerHTML;
        var shortLabel = fullLabel.substring(0, fullLabel.length - 1);
        errorMessage += shortLabel + '\n';
        if (field.className.indexOf('error' == -1))
          field.className += ' error';
      }
      else
      {
        if (field.className.indexOf(' error') != -1)
          field.className = field.className.replace(' error', '');
      }
    }
  }

  if (hasErrors)
  {
    alert(errorMessage);
    return false;
  }
  else
    return true;
}

function toggleAllTypes()
{
  var checkboxes = document.getElementsByName('category');

  if ($('types-toggle').innerHTML == 'Check All')
  {
    for (var i = 0; i < checkboxes.length; i++)
      checkboxes[i].checked = true;
    $('types-toggle').innerHTML = 'Uncheck All'
  }
  else
  {
    for (var i = 0; i < checkboxes.length; i++)
      checkboxes[i].checked = false;
    $('types-toggle').innerHTML = 'Check All'
  }
}

function displayMap(e, args, me)
{
  var zoom;
  var mapLat;
  var mapLon;
  var pointLat;
  var pointLon;
  var html;

  var type = me[0];

  if (type == 'artistsGallery')
  {
    zoom = 14;
    mapLat = 37.80644420718174;
    mapLon = -122.43217706680298;
    pointLat = mapLat;
    pointLon = mapLon;
    html = '<strong>The Artists Gallery</strong><br/><address>Building A, Fort Mason Center<br/>San Francisco, CA</address><br/><a target="_blank" href="http://maps.google.com/maps?f=q&hl=en&time=&date=&ttype=&q=Fort+Mason+Center,+San+Francisco,+San+Francisco,+California,+United+States&sll=37.80531,-122.42768&sspn=0.010376,0.019119&ie=UTF8&cd=3&geocode=0,37.806440,-122.430900&ll=37.805495,-122.428143&spn=0.010376,0.019119&z=16&iwloc=addr&om=1">View large map &raquo;</a>';
  }
  else
  {
    zoom = 15;
    mapLat = 37.78828487531132;
    mapLon = -122.399582862854;
    pointLat = 37.785673362480516;
    pointLon = -122.40116000175476;
    html = '<strong>San Francisco Museum of Modern Art</strong><br/><address>151 Third Street<br/>San Francisco, CA</address><br/><a target="_blank" href="http://maps.google.com/maps?f=q&hl=en&geocode=&time=&date=&ttype=&q=San+Francisco+Museum+of+Modern+Art,+151+3rd+St,+San+Francisco,+CA&sll=37.0625,-95.677068&sspn=42.445866,78.310547&ie=UTF8&z=16&iwloc=addr&om=1">View large map &raquo;</a>';
  }

  if (GBrowserIsCompatible())
  {
    var map = new GMap2(document.getElementById('map'));
    map.setCenter(new GLatLng(mapLat, mapLon), zoom);
    map.addControl(new GSmallMapControl());
    var point = new GLatLng(pointLat, pointLon);
    var marker = new GMarker(point);
    map.addOverlay(marker);
    GEvent.addListener(marker, 'click', function()
    {
      marker.openInfoWindowHtml(html);
    });
    window.onunload = GUnload;
  }
}

function replaceMissingThumb(source)
{
	source.src = '/assets/images/ina_thumb.gif';
	source.onerror = "";
	return true;
}

function openEnews(url)
{
  var enewsWin = window.open(url, 'enewsWin', 'width=480, height=540, scrollbars=yes, resizable=yes');
}

function resizeThumbnail(image)
{
  var heightRatio = image.height / 70;
  var widthRatio = image.width / 100;

  if (widthRatio > heightRatio)
  	image.width = image.width / widthRatio;
  else
  	image.height = image.height / heightRatio;
}

function trackMedia(mediaType, mediaTitle)
{
  dcsMultiTrack('WT.ti', document.title, 'WT.cg_n', 'Multimedia', 'WT.cg_s', 'Launch: ' + mediaType + ' | ' + mediaTitle);
}

// var videoId;
// function addPlayer() {	
// 	if (videoId === undefined) {
// 	 	var brightcovePlayer = $('embedded-media').getElementsBySelector('object')[0].id;
// 		videoId = brightcovePlayer.replace(/myExperience-/,'')
// 		alert(videoId);		
// 	}
// 		var params = {};
// 		params.playerID = "1189486642001";
// 		params.playerKey="AQ~~,AAAAsKKH5Lk~,NLi44cDINh9Spq2MiVFZuMZ8P8SbGtKs";
// 		params.videoId = videoId;
// 		params.bgcolor = "#ffffff";
// 		params.width = "320";
// 		params.height = "240";
// 		params.isVid = true;
// 		params.bgcolor ="#FFFFFF";	  
// 	  params.isVid = true;
// 	  params.isUI=true;
// 	  params.dynamicStreaming=true;
// 		var player = brightcove.createElement("object");
// 		player.id = playerName;
// 		var parameter;
// 		for (var i in params) {
// 			parameter = brightcove.createElement("param");
// 			parameter.name = i;
// 			parameter.value = params[i];
// 			player.appendChild(parameter);
// 		}	
// 		var playerContainer = document.getElementById("embedded-media");	
// 		brightcove.createExperience(player, playerContainer, true);	
// }

YAHOO.util.Event.onDOMReady(setupNav, ['level-1']);
YAHOO.util.Event.onDOMReady(setupNav, ['level-2']);
YAHOO.util.Event.onDOMReady(setupNav, ['level-3']);
YAHOO.util.Event.onDOMReady(setupNav, ['level-4']);
YAHOO.util.Event.onDOMReady(setupHeaders);
YAHOO.util.Event.onDOMReady(setupDhtml);
YAHOO.util.Event.onDOMReady(selectOptionLocation);
