﻿/*
Unity global JavaScript

Included on all pages
*/

//------------------------------------------------------------------
// Global Vars

var unityAmp = "&"; //used to escape ampersands for js inside xsl's


//-------------------------------------------------------------------------------------
// New flash insertion technique

function unityRichMedia_NameValueCollection()
{
	this.params = new Object();
	this.AddParam = unityRichMedia_AddParam;
	return this;
}
function unityRichMedia_AddParam(paramName, paramValue)
{
	unityRichMediaParams.params[paramName] = paramValue;
}

//Param list to hold user defined params
var unityRichMediaParams = new unityRichMedia_NameValueCollection();
//Default value for wmode
unityRichMediaParams.AddParam("WMode", "Opaque");

//Insert flash
function unityRichMedia_Flash(mediaBoxId, siteUrl, mediaUrl, mediaWidth, mediaHeight, mediaId, name)
{
	var classid = 'clsid:d27cdb6e-ae6d-11cf-96b8-444553540000';
	var flashVersion = "10,0,0,0";
	var codebase = location.protocol + '//download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=' + flashVersion;

	var paramHtml = "";
	var embedHtml = "";
	for (elem in unityRichMediaParams.params)
	{
		paramHtml += '<param name="' + elem + '" value="' + unityRichMediaParams.params[elem] + '" />\n';
		if (!document.all)
		{
			embedHtml += ' ' + elem + '="' + unityRichMediaParams.params[elem] + '" ';
		}
	}

	var nestedObj = "";
	if (!document.all)
	{
		nestedObj = '<object type="application/x-shockwave-flash" data="' + mediaUrl + '"'
							+ ' width="' + mediaWidth + '" height="' + mediaHeight + '" ' + embedHtml + '>\n'
							+ '</object>';
	}

	var objectHtml =
		'<object'
		+ ' id="' + mediaBoxId + 'Vid"'
		+ ' classid="' + classid + '"'
		+ ' codebase="' + codebase + '"'
		+ ' width="' + mediaWidth + '"'
		+ ' height="' + mediaHeight + '">'
		+ '<param name="movie" value="' + mediaUrl + '" />\n'
		+ paramHtml
		+ nestedObj
		+ '</object>';

	document.getElementById(mediaBoxId).innerHTML = objectHtml;

	//To debug - uncomment the code below
	//document.getElementById(mediaBoxId).innerHTML += "<div><textarea style='width:400px;height:200px;'>" +  objectHtml + "</textarea></div>";

	//Clear the params obj
	unityRichMediaParams.params = new Object();
}


//Insert WMV
function unityRichMedia_WMV(mediaBoxId, siteUrl, mediaUrl, mediaWidth, mediaHeight, mediaId, name)
{
	var websiteUrl = siteUrl;
	if (websiteUrl.slice(websiteUrl.length - 1) == "/")
	{
		websiteUrl = websiteUrl.slice(0, websiteUrl.length - 1);
	}
	var fullUrl = websiteUrl + mediaUrl;

	if (location.protocol.toLowerCase() == "https:")
	{
		fullUrl = fullUrl.replace("http:", "https:");
	}

	var classid = 'clsid:22D6F312-B0F6-11D0-94AB-0080C74C7E95';
	var flashVersion = "10,0,0,0";
	var codebase = location.protocol + '//www.microsoft.com/Windows/MediaPlayer/';

	var paramHtml = "";
	var embedHtml = "";
	for (elem in unityRichMediaParams.params)
	{
		paramHtml += '<param name="' + elem + '" value="' + unityRichMediaParams.params[elem] + '" />\n';
		if (!document.all)
		{
			embedHtml += ' ' + elem + '="' + unityRichMediaParams.params[elem] + '" ';
		}
	}

	var nestedObj = "";
	if (!document.all)
	{
		nestedObj = '<embed type="application/x-mplayer2" autostart="1" enabled="1" showstatusbar="1" '
					+ ' showdisplay="1" showcontrols="1"  src="' + fullUrl + '"'
					+ ' pluginspage="' + location.protocol + '//www.microsoft.com/Windows/MediaPlayer/" '
					+ ' codebase="' + location.protocol + '//activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=6,0,0,0" '
					+ ' width="' + mediaWidth + '" height="' + mediaHeight + '" ' + embedHtml + '>\n'
					+ '</embed>';
	}

	var objectHtml =
		'<object '
		+ ' id="' + mediaBoxId + 'Vid"'
		+ ' classid="' + classid + '"'
		+ ' codebase="' + codebase + '"'
		+ ' width="' + mediaWidth + '"'
		+ ' height="' + mediaHeight + '">'
		+ '<param name="Filename" value="' + fullUrl + '" />\n'
		+ '<param name="AutoStart" value="true" />\n'
		+ '<param name="ShowControls" value="true" />\n'
		+ '<param name="BufferingTime" value="2" />\n'
		+ '<param name="ShowStatusBar" value="true" />\n'
		+ '<param name="InvokeURLs" value="false" />\n'
		+ paramHtml
		+ nestedObj
		+ '</object>';

	document.getElementById(mediaBoxId).innerHTML = objectHtml;

	//To debug - uncomment the code below  (but be careful as it sometimes stops the vid from playing)
	//document.getElementById(mediaBoxId).innerHTML += "<div><textarea style='width:400px;height:200px;'>" +  objectHtml + "</textarea></div>";

	//Clear the params obj
	unityRichMediaParams.params = new Object();
}


//Insert MOV
function unityRichMedia_MOV(mediaBoxId, siteUrl, mediaUrl, mediaWidth, mediaHeight, mediaId, name)
{
	var websiteUrl = siteUrl;
	if (websiteUrl.slice(websiteUrl.length - 1) == "/")
	{
		websiteUrl = websiteUrl.slice(0, websiteUrl.length - 1);
	}
	var fullUrl = websiteUrl + mediaUrl;

	if (location.protocol.toLowerCase() == "https:")
	{
		fullUrl = fullUrl.replace("http:", "https:");
	}

	var classid = 'clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B';
	var codebase = location.protocol + '//www.apple.com/qtactivex/qtplugin.cab#version=7,3,0,0';

	var paramHtml = "";
	var embedHtml = "";
	for (elem in unityRichMediaParams.params)
	{
		paramHtml += '<param name="' + elem + '" value="' + unityRichMediaParams.params[elem] + '" />\n';
		if (!document.all)
		{
			embedHtml += ' ' + elem + '="' + unityRichMediaParams.params[elem] + '" ';
		}
	}

	var nestedObj = "";
	if (!document.all)
	{
		nestedObj = '<embed type="video/quicktime" autostart="true" postdomevents="true" controller="true" '
					+ ' showlogo="false" scale="tofit"  src="' + fullUrl + '"'
					+ ' codebase="' + codebase + '" '
					+ ' width="' + mediaWidth + '" height="' + mediaHeight + '" ' + embedHtml + '>\n'
					+ '<param name="autostart" value="true" />\n'
					+ '<param name="controller" value="true" />\n'
					+ '<param name="showlogo" value="false" />\n'
					+ '<param name="scale" value="tofit" />\n'
					+ '<param name="cache" value="true" />\n'
					+ '<param name="bgcolor" value="white" />\n'
					+ '</embed>';
	}

	var objectHtml =
		'<object style="z-index:1;'
		+ ' id="' + mediaBoxId + 'Vid"'
		+ ' classid="' + classid + '"'
		+ ' codebase="' + codebase + '"'
		+ ' width="' + mediaWidth + '"'
		+ ' height="' + mediaHeight + '">'
		+ '<param name="src" value="' + fullUrl + '" />\n'
		+ '<param name="autostart" value="true" />\n'
		+ '<param name="controller" value="true" />\n'
		+ '<param name="showlogo" value="false" />\n'
		+ '<param name="scale" value="tofit" />\n'
		+ '<param name="cache" value="true" />\n'
		+ '<param name="bgcolor" value="white" />\n'
		+ '<param name="postdomevents" value="true" />\n'
		+ '<param name="saveembedtags" value="true" />\n'
		+ paramHtml
		+ nestedObj
		+ '</object>';

	document.getElementById(mediaBoxId).innerHTML = objectHtml;

	//To debug - uncomment the code below  (but be careful as it sometimes stops the vid from playing)
	//document.getElementById(mediaBoxId).innerHTML += "<div><textarea style='width:400px;height:200px;'>" +  objectHtml + "</textarea></div>";

	//Clear the params obj
	unityRichMediaParams.params = new Object();
}


//-------------------------------------------------------------------------------------

//The object containing all the maps on the page
var UnityGoogleMaps = {};
function UnityAddGoogleMap(fieldname, map)
{
	UnityGoogleMaps[fieldname] = { 'map': map, 'marker': null };
}

function UnityInitGoogleMap(objName, zm, lat, lng, markerArray)
{
	var zoom = parseFloat(zm);
	var latitude = parseFloat(lat);
	var longitude = parseFloat(lng);
	
    //  Google Maps v3
    var initialLatLng = new google.maps.LatLng(latitude, longitude);
    
    //Setup options for map
    var options = {
        zoom: zoom,
        center: initialLatLng,
        mapTypeId: google.maps.MapTypeId.ROADMAP,
        streetViewControl: false,
        scrollwheel: false
    };

    //Create map object
    var map = new google.maps.Map(document.getElementById(objName + "Map"), options);
    UnityAddGoogleMap(objName, map);

    
    for (var i = 0; i < markerArray.length; i++)
    {
        //Add markers to map
        AddMarker(map, markerArray[i]);
    }
}

var infowindow;
var infowindowMarker;

function AddMarker(map, marker)
{
    //Create marker image
    var iconImage = new google.maps.MarkerImage(
        marker.iconImage,
        new google.maps.Size(20,34),
        null,
        new google.maps.Point(9,34),
        null);

    //Create shadow image
    var shadowImage = new google.maps.MarkerImage(
        marker.shadowImage,
        new google.maps.Size(37, 34),
        null,
        new google.maps.Point(9, 34),
        null);
    
    //Create the marker object
    var mapMarker = new google.maps.Marker({
        position: new google.maps.LatLng(marker.latitude, marker.longitude),
        map: map,
        draggable: false
    });

    //put html angle brackets back in
    var info = marker.info.replace(/&lt;(w*)/g, '<');
    info = info.replace(/&gt;(w*)/g, '>');

    //Add marker click event to open info window
    google.maps.event.addListener(mapMarker, 'mouseover', function (event) {
        if (infowindowMarker !== mapMarker && info != "") {
            //Close off any open windows
            if (infowindow != null) {
                infowindow.close();
            }
            
            //Create a new info window
			infowindow = new google.maps.InfoWindow({
				content: info,
				maxWidth: 200
			});

            //Reset current infowindow
			google.maps.event.addListener(infowindow, 'closeclick', function (event) 
			{
				infowindowMarker = null;
			});

            infowindow.open(map, mapMarker);
            infowindowMarker = mapMarker;

            //Fires when x is clicked in the info window
            google.maps.event.addListener(infowindow, 'closeclick', function (event) {
                infowindowMarker = -1;
            });
        }
    });

    mapMarker.setIcon(iconImage);
    mapMarker.setShadow(shadowImage);

    if (info.length == 0)
    {
        mapMarker.setCursor('hand');
    }
}

function UnityGoogleMapAddMarker(map, pt, objName)
{
	if (UnityGoogleMaps[objName].marker != null)
	{
		UnityGoogleMaps[objName].map.clearOverlays();
	}

	var marker = new GMarker(pt, { draggable: false })
	map.addOverlay(marker);

	UnityGoogleMaps[objName].marker = marker;
}


//------------------------------------------------------------------
//Calendar - YUI

function unityCalendarFieldInit(fieldName) {
    var Event = YAHOO.util.Event;
    var Dom = YAHOO.util.Dom;

    var oCalendarContainer;
    var oCalendar = null;

    var openCalendar = function () {
        // Create a Calendar instance and render it into the body 
        // element of the Overlay.	
        if (oCalendar == null) {
            oCalendar = new YAHOO.widget.Calendar("unityCalendarContainer-" + fieldName, "unityFFDateCal-" + fieldName, { navigator: true, close: true, title: "Choose A Date" });

            // Subscribe to the Calendar instance's "select" event to 
            // update the month, day, year form fields when the user
            // selects a date.

            oCalendar.selectEvent.subscribe(function (p_sType, p_aArgs) {
                var aDate;

                if (p_aArgs) {
                    aDate = p_aArgs[0][0];
                    Dom.get("unityFFIdDate-" + fieldName).value = aDate[2] + "/" + aDate[1] + "/" + aDate[0];
                }

                oCalendar.hide();
            });



            oCalendar.render();
        }
        else {
            oCalendar.show();
        }
    };

    // Create an Overlay instance to house the Calendar instance	
    oCalendarContainer = new YAHOO.widget.Overlay("unityCalendarContainer-" + fieldName, { visible: false });
    oCalendarContainer.setBody("&#32;");
    oCalendarContainer.body.id = "unityCalendarContainer-" + fieldName;
    oCalendarContainer.body.className = "unityCalendarContainer";

    // Add a "click" event listener that will render the Overlay, and 
    // instantiate the Calendar the first time the Button instance is 
    // clicked.
    var calendarField = document.getElementById("unityFFIdDateShow-" + fieldName);
    var container = document.getElementById("unityFFDateCal-" + fieldName);

    YAHOO.util.Event.addListener(calendarField, "click", openCalendar, container, true);
}

//------------------------------------------------------------------
//Timepicker - YUI

function unitySetTime(p_sType, p_aArgs, p_oValue) {
    document.getElementById("unityFFIdTime-" + p_oValue[1]).value = p_oValue[0];
}

function unityAddTimePicker(menuObj, fieldName) {
    menuObj.addItems([
		[
			{ text: "12:00 AM", value: 0, onclick: { fn: unitySetTime, obj: ["12:00 AM", fieldName]} },
			{ text: "12:30 AM", value: 1, onclick: { fn: unitySetTime, obj: ["12:30 AM", fieldName]} }
		]
	]);
    for (var i = 1; i <= 11; i++) {
        menuObj.addItem({ text: i + ":00 AM", value: 1, onclick: { fn: unitySetTime, obj: [i + ":00 AM", fieldName]} });
        menuObj.addItem({ text: i + ":30 AM", value: 1, onclick: { fn: unitySetTime, obj: [i + ":30 AM", fieldName]} });
    }
    menuObj.addItem({ text: i + ":00 PM", value: 1, onclick: { fn: unitySetTime, obj: ["12:00 PM", fieldName]} });
    menuObj.addItem({ text: i + ":30 PM", value: 1, onclick: { fn: unitySetTime, obj: ["12:30 PM", fieldName]} });
    for (var i = 1; i <= 11; i++) {
        menuObj.addItem({ text: i + ":00 PM", value: 1, onclick: { fn: unitySetTime, obj: [i + ":00 PM", fieldName]} });
        menuObj.addItem({ text: i + ":30 PM", value: 1, onclick: { fn: unitySetTime, obj: [i + ":30 PM", fieldName]} });
    }

    YAHOO.util.Event.addListener("unityFFIdTimeShow-" + fieldName, "click", unityShowTimePickerMenu, menuObj);
}

function unityShowTimePickerMenu(e, menuObj) {
    var elTarget = YAHOO.util.Event.getTarget(e);
    var nameParts = elTarget.id.split("-");
    var fieldName = nameParts[1];

    //Calc the menu pos
    var elPos = YAHOO.util.Dom.getXY(document.getElementById("unityFFIdTime-" + fieldName));
    var xPos = elPos[0];
    var yPos = elPos[1] + 20;

    menuObj.cfg.setProperty("x", xPos);
    menuObj.cfg.setProperty("y", yPos);

    //Show the menu
    menuObj.show();

    elTarget.focus();
}

function unityPrintPage() {
    window.print();
}
