
var EventUtil = {
	addHandler: function(element, type, handler) {
		if (element.addEventListener) {
			element.addEventListener(type, handler, false);
		}
		else if (element.attachEvent) {
			element.attachEvent('on' + type, handler);
		}
		else {
			element['on' + type] = handler;
		}
	},
	getTarget: function(e) {
		return e.target || e.srcElement;
	},
	preventDefault: function (e) {
		if (e.preventDefault) {
			e.preventDefault();
		}
		else {
			e.returnValue = false;
		}
	}
};

var sfpl = sfpl || {};

sfpl.ajax = (function() {
	var xhr = {};
	
	if (window.XMLHttpRequest) {
		xhr = new XMLHttpRequest();
	}
	else if (window.ActiveXObject) {
		xhr = new ActiveXObject("Microsoft.XMLHTTP");
	}
	
	return {
		request: function(url, callback) {
			xhr.onreadystatechange = function() {
				if (xhr.readyState == 4 && xhr.status == 200) {
					callback(xhr);
				}
			};
			xhr.open('GET', url, true);
			xhr.send('');
			
			if (xhr.readyState < 4) {
				return; // not ready yet
			}
			if (xhr.status !== 200) {
				return 'Error!'; // the HTTP status code is not OK
			}
		}
	};
})();

sfpl.eventList = function(seriesID, target) {
	var lang = document.location.toString().split('pg')[1].substr(10,1);
	var url = '/html/ajax/eventList.php?s=' + seriesID + '&l=' + lang;
	var t = target;
	var xhr = sfpl.ajax.request(url, function(o) {
		document.getElementById(target).innerHTML = o.responseText;
	});
};

sfpl.chicklets = function(target) {
	if (typeof target !== 'undefined' && document.getElementById(target)) {
		var target = document.getElementById(target);
	}
	else if (document.getElementById('copy')) {
		var target = document.getElementById('copy');
	}
	else {
		return false;
	}
	
	var currURL = document.location;
	var floatProp = '';
	var chicklets = {
		google: {
			pos: 336, 
			url: 'http://www.google.com/bookmarks/mark?op=add&bkmk=',
			title: 'Bookmark with Google'
		},
		yahoo: {
			pos: 512, 
			url: 'http://bookmarks.yahoo.com/myresults/bookmarklet?t=',
			title: 'Bookmark with Yahoo'
		},
		facebook: {
			pos: 240,
			url: 'http://www.facebook.com/sharer.php?u=',
			title: 'Share on Facebook'
		},
		delicious: { 
			pos: 176,
			url: 'http://del.icio.us/post?url=',
			title: 'Bookmark on delicious'
		},
		twitter: {
			pos: 784,
			url: 'http://twitter.com/home?status=',
			title: 'Tweet this on Twitter'
		},
		digg: {
			pos: 192,
			url: 'http://digg.com/submit?phase=',
			title: 'Share on Digg'
		},
		email: {
			pos: 224,
			url: mailpage(),
			title: 'Email to a friend'
		}
	}
	
	if (document.all) {
		floatProp = 'styleFloat';
	}
	else {
		floatProp = 'cssFloat';
	}
	
	for (i in chicklets) {
		var c = document.createElement('a');

		// this first group can eventually be replace with c.className = 'chicklet';
		c.style[floatProp] = 'left';
		c.style.margin = '0 10px 0 0';
		c.style.width = '16px';
		c.style.height = '16px';
		c.style.backgroundImage = 'url("/images/calendar/graphics/widget.gif")';
		c.style.backgroundRepeat = 'no-repeat';
		
		// these need to be set per chicklet
		c.style.backgroundPosition = '0px -' + chicklets[i].pos + 'px';
		c.href = chicklets[i].url + currURL;
		c.title = chicklets[i].title;
		
		target.appendChild(c);
	}
	function mailpage() {
		mail_str = "mailto:?subject=Check out this event: " + document.title;
		mail_str += "&body= Here is the URL: ";
		return mail_str;
	}
};

sfpl.keynoteImage = function(src, alt) {
	if (src && alt) {
		var col = document.getElementById('column');
		var tools = document.getElementById('tools');
		var keynote = document.createElement('div');
		var logo = document.createElement('img');
		
		logo.src = src;
		logo.alt = alt;
		keynote.appendChild(logo);
		keynote.id = 'keynote';
		col.insertBefore(keynote, tools);
	}
};

sfpl.styles = (function() {
	return {
		attach: function (url) {
			var url = url || '/styles/styles.css';
			var styleSheet = document.createElement('link');
			var head = document.getElementsByTagName('head')[0];
			
			styleSheet.rel = 'stylesheet';
			styleSheet.type = 'text/css';
			styleSheet.href = url;
			head.appendChild(styleSheet);
		}
	};
})();

sfpl.rssIcon = function(url) {
	if (document.getElementById('tools')) {
		var tools = document.getElementById('tools').getElementsByTagName('a');
		var rss = tools[tools.length-1];
		
		var feedLink = document.createElement('link');
		var head = document.getElementsByTagName('head')[0];
		
		rss.href = url;
		rss.style.display = '';
		
		feedLink.rel = 'alternate';
		feedLink.title = 'Subscribe to RSS feed';
		feedLink.href = url;
		feedLink.type = 'application/rss+xml';
		head.appendChild(feedLink);
	}
};

sfpl.gallery = (function() {
	return {
		removeEmptyRows: function() {
			if (document.getElementById('contacts')) {
				var contactTable = document.getElementById('contacts');
				var contactRows = contactTable.getElementsByTagName('tr');
				var row, cells;
				var emptyRow = true;
				
				
				for (var i = contactRows.length - 1; i >= 0 ; i--) {
					emptyRow = true;
					row = contactRows[i];
					cells = row.getElementsByTagName('td');
				   
					for (var j = cells.length-1; j >= 0; j--) {
						if (cells[j].getElementsByTagName('a')[0]) {
							emptyRow = false;
							break;
						}
						else {
							cells[j].style.backgroundColor = '#ffffff';
						}
					}
				   
					if (emptyRow) {
						row = contactTable.getElementsByTagName('tr')[i];
						row.parentNode.removeChild(row);
					}
				}
			}
		}
	};
})();

sfpl.validate = function(form) {
	var formName = form.title;
	var forms = {
		classic: {
			defaultText: 'Search catalog',
			searchField: 'searcharg',
			url: 'http://sflib1.sfpl.org'
		},
		encore: {
			defaultText: 'Explore Catalog',
			searchField: 'target',
			url: 'http://encore.sfpl.org/iii/encore/'
		},
		photos: {
			defaultText: 'Search photos',
			searchField: 'searcharg',
			url: 'http://sflib1.sfpl.org:82'
		}
	};
	
	if (typeof forms[formName] !== 'undefined') {
		if (form[forms[formName].searchField].value === forms[formName].defaultText || form[forms[formName].searchField].value === '') {
			window.location = forms[formName].url;
			return false ;
		}
		else {
			return true;
		}
	}
};

sfpl.toggle = function(elemId) {
	if (document.getElementById(elemId)) {
        var target = document.getElementById(elemId);
        if(target.style.display == 'none') {
        	target.style.display = '';
        }
        else {
        	target.style.display = 'none';
        }
    }
}

sfpl.trackEvent = function(e) {
	var target = EventUtil.getTarget(e);
	if (target.tagName.toLowerCase() === 'a') {
		var category = '';
		var action = '';
		var label = '';
		
		if (target.className === 'db') {
			category = 'Articles and Databases';
			action = (target.rel) ? target.rel : 'unknown db category';
			label = target.innerHTML.replace(/(<([^>]+)>)/ig,'');
		}
		else if (target.href.search(/sfpl.org/i) > -1) {
			category = 'internal';
			
			if (target.href.search(/.pdf$/i) > -1) {
				category = 'Downloads';
				action = (target.rel) ? target.rel : 'PDF';
				label = target.innerHTML.replace(/(<([^>]+)>)/ig,'');
			}
		}
		else {
			category = 'External Links';
			action = (target.rel) ? target.rel : target.innerHTML.replace(/(<([^>]+)>)/ig,'');
			label = target.href;
		}
		
		if (category !== 'internal') {
			_gaq.push(['_trackEvent', category, action, label]);
		}
	}
}

sfpl.require = function(source) {
	document.write('<scr' + 'ipt type="text/javascript" src="' + source + '" ></scr' + 'ipt>');
};

sfpl.video = function(path, config) {
	var playerPath = '/video/players/jwplayer.5.7/';
	sfpl.require(playerPath + 'jwplayer.js');
	
	var imagePath = path.split('.')[0] + '.jpg';
	var captionsPath = path.split('.')[0] + '.srt';
	
	var settings = {
		skin: playerPath + 'skins/beelden.zip',
		stretching: 'fill',
		flashplayer: playerPath + 'player.swf',
		image: '/images/video/splash.jpg',
		width: '450',
		height: '338',
		file: path,
		autostart: false
	};
	
	if (typeof config !== 'undefined') {
		for (prop in config) {
			if (config.hasOwnProperty(prop)) {
				switch (prop) {
					case 'skin':
						settings['skin'] = playerPath + 'skins/' + config[prop] + '.zip';
						break;
					case 'captions':
						settings['plugins'] =  {
							'captions-2': {
								'file': captionsPath
							}
						};
						break;
					default:
						settings[prop] = config[prop];
						break;
				}
				
			}
		}
	}
	
	var player = document.createElement('div');
	player.id = 'mediaplayer';
	
	var container = document.createElement('div');
	container.appendChild(player);
	
	document.write(container.innerHTML);
	
	EventUtil.addHandler(window, 'load', function() {
		if (settings.image === '/images/video/splash.jpg') {
			sfpl.ajax.request('/html/ajax/checkIfFileExists.php?path=' + encodeURIComponent(imagePath), function(xhr) {
				if (xhr.responseText == 1) {
					settings.image = imagePath;
				}
				jwplayer('mediaplayer').setup(settings);
			});
		}
		else {
			jwplayer('mediaplayer').setup(settings);
		}
	});
};

//
function cleanValue (which) {
	return which.replace("'","");
}

//

function isDate(theValue, nullAcceptable){
	if (theValue != ''){
		var parts = theValue.split('-');
		var illegalChars = /\D/; // only numbers
		if ((illegalChars.test(parts[0])) || (illegalChars.test(parts[1])) || (illegalChars.test(parts[2]))) {
			return false;
		} else {
			if ((parts[0] < 2009) || (parts[1] > 12) || (parts[2] > 31)){
				return false;
			} else {
				return true;
			}
		}
	} else {
		if (nullAcceptable) {
			return true;
		} else {
			return false;
		}
	}
}

//

function isNumber(theValue, nullAcceptable){
	if (theValue != ''){
		var illegalChars = /\D/; // only numbers
		if (illegalChars.test(theValue)) {
			return false;
		} else {
			return true;
		}
	} else {
		if (nullAcceptable) {
			return true;
		} else {
			return false;
		}
	}

}

//

function isAddress(theValue){
	if (theValue != ''){
		var addressPattern = /^.+@.+\..{2,3}$/;
		if (!(addressPattern.test(theValue))) { 
		  return false;
		} else {
			var illegalChars = /[\(\)\<\>\,\;\:\\\/\[\]]/;
			if (theValue.match(illegalChars)) {
				return false;
			} else {
				return true;
			}
		} 
	} else {
		return false;
	}
}

//

function setRequestButton(){
	var buttonOn = false;
	var goodName = (document.getElementById("event_title").value != '');
        var roomUse = (document.getElementById("room_use").value != '');
	if ((goodName) && (roomUse)){
		var goodSponsor = (document.getElementById("group_name").value != '');
		if (goodSponsor){
			var goodDescription = (document.getElementById("purpose_event").value != '');
			if (goodDescription){
				var goodDate = (document.getElementById("r_date").value != '');
				if (goodDate){
					var goodAttendees = (document.getElementById("attendees").value != '');
					if (goodAttendees){
						var goodRequestor = (document.getElementById("contact1").value != '');
						if (goodRequestor){
							var goodEmail = (document.getElementById("email1").value != '');
							if (goodEmail){
								var goodPhone = (document.getElementById("phone1").value != '');
								if (goodPhone){
									var buttonOn = true;
								}
							}
						}
					}
				}
			}
		}
	}
	if (buttonOn){
		return true;
	} else {
		return false;
	}
}

//

function setRegisterButton(){
	var buttonOn = false;
	var goodName = (document.getElementById("name").value != '');
	if (goodName){
		var goodMail = (document.getElementById("email").value != '');
		if (goodMail){
			var goodDescription = (document.getElementById("description").value != '');
			if (goodDescription){
				var goodDate = (document.getElementById("phone").value != '');
				if (goodDate){
					var buttonOn = true;
				}
			}
		}
	}
	if (buttonOn){
		return true;
	} else {
		return false;
	}
}

//

function validateDate(theField){
	if (isDate(theField.value, false)){
		theField.className -= ' problem';
		return true;
	} else {
		alert('Please enter a valid date in yyyy-mm-dd format.');
		theField.focus();
		theField.className += ' problem';
		return false;
	}
}


function validateAttendees(theField, possible){
	if (isNumber(theField.value, false)){
		// o.k...
		if (theField.value <= possible){
			theField.className -= ' problem';
		} else {
			alert('Attendees exceed room capacity, please check entry.');
			theField.focus();
			theField.className += ' problem';
		}
	} else {
		alert('Please enter a valid number of attendees.');
		theField.focus();
		theField.className += ' problem';
	}
}

function validateEmail(theField){
	if (isAddress(theField.value)){
		// o.k...
		theField.className -= ' problem';
	} else {
		alert('Please enter a valid email address.');
		theField.focus();
		theField.className += ' problem';
	}
}

function setRequestForm () {

	if (validateDate(document.getElementById("r_date"))){
		if (document.getElementById("parent_id").value > 0){
	
			var duration = document.getElementById("duration").options[document.getElementById("duration").selectedIndex].value;
			if (duration > 0){
				document.getElementById('spamfilter').value = 1;
				requestRoom(duration);
			}
		} 
		
	}
	
	return true;
	
}

function windowShade(divLoc, wdth, hght) {
	div_vis = document.getElementById(divLoc).style.visibility;
	if (div_vis == "visible") {
		document.getElementById(divLoc).style.width = wdth;
    		document.getElementById(divLoc).style.height = 0;
   		document.getElementById(divLoc).style.visibility = "hidden";
   	} else if (div_vis == "hidden") {
		document.getElementById(divLoc).style.width = wdth;
    		document.getElementById(divLoc).style.height = hght;
   		document.getElementById(divLoc).style.visibility = "visible";
   	}
}

function requestRoom(duration){
	which = document.getElementById('parent_id').value;
	theDate = document.getElementById('r_date').value;
	el = document.getElementById('the-Options');
	if ((which != '0') && (theDate != '') &&(duration != '')){
		el.innerHTML = '';
		theURL = 'http://sfpl.org/xml/booking.xml.php?id='+which+'&duration='+duration+'&date='+theDate;
		ajaxRequest(theURL);
	}
}

function ajaxRequest(file){
  var xmlObj = null;
  if(window.XMLHttpRequest){
      xmlObj = new XMLHttpRequest();
  } else if(window.ActiveXObject){
      xmlObj = new ActiveXObject("Microsoft.XMLHTTP");
  } else {
      return;
  }
  xmlObj.onreadystatechange = function(){
    if(xmlObj.readyState == 4){
       updateOptions('the-Options', xmlObj.responseXML.getElementsByTagName('data')[0].firstChild.data);
     }
    }
    xmlObj.open('GET', file, true);
    xmlObj.send('');
  }
  
  
function updateOptions(obj, data){
	var myString = data;
	if (myString.substr(0,1) == '!'){
		alert(myString.substring(1));
	} else {
		var possibles = myString.split("*");
		var html = '<select id="times" name="the-times" class="select" onchange="setTime();">';
		for (i=0;i<possibles.length;i++){
			pieces = possibles[i].split("^");
			html += '<option value="'+pieces[0]+'">'+pieces[1]+'</option>';
		}
		html += '</select>';
		document.getElementById(obj).innerHTML = html;
		// check to see if we need default times...
	//	if (document.getElementById('opentime').value == ''){
				theVals = possibles[0].split("^");
				defaults = theVals[0].split("-");
				document.getElementById('opentime').value = defaults[0];
				document.getElementById('closetime').value = defaults[1];
	//	}
	//	document.getElementById('options').style.display = 'block';
	}
 }




function maxHeight() {
  var h=0;
  if (window.document.innerHeight>h)
   h=window.document.innerHeight;
  if (window.document.documentElement.clientHeight>h)
   h=window.document.documentElement.clientHeight;
  if (window.document.body.clientHeight>h)
   h=window.document.body.clientHeight;
  return h;
 }
function maxWidth() {
  var w=0;
  if (window.document.innerWidth>w)
   w=window.document.innerWidth;
  if (window.document.documentElement.clientWidth>w)
   w=window.document.documentElement.clientWidth;
  if (window.document.body.clientWidth>w)
   w=window.document.body.clientWidth;
  return w;
 }

function hideScreen(){
	var thisone=parent.document.getElementById("easel");
	thisone.style.display = 'none';
	var thisone=parent.document.getElementById("canvas");
	thisone.style.display = 'none';
	var thisone=parent.document.getElementById("rm");
	thisone.style.overflow = 'visible';
}

function reservationDialog(){
	var theFolks = document.getElementById("rm");
	theFolks.style.overflow = 'scroll';
	var thisone=document.getElementById("easel");
	thisone.style.display = 'block';
	var thisone=document.getElementById("canvas");
	thisone.style.display = 'block';
	var thisone=document.getElementById("canvas");
	thisone.style.top = '60px';
	thisone.style.left = ((maxWidth()-600)/2) + 'px';
	thisone.style.display = 'block';
	document.getElementById("room_use").focus();
}

function registrationDialog(){
	var theFolks = document.getElementById("ev");
	theFolks.style.overflow = 'hidden';
	var thisone=document.getElementById("easel");
	thisone.style.display = 'block';
	var thisone=document.getElementById("canvas");
	thisone.style.display = 'block';
	var thisone=document.getElementById("canvas");
	thisone.style.top = '60px';
	thisone.style.left = ((maxWidth()-600)/2) + 'px';
	thisone.style.display = 'block';
	document.getElementById("name").focus();
}

function showSearch(which){
	document.getElementById('encore').style.display = 'none';
	document.getElementById('classic').style.display = 'none';
	document.getElementById('site').style.display = 'none';
	document.getElementById(which).style.display = 'block';
}

function revealDivContents(divLoc) {
	if(document.getElementById(divLoc).style.display == 'none'){
   		document.getElementById(divLoc).style.display = 'block';
        } else {
   		document.getElementById(divLoc).style.display = 'none';
	}
}

function setActiveStyleSheet(title) {
  var i, a, main;
  for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
    if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title")) {
      a.disabled = true;
      if(a.getAttribute("title") == title) a.disabled = false;
    }
  }
}

function getActiveStyleSheet() {
  var i, a;
  for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
    if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title") && !a.disabled) return a.getAttribute("title");
  }
  return 'mediumtext';
}

function getPreferredStyleSheet() {
  var i, a;
  for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
    if(a.getAttribute("rel").indexOf("style") != -1
       && a.getAttribute("rel").indexOf("alt") == -1
       && a.getAttribute("title")
       ) return a.getAttribute("title");
  }
  return null;
}

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 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 textSizeLoad(){
  var cookie = readCookie("fontsize");
  var title = cookie ? cookie : getPreferredStyleSheet();
  setActiveStyleSheet(title);
}

function textSizeUnload(){
  var title = getActiveStyleSheet();
  createCookie("fontsize", title, 365);
}

var cookie = readCookie("fontsize");
var title = cookie ? cookie : getPreferredStyleSheet();
setActiveStyleSheet(title);

var t;

function rollSpotlights(which,lang,limit){
	if (which < limit){
		target = which + 1;
	} else {
		target = 1;
        }

        updateSpotlight(which,lang);
	t=setTimeout("rollSpotlights("+target+","+lang+","+limit+");",8000);
}

function visitLibrary(lang){
	
	var which = document.getElementById('libraries').options[document.getElementById('libraries').selectedIndex];
	var el = document.getElementById('theLibrary');
	var theURL = 'http://sfpl.org/xml/library.htm.php?id=' + which.value + '&lang=' + lang;
	
	el.innerHTML = '';
	
	sfpl.ajax.request(theURL, function(xhr){
		el.innerHTML = xhr.responseText;
	});
}

function updateSpotlight(which,lang){
	clearTimeout(t);
	el = document.getElementById('spotlight');
	el.innerHTML = '';
	fadeBalloon('0');
	theURL = 'http://sfpl.org/xml/spotlight.xml.php?which='+which+'&lang='+lang;

//	theURL = './xml/spotlight.xml.php?which='+which+'&lang='+lang;
// 	echo $_SERVER['SERVER_NAME'];
// 	$_SERVER['HTTP_HOST']
	ajaxSpotlight(theURL);
}

function ajaxSpotlight(file){
  var xmlObj = null;
  if(window.XMLHttpRequest){
      xmlObj = new XMLHttpRequest();
  } else if(window.ActiveXObject){
      xmlObj = new ActiveXObject("Microsoft.XMLHTTP");
  } else {
      return;
  }

  xmlObj.open('GET', file, true);
  xmlObj.onreadystatechange = function(){
    if(xmlObj.readyState == 4 && xmlObj.status == 200){
    	var newXML = xmlObj.responseXML;
        var name = newXML.getElementsByTagName("data");
        var nameText = name[0].firstChild.nodeValue;
	updateSpotlightObj('spotlight', nameText);
	}
    }

    xmlObj.send('');
  }

function updateSpotlightObj(obj, data){
	var html = data;
	html =  replaceAll(html, "[", "<");
	html =  replaceAll(html, "]", ">");

	document.getElementById(obj).innerHTML = html;
	launchBalloon('25');
}


function ajaxRead(file){
  var xmlObj = null;
  if(window.XMLHttpRequest){
      xmlObj = new XMLHttpRequest();
  } else if(window.ActiveXObject){
      xmlObj = new ActiveXObject("Microsoft.XMLHTTP");
  } else {
      return;
  }
  xmlObj.onreadystatechange = function(){
    if(xmlObj.readyState == 4){
       updateObj('theLibrary', xmlObj.responseXML.getElementsByTagName('data')[0].firstChild.data);
     }
    }
    xmlObj.open('GET', file, true);
    xmlObj.send('');
  }

 function setTime(){
	which = document.getElementById('times').options[document.getElementById('times').selectedIndex].value;
		defaults = which.split("-");
		document.getElementById('opentime').value = defaults[0];
		document.getElementById('closetime').value = defaults[1];
}

  
  
function updateObj(obj, data){
  var myString = data;
  var obs = myString.split("+");
  var imgRef = obs[0];
  var street = obs[1];
  var address = obs[2];
  var phone = obs[3];
  var locationLink = obs[7];
  var eventLink = obs[8];
  var linkLabel = obs[9];
  var html = "<dl><dt><img src='./images/locations/thumbs/"+imgRef+".jpg' width='140' height='80' style='float:left;' alt='Library thumbnail' /></dt><dd>"+street+"<br/>"+address+"<br/>"+phone+"<br/><a href='index.php?pg="+locationLink+"'>"+linkLabel+"</a></dd></dl>";
html =  replaceAll(html, "[", "<");
html =  replaceAll(html, "]", ">");
html =  replaceAll(html, "^", "&");

var table = obs[4] + "";

table =  replaceAll(table, "[", "<");
table =  replaceAll(table, "]", ">");
table =  replaceAll(table, "^", "&");

obs[5] =  replaceAll(obs[5] , "^", "&");
obs[6] =  replaceAll(obs[6], "^", "&");

html += table  + obs[5] + "<br/>" + obs[6];
document.getElementById(obj).innerHTML = html;
  }
  
  
function replaceAll(string, pcFrom, pcTo){


var c = string;
var i = c.indexOf(pcFrom);

 

while (i > -1){

c = c.replace(pcFrom, pcTo);

i = c.indexOf(pcFrom);

}

return c;

}
  
  function str_replace_reg(haystack, needle, replacement) {
	var r = new RegExp(needle, 'g');
	return haystack.replace(r, replacement);
}
  
 // unused xml scripts

 function imageClear(){
	el = document.getElementById('xmlobj');
//	el.style.display = 'none';
//	document.getElementById('xmlobj').innerHTML = '';
 outOfBounds = true;
var t=setTimeout("lastOneOut();",200);
}
  
var outOfBounds = true;
  
 
 function fadeBalloon(theAlpha){
	el = document.getElementById('spotlight');
	el.className = "alpha_"+theAlpha;
	
	
	if (theAlpha == '75'){
		var t=setTimeout("fadeBalloon('50');",30);
	} else {
		if (theAlpha == '50'){
			var t=setTimeout("fadeBalloon('0');",30);
		} else {
			if (theAlpha == '25'){
				var t=setTimeout("fadeBalloon('0');",30);
			} else {
			//	var t=setTimeout("fadeBalloon('0');",10);
			}
		}
	}
 }
 
 function launchBalloon(theAlpha){
	el = document.getElementById('spotlight');
	el.className = "alpha_"+theAlpha;
	
	
	if (theAlpha == '75'){
		var t=setTimeout("launchBalloon('100');",25);
	} else {
		if (theAlpha == '50'){
			var t=setTimeout("launchBalloon('75');",25);
		} else {
			if (theAlpha == '25'){
				var t=setTimeout("launchBalloon('50');",25);
			} else {
			//	var t=setTimeout("fadeBalloon('0');",10);
			}
		}
	}
 }
 
  
function lastOneOut(){
	if (outOfBounds){
		fadeBalloon('75');
	}
} 


function changeDay(which){
	document.getElementById('d1').value = which;
	document.calendar.submit();
}

function nextMonth(){
	var which = document.getElementById('m1').value;

	if (which < 12) {
		document.getElementById('m1').value = (1 * which) + 1;
	}
	else {
		document.getElementById('m1').value = 1;
		document.getElementById('y1').value = (document.getElementById('y1').value * 1) + 1;
	}
	
	document.getElementById('mode').value = 'month';
	document.calendar.submit();
}

function previousMonth(){
	var which = document.getElementById('m1').value;
	
	if (which > 1) {
		document.getElementById('m1').value = which - 1;
	}
	else {
		document.getElementById('m1').value = 12;
		document.getElementById('y1').value = document.getElementById('y1').value - 1;
	}
	
	document.getElementById('mode').value = 'month';
	document.calendar.submit();
}

function changeMode(which){
	switch (which){
		case 1:
		document.getElementById('mode').value = 'all';
		break;

		case 2:
		document.getElementById('mode').value = 'month';
		break;

		case 3:
		document.getElementById('mode').value = 'week';
		break;

		case 4:
		document.getElementById('mode').value = 'day';
		break;
	
	}

document.calendar.submit();
}

var map = null;
var geocoder = null;

function initialize() {
	if (GBrowserIsCompatible()) {
	map = new GMap2(document.getElementById("map_canvas"));
	//     map.setCenter(new GLatLng(37.4419, -122.1419), 13);
	geocoder = new GClientGeocoder();
	}
}

function showAddress(address) {
	if (geocoder) {
	geocoder.getLatLng(
	  address,
	  function(point) {
		if (!point) {
		window.status = address + " not found";
		} else {
		  map.setCenter(point, 15);
		  var marker = new GMarker(point);
		  map.addOverlay(marker);
		 // marker.openInfoWindowHtml(address);
		}
	  }
	);
}
}



function openDefault (which, theDefault) {
	if (which.value == theDefault){
		which.value = '';
		which.style.color = '#000000';	
		which.style.fontStyle = 'normal';	
	}
}
//
function closeDefault (which, theDefault) {
	if (which.value == ''){
		which.value = theDefault;
		which.style.color = '#999999';	
		which.style.fontStyle = 'italic';	
	} else {
		which.style.color = '#000000';	
		which.style.fontStyle = 'normal';	
	//	which.value = cleanValue(which.value);
	}
}
//



//

function removeDefault (which, theDefault) {
	if (which.value == theDefault){
		which.value = '';
		which.style.color = '#000000';	
		which.style.fontStyle = 'normal';	
	}
}
//
function addDefault (which, theDefault) {
	if (which.value == ''){
		which.value = theDefault;
		which.style.color = '#999999';	
		which.style.fontStyle = 'italic';	
	}
}

//


sfHover = function() {
	var sfEls = document.getElementById("collect_menu").getElementsByTagName("LI");
	for (var i=0; i<sfEls.length; i++) {
		sfEls[i].onmouseover=function() {
			this.className+=" sfhover";
		}
		sfEls[i].onmouseout=function() {
			this.className=this.className.replace(new RegExp(" sfhover\\b"), "");
		}
	}
}

if (window.attachEvent) window.attachEvent("onload", sfHover);

//

function checkform ( form )
{
  // ** START **
  if (form.searcharg.value == "") {
    window.location = "http://sflib1.sfpl.org";
    return false;
  }
  // ** END **
  return true ;
}

EventUtil.addHandler(window, 'load', function(){
	var cookie = readCookie("fontsize");
	var title = cookie ? cookie : getPreferredStyleSheet();
	setActiveStyleSheet(title);
	
	var collectMenu = document.getElementById('collect_menu');
	if (collectMenu) {
		EventUtil.addHandler(collectMenu, 'click', function(e){
			var target = EventUtil.getTarget(e);
			if (target.tagName.toLowerCase() === 'a') {
				var label = EventUtil.getTarget(e).innerHTML.replace(/\&amp;/g,'&');
				_gaq.push(['_trackEvent', 'UI', 'Main Menu', label]);
			}
		});
	}
	
	var searchOptions = document.getElementById('menu-li11');
	if (searchOptions) {
		EventUtil.addHandler(searchOptions, 'click', function(e){
			var target = EventUtil.getTarget(e);
			if (target.tagName.toLowerCase() === 'a') {
				var label = EventUtil.getTarget(e).innerHTML;
				_gaq.push(['_trackEvent', 'UI', 'Search Options', label]);
			}
		});
	}
	
	var content = document.getElementById('content');
	if (content) {
		EventUtil.addHandler(content, 'click', sfpl.trackEvent);
	}
});

EventUtil.addHandler(window, 'unload', function(){
	var title = getActiveStyleSheet();
	createCookie("fontsize", title, 365);
});


