// ==============
// SUBNAVIGATION
// ==============
/**
 * Custom button state handler for enabling/disabling button state. 
 * Called when the carousel has determined that the previous button
 * state should be changed.
 * Specified to the carousel as the configuration
 * parameter: prevButtonStateHandler
 **/
var handlePrevButtonState = function(type, args) {
    var enabling = args[0];
    var leftImage = args[1];
    if(enabling) {
        leftImage.src = "/images/leftButton-enabled.gif";    
    } else {
        leftImage.src = "/images/empty.gif";    
    }
};

/**
 * Custom button state handler for enabling/disabling button state. 
 * Called when the carousel has determined that the next button
 * state should be changed.
 * Specified to the carousel as the configuration
 * parameter: nextButtonStateHandler
 **/
var handleNextButtonState = function(type, args) {
    var enabling = args[0];
    var rightImage = args[1];
    
    if(enabling) {
        rightImage.src = "/images/rightButton-enabled.gif";
    } else {
        rightImage.src = "/images/empty.gif";
    }
};


//===================
// FONT SIZER COOKIE
//===================
function createCookie(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=/";
}

function readCookie(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;
}

function setFontSize(dimension){
	var area = document.getElementById("container");
	area.style.fontSize = dimension;
	createCookie("fontsize", dimension, 1);
	setFontStyle(dimension);
}


//===========
// IMAGE MAP
//===========
function switchImageMap(oObject, mainImage){
	var image = document.getElementById(mainImage);		
	var stringPart = image.src.substring(0,image.src.lastIndexOf("."));
	image.src = stringPart + "_$" + oObject.id + ".gif";
}

function defaultImageMap(mainImage){
	var image = document.getElementById(mainImage);
	var name = image.src.split("_$");
	image.src = name[0] + ".gif";
}


//==================================
// TEASER HOVER EFFECT AND REDIRECT
//==================================
function setHover(field, name){
	field.className = name + ' hovered';
}
function releaseHover(field, name){
	field.className = name;
}
function redirect(url){
	if (url.match("http")) {
		window.open(url);
	}
	else {
		window.location = url;
	}
}


// ===================================
// COLLAPSABLE CONTENT ARROW SWITCHER
//====================================
function switchArrowState(oObject){
	var hrefArray= oObject.href.split("#");
	var elementId = hrefArray[1].replace("_items","");
	var element = document.getElementById(elementId);
	
	if(YAHOO.util.Dom.hasClass(element,"open")) {
		YAHOO.util.Dom.removeClass(element,"open");
		YAHOO.util.Dom.addClass(element,"close");
	}
	else {
		YAHOO.util.Dom.removeClass(element,"close");
		YAHOO.util.Dom.addClass(element,"open");
	}
}


//===================================
// OVERVIEW PAGE FACET REMOVE EFFECT
//===================================
function showRemoveFacetFilter(oObject){	
	oObject.style.background = "url(/images/delete.jpg) no-repeat right top";
}

function hideRemoveFacetFilter(oObject){
	oObject.style.background = "none";
}


//==============================================================
// CUSTOM ONCLICK EVENT FOR RESET BUTTON FINDERS (specific code)
//==============================================================
function cleanUpSubfacetBoxes(oObject, lResultWindowHeight, lSpeed){
	var resultWindow = document.getElementById(oObject.id + "-resultwindow");
	var collection = YAHOO.util.Dom.getElementsByClassName(oObject.className + "-child");
	
	oObject.selectedIndex = 0;
	
	for(var i = 0; i < collection.length; i++) {
		if(!YAHOO.util.Dom.hasClass(collection[i],"hide")){
			YAHOO.util.Dom.setStyle(collection[i] , 'opacity', '0');
			YAHOO.util.Dom.setStyle( collection[i] , 'display', 'none');
			YAHOO.util.Dom.removeClass(collection[i] , 'show');
			YAHOO.util.Dom.addClass(collection[i] , 'hide');
			resultWindow.style.height = lResultWindowHeight + "px";
			elementSqueezeAnimation(resultWindow.id, lResultWindowHeight, lSpeed);
		}
		
	}
}

//===============================================================
// ONCLICK EVENT THAT REMOVES THE DEFAULT KEYWORD OF INPUTFIELDS
//===============================================================
function cleanUpKeyword(oObject){
	oObject.value = "";
}


function validateForm(form, elementId){
	radiobuttonGroup = form.value;
	var cnt = -1;
	for (var i = radiobuttonGroup.length - 1; i > -1; i--) {
		if (radiobuttonGroup[i].checked){
			cnt = i; 
			i = -1;
		}
    }
    if (cnt > -1){
    	return true;
    }
    else{
    	document.getElementById(elementId).style.display = "block";
    	return false;
	}
}

//==================================
// GETACTIVEWIZZARDSTEP ANIMATION
//==================================
function showElement(elementId, lWidth, lSpeed){
	var collection = YAHOO.util.Dom.getElementsByClassName(elementId);
	
	for(var i = 0; i < collection.length; i++) {
		var animHeight = new YAHOO.util.Anim(collection[i], {
			width: { to: lWidth}
		}, 0, YAHOO.util.Easing.easeOut);
		animHeight.duration = lSpeed;
		animHeight.animate();
		
		var animOpacity = new YAHOO.util.Anim(collection[i], {   
			opacity: { to: 1 }    
		}, 0, YAHOO.util.Easing.easeOut);
		animOpacity.duration = 1;
		animOpacity.animate();
		YAHOO.util.Dom.setStyle(collection[i], 'display', 'block');
	}	
}

function hideElement(elementId, lWidth, lSpeed){
	var collection = YAHOO.util.Dom.getElementsByClassName(elementId);
	
	for(var i = 0; i < collection.length; i++) {
		var animHeight = new YAHOO.util.Anim(collection[i], {
			width: { to: lWidth}
		}, 0, YAHOO.util.Easing.easeIn);
		animHeight.duration = lSpeed;
		animHeight.animate();
		
		var animOpacity = new YAHOO.util.Anim(collection[i], {   
			opacity: { to: 0 }    
		}, 0, YAHOO.util.Easing.easeOut);
		animOpacity.duration = 1;
		animOpacity.animate();
	}	
	setTimeout("history.back();", lSpeed * 1000);
}

//================================
// ANIMATED RELATED ITEM SELECTOR
//================================
function getRelatedItem(oObject, lResultWindowHeight, lSpeed){
	var bHeightSet = true;
	var resultWindow = document.getElementById(oObject.id + "-resultwindow");
	var oObjValue = oObject.options[oObject.selectedIndex].value
	
	if (resultWindow.offsetHeight < lResultWindowHeight)
	{
		bHeightSet = false;
	}
	
	if(oObjValue != "default")
	{
		disableElement(oObject.id);
	}
	
	var collection = YAHOO.util.Dom.getElementsByClassName(oObject.className + "-child");
	
	for(var i = 0; i < collection.length; i++) {
		YAHOO.util.Dom.setStyle(collection[i] , 'opacity', '0');
		YAHOO.util.Dom.setStyle( collection[i] , 'display', 'none');
		YAHOO.util.Dom.removeClass(collection[i] , 'show');
		YAHOO.util.Dom.addClass(collection[i] , 'hide');
	}
	YAHOO.util.Dom.setStyle(resultWindow , 'height', '0');

	if (bHeightSet == false)
	{
		if(oObject.id != "default")
		{
			elementGrowAnimation(resultWindow.id, lResultWindowHeight, lSpeed);
			YAHOO.util.Dom.removeClass(document.getElementById(oObject.id + "-" + oObjValue) , 'hide');
			YAHOO.util.Dom.addClass(document.getElementById(oObject.id + "-" + oObjValue) , 'show');
			setTimeout("elementOpacityAnimation('" + oObject.id + "-" + oObjValue + "')", lSpeed * 1000);
			setTimeout("enableElement('" + oObject.id + "')", lSpeed * 1000);	
		}
	}
	else
	{
		if(oObjValue != "default")
		{
			var collection = YAHOO.util.Dom.getElementsByClassName(oObject.className + "-child");
			for(var i = 0; i < collection.length; i++) {
				YAHOO.util.Dom.removeClass(collection[i] , 'show');
			}
			resultWindow.style.height = lResultWindowHeight + "px";
			YAHOO.util.Dom.removeClass(document.getElementById(oObject.id + "-" + oObjValue) , 'hide');
			YAHOO.util.Dom.addClass(document.getElementById(oObject.id + "-" + oObjValue) , 'show');
			elementOpacityAnimation(oObject.id + "-" + oObjValue);
			setTimeout("enableElement('" + oObject.id + "')", (lSpeed/2) * 1000);
		}
		else
		{
			resultWindow.style.height = lResultWindowHeight + "px";
			elementSqueezeAnimation(resultWindow.id, lResultWindowHeight, lSpeed);
		}
	}
}

// Effects:
function disableElement(elementId)
{
	var oObj = document.getElementById(elementId);
	oObj.disabled = "disabled";
}

function enableElement(elementId)
{
	var oObj = document.getElementById(elementId);
	oObj.disabled = "";
}

function elementGrowAnimation(element, lHeight, lSpeed)
{
	var animHeight = new YAHOO.util.Anim(element, {
		height: { to: lHeight}
		}, 0, YAHOO.util.Easing.easeOut);
	animHeight.duration = lSpeed;
	animHeight.animate();
}

function elementSqueezeAnimation(element, lHeight, lSpeed)
{
	var animHeight = new YAHOO.util.Anim(element, {
		height: { to: 0}
		}, lHeight, YAHOO.util.Easing.easeOut);
	animHeight.duration = lSpeed/2;
	animHeight.animate();
}

function elementOpacityAnimation(element)
{
	var animOpacity = new YAHOO.util.Anim(element, {   
		opacity: { to: 1 }    
		}, 0, YAHOO.util.Easing.easeOut);
	animOpacity.duration = 1;
	animOpacity.animate();
	YAHOO.util.Dom.setStyle(document.getElementById(element) , 'display', 'block');
}


//=======================================================
// Send info of the form in querystring to the right url
//=======================================================
function sendFacetInfo(destinationUrl, searchElementId, extraUrlParams){
	var showCollection = YAHOO.util.Dom.getElementsByClassName("show");
	var hideCollection = YAHOO.util.Dom.getElementsByClassName("hide");
	var searchElement = document.getElementById(searchElementId);
	var defaultSearchElementValue = searchElement.title;
	var defaultFacetValue;
	var facetValue = "";
	var searchValue = "";
	var facetQueryString = "";
	var searchQueryString = "";
	var questionString = "";
	var ampString = "";
	var extraAmpString = "";
	
	if (showCollection != 0){
		defaultFacetValue = showCollection[0].options[0].value;
	}
	else {
		defaultFacetValue = hideCollection[0].options[0].value;
	}
		
	for(var i = 0; i < showCollection.length; i++) {
		facetValue = showCollection[i].options[showCollection[i].selectedIndex].value;
	}
	
	searchValue = searchElement.value;

	if (facetValue != defaultFacetValue && facetValue != ""){
		facetQueryString = "f=" + facetValue;
	}
	if (searchValue != defaultSearchElementValue && searchValue != "") {
		searchQueryString = "s=" + searchValue;
	}
	if (facetQueryString != "" || searchQueryString != "" || extraUrlParams != ""){
		questionString = "?";
	}
	if (facetQueryString != "" && searchQueryString != ""){
		ampString = "&";
	}
	if ((facetQueryString != "" || searchQueryString != "") && extraUrlParams != ""){
		extraAmpString = "&";
	}
	
	window.location = destinationUrl + questionString + facetQueryString + ampString + searchQueryString + extraAmpString + extraUrlParams;
}


//=============
// Google maps
//=============
var map = null;
var geocoder = null;

function initialize(address) {
      if (GBrowserIsCompatible()) {
        map = new GMap2(document.getElementById("map_canvas"));
        map.setCenter(new GLatLng(37.4419, -122.1419), 12);
		var mapControl = new GMapTypeControl();
        map.addControl(mapControl);
        map.addControl(new GSmallMapControl());

        geocoder = new GClientGeocoder();
		geocoder.getLatLng(
          address,
          function(point) {
            if (!point) {
              alert(address + " not found");
            } else {
              map.setCenter(point, 12);
              var marker = new GMarker(point);
              map.addOverlay(marker);
              marker.openInfoWindowHtml(address);
            }
          }
        );
		
      }
}