function printObject(o) {
  var out = '';
  for (var p in o) {
    out += p + ': ' + o[p] + '\n';
  }
  alert(out);
}
function log(string) {  
  if (window.console && window.console.firebug) {
    console.log(string);
  } else {
		alert(string);
	}
	
}



$(document).ready(function(){

  function doAjax(url,msg,container){
    // if the URL starts with http
    if(url.match('^http')){
      // assemble the YQL call
      msg.removeClass('error');
      msg.html(' (loading...)');
      $.getJSON("http://query.yahooapis.com/v1/public/yql?"+
                "q=select%20*%20from%20xml%20where%20url%3D%22"+
                encodeURIComponent(url)+
                "%22&format=xml'&callback=?",
        function(data){
					// log(data.results[0])
          if(data.results[0]){
            var data = filterData(data.results[0]);
            msg.html('');
						// log(data)
            formatCalendar(data);
	          afterEventRender();
          } else {
            msg.html(' (error!)');
            msg.addClass('error');
            var errormsg = '<p>Error: could not load the page.</p>';
            container.
              html(errormsg).
                focus().
                  effect('highlight',{color:'#c00'},1000);
          }
        }
      );
    } 
  }
  function filterData(data){
    // filter all the nasties out
    // no body tags
		// log(data)
    data = data.replace(/<?\/body[^>]*>/g,'');
    // no linebreaks
    // data = data.replace(/[\r|\n]+/g,'');
    // no comments
    data = data.replace(/<--[\S\s]*?-->/g,'');
    // no noscript blocks
    data = data.replace(/<noscript[^>]*>[\S\s]*?<\/noscript>/g,'');
    data = data.replace(/<title/g,'<headline');
    data = data.replace(/<\/title/g,'</headline');
    // no script blocks
    data = data.replace(/<script[^>]*>[\S\s]*?<\/script>/g,'');
    // no self closing scripts
    data = data.replace(/<script.*\/>/,'');
    // [... add as needed ...]
    return data;
  }

	function fixWeirdGoogleNuttyCharacters(w) {
		w = w.replace('&amp;#994;&amp;#333;&amp;#324;','Mon'); // Monday fix
		w = w.replace(/Ϣōń/g, 'Mon'); // Monday fix
		w = w.replace(/Ţůĕ/g,'Tue'); // Tuesday fix
		w = w.replace(/Ŵĕď/g,'Wed'); // Wednesday fix
		w = w.replace(/Ţĥů/g,'Thu'); // Thursday fix
		w = w.replace(/Fřĩ/g,'Fri'); // Friday fix
		w = w.replace(/Śāŧ/g,'Sat'); // Saturday fix
		w = w.replace(/Śůń/g,'Sun'); // Sunday fix
		w = w.replace(/Ϣāř/g,'Mar'); // March fix
		w = w.replace(/Āpř/g,'Apr'); // April fix
		w = w.replace('&amp;#994;&amp;#257;&amp;#375;','May'); // May fix
		w = w.replace(/pƜ/g,'pm'); // PM fix
		w = w.replace(/āƜ/g,'am'); // AM fix
		// log(w)
		return w;
	} 
	
	jQuery.createXMLDocument = function(string) {
		var browserName = navigator.appName;
		var doc = new ActiveXObject('Microsoft.XMLDOM');
		doc.async = 'false'
		doc.loadXML(string);
		log("loaded xml")
		return doc;
	};
	function tagPicker(XMLString) {

	var input = XMLString;
	var reTagCatcher = /(<.[^(><.)]+>)/;
	var output = XMLString.match(reTagCatcher);

	return output;

	}

	function formatCalendar(data) {
		var targ = $("ul.event-list");
		if ( $.browser.msie ) {
			targ.find("li").hide();
			data = data.replace(/<feed xmlns="http:\/\/www.w3.org\/2005\/Atom"/, "")
			data = data.replace(/xmlns:gd="http:\/\/schemas.google.com\/g\/2005">/, "")
			data = data.split("<entry>");
			for (var i = 1; i < data.length; i++) {
				var headline = (data[i].split("</id>")[1].split("</headline>")[0].replace(/<headline type="html">/, ""))
				var contentString = (data[i].split("</id>")[1].split("</headline>")[1].replace(/<content type="html">/, "").replace(/<\/content><\/entry>/, ""))
				var when = fixWeirdGoogleNuttyCharacters(""+contentString.replace("&lt;br /&gt;", "<br />").split("<br />")[0].replace("When:", "").replace("EDT", ""));
				targ.append("<li><em>"+headline + "</em> &ndash; " + (when || "") +"</li>")
			};
		} else {
			// log($(data).find('entry').length + " is the number of entries found")
			targ.find("li").hide();
			var events = $(data).find("entry").each(function(index) {
				var headline = $( this ).find("headline").text()
				var content = $( this ).find("content").text().replace(/(<br[\s]?(\/)?>)/, '\n\n');
				var when = fixWeirdGoogleNuttyCharacters(""+content.match(/When:.*(\s){2}/i)[0]);
				targ.append("<li><em>"+headline + "</em> &ndash; " + (when || "") +"</li>")
			});
		}
	}
	
	function afterEventRender() {
		// $("#event_calendar p").autolink();
		// $("body *").replaceText( /(something)/gi, "<b>$1<\/b>" );
		// $("ul.event-list li").replaceText( /(Event Description\:)/gi, " " );
		$("ul.event-list li").replaceText( /(When\:)/gi, " " );
		$("ul.event-list li").replaceText( /(\s\,)/gi, " " );
		$("ul.event-list li em").replaceText( /(Music\:)(.*)/gi, "<span class='gold'>MUSIC:<\/span> <span class='white'>$2<\/span>" );
		$("ul.event-list li em").replaceText( /(Clementine Brunch)/gi, "<span class='cream'>$1<\/span>" );
		$("ul.event-list li em").replaceText( /(Team Trivia Night)/gi, "<span class='red'>$1<\/span>" );
	}

		doAjax("http://www.google.com/calendar/feeds/q1bjhp6ugmnb0dtf1npmgr6l5s%40group.calendar.google.com/public/basic?orderby=starttime&sortorder=ascending&fields=entry(id,title,content)&futureevents=true&singleevents=true&max-results=10", $("#message"),$("#target"))
		$("#event_calendar p").autolink();
});
