/* ======================================================================

Dundee College
	Glow Controls

=======================================================================*/

/* ======================================================================

Root Variables

=======================================================================*/

/*		debug		*/
var tracer = false;
var testIP = '127.0.0.1'
var debug = false
/*		homepage		*/
var defaultState = '+i1-f1+a1-o1-e1-c0*-g1+b1-d1-l1-n0*-j1-p0+m1+h1-k1';
var siteRoot = 'http://www.dundeecoll.ac.uk/'

var revengeOfTheSlipstar = 0
var TheSlipstarStrike = 0
var slipTime = 6000
var slipSpeed = .5

var galTime = 4500

/* ======================================================================

	Glow Ready 
	
=======================================================================*/
glow.ready(function() {
	/*		local debug messages		*/
	checkTraceIP(testIP)
	
	if (glow.dom.get(document.body).hasClass("EditMode")){}
	else if (glow.dom.get(document.body).hasClass("DesignMode")){}
	else if(readCookie('textonly')=='textmode'){}
	/* if(glow.dom.get('.EditMode').length>0){} */
	else{
		/*		setup searchboxes		*/
		if(glow.dom.get(".searchBox label").length>0){ setupSearchBoxes(glow.dom.get("#sBoxHolder .searchBox"))	}
		/* if(glow.dom.get(".CourseSearch .searchBox").length>0){ setupSearchBoxes(glow.dom.get(".CourseSearch .searchBox")) } */
		/*		arrays of handles and contents		*/
		if(glow.dom.get(".widget .toggle").length>0){ 
			//glow.dom.get('.widget .toggle').after('<div class="dragWidget"></div>');
			
			setupSliders(glow.dom.get(".widget .toggle"), glow.dom.get(".widget .widgetContent"), false); 
			glow.dom.get(".widget .widgetContent").each(function(i){ glow.anim.slideToggle(this, .25); });
			trace('39', 'toggles : '+glow.dom.get(".widget .toggle").length+' :: contents : '+glow.dom.get(".widget .widgetContent").length)
			/*		add widget control buttons		*/
			/*
			glow.dom.get('.widget .toggle').after('<div class="closeWidget"></div>');
			glow.dom.get(".widget .closeWidget").each(function(i){
				glow.dom.get(this).css("cursor", "pointer");
				glow.events.addListener(this,  'click', function () { 
					this.p = glow.dom.get(this).parent()
					//glow.dom.get(this.p).destroy();
					glow.dom.get(this.p).toggleClass("hideWidget")
					glow.anim.fadeTo(glow.dom.get(this.p), 0, .3)
					glow.dom.get(this.p).css('position', 'absolute')
					checkState()
				});
			});
			*/
			
			
		}
		
	
		/*		make content columns sortable and add controls		*/
		if(glow.dom.get("#hp_cols .col1").length>0){
			/*	create outer dragbar	*/	
			var toggs = glow.dom.get(".widget .toggle")
			glow.dom.get('.widget h1').each(function(t){
				var obj = glow.dom.get(this)
				var th = obj.text()
				
				obj.html('<span class="hHand>'+th+'</span>')
				glow.dom.get(toggs[t]).css('display', 'block')
				toggs[t].refH = obj
				glow.dom.create('<span>'+th+'</span>').appendTo(toggs[t]);
				/*
				if (glow.env.ie){
				
				}
				else{ glow.dom.get(toggs[t]).html('<span class="hHand>'+th+'</span>') }*/
			});
			var modSort = new glow.widgets.Sortable( '#hp_cols .col1, #hp_cols .col2, #hp_cols .col3', { draggableOptions : { handle : 'h1' } });
			glow.events.addListener(modSort, "sort", function(event) { checkState() });
			glow.events.addListener(modSort, "enter", function(event) {  });
			
			/*		Check Page State		*/
			
			if(readCookie('modState')){
				/* alert('readCookie: '+readCookie('modState')) */
				//	make sure user cookie includes all widgets
				if(readCookie('modState').length!=defaultState.length){ setPageState(defaultState); checkState() }
				else{ setPageState(readCookie('modState')); }
			}
			else{setPageState(defaultState); checkState(); }
			
			/*		add reset button and setup global reset		*/
			hp_reset()
			
		}
	
		
		/*		Setup popBox events		*/
		if(glow.dom.get(".popBox").length>0){
			initPopBoxes(glow.dom.get(".popBox"))
		}
		
		/*Course Testimonials*/
		if(glow.dom.get(".course_test").length>0){
			courseTestimonals(glow.dom.get(".course_test"))
		}
		
		/*		print page link in footer		*/
		if(glow.dom.get("#footer li").length>0){
			arr = glow.dom.get("#footer li")
			arr.each(function(i){
				if(glow.dom.get(arr[i]).hasClass("last")){ 
					glow.dom.get(arr[i]).removeClass('last') 
					glow.dom.create('<li class="last"><a href="javascript:window.print()">Print Page</a></li>').insertAfter(glow.dom.get(arr[i]));
				}
			});
		}
	
		/*		Set faders on elements		*/
		//if(glow.dom.get("#leftNav").length>0){hoverFade(glow.dom.get("#leftNav"), .7, .25)}
		//if(glow.dom.get(".search").length>0){hoverFade(glow.dom.get(".search"), .7, .25)}
		if(glow.dom.get("#bookmarks li").length>0){hoverFade(glow.dom.get("#bookmarks"), .7, .25)}
	
		/*	this one could go wrong, 
			it should pick up the second col 
			but if .related is moved...		*/
		/*if(glow.dom.get(".related").length>0){
			var col = glow.dom.get('.col')
			hoverFade(glow.dom.get(col[1]), .7, .25)
		}*/
		
		/*		The content block links on mid level pages		*/
		if(glow.dom.get(".imagelinks").length>0){ figureLinkBlocks(glow.dom.get(".imagelinks")) }
		
		
		/*		round corners		*/
		roundedCorners_simple(siteRoot+'App_Themes/DundeeCollege/graphics/','.widget')
		roundedCorners_simple(siteRoot+'App_Themes/DundeeCollege/graphics/','#footer')
		roundedCorners_simple(siteRoot+'App_Themes/DundeeCollege/graphics/','.feature')
		
		roundedCorners_simple(siteRoot+'App_Themes/DundeeCollege/graphics/','#featureLinks')
		
		
		/*		feature links		*/
		if(glow.dom.get('#featureLinks').length>0){
			var fl = glow.dom.get('#featureLinks')
			setupFeatureLinks(fl)
		}
		
		/*		Flash Gallery		*/
		if(glow.dom.get('#dc_tour').length>0){
			glow.dom.get('#dc_tour').css('display', 'block')
			var dc_gal = new glow.embed.Flash(
			"http://www.dundeecoll.ac.uk/dc_tour.swf", 
			"div#dc_tour", 
			"9",
			{
			        height: "350px",
			        width: "490px"
			});
			dc_gal.embed();
			
		}
		if(glow.dom.get('#GardyneGallery').length>0){
			glow.dom.get('#GardyneGallery').css('display', 'block')
			var dc_gg = new glow.embed.Flash(
			"http://www.dundeecoll.ac.uk/dc_gg.swf", 
			"div#GardyneGallery", 
			"9",
			{
			        height: "350px",
			        width: "490px"
			});
			dc_gg.embed();
			
		}
		if(glow.dom.get('#ad_70').length>0){
			glow.dom.get('#ad_70').css('display', 'block')
			var dc_gg = new glow.embed.Flash(
			"http://www.dundeecoll.ac.uk/70/p2.swf", 
			"div#ad_70", 
			"7",
			{
			        height: "373px",
			        width: "680px"
			});
			dc_gg.embed();
			
		}
		
		/*
		Simple Slide Show
		------------------------------------*/
		if(glow.dom.get('.simpleSlideShow').length>0){
			setup_SimpleSlideShow(glow.dom.get('.simpleSlideShow'))
		}
	}
});

/* ======================================================================

Extra Functions

=======================================================================*/

/*

------------------------------------*/
function setup_SimpleSlideShow(arr){
	arr.each(function(i){
		/*		loop through each uls lis		*/
		this.self = glow.dom.get(this) 
		this.parent = this.self.parent().parent()

		this.gal = this.self.get('li')
		var curr = 0
		this.gal.each(function(n){
			if(n==0){  }
			else{
				glow.anim.fadeTo(this, 0, .3)
			}
		});
		this.curr = 0
		this.self.addClass('sss'+i)
		var p = this
		this.galTimer = setInterval ( function() { tripGal(p) }, galTime );
	});
}
function tripGal(obj){
	trace(obj.parent.css('height'))
	if(obj.parent.css('height')=='0px'){obj.parent.addClass('minified')}
	else{ 
		obj.parent.removeClass('minified') 
		obj.curr++
		if(obj.curr>obj.gal.length-1){obj.curr=0}
		obj.gal.each(function(n){
			if(n==obj.curr){ glow.anim.fadeTo(this, 1, .5) }
			else{ glow.anim.fadeTo(this, 0, .5) }
		});
	}
	
}



function fireEvent(obj, n){
	trace(obj+' :: '+n)
}

function setupFeatureLinks(obj){
	var arr = obj.get('.fl_item')
	/*		around about here we want to make an array of divs to contain background images		*/
	obj.bgstr = new Array('graphics/hp_grad.jpg','graphics/hp_botanics.jpg', 'graphics/hp_campus.jpg', 'graphics/hp_space.jpg')
	/*
	***	REWORK	***
	gonna add images straight into the divs
	so they can be updated through the CMS
	Plan is to hide through css then js
	grabs the img src and dumps that into the bgs array
	------------------------------------*/
	/*
obj.bgs = new Array()
	for(pp =0 ;pp<obj.bgstr.length;pp++){
		obj.bgs[pp] = glow.dom.create('<div class="bg_switch" style="background: url('+siteRoot+'App_Themes/DundeeCollege/'+obj.bgstr[pp]+') no-repeat; width:610px; height:307px; position:absolute"> </div>').insertBefore('.feature-content');
	}
*/
	glow.dom.get('.feature').css('background', 'none')
	arr.each(function(i){
		this.tObj = glow.dom.get(this)
		this.arrow = glow.dom.create('<div class="featureArrow">  </div>').insertBefore(this);
		this.p = this.tObj.get('.fl_content')
		this.i = i
		/* this.img = obj.bgs[i] */
		this.istr = this.tObj.get('img').attr('src')
		this.img = glow.dom.create('<div class="bg_switch" style="background: url('+this.istr+') no-repeat; width:610px; height:307px; position:absolute"> </div>').insertBefore('.feature-content');
		this.tObj.get('img').destroy()
		this.linky = this.tObj.get('h2 a')
		this.linky.i = this.i
		glow.events.addListener(this.linky,  'click', function () {
			switchaReenyRoo(glow.dom.get('.fl_item'), i)
			TheSlipstarStrike = i+1
			clearInterval ( revengeOfTheSlipstar )
			return(false)
		});
	});
	switchaReenyRoo(arr, 0)
	revengeOfTheSlipstar = setInterval ( "theSlipstar()", slipTime );
	glow.events.addListener("#featureLinks", "mouseover", function(event) { clearInterval ( revengeOfTheSlipstar ) });
	glow.events.addListener("#featureLinks", "mouseout", function(event) { revengeOfTheSlipstar = setInterval ( "theSlipstar()", slipTime ); });
}
function switchaReenyRoo(arr, n){
	arr.each(function(i){
		if(i==n){
			glow.anim.css(this, slipSpeed, { "height" : 150 }).start();
			this.p.css('display', 'block')
			this.arrow.css('display', 'block')			
			if (glow.env.ie){}
			else{ glow.anim.fadeTo(this.p, 1, slipSpeed); glow.anim.fadeTo(this.arrow, 1, slipSpeed) }
			this.tObj.addClass('active')
			glow.anim.fadeTo(this.img, 1, slipSpeed)
		}
		else{
			glow.anim.css(this, slipSpeed, { "height" : 30 }).start();
			if (glow.env.ie){}
			else{ glow.anim.fadeTo(this.p, 0, slipSpeed); glow.anim.fadeTo(this.arrow, 0, slipSpeed) }
			glow.anim.fadeTo(this.img, 0, slipSpeed)
			this.tObj.removeClass('active')
			this.p.css('display', 'none')
			this.arrow.css('display', 'none')
		}
	});
}

function theSlipstar(){
	if(TheSlipstarStrike>3){TheSlipstarStrike=0}
	switchaReenyRoo(glow.dom.get('.fl_item'), TheSlipstarStrike)
	TheSlipstarStrike++
}
/*
Link Block Animations
-----------------------------------------------------------------------

Function Call
-----------------------------------------------------------------------
	figureLinkBlocks(array)

Parameters
-----------------------------------------------------------------------
	arr:	array of elements to be affected

-----------------------------------------------------------------------

Purpose
-----------------------------------------------------------------------
	add hover events to selected blocks

-----------------------------------------------------------------------

Issues
-----------------------------------------------------------------------

-----------------------------------------------------------------------*/
function figureLinkBlocks(arr){
	
}

/*
Rounded Corners - Simple Solution
-----------------------------------------------------------------------

Function Call
-----------------------------------------------------------------------
	roundedCorners_simple(src, affect)

Parameters
-----------------------------------------------------------------------
	src:	path to image glyph, relative to page served

	affect:	string identifier of elements to round
			can be '.class', '#id' or a tag such as 'div'

-----------------------------------------------------------------------

Purpose
-----------------------------------------------------------------------
	to overcome IE and its fear of CSS3 border-radius
	the affected elements are given an additional 4 divs, each 
	positioned absolutely at the corners of the element with the 
	appropriate image inside
	images are named with a position indicator matching the crn array
	  -->  var crn = new Array('tr','tl','bl','br')
	the new divs are positioned and given the src+crn[index]

-----------------------------------------------------------------------

Issues
-----------------------------------------------------------------------
	currently the values for corner radius and image offsets are
	hardcoded to fit this context
	
		-->	either some funky calculations 
			or additional variables are required 
			to make this all a bit more flexible
	
	the images used must be created as png-8 or gifs

-----------------------------------------------------------------------*/
function roundedCorners_simple(src, affect){
	/*		iterate through all supplied objects to be affected		*/
	var targets = glow.dom.get(affect).each(function(i){
		var obj = glow.dom.get(this)
		
		if (glow.env.ie){	
			obj.corners = new Array()
			var crn = new Array('tl','tr','bl','br')
			for(var rc_i=0;rc_i<4;rc_i++){
				obj.corners[rc_i] = glow.dom.create('<div class='+crn[rc_i]+'><img src="'+src+''+crn[rc_i]+'.png" /></div>').appendTo(obj);
				obj.corners[rc_i].css('position', 'absolute')
				obj.corners[rc_i].css('width', '5px')
				obj.corners[rc_i].css('height', '5px')
				obj.corners[rc_i].css('overflow', 'hidden')
			}
			obj.css('position', 'relative')
			
			obj.corners[0].css('top', '0')
			obj.corners[0].css('left', '0')
			
			obj.corners[1].css('top', '0')
			obj.corners[1].css('right', '0')
			
			obj.corners[2].css('bottom', '0')
			obj.corners[2].css('left', '0')		
			
			obj.corners[3].css('bottom', '0')
			obj.corners[3].css('right', '0')
			if (glow.env.ie < 7){			
				obj.corners[1].css('top', '0')
				obj.corners[1].css('right', '-1px')
				
				obj.corners[2].css('bottom', '-1px')
				obj.corners[2].css('left', '0')		
				
				obj.corners[3].css('bottom', '-1px')
				obj.corners[3].css('right', '0')
			}
		}
		else{
			obj.css('-moz-border-radius', '6px')
			obj.css('-webkit-border-radius', '6px')
			obj.css('-border-radius', '6px')
		}
	});
}
/*
-----------------------------------------------------------------------
Hover Fade

-----------------------------------------------------------------------
Function Call

	hoverFade(obj, base, speed)
-----------------------------------------------------------------------
Parameters

	obj:	reference of object to be faded
	base:	base opacity setting (when faded out), float between 0 / 1
	speed:	speed of transition in seconds

-----------------------------------------------------------------------
Purpose

	add hover events to selected elements
	when user mouses over object the object is faded to full opacity
	when user mouses out object is faded down to specified setting

-----------------------------------------------------------------------
Issues

	fade effect seems to break fonts in all ie versions
		-->	disabled in ie until a suitable fix is found
		-->	possibly create duplicate function for use with images only

-----------------------------------------------------------------------*/
function hoverFade(obj, base, speed){
	if(!glow.env.ie){
		obj.base = base
		obj.speed = speed
		glow.anim.fadeTo(obj, obj.base, obj.speed)
		obj.faded = true
		glow.events.addListener(obj, 'mouseenter', hoverFader, obj);
		glow.events.addListener(obj, 'mouseleave', hoverFader, obj);
	}
}
function hoverFader(){
	if(this.faded==true){glow.anim.fadeTo(this, 1, this.speed); this.faded = false}
	else{glow.anim.fadeTo(this, this.base, this.speed); this.faded = true}
	
}


/*
Setup Search Box
-----------------------------------------------------------------------

	setupSearchBox(param1, param2, param3)

-----------------------------------------------------------------------

Removes the label element from before search input and adds the content
as the value, also adds focus / blur functions

-----------------------------------------------------------------------*/
function setupSearchBoxes(obj){
	var sDiv = obj.children()
	trace('setupSearchBoxes', sDiv)
	glow.dom.get(sDiv[0]).css("display", "none")
	var box = glow.dom.get(sDiv[1])
	box.defaultText = glow.dom.get(sDiv[0]).text()
	if(box.defaultText=='Search:'){ box.defaultText = 'Search Site'}
	box.attr("value", box.defaultText);
	//box.css('width', '172px')
	box.addClass('noLabel')
	
	glow.events.addListener(box, 'focus', focusBox, box);
	glow.events.addListener(box, 'blur', unfocusBox, box);
}
function focusBox(){
	if(this.attr('value')==this.defaultText){ this.attr("value", '') }
}
function unfocusBox(){
	//if(this.attr('value')=='' || this.attr('value')==' ' || this.attr('value')==null || !this.attr('value')){	this.attr("value", this.defaultText) }
	if(this.attr('value')==''){	this.attr("value", this.defaultText) }
}


/*
Homepage Reset Functions
-----------------------------------------------------------------------

Function Call(s)
-----------------------------------------------------------------------
	hp_reset()
	 |
	 +--> resetHomepage()

-----------------------------------------------------------------------

Purpose
-----------------------------------------------------------------------
	create a reset link in top nav section which links to
	resetHomepage function
	this secondary function resets the column setup to default values
	then resets user cookie to default values 

-----------------------------------------------------------------------*/
function hp_reset(){
	/* alert('add reset link') */
	var cUL = glow.dom.get('#vTopNav')
	var nav = cUL.get("ul")
	//nav.def = nav.html()+'<li><a href="reset" class="hp_reset">Reset Homepage</a></li>'
	
	var resetLink = glow.dom.create('<li><a href="reset" class="hp_reset">Reset Homepage</a></li>').appendTo(nav);
	//var resetLink = glow.dom.get('.hp_reset')
	glow.events.addListener(resetLink, 'click', resetHomepage, resetLink);
	
	/*		close all boxes on page load		*/
	
	
}
function resetHomepage(){
	trace('resetHomepage', 'reset page')
	setPageState(defaultState); 
	checkState()
	return(false)
	
}

/*
Check Page State
-----------------------------------------------------------------------

	checkState()

-----------------------------------------------------------------------

Assumes a colum setup of:

	<div class="col1'></div>
	<div class="col2'></div>
	<div class="col3'></div>
	
Using widgets with a toggle button class of '.toggle'
Function then traverses each colum in turn writing the div id and state
if widget with id of "a" is minimised and hidden the resulting string reference 
would be: '-a0'

if the same div was maximised and open it would be: '+a1'

Columns are indicated in the string as an '*'
Once all columns have been read and the string structure completed
the string is written out to the modState cookie

final string may look like: '-a+b-d*-c-e+f*+h+g-i'

-----------------------------------------------------------------------*/
var pageState="";
function checkState(){
	pageState="";
	var str = ""
	glow.dom.get(".col1 .toggle").each(function(i){
		var maxi = "+"
		var hidden = "1"
		if (glow.dom.get(this).hasClass("toggleClosed")){ maxi = "-" }
		if (glow.dom.get(this).parent().hasClass("hideWidget")){ hidden = "0" }
		str=str+maxi+glow.dom.get(this).parent().attr("id")
		str=str+hidden
	});
	str=str+"*"
	
	glow.dom.get(".col2 .toggle").each(function(i){
		var maxi = "+"
		var hidden = "1"
		if (glow.dom.get(this).hasClass("toggleClosed")){ maxi = "-" }
		if (glow.dom.get(this).parent().hasClass("hideWidget")){ hidden = "0" }
		str=str+maxi+glow.dom.get(this).parent().attr("id")
		str=str+hidden
	});
	str=str+"*"
	
	glow.dom.get(".col3 .toggle").each(function(i){
		var maxi = "+"
		var hidden = "1"
		if (glow.dom.get(this).hasClass("toggleClosed")){ maxi = "-" }
		if (glow.dom.get(this).parent().hasClass("hideWidget")){ hidden = "0" }
		str=str+maxi+glow.dom.get(this).parent().attr("id")
		str=str+hidden
	});
	pageState = str
	trace('checkState', 'setCookie > '+pageState)
	createCookie('modState',pageState,365)
	
}

/*
Set Page State
-----------------------------------------------------------------------

	setPageState(readCookie('modState'))

p1:	contents of stored modState cookie

-----------------------------------------------------------------------

Parses the cookie data resulting in three arrays filled with string pairs 
of toggle state and div id:
cookie data: 
	'-a1+b1-d0*-c0-e1+f1*+h1+g0-i0'
becomes:
	col1['-a1','+b1','-d0']
	col2['-c0','-e1','+f1']
	col3['+h1','+g0','-i0']
	
each array is then traversed, putting widgets into specified columns
and setting toggle states and setting visibility

-----------------------------------------------------------------------*/
function setPageState(cState){
	/*		split cookie data into columns		*/
	var modCols = cState.split('*');
	for(var i=0;i<modCols.length;i++){
		/*		loop through each mod in this column		*/
		for(var j=1;j<modCols[i].length;j+=3){
			/*		find object from string data		*/
			var tobj = glow.dom.get("#"+modCols[i].charAt(j))			
			/*		get toggle state from string data		*/
			var togg = modCols[i].charAt(j-1)
			/*		close content region if needed		*/
			if(togg=='-'){ 
				var content = tobj.get('.widgetContent')
				glow.anim.slideUp(content, .25); 
				//tobj.get('.toggle').toggleClass("toggleClosed")
				if(!tobj.get('.toggle').hasClass("toggleClosed")){
					tobj.get('.toggle').addClass("toggleClosed")
				}
				
				if(tobj.get('.toggle').hasClass('toggleClosed')){
					tobj.get('h1').toggleClass('rcMePlease')
				}
			}
			else { 
				var content = tobj.get('.widgetContent')
				glow.anim.slideDown(content, .25); 
				//tobj.get('.toggle').toggleClass("toggleClosed")
				if(tobj.get('.toggle').hasClass("toggleClosed")){
					tobj.get('.toggle').toggleClass("toggleClosed")
				}
			}
			/*		get visibility state from string data		*/
			var vis = modCols[i].charAt(j+1)
			if (vis=='0'){
				glow.anim.fadeTo(tobj, 0, .3)
				if(!tobj.hasClass("hideWidget")){
					tobj.addClass("hideWidget")
				}
				tobj.css('position', 'absolute')
			}
			else{
				glow.anim.fadeTo(tobj, 1, .3)
				if(tobj.hasClass("hideWidget")){
				tobj.toggleClass("hideWidget")
				}
				tobj.css('position', 'relative')
			}
			/*		put mods into proper columns		*/
			if(i==0){ tobj.appendTo(glow.dom.get(".col1"));	}
			if(i==1){ tobj.appendTo(glow.dom.get(".col2"));	}
			if(i==2){ tobj.appendTo(glow.dom.get(".col3"));	}
		}
	}
	
}



/*
Setup Sliders Function
-----------------------------------------------------------------------

	setupSliders(handles, contents, assoc)

p1:	Array of elements to be used as handles
	
p2:	Array of elements to be scrolled
	
p3:	association toggle, when set to true each content block is hidden 
	on load and only one can be opened at any time
	
-----------------------------------------------------------------------

	creates associated arrays of content sliders based on specified 
	elements and options

-----------------------------------------------------------------------*/
function setupSliders(handles, contents, assoc){ 
	//	close all panels if associated
	if(assoc==true){contents.each(function(i){ glow.anim.slideToggle(this, .25); });}
	//	iterate through handles creating associations
	
	handles.each(function(i){
		this.content = contents[i]
		
			this.p = glow.dom.get(this).parent()
			if(glow.dom.get(this).hasClass('toggleClosed')){
				this.p.get('h1').toggleClass('rcMePlease')
			}
		//	add click event to handle
		glow.events.addListener(this,  'click', function () { 
			//	toggle asociated content
			glow.dom.get(this).toggleClass("toggleClosed")
			this.p.get('h1').toggleClass('rcMePlease')
			checkState(handles)
			glow.anim.slideToggle(this.content, .25);
			//	close all others
			if(assoc==true){ 
				contents.each(function(j){ if(j!=i){ glow.anim.slideUp(this, .25); } }); 
			}
		});
		glow.dom.get(this).css("cursor", "pointer");
	});
}

function setupExtraSliders(togg, addi){
	togg.each(function(i){
		glow.events.addListener(togg,  'click', function () {
			if(glow.dom.get(this).css("top")=='45px'){
				glow.anim.css(this, .25, { "top" : 0}).start();
				glow.anim.css(addi, .25, { "top" : '-4px'}).start();
				glow.anim.css(glow.dom.get('#vTopNav'), .25, { "margin-bottom" : '45px'}).start();
			}
			else{
				glow.anim.css(this, .25, { "top" : 45 }).start();
				glow.anim.css(addi, .25, { "top" : 40 }).start();
				glow.anim.css(glow.dom.get('#vTopNav'), .25, { "margin-bottom" : '0px'}).start();
			}
		});
		glow.anim.slideUp(glow.dom.get('#qLinks'))
		
		glow.anim.css(this, .25, { "top" : 0}).start();
		glow.anim.css(addi, .25, { "top" : '-4px'}).start();
		glow.anim.css(glow.dom.get('#vTopNav'), .25, { "margin-bottom" : '45px'}).start();
		
	});
}

/*
Initialise Popup boxes
-----------------------------------------------------------------------

	initPopBoxes(arr)

p1:	array of anchor elements 

-----------------------------------------------------------------------

Takes array of a links, replaces default onclick with a modal popup
containing an iframe of the file specified in links href
***
not the cleanest at present,
this method creates a new popup each time the link is clicked

-----------------------------------------------------------------------*/
function initPopBoxes(arr){
	arr.each(function(i){
		this.props = new Array();
		/*		parse rel tags		*/
		var rel = glow.dom.get(this).attr('rel').split(',')
		for(var j=0;j<rel.length;j++){
			var temp = rel[j].split(':')
			this.props.push(temp[0])
			this.props.push(temp[1])
		}
		for(var k=0;k<this.props.length;k+=2){
			if(this.props[k]=='width'){ this.width = this.props[k+1] }
			else if(this.props[k]=='height'){ this.height = this.props[k+1] }
		}
		glow.events.addListener(this,  'click', function () {
			var src = glow.dom.get(this).attr('href')
			makePanel(src, 420, 340)
			return false;
		});
	});
}

function makePanel(src, width, height){
/* height=height+50 */
	var myOverlay = new glow.widgets.Panel(
	  glow.dom.create('<iframe id="iffy" src="'+src+'" width="'+width+'px" height="'+height+'px" ></iframe>'), {
		  width: 460,
		  height: 360,
		  modal: true,
		  anim: "fade",
		  color: "#ddd"
	    }
	);
	glow.events.addListener(myOverlay, "afterHide", function(event) {
		glow.dom.get('#iffy').destroy()
	});
	myOverlay.show();	
}


/*
Course Testimonials
-----------------------------------------------------------------------*/

function courseTestimonals(arr){
	arr.each(function(i){
		this.props = new Array();
		/*		parse rel tags		*/
		var rel = glow.dom.get(this).attr('rel').split(',')
		for(j=0;j<rel.length;j++){
			var temp = rel[j].split(':')
			this.props.push(temp[0])
			this.props.push(temp[1])
		}
		for(k=0;k<this.props.length;k+=2){
			if(this.props[k]=='width'){ this.width = this.props[k+1] }
			else if(this.props[k]=='height'){ this.height = this.props[k+1] }
		}
		glow.events.addListener(this,  'click', function () {
			var src = glow.dom.get(this).attr('href')
			makePanel2(src, 640, 230)
			return false;
		});
	});
}

function makePanel2(src, width, height){
/* height=height+50 */
	var myOverlay = new glow.widgets.Panel(
	  glow.dom.create('<iframe src="'+src+'" width="'+width+'px" height="'+height+'px" frameborder="0"></iframe>'), {
		  width: 700,
		  height: 250,
		  modal: true,
		  anim: "fade",
		  color: "#ddd",
		  theme: "light"
	    }
	);
	myOverlay.show();	
}




/* ======================================================================

	Util Functions

=======================================================================*/
function checkTraceIP(tIP){
	if(glow.env.gecko==1.9 && navigator.appVersion.indexOf("Mac")!=-1){ if(window.console && window.console.firebug){tracer=true; }}
	
	trace('checkTraceIP', 'glow.ready + trace commands on : '+glow.env.gecko)
}
/* trace out messages */
function trace(lnum, msg){/*if(tracer==true && debug==true){if(!msg){msg=lnum;lnum='!?!'}console.log('['+lnum+']	-->	'+msg)}*/}

/*
Cookie Set / Read / Erase
------------------------------------*/
function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
/* 	alert(readCookie(name)) */
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function eraseCookie(name) {
	createCookie(name,"",-1);
}

