/*function to replace special characters in string with html entities*/
function html2entities(str)
{
	var re=/[(<>"'&]/g
	for (i=0; i<arguments.length; i++)
	str.replace(re, function(m){return replacechar(m)})
	return str;
}
/*replace special char with its html analogue*/
function replacechar(match)
{
	if (match=="<")
		return "&lt;"
	else if (match==">")
		return "&gt;"
	else if (match=="\"")
		return "&quot;"
	else if (match=="'")
		return "&#039;"
	else if (match=="&")
		return "&amp;"
}

function getXmlHttp(){
  var xmlhttp;
  try {
    xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
  } catch (e) {
    try {
      xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (E) {
      xmlhttp = false;
    }
  }
  if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
    xmlhttp = new XMLHttpRequest();
  }
  return xmlhttp;
}

function loadPlacesXML(xml)
{
	var bounds = new GLatLngBounds();
	var xmlDoc = GXml.parse(xml);
	var placemarks = xmlDoc.documentElement.getElementsByTagName("Placemark");
	if(placemarks.length > 0)
	{
		for (var i = 0; i < placemarks.length; i++) 
		{
			var tripid;
			var extData = placemarks[i].getElementsByTagName("ExtendedData")[0].getElementsByTagName("Data")
			for(var j = 0; j < extData.length; j++)
			{
					if(extData[j].getAttribute("name") == "TripId")
					{
						tripid = extData[j].getElementsByTagName("value")[0].firstChild.nodeValue;
					}
			}
			var title = placemarks[i].getElementsByTagName("name")[0].firstChild.nodeValue;
			var details = placemarks[i].getElementsByTagName("description")[0].firstChild.nodeValue;
			var aLatLng = placemarks[i].getElementsByTagName("Point")[0].getElementsByTagName("coordinates")[0].firstChild.nodeValue.split(",");
			var point = new GLatLng(parseFloat(aLatLng[1]),parseFloat(aLatLng[0]));
			bounds.extend(point);
			// create the marker
			addMarker(point, title, details, tripid);
	  }
	  zoom = map.getBoundsZoomLevel(bounds)
	  if( zoom > 9) zoom = 9;
	  map.setZoom(zoom);
	  map.setCenter(bounds.getCenter());
  }
}

/*loads markers and data from XML, adds to map and places array*/
function loadTripPlacesXML(xml)
{
	var xmlDoc = GXml.parse(xml);
	var bounds = new GLatLngBounds();
	var placemarks = xmlDoc.documentElement.getElementsByTagName("Placemark");
	if(placemarks.length > 0)
	{
		for (var i = 0; i < placemarks.length; i++) 
		{
			var title = placemarks[i].getElementsByTagName("name")[0].firstChild.nodeValue;
			var details = placemarks[i].getElementsByTagName("description")[0].firstChild.nodeValue;
			var aLatLng = placemarks[i].getElementsByTagName("Point")[0].getElementsByTagName("coordinates")[0].firstChild.nodeValue.split(",");
			var point = new GLatLng(parseFloat(aLatLng[1]),parseFloat(aLatLng[0]));
			bounds.extend(point);
			// create the marker
			addMarker(point, title, details);
	  }
	  zoom = map.getBoundsZoomLevel(bounds)
	  if( zoom > 9) zoom = 9;
	  map.setZoom(zoom);
	  map.setCenter(bounds.getCenter());
  }
}

function requestHandler() 
{
  if (client.readyState == 4) 
  {
  	loadPlacesXML(client.responseText)
  	document.getElementById("id_plc").removeChild(document.getElementById("id_pl"));
  }
}

var months = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
var daysInMonth = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
var days = new Array("S", "M", "T", "W", "T", "F", "S");

today = new getToday();	
var element_id;

function getDays(month, year) 
{
	// Test for leap year when February is selected.
	if (1 == month)
		return ((0 == year % 4) && (0 != (year % 100))) ||
			(0 == year % 400) ? 29 : 28;
	else
		return daysInMonth[month];
}

function getToday()
{
	// Generate today's date.
	this.now = new Date();
	this.year = this.now.getFullYear() ; // Returned year XXXX
	this.month = this.now.getMonth();
	this.day = this.now.getDate();
}

 
function newCalendar() 
{
	var parseYear = parseInt(document.all.year  [document.all.year.selectedIndex].text);
 
	var newCal = new Date(parseYear , document.all.month.selectedIndex, 1);
	var day = -1;
	var startDay = newCal.getDay();
	var daily = 0; 

	today = new getToday(); // 1st call
	if ((today.year == newCal.getFullYear() ) &&   (today.month == newCal.getMonth()))
	   day = today.day;
	// Cache the calendar table's tBody section, dayList.
	var tableCal = document.all.calendar.tBodies.dayList;

	var intDaysInMonth =
	   getDays(newCal.getMonth(), newCal.getFullYear() );

	for (var intWeek = 0; intWeek < tableCal.rows.length;  intWeek++)
		   for (var intDay = 0;
			 intDay < tableCal.rows[intWeek].cells.length;
			 intDay++)
	 {
		  var cell = tableCal.rows[intWeek].cells[intDay];

		  // Start counting days.
		  if ((intDay == startDay) && (0 == daily))
			 daily = 1;

		  // Highlight the current day.
		  cell.style.color = (day == daily) ? "red" : "";
		  if(day == daily)
		  {
				document.all.todayday.innerText= "Today: " +  day + "/" + 
					(newCal.getMonth()+1) + "/" + newCal.getFullYear() ;
		  }
		  // Output the day number into the cell.
		  if ((daily > 0) && (daily <= intDaysInMonth))
			 cell.innerText = daily++;
		  else
			 cell.innerText = "";
	   }

}
	  
	 function getTodayDay()
	 {
			    document.all[element_id].value = today.year + "-" + (today.month+1) + "-" + today.day; 
		        //document.all.calendar.style.visibility="hidden";
				document.all.calendar.style.display="none";
				document.all.year.selectedIndex =100;   
	            document.all.month.selectedIndex = today.month; 
	 }
 
        function getDate() 
		 {
            // This code executes when the user clicks on a day
            // in the calendar.
            if ("TD" == event.srcElement.tagName)
               // Test whether day is valid.
               if ("" != event.srcElement.innerText)
			   { 
				 var mn = document.all.month.selectedIndex+1;
    		 var Year = document.all.year [document.all.year.selectedIndex].text;
				 document.all[element_id].value=Year + "-" + mn + "-" + event.srcElement.innerText;
		     //document.all.calendar.style.visibility="hidden";
				 document.all.calendar.style.display="none";
			 }
		 }
 
function GetBodyOffsetX(el_name, shift)
{
	var x;
	var y;
	x = 0;
	y = 0;

	var elem = document.all[el_name];
	do 
	{
		x += elem.offsetLeft;
		y += elem.offsetTop;
		if (elem.tagName == "BODY")
			break;
		elem = elem.offsetParent; 
	} while  (1 > 0);

	shift[0] = x;
	shift[1] = y;
	return  x;
}	

function SetCalendarOnElement(el_name)
{
	if (el_name=="") 
	el_name = element_id;
	var shift = new Array(2);
	GetBodyOffsetX(el_name, shift);
	document.all.calendar.style.pixelLeft  = shift[0]; //  - document.all.calendar.offsetLeft;
	document.all.calendar.style.pixelTop = shift[1] + 25 ;
}
	  
 	  
	           
function ShowCalendar(elem_name)
{
		if (elem_name=="")
		elem_name = element_id;

		element_id	= elem_name; // element_id is global variable
		newCalendar();
		SetCalendarOnElement(element_id);
		//document.all.calendar.style.visibility = "visible";
		document.all.calendar.style.display="inline";
}

function HideCalendar()
{
	//document.all.calendar.style.visibility="hidden";
	document.all.calendar.style.display="none";
}

function toggleCalendar(elem_name)
{
	//if (document.all.calendar.style.visibility == "hidden")
	if(document.all.calendar.style.display=="none")
		ShowCalendar(elem_name);
	else 
		HideCalendar();
}

