<!-- APPLE QUICKTIME JAVASCRIPT PATCH -->
/*

File: AC_QuickTime.js

Abstract: This file contains functions to generate OBJECT and EMBED tags for QuickTime content.

Version: <1.1>

*/

/************** LOCALIZABLE GLOBAL VARIABLES ****************/

var gArgCountErr =	'The "%%" function requires an even number of arguments.'
				+	'\nArguments should be in the form "atttributeName", "attributeValue", ...';

/******************** END LOCALIZABLE **********************/

var gTagAttrs				= null;
var gQTGeneratorVersion		= 1.0;

function AC_QuickTimeVersion()	{ return gQTGeneratorVersion; }

function _QTComplain(callingFcnName, errMsg)
{
    errMsg = errMsg.replace("%%", callingFcnName);
	alert(errMsg);
}

function _QTAddAttribute(prefix, slotName, tagName)
{
	var		value;

	value = gTagAttrs[prefix + slotName];
	if ( null == value )
		value = gTagAttrs[slotName];

	if ( null != value )
	{
		if ( 0 == slotName.indexOf(prefix) && (null == tagName) )
			tagName = slotName.substring(prefix.length); 
		if ( null == tagName ) 
			tagName = slotName;
		return '' + tagName + '="' + value + '"';
	}
	else
		return "";
}

function _QTAddObjectAttr(slotName, tagName)
{
	// don't bother if it is only for the embed tag
	if ( 0 == slotName.indexOf("emb#") )
		return "";

	if ( 0 == slotName.indexOf("obj#") && (null == tagName) )
		tagName = slotName.substring(4); 

	return _QTAddAttribute("obj#", slotName, tagName);
}

function _QTAddEmbedAttr(slotName, tagName)
{
	// don't bother if it is only for the object tag
	if ( 0 == slotName.indexOf("obj#") )
		return "";

	if ( 0 == slotName.indexOf("emb#") && (null == tagName) )
		tagName = slotName.substring(4); 

	return _QTAddAttribute("emb#", slotName, tagName);
}


function _QTAddObjectParam(slotName, generateXHTML)
{
	var		paramValue;
	var		paramStr = "";
	var		endTagChar = (generateXHTML) ? ' />' : '>';

	if ( -1 == slotName.indexOf("emb#") )
	{
		// look for the OBJECT-only param first. if there is none, look for a generic one
		paramValue = gTagAttrs["obj#" + slotName];
		if ( null == paramValue )
			paramValue = gTagAttrs[slotName];

		if ( 0 == slotName.indexOf("obj#") )
			slotName = slotName.substring(4); 
	
		if ( null != paramValue )
			paramStr = '<param name="' + slotName + '" value="' + paramValue + '"' + endTagChar;
	}

	return paramStr;
}

function _QTDeleteTagAttrs()
{
	for ( var ndx = 0; ndx < arguments.length; ndx++ )
	{
		var attrName = arguments[ndx];
		delete gTagAttrs[attrName];
		delete gTagAttrs["emb#" + attrName];
		delete gTagAttrs["obj#" + attrName];
	}
}

		

// generate an embed and object tag, return as a string
function _QTGenerate(callingFcnName, generateXHTML, args)
{
	// is the number of optional arguments even?
	if ( args.length < 4 || (0 != (args.length % 2)) )
	{
		_QTComplain(callingFcnName, gArgCountErr);
		return "";
	}
	
	// allocate an array, fill in the required attributes with fixed place params and defaults
	gTagAttrs = new Object();
	gTagAttrs["src"] = args[0];
	gTagAttrs["width"] = args[1];
	gTagAttrs["height"] = args[2];
	gTagAttrs["classid"] = "clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B";
		//Important note: It is recommended that you use this exact classid in order to ensure a seamless experience for all viewers
	gTagAttrs["pluginspage"] = "http://www.apple.com/quicktime/download/";

	// set up codebase attribute with specified or default version before parsing args so
	//  anything passed in will override
	var activexVers = args[3]
	if ( (null == activexVers) || ("" == activexVers) )
		activexVers = "6,0,2,0";
	gTagAttrs["codebase"] = "http://www.apple.com/qtactivex/qtplugin.cab#version=" + activexVers;

	var	attrName,
		attrValue;

	// add all of the optional attributes to the array
	for ( var ndx = 4; ndx < args.length; ndx += 2)
	{
		attrName = args[ndx].toLowerCase();
		attrValue = args[ndx + 1];

		// "name" and "id" should have the same value, the former goes in the embed and the later goes in
		//  the object. use one array slot 
		if ( "name" == attrName || "id" == attrName )
			gTagAttrs["name"] = attrValue;

		else 
			gTagAttrs[attrName] = attrValue;
	}

	// init both tags with the required and "special" attributes
	var objTag =  '<object '
					+ _QTAddObjectAttr("classid")
					+ _QTAddObjectAttr("width")
					+ _QTAddObjectAttr("height")
					+ _QTAddObjectAttr("codebase")
					+ _QTAddObjectAttr("name", "id")
					+ _QTAddObjectAttr("tabindex")
					+ _QTAddObjectAttr("hspace")
					+ _QTAddObjectAttr("vspace")
					+ _QTAddObjectAttr("border")
					+ _QTAddObjectAttr("align")
					+ _QTAddObjectAttr("class")
					+ _QTAddObjectAttr("title")
					+ _QTAddObjectAttr("accesskey")
					+ _QTAddObjectAttr("noexternaldata")
					+ '>'
					+ _QTAddObjectParam("src", generateXHTML);
	var embedTag = '<embed '
					+ _QTAddEmbedAttr("src")
					+ _QTAddEmbedAttr("width")
					+ _QTAddEmbedAttr("height")
					+ _QTAddEmbedAttr("pluginspage")
					+ _QTAddEmbedAttr("name")
					+ _QTAddEmbedAttr("align")
					+ _QTAddEmbedAttr("tabindex");

	// delete the attributes/params we have already added
	_QTDeleteTagAttrs("src","width","height","pluginspage","classid","codebase","name","tabindex",
					"hspace","vspace","border","align","noexternaldata","class","title","accesskey");

	// and finally, add all of the remaining attributes to the embed and object
	for ( var attrName in gTagAttrs )
	{
		attrValue = gTagAttrs[attrName];
		if ( null != attrValue )
		{
			embedTag += _QTAddEmbedAttr(attrName);
			objTag += _QTAddObjectParam(attrName, generateXHTML);
		}
	} 

	// end both tags, we're done
	return objTag + embedTag + '></em' + 'bed></ob' + 'ject' + '>';
}

// return the object/embed as a string
function QT_GenerateOBJECTText()
{
	return _QTGenerate("QT_GenerateOBJECTText", false, arguments);
}

function QT_GenerateOBJECTText_XHTML()
{
	return _QTGenerate("QT_GenerateOBJECTText_XHTML", true, arguments);
}

function QT_WriteOBJECT()
{
	document.writeln(_QTGenerate("QT_WriteOBJECT", false, arguments));
}

function QT_WriteOBJECT_XHTML()
{
	document.writeln(_QTGenerate("QT_WriteOBJECT_XHTML", true, arguments));
}


<!-- H-PI JAVASCRIPT BY AARON ANDREW HUNT-->
var mdiv = "&nbsp;&equiv;&nbsp;"
	var fhdiv = ""
	var hdiv = "&nbsp;&nbsp;&nbsp;&rarr;&nbsp;&nbsp;"
	var hsdiv = "&nbsp;:"
	var hpre = "<font size=3>&nbsp;</font>"
	var smdiv = "&nbsp;&oplus;&nbsp;"
	var imdiv = "&oplus;"
	var baseurl = "http://www.h-pi.com/"
	var URL = location.href
	var selClass = new Array("class='sel'","","","","","")
	var langs = new Array("en","fr","it","de","es","pt")
	var flags = new Array("england","france","italy","germany","spain","brazil")
	
	<!-- TRANSLATE PAGE -->
	var langurl = baseurl+"theory/"
	var homelangurl = baseurl
	var findTrans = URL.indexOf("babelfish")
	if (findTrans > -1) {
		var langLoc = URL.indexOf("en_")
		var langCode = URL.substr(langLoc+3,2)
		langurl = "http://babelfish.altavista.com/babelfish/trurl_pagecontent?lp=en_"+langCode+"&trurl=http%3a%2f%2fwww.h-pi.com%2ftheory%2f"
		homelangurl = "http://babelfish.altavista.com/babelfish/trurl_pagecontent?lp=en_"+langCode+"&trurl=http%3a%2f%2fwww.h-pi.com%2f"
		var mainWin = parent.location
		var thisPage = document.location
		if (mainWin != thisPage) {
			parent.location.href= thisPage
		}
		var urlSplit = URL.split("www.h-pi.com")
		var reloadEnglish = urlSplit[1]
		reloadEnglish = reloadEnglish.substring(3)
		urlSplit = URL.split("heory")
		reloadEnglish = urlSplit[1]
		reloadEnglish = "theory/" + unescape(reloadEnglish.substring(3))
		selClass[0] = ""
		for (var j=0; j < langs.length; j++) {
			if (langCode == langs[j]) {selClass[j] = "class='sel'"}
		}
	}
	
	<!-- ALL MAIN VARIABLES -->
	var navItems = new Array()
	var navLinks = new Array()

	navItems[0] = "Foreword & Contents"
	navItems[1] = "Naturals"
	navItems[2] = "Intervals"
	navItems[3] = "Accidentals"
	navItems[4] = "Measurement"
	navItems[5] = "Triads"
	navItems[6] = "Superscales"
	navItems[7] = "H-System"
	
	navLinks[0] = "foreword.html"
	navLinks[1] = "naturals1.html"
	navLinks[2] = "intervals1.html"
	navLinks[3] = "accidentals1.html"
	navLinks[4] = "measurement1.html"
	navLinks[5] = "triads1.html"
	navLinks[6] = "superscales1.html"
	navLinks[7] = "huntsystem1.html"
	
	<!-- ALL SUBMENU VARIABLES -->
	var homeItems = new Array()
	var homeLinks = new Array()
	
	homeItems[0] = "&larr; Return to H&pi; Instruments Main Site"
	
	homeLinks[0] = "index.html"
	
	var natItems = new Array()
	var natLinks = new Array()
	
	natItems[0] = "Boundaries"
	natItems[1] = "3 Tones"
	natItems[2] = "5 & 7 Tones"
	natItems[3] = "Letters & Notation"
	
	natLinks[0] = "naturals1.html"
	natLinks[1] = "naturals2.html"
	natLinks[2] = "naturals3.html"
	natLinks[3] = "naturals4.html"
	
	var intItems = new Array()
	var intLinks = new Array()
	
	intItems[0] = "Melodic Modes"
	intItems[1] = "Melodic & Harmonic Intervals"
	intItems[2] = "Harmonic Modes"
	intItems[3] = "Interval Qualities"
	
	intLinks[0] = "intervals1.html"
	intLinks[1] = "intervals2.html"
	intLinks[2] = "intervals3.html"
	intLinks[3] = "intervals4.html"
	
	var accItems = new Array()
	var accLinks = new Array()

	accItems[0] = "Origins"
	accItems[1] = "Tritone Correction"
	accItems[2] = "Leading Tones"
	accItems[3] = "Halfsteps"
	accItems[4] = "From 7 to 13 Tones"
	
	accLinks[0] = "accidentals1.html"
	accLinks[1] = "accidentals2.html"
	accLinks[2] = "accidentals3.html"
	accLinks[3] = "accidentals4.html"
	accLinks[4] = "accidentals5.html"
	
	var rulItems = new Array()
	var rulLinks = new Array()

	rulItems[0] = "Tone Rulers"
	rulItems[1] = "Cents"
	rulItems[2] = "Other Units"
	
	rulLinks[0] = "measurement1.html"
	rulLinks[1] = "measurement2.html"
	rulLinks[2] = "measurement3.html"

	var triItems = new Array()
	var triLinks = new Array()

	triItems[0] = "Harmonic Mediant"
	triItems[1] = "Major Triad"
	triItems[2] = "Harmonic Submediant"
	triItems[3] = "Minor Triad"
	triItems[4] = "Lattice of Fifths & Thirds"
	
	triLinks[0] = "triads1.html"
	triLinks[1] = "triads2.html"
	triLinks[2] = "triads3.html"
	triLinks[3] = "triads4.html"
	triLinks[4] = "triads5.html"
	
	var supItems = new Array()
	var supLinks = new Array()

	supItems[0] = "13 Tones"
	supItems[1] = "19 Tones"
	supItems[2] = "31 Tones"
	supItems[3] = "43 Tones"
	supItems[4] = "55 Tones"
	supItems[5] = "Equal Divisions"
	
	supLinks[0] = "superscales1.html"
	supLinks[1] = "superscales2.html"
	supLinks[2] = "superscales3.html"
	supLinks[3] = "superscales4.html"
	supLinks[4] = "superscales5.html"
	supLinks[5] = "superscales6.html"
	
	var hunItems = new Array()
	var hunLinks = new Array()

	hunItems[0] = "Overview"
	hunItems[1] = "Scale"
	hunItems[2] = "Pitches"
	hunItems[3] = "Intervals"
	hunItems[4] = "Notation"
	hunItems[5] = "Keyboard"
	hunItems[6] = "Chroma"
	hunItems[7] = "Online H-System Calculators"
	
	hunLinks[0] = "huntsystem1.html"
	hunLinks[1] = "huntsystem2.html"
	hunLinks[2] = "huntsystem3.html"
	hunLinks[3] = "huntsystem4.html"
	hunLinks[4] = "huntsystem5.html"
	hunLinks[5] = "huntsystem6.html"
	hunLinks[6] = "huntsystem7.html"
	hunLinks[7] = "huntsystemcalc.html"
	
	var subItems = new Array()
	var subLinks = new Array()
	
function navHeader(audioOr, selectedItem, whichSubmenu, selectedSubitem) {

	<!-- DRAW THE NAVIGATION HEADER -->
	if (audioOr != -1) {
		document.write("<table width=100% height=33 cellspacing=0 cellpadding=0 border=0>")
		document.write("<tr><td width=349 height=33 bgcolor='#000000'><a class='home' href='"+langurl+"index.html'>")
		document.write("<img border=0 width=349 height=33 valign=top src='"+baseurl+"theory/images/headercenter.gif'></a></td>")
		
		<!-- AUDIO ICONS OPTION -->
		if (audioOr == 1) {
			document.write("<td bgcolor='#000000' width=32><a href='javascript:document.midi.Rewind()'>")
			document.write("<img border=0 width=32 height=33 valign=top alt='Rewind' title='Rewind' SRC='"+baseurl+"images/rewindbutton.gif'></a></td>")
			document.write("<td bgcolor='#000000' width=20><a href='javascript:document.midi.Stop()'>")
			document.write("<img border=0 width=20 height=33 valign=top alt='Stop' title='Stop' SRC='"+baseurl+"images/stopbutton.gif'></a></td>")
			document.write("<td bgcolor='#000000' width=12><a href='javascript:About()'>")
			document.write("<img border=0 width=12 height=33 valign=top alt='Play' title='Play' SRC='"+baseurl+"images/speaker.gif'></a></td>")
			document.write("<td bgcolor='#000000' width=28><a href='javascript:ChangeVolume()'>")
			document.write("<img border='0' width=28 height=33 valign=top alt='Volume' title='Volume' SRC='"+baseurl+"images/volume4.gif'></a></td>")
			document.write("<td bgcolor='#000000' width=22><a href='downloads.html'>")
			document.write("<img border='0' width=22 height=33 valign=top alt='Files' title='Files' SRC='"+baseurl+"images/fileicon.gif'></a></td>")
			document.write("<th class='hpihead' width=100%>")
		}
		else {
			document.write("<th class='noplay' width=100%>")
		}
		
		//<!-- TRANSLATION FLAGS -->
		//document.write("&nbsp;<a href='"+baseurl+reloadEnglish+"'>");
		//document.write("<img "+selClass[0]+" src='images/flags/"+flags[0]+".gif' valign=bottom border=0></a>&nbsp;&nbsp;");
		//for (j = 1; j < langs.length; j++) {
		//	document.write("<a href='http://babelfish.altavista.com/babelfish/tr?doit=done&url="+URL+"&lp=en_"+langs[j]+"' target=translate>");
		//	document.write("<img "+selClass[j]+" src='images/flags/"+flags[j]+".gif' valign=bottom border=0></a>&nbsp;&nbsp;");
		//}
		
		<!-- ADD EACH HOME-NAVIGATION ITEM -->
		document.write(" "+fhdiv+" ")
		for (j = 0; j < homeItems.length; j++) {
			if (selectedSubitem == homeItems[j] || selectedItem == homeItems[j]) {
				document.write("<ins class='topmenu'>"+hpre+homeItems[j]+"</ins>")
			}
			else {	
				document.write("<a class='topmenu' href='"+homelangurl+homeLinks[j]+"'>"+hpre+homeItems[j]+"</a>")
			}
			if (j != homeItems.length - 1) {
				if (audioOr == 1) {
					document.write(" "+hsdiv+" ")
				}
				else {
					document.write(" "+hdiv+" ")
				}
			}
		}
		document.write("</th></tr></table>")
		document.write("<div class='chapters'> <font color='#ffffff'>CHAPTER &nbsp;</font>"+mdiv)
	
		<!-- ADD EACH NAVIGATION ITEM -->
		for (j = 0; j < navItems.length; j++) {
			if (whichSubmenu == navItems[j]) {
				if (j == 0) {
					document.write("<ins> "+navItems[j]+"</ins>")
				}
				if (j > 0) {
					document.write("<ins>"+j+" &middot; "+navItems[j]+"</ins>")
				}
			}
			else {
				if (j == 0) {
					document.write("<a class='light' href='"+langurl+navLinks[j]+"'> "+navItems[j]+"</a>")
				}
				if (j > 0) {
					document.write("<a class='light' href='"+langurl+navLinks[j]+"'>"+j+" &middot; "+navItems[j]+"</a>")
				}
			}
			if (j != navItems.length - 1) {
				document.write(" "+mdiv+" ")
			}
		}
		document.write("</div>")
	}
	
	<!-- SUBMENU OPTION -->
	if (whichSubmenu != "" && selectedSubitem != "") {
		document.write("<div class='submenu'> <font color='#ffffff'>SECTION &nbsp;</font>"+smdiv+" <a class='submenuhead'>")
			if (whichSubmenu == "Naturals") {
				subItems = natItems
				subLinks = natLinks
			}
			if (whichSubmenu == "Intervals") {
				subItems = intItems
				subLinks = intLinks
			}
			if (whichSubmenu == "Accidentals") {
				subItems = accItems
				subLinks = accLinks
			}
			if (whichSubmenu == "Measurement") {
				subItems = rulItems
				subLinks = rulLinks
			}
			if (whichSubmenu == "Triads") {
				subItems = triItems
				subLinks = triLinks
			}
			if (whichSubmenu == "Superscales") {
				subItems = supItems
				subLinks = supLinks
			}
			if (whichSubmenu == "H-System") {
				subItems = hunItems
				subLinks = hunLinks
			}
			for (j = 0; j < subItems.length; j++) {
				if (selectedSubitem == subItems[j]) {
					document.write("<ins class='submenu'>"+subItems[j]+"</ins>")
				}
				else {	
					document.write("<a class='submenu' href='"+langurl+subLinks[j]+"'>"+subItems[j]+"</a>")
				}
				if (j != subItems.length - 1) {
					document.write(" <font color='#ffffff'>"+smdiv+"</font> ")
				}
			}
		document.write("</div>")
	}
	
}


function toc() {
	document.write("<br><p><b>&nbsp;&nbsp;&nbsp;&nbsp;<font size='3' color='#777777'>SYSTEMATIC MUSIC THEORY</font></b><br><br>")
	for (j = 1; j < navItems.length; j++) {
		document.write("<b>&nbsp;&nbsp;&nbsp;&nbsp;CHAPTER "+j+" &middot; <a class='plain' href='"+langurl+navLinks[j]+"'>"+navItems[j]+"</a> "+mdiv+" </b>")
		if (j == 1) {
			subItems = natItems
			subLinks = natLinks
		}
		if (j == 2) {
			subItems = intItems
			subLinks = intLinks
		}
		if (j == 3) {
			subItems = accItems
			subLinks = accLinks
		}
		if (j == 4) {
			subItems = rulItems
			subLinks = rulLinks
		}
		if (j == 5) {
			subItems = triItems
			subLinks = triLinks
		}
		if (j == 6) {
			subItems = supItems
			subLinks = supLinks
		}
		if (j == 7) {
			subItems = hunItems
			subLinks = hunLinks
		}
		for (var k = 0; k < subItems.length; k++) {
			document.write("<a class='toc' href='"+langurl+subLinks[k]+"'>"+subItems[k]+"</a>")
			if (k != subItems.length - 1) {
				document.write(smdiv)
			}
		}
		document.write("<br><br>")
	}
	document.write("</p>")
}

function PopUp(PageName, PageWidth, PageHeight) {
	var Example = window.open("subwindows/"+PageName,"subwindow", "status=0, toolbar=0, location=0, menubar=0, directories=0, resizable=1, scrollbars=1, width="+PageWidth+", height="+PageHeight)
}

function embedQTFile(theQTFileName) {
	var theMediaType = theQTFileName.split(".")[1]
	if (theMediaType == "mov") {
		QT_WriteOBJECT(theQTFileName, '350', '260', '', 'autoplay', 'false', 'loop', 'false', 'align', 'middle');
	}
	if (theMediaType == "mid") {
		QT_WriteOBJECT(theQTFileName, '100', '20', '', 'autoplay', 'false', 'loop', 'false', 'align', 'middle');
	}
}

function theFooter() {
	document.write("<div class='foot'>&copy;2008 H-Pi Instruments</div>")
}
