import os
from xml.dom.ext.reader import Sax2

def rendermap(today=None, level=None):
  return_string = ""

  basedir = os.path.dirname(__file__)
  os.chdir(basedir)

  reader = Sax2.Reader()

  days = ["monday", "tuesday", "wednesday", "thursday", "friday"]
  if today is None:
    from time import strftime
    today = strftime("%A").lower()
  
  if level is None:
    level = 3

  return_string += """\t<div id="daylinks">\n\t\t<ul>\n"""
  for day in days:
    if day == today:
      return_string += "\t\t\t<li>%s</li>\n" % day.title()
    else:
      return_string += """\t\t\t<li><a onclick="javascript:return changemap('%s', '%d');" href="?day=%s&amp;level=%d">%s</a></li>\n""" % (day, level, day,  level, day.title())
  #end for
  return_string += "\t\t</ul>\n</div>\n"

  return_string += """\t<div id="levellinks">\n\t\t<ul>\n"""
  for lvl in xrange(1, 4):
    if lvl == level:
      return_string += "\t\t\t<li>Level %d</li>\n" % level
    else:
      return_string += """\t\t\t<li><a onclick="javascript:return changemap('%s', '%d');" href="?day=%s&amp;level=%d">Level %d</a></li>\n""" % (today, lvl, today, lvl, lvl)
  #end for
  return_string += "\t\t</ul>\n\t</div>\n"
  

  buildings = {}

  lecturers = {}
  doc = reader.fromStream(open("lecturers.xml"))
  for node in doc.getElementsByTagName("lecturer"):
    lecturers[node.getAttribute("code")] = node.getAttribute("name")

  modules = {}
  doc = reader.fromStream(open("modules-level%d.xml" % int(level)))
  for node in doc.getElementsByTagName("module"):
    code = node.getAttribute("code")
    modules[code] = {}
    for child in node.childNodes:
      if child.nodeType != child.ELEMENT_NODE:
        continue
      modules[code][child.nodeName] = child.childNodes[0].data

  timetable = {}
  doc = reader.fromStream(open("timetable-tb2-level%d.xml" % int(level)))
  markers = {}
  bubbles = ""
  for node in doc.getElementsByTagName("day"):
    if node.getAttribute("value") != today:
      continue
    for child in node.childNodes:
      if child.nodeType != child.ELEMENT_NODE:
        continue
      time = child.getAttribute("time")
      building = child.getAttribute("building")
      room = child.getAttribute("room")
      module_code = child.getAttribute("module")
      module_name = modules[module_code]['name']
      lecturer = lecturers[modules[module_code]['lecturer']]

      if buildings.has_key(building):
        buildings[building] += 5
      else:
        buildings[building] = 0
      
      offset = buildings[building]
      
      if not markers.has_key(building):
        markers[building] = """\t<div onmouseover="javascript:expandmarkers(this);" onmouseout="javascript:shrinkmarkers(this);" class="markersdiv">\n"""
        
      markers[building] += """\t\t<a href="#%s%s" class="marker" id="%s" style="margin-left: %dpx; z-index: %d" onclick="javascript:return togglebubble('b%s%02d');">\n\t\t\t<img alt="marker" src="src/marker%02d.png" />\n\t\t</a>\n""" % (building, time, building, offset, offset, building, int(time), int(time))
      bubbles += """\t<div class="bubble" id="b%s%02d">\n\t\t<img alt="marker" src="src/close.png" onclick="javascript:togglebubble('b%s%02d');" class="close" />\n\t\t<b>%s:00:</b> %s %s<br />\n\t\t<b>%s</b> %s<br />\n\t\t%s\n\t\t<a href="#" onclick="javascript: return nottaking('%s')" title="Click to hide this module"><img src="src/delete.png" alt="delete" class="delete" /></a>\n\t</div>\n""" % (building, int(time), building, int(time), time, building.title(), room.upper(), module_code.upper(), module_name, lecturer, module_code)
    #end for
  #end for
  for building in markers:
    return_string += "%s\t</div>\n\n" % markers[building]
  return_string += bubbles
  return return_string

