isIE6 = navigator.userAgent.toLowerCase().indexOf('msie 6') != -1;
isIE7 = navigator.userAgent.toLowerCase().indexOf('msie 7') != -1;

if(isIE6 && ! isIE7) {
	document.location.href = '/bsmt/notsupported.html';
}


var PageTitles = new Array();
PageTitles[0] = "Bachelor of Science in Music Technology - Dept. Music and Arts Technology - IUPUI";
PageTitles[1] = "About the Bachelor of Science in Music Technology Degree at IUPUI";
PageTitles[2] = "Photo Galleries of the Bachelor of Science in Music Technology Degree at IUPUI";
PageTitles[3] = "Applying for the Bachelor of Science in Music Technology Degree at IUPUI";
PageTitles[4] = "Contact the Bachelor of Science in Music Technology Degree at IUPUI";

var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};

function ResetUI()
{
	
	var WindowWidth, WindowHeight;
	
	if(Browser == "Explorer")
	{
		WindowWidth = document.documentElement.clientWidth;
		WindowHeight = document.documentElement.clientHeight;
	}
	else
	{
		WindowWidth = window.innerWidth;
		WindowHeight = window.innerHeight;
	}
	
	if(!WindowHeight)	WindowHeight = document.body.clientHeight;
	
	if(WindowWidth < 1024)	WindowWidth = 1024;
	if(WindowHeight < 550) WindowHeight = 550;
	
	if(WindowWidth > 1440)	WindowWidth = 1440;
	if(WindowHeight > 900)	WindowHeight = 900;
	
	//-------------------------------------
	
	$('MainContainer').style.width = WindowWidth + 'px';
	$('MainContainer').style.height = WindowHeight + 'px';

	$('TwitterBar').style.height = (WindowHeight) + 'px';
	
	$('MenuBar_Spacer').style.width = Math.round((WindowWidth - 200 - (161 * 5)) / 2) + 'px';
	
	$('MainContent').style.width = (WindowWidth - 75 - 280) + 'px';
	$('MainContent').style.height = (WindowHeight - 82 - 83 - 46 - 10) + 'px';
	
	$('SubContent_'+currentTab).style.width = $('MainContent').style.width;
	//$('SubContent_'+currentTab).style.height = $('MainContent').style.height;
}

function UpgradeImage()
{
	var temp = new Image();
	temp.src = '/bsmt/img/background.jpg';

	setTimeout("document.getElementById('MainContainer').style.backgroundImage = 'url(/bsmt/img/background.jpg)';", 1000);
}

function toggleAudio() {
	
	if($('audioControl').innerHTML == 'Audio OFF') {
		$('audioControl').innerHTML = 'Audio ON';
		Sound.enable();
		Sound.play('', {replace:true});
		Sound.disable();		
	}
	else {
		$('audioControl').innerHTML = 'Audio OFF';
		Sound.enable();
		Sound.play('/bsmt/soundtrack.mp3', {replace:true});
	}
}

function SwitchTab(TabID)
{
	var Offset = 0;
	for(i = 0; i < 5; i ++)
	{
		if(!document.getElementById('NavTab_'+TabID))	continue;
		
		if(i == TabID)
		{
			document.getElementById('NavTab_'+i).className = 'NavTab NavTab_Selected';
			
			currentTab = i;
			
			Offset = 0 - (1085 * i);
			$('SubContent_'+i).style.width = $('MainContent').style.width;
			//$('SubContent_'+i).style.height = $('MainContent').style.height;
			document.title = PageTitles[i];
			
			if(i==2)	LoadGallery();
			
		}
		else
		{
			document.getElementById('NavTab_'+i).className = 'NavTab';
		}
	}
	
	
	new Effect.Morph('ContentCanvas', {style:{left: Offset+'px'}, duration:0.6});
	
	
	
	return true;
}

function GoTab(offset)
{
	var tmpTab = currentTab + offset;
	if(tmpTab < 0)	tmpTab = 4;
	if(tmpTab > 4)	tmpTab = 0;
	
	SwitchTab(tmpTab);
}

function ShowWave(WaveID, IE)
{
	if(IE == 1)
		setTimeout("$('Waves_"+WaveID+"').style.display = 'none';", 100);
	else
		new Effect.Opacity('Waves_'+WaveID, {from: 0.7, to: 0.3, duration: 0.5});
}


function Rotator()
{
	if(rotatedWaves.length >=6)
	{
		rotatedWaves = "";
		clearInterval(Rotation);

		setTimeout("Rotation = setInterval('Rotator();', 150);", 1000);
		return;
	}
	
	var rand;
	
	rand = Math.round(Math.random() * 6);
	
	while(rotatedWaves.indexOf(rand) >= 0 || rand == 0)
	{
		rand = Math.round(Math.random() * 6);
	}

	rotatedWaves = rotatedWaves + '' + rand;

	if(Browser=="Explorer")
	{
		$('Waves_'+rand).style.display = 'block';
		ShowWave(rand, 1)
	}
	else
	{
		ShowWave(rand, 0);
	}
}

function ShowArrowHint()
{
	Effect.Puff('Arrow_Hint_Back', {duration:1.5});
	Effect.Puff('Arrow_Hint_Forward', {duration:1.5});
	
	setTimeout("ResetArrowHint();", 1600);
}

function ResetArrowHint()
{
	$('Arrow_Hint_Back').setStyle({display:'block', width:'65px', opacity:0, height:'38px', left:'10px', top:'40%', position:'absolute'});
	$('Arrow_Hint_Forward').setStyle({display:'block', width:'65px', opacity:0, height:'38px', right:'210px', top:'40%', position:'absolute'});
	
	new Effect.Opacity('Arrow_Hint_Back', {from: 0, to: 1, duration:0.3});
	new Effect.Opacity('Arrow_Hint_Forward', {from: 0, to: 1, duration:0.3});
	
	HintTimeout = setTimeout("ShowArrowHint();", 500);
}

function GetTwitter()
{
	getTwitters('TwitterBar_Content', { 
	  id: 'musictechdegree', 
	  count:7,
	  enableLinks: true, 
	  ignoreReplies: true, 
	  clearContents: true,
	  template: '%text%<br /><a href="http://twitter.com/%user_screen_name%/statuses/%id%/" target="new">%time%</a>'
	});	
}

function LoadGallery()
{
	if(GalleryInitialized == true)	return;
	
	$('PhotoGallery').innerHTML = "<a href='/bsmt/gallery/images/IMG_0003_2.jpg' rel='lightbox[bsmt]' title='Audio recording and processing studio.' class='Thumbnail'><img src='/bsmt/gallery/images/tn_IMG_0003_2.jpg' width='200' height='50' alt='thumbnail' /></a><a href='/bsmt/gallery/images/IMG_0004.jpg' rel='lightbox[bsmt]' title='Dr. E.J. Choe teaching a group piano class.' class='Thumbnail'><img src='/bsmt/gallery/images/tn_IMG_0004.jpg' width='200' height='50' alt='thumbnail' /></a><a href='/bsmt/gallery/images/IMG_0007_1.jpg' rel='lightbox[bsmt]' title='Motion tracking projects done in the Tavel Arts Research Center.' class='Thumbnail'><img src='/bsmt/gallery/images/tn_IMG_0007_1.jpg' width='200' height='50' alt='thumbnail' /></a><a href='/bsmt/gallery/images/IMG_0008.jpg' rel='lightbox[bsmt]' title='The electronic keyboard lab' class='Thumbnail'><img src='/bsmt/gallery/images/tn_IMG_0008.jpg' width='200' height='50' alt='thumbnail' /></a><a href='/bsmt/gallery/images/IMG_0013_1.jpg' rel='lightbox[bsmt]' title='The Tavel Arts Research Center Lab' class='Thumbnail'><img src='/bsmt/gallery/images/tn_IMG_0013_1.jpg' width='200' height='50' alt='thumbnail' /></a><a href='/bsmt/gallery/images/IMG_0023.jpg' rel='lightbox[bsmt]' title='The electronic keyboard lab' class='Thumbnail'><img src='/bsmt/gallery/images/tn_IMG_0023.jpg' width='200' height='50' alt='thumbnail' /></a><a href='/bsmt/gallery/images/IMG_0024.jpg' rel='lightbox[bsmt]' title='The electronic keyboard lab' class='Thumbnail'><img src='/bsmt/gallery/images/tn_IMG_0024.jpg' width='200' height='50' alt='thumbnail' /></a><a href='/bsmt/gallery/images/IMG_0026.jpg' rel='lightbox[bsmt]' title='The electronic keyboard lab' class='Thumbnail'><img src='/bsmt/gallery/images/tn_IMG_0026.jpg' width='200' height='50' alt='thumbnail' /></a><a href='/bsmt/gallery/images/IMG_0029_1.jpg' rel='lightbox[bsmt]' title='Percussive Instrument Practice Room' class='Thumbnail'><img src='/bsmt/gallery/images/tn_IMG_0029_1.jpg' width='200' height='50' alt='thumbnail' /></a><a href='/bsmt/gallery/images/IMG_2284.jpg' rel='lightbox[bsmt]' title='Music for Films class.' class='Thumbnail'><img src='/bsmt/gallery/images/tn_IMG_2284.jpg' width='200' height='50' alt='thumbnail' /></a><a href='/bsmt/gallery/images/telematic_1.jpg' rel='lightbox[bsmt]' title='A telematic concert' class='Thumbnail'><img src='/bsmt/gallery/images/tn_telematic_1.jpg' width='200' height='50' alt='thumbnail' /></a><a href='/bsmt/gallery/images/IMG_2291.jpg' rel='lightbox[bsmt]' title='Dr. Fred Rees hosting a lecture in the auditorium' class='Thumbnail'><img src='/bsmt/gallery/images/tn_IMG_2291.jpg' width='200' height='50' alt='thumbnail' /></a><a href='/bsmt/gallery/images/telematic_2.jpg' rel='lightbox[bsmt]' title='The Tavel Arts Research Center Lab' class='Thumbnail'><img src='/bsmt/gallery/images/tn_telematic_2.jpg' width='200' height='50' alt='thumbnail' /></a><a href='/bsmt/gallery/images/telematic_3.jpg' rel='lightbox[bsmt]' title='A telematic concert, featuring the BASILICA (band)' class='Thumbnail'><img src='/bsmt/gallery/images/tn_telematic_3.jpg' width='200' height='50' alt='thumbnail' /></a><a href='/bsmt/gallery/images/telematic_4.jpg' rel='lightbox[bsmt]' title='Cocolithophore, a telematic composition, composed and performed by Dr. Scott Deal.' class='Thumbnail'><img src='/bsmt/gallery/images/tn_telematic_4.jpg' width='200' height='50' alt='thumbnail' /></a><a href='/bsmt/gallery/images/IMG_2371.jpg' rel='lightbox[bsmt]' title='A guitar group class, taught by John Alvarado.' class='Thumbnail'><img src='/bsmt/gallery/images/tn_IMG_2371.jpg' width='200' height='50' alt='thumbnail' /></a>";
	GalleryInitialized = true;
}

/**
 * remy sharp / http://remysharp.com
 * http://remysharp.com/2007/05/18/add-twitter-to-your-blog-step-by-step/
 *
 * @params
 *   cssIdOfContainer: e.g. twitters
 *   options: 
 *       {
 *           id: {String} username,
 *           count: {Int} 1-20, defaults to 1 - max limit 20
 *           prefix: {String} '%name% said', defaults to blank
 *           clearContents: {Boolean} true, removes contents of element specified in cssIdOfContainer, defaults to true
 *           ignoreReplies: {Boolean}, skips over tweets starting with '@', defaults to false
 *           template: {String} HTML template to use for LI element (see URL above for examples), defaults to predefined template
 *           enableLinks: {Boolean} linkifies text, defaults to true,
 *           timeout: {Int} How long before triggering onTimeout, defaults to 10 seconds if onTimeout is set
 *           onTimeoutCancel: {Boolean} Completely cancel twitter call if timedout, defaults to false
 *           onTimeout: {Function} Function to run when the timeout occurs. Function is bound to element specified with 
 *              cssIdOfContainer (i.e. 'this' keyword)
 *
 *      CURRENTLY DISABLED DUE TO CHANGE IN TWITTER API:
 *           withFriends: {Boolean} includes friend's status
 *
 *       }
 *
 * @license MIT (MIT-LICENSE.txt)
 * @version 1.12.2 - Fixed Safari 4 returning blank by using simple cache busting
 * @date $Date: 2009-03-09 09:46:25 +0000 (Mon, 09 Mar 2009) $
 */

// to protect variables from resetting if included more than once
if (typeof renderTwitters != 'function') (function () {
    /** Private variables */
    var browser = (function() {
    	var b = navigator.userAgent.toLowerCase();

    	// Figure out what browser is being used
    	return {
    		safari: /webkit/.test(b),
    		opera: /opera/.test(b),
    		msie: /msie/.test(b) && !(/opera/).test(b),
    		mozilla: /mozilla/.test(b) && !(/(compatible|webkit)/).test(b)
    	};
    })();

    var guid = 0;
    var readyList = [];
    var isReady = false;
    
    /** Global functions */
    
    // to create a public function within our private scope, we attach the 
    // the function to the window object
    window.renderTwitters = function (obj, options) {
        // private shortcuts
        function node(e) {
            return document.createElement(e);
        }
        
        function text(t) {
            return document.createTextNode(t);
        }

        var target = document.getElementById(options.twitterTarget);
        var data = null;
        var ul = node('ul'), li, statusSpan, timeSpan, i, max = obj.length > options.count ? options.count : obj.length;
        
        for (i = 0; i < max && obj[i]; i++) {
            data = getTwitterData(obj[i]);
                        
            if (options.ignoreReplies && obj[i].text.substr(0, 1) == '@') {
                max++;
                continue; // skip
            }
            
            li = node('li');
            
            if (options.template) {
                li.innerHTML = options.template.replace(/%([a-z_\-\.]*)%/ig, function (m, l) {
                    var r = data[l] + "" || "";
                    if (l == 'text' && options.enableLinks) r = linkify(r);
                    return r;
                });
            } else {
                statusSpan = node('span');
                statusSpan.className = 'twitterStatus';
                timeSpan = node('span');
                timeSpan.className = 'twitterTime';
                statusSpan.innerHTML = obj[i].text; // forces the entities to be converted correctly

                if (options.enableLinks == true) {
                    statusSpan.innerHTML = linkify(statusSpan.innerHTML);
                }

                timeSpan.innerHTML = relative_time(obj[i].created_at);

                if (options.prefix) {
                    var s = node('span');
                    s.className = 'twitterPrefix';
                    s.innerHTML = options.prefix.replace(/%(.*?)%/g, function (m, l) {
                        return obj[i].user[l];
                    });
                    li.appendChild(s);
                    li.appendChild(text(' ')); // spacer :-(
                }

                li.appendChild(statusSpan);
                li.appendChild(text(' '));
                li.appendChild(timeSpan);
            }
            
            ul.appendChild(li);
        }

        if (options.clearContents) {
            while (target.firstChild) {
                target.removeChild(target.firstChild);
            }
        }

        target.appendChild(ul);
    };
    
    window.getTwitters = function (target, id, count, options) {
        guid++;
        

        if (typeof id == 'object') {
            options = id;
            id = options.id;
            count = options.count;
        } 

        // defaulting options
        if (!count) count = 1;
        
        if (options) {
            options.count = count;
        } else {
            options = {};
        }
        
        if (!options.timeout && typeof options.onTimeout == 'function') {
            options.timeout = 10;
        }
        
        if (typeof options.clearContents == 'undefined') {
            options.clearContents = true;
        }
        
        // Hack to disable withFriends, twitter changed their API so this requires auth
        // http://getsatisfaction.com/twitter/topics/friends_timeline_api_call_suddenly_requires_auth
        if (options.withFriends) options.withFriends = false;

        // need to make these global since we can't pass in to the twitter callback
        options['twitterTarget'] = target;
        
        // default enable links
        if (typeof options.enableLinks == 'undefined') options.enableLinks = true;

        // this looks scary, but it actually allows us to have more than one twitter
        // status on the page, which in the case of my example blog - I do!
        window['twitterCallback' + guid] = function (obj) {
            if (options.timeout) {
                clearTimeout(window['twitterTimeout' + guid]);
            }
            renderTwitters(obj, options);
        };

        // check out the mad currying!
        ready((function(options, guid) {
            return function () {
                // if the element isn't on the DOM, don't bother
                if (!document.getElementById(options.twitterTarget)) {
                    return;
                }
                
                var url = 'http://www.twitter.com/statuses/' + (options.withFriends ? 'friends_timeline' : 'user_timeline') + '/' + id + '.json?callback=twitterCallback' + guid + '&count=20&cb=' + Math.random();

                if (options.timeout) {
                    window['twitterTimeout' + guid] = setTimeout(function () {
                        // cancel callback
                        if (options.onTimeoutCancel) window['twitterCallback' + guid] = function () {};
                        options.onTimeout.call(document.getElementById(options.twitterTarget));
                    }, options.timeout * 1000);
                }
                
                var script = document.createElement('script');
                script.setAttribute('src', url);
                document.getElementsByTagName('head')[0].appendChild(script);
            };
        })(options, guid));
    };
    
    // GO!
    DOMReady();
    

    /** Private functions */
    
    function getTwitterData(orig) {
        var data = orig, i;
        for (i in orig.user) {
            data['user_' + i] = orig.user[i];
        }
        
        data.time = relative_time(orig.created_at);
        
        return data;
    }
    
    function ready(callback) {
        if (!isReady) {
            readyList.push(callback);
        } else {
            callback.call();
        }
    }
    
    function fireReady() {
        isReady = true;
        var fn;
        while (fn = readyList.shift()) {
            fn.call();
        }
    }

    // ready and browser adapted from John Resig's jQuery library (http://jquery.com)
    function DOMReady() {
        if ( browser.mozilla || browser.opera ) {
            document.addEventListener( "DOMContentLoaded", fireReady, false );
        } else if ( browser.msie ) {
            // If IE is used, use the excellent hack by Matthias Miller
            // http://www.outofhanwell.com/blog/index.php?title=the_window_onload_problem_revisited

            // Only works if you document.write() it
            document.write("<scr" + "ipt id=__ie_init defer=true src=//:><\/script>");

            // Use the defer script hack
            var script = document.getElementById("__ie_init");

            // script does not exist if jQuery is loaded dynamically
            if (script) {
                script.onreadystatechange = function() {
                    if ( this.readyState != "complete" ) return;
                    this.parentNode.removeChild( this );
                    fireReady.call();
                };
            }

            // Clear from memory
            script = null;

            // If Safari  is used
        } else if ( browser.safari ) {
            // Continually check to see if the document.readyState is valid
            var safariTimer = setInterval(function () {
                // loaded and complete are both valid states
                if ( document.readyState == "loaded" || 
                document.readyState == "complete" ) {

                    // If either one are found, remove the timer
                    clearInterval( safariTimer );
                    safariTimer = null;
                    // and execute any waiting functions
                    fireReady.call();
                }
            }, 10);
        }
    }
    
    function relative_time(time_value) {
        var values = time_value.split(" "),
            parsed_date = Date.parse(values[1] + " " + values[2] + ", " + values[5] + " " + values[3]),
            date = new Date(parsed_date),
            relative_to = (arguments.length > 1) ? arguments[1] : new Date(),
            delta = parseInt((relative_to.getTime() - parsed_date) / 1000),
            r = '';
        
        function formatTime(date) {
            var hour = date.getHours(),
                min = date.getMinutes() + "",
                ampm = 'AM';
            
            if (hour == 0) {
                hour = 12;
            } else if (hour > 12) {
                hour -= 12;
                ampm = 'PM';
            }
            
            if (min.length == 1) {
                min = '0' + min;
            }
            
            return hour + ':' + min + ' ' + ampm;
        }
        
        function formatDate(date) {
            var ds = date.toDateString().split(/ /),
                mon = ds[1],
                day = ds[2],
                dayi = parseInt(day),
                year = date.getFullYear(),
                thisyear = (new Date()).getFullYear(),
                th = 'th';
            
            // anti-'th' - but don't do the 11th, 12th or 13th
            if ((dayi % 10) == 1 && day.substr(0, 1) != '1') {
                th = 'st';
            } else if ((dayi % 10) == 2 && day.substr(0, 1) != '1') {
                th = 'nd';
            } else if ((dayi % 10) == 3 && day.substr(0, 1) != '1') {
                th = 'rd';
            }
            
            if (day.substr(0, 1) == '0') {
                day = day.substr(1);
            }
            
            return mon + ' ' + day + th + (thisyear != year ? ', ' + year : '');
        }
        
        delta = delta + (relative_to.getTimezoneOffset() * 60);

        if (delta < 5) {
            r = 'less than 5 seconds ago';
        } else if (delta < 30) {
            r = 'half a minute ago';
        } else if (delta < 60) {
            r = 'less than a minute ago';
        } else if (delta < 120) {
            r = '1 minute ago';
        } else if (delta < (45*60)) {
            r = (parseInt(delta / 60)).toString() + ' minutes ago';
        } else if (delta < (2*90*60)) { // 2* because sometimes read 1 hours ago
            r = 'about 1 hour ago';
        } else if (delta < (24*60*60)) {
            r = 'about ' + (parseInt(delta / 3600)).toString() + ' hours ago';
        } else {
            if (delta < (48*60*60)) {
                r = formatTime(date) + ' yesterday';
            } else {
                r = formatTime(date) + ' ' + formatDate(date);
                // r = (parseInt(delta / 86400)).toString() + ' days ago';
            }
        }

        return r;
    }
    
    function linkify(s) {
        var entities = {
            '"' : '&quot;',
            '&' : '&amp;',
            '<' : '&lt;',
            '>' : '&gt;'
        };
        
        return s.replace(/[A-Za-z]+:\/\/[A-Za-z0-9-_]+\.[A-Za-z0-9-_:%&\?\/.=]+/g, function(m) {
            return m.link(m);
        }).replace(/(^|[^\w])(@[\d\w\-]+)/g, function(d, m1, m2) {
            return m1 + '@<a href="http://twitter.com/' + m2.substr(1) + '">' + m2.substr(1) + '</a>';
        }).replace(/"&<>/, function (m) {
            return entities[m];
        });
    }
})();