if(typeof SF == "undefined" || !SF){
	var SF = {};
}
(function() {
var Event = YAHOO.util.Event;
var Dom = YAHOO.util.Dom;

SF.Profile = {
	mods : ["profile","progress","usage","mail","groups","students","recent","stats"],
// 	priority: ["mail","groups","students","recent","stats"],
	init: function(){
		// loop through the mods and init the ones present on the page
		for(var x in this.mods){
			var node = Dom.get("pf_"+this.mods[x]);
			if(node){
				this.init_mod(this.mods[x]);
			}
		}
		this.shuffleMods();
	},
	
	shuffleMods: function(){
		// move some items to another column if it will help the layout
		var cNodes=Dom.getElementsByClassName("pf_half", "td", "pf_main");
		var hNodes=[
			Dom.getElementsByClassName("pf_mod", "div", cNodes[0]),
			Dom.getElementsByClassName("pf_mod", "div", cNodes[1])
		];
		var totalH=[0,0];
		for(var x in hNodes){
			for(var y in hNodes[x]){
				var h = Dom.getRegion(hNodes[x][y]).height;
				totalH[x]+=h;
			}
		}
// 		var totalH=[Dom.getRegion(cNodes[0]).height, Dom.getRegion(cNodes[1]).height];
		var diff=totalH[0]-totalH[1];
		var bigC   = (diff > 1) ? 0 : 1;
		var smallC = (diff > 1) ? 1 : 0;
		var diff=Math.abs(diff);
		if(diff < 120){ return; }
		
		
		
		var lastH=[
			Dom.getRegion(hNodes[0][hNodes[0].length-1]).height,
			Dom.getRegion(hNodes[1][hNodes[1].length-1]).height
		];
		
		if(lastH[bigC] < diff){
			cNodes[smallC].appendChild(hNodes[bigC][hNodes[bigC].length-1]);
		}
		return;
		
		var shortH=[5000,5000];
		var shortI=[-1,-1];
		var heights=[[], []];
		for(var x in hNodes){
			var col= (hNodes.parentNode==cNodes[0]) ? 0 : 1;
			var h = Dom.getRegion(hNodes[x]).height;
			heights[col].push(h);
			if(hNodes[x].id=="pf_mail"){ continue; }
			if(heights[col][x] < shortH[col]){
				shortH[col] = h;
				shortI[col] = x;
			}
		}
		// get the new diff if we move the shortest element from the 
		
		
		
		if(diff < shortest){ return; }
// 		var lNodes=Dom.getElementsByClassName("pf_mod", "div", cNodes[0]);
// 		var rNodes=Dom.getElementsByClassName("pf_mod", "div", cNodes[1]);
		var shortest=0;
		var total=[0,0];
		for(var x in lNodes){
			var h = Dom.getRegion(lNodes[x]).height;
			total[0]+=h;
		}
		for(var x in rNodes){
			var h = Dom.getRegion(rNodes[x]).height;
			total[1]+=h;
		}
		
		alert(total);
	},
	last_usage:0,
	update_usage: function(){
		var now = new Date().getTime();
		if(now-this.last_usage < 200){ return; }
		this.last_usage=now;
		var nq=this.usage.q;
		// get the list of enabled graph elements
		var cbNodes=Dom.get("usage_admin").getElementsByTagName("input");
		var ele=[];
		for(var x =0; x<cbNodes.length; x++){
			if(cbNodes.item(x).checked){
				ele.push(cbNodes.item(x).name);
			}else if(cbNodes.item(x).name=="date_from"){
				nq+="&date_from="+escape(cbNodes.item(x).value);
			}else if(cbNodes.item(x).name=="date_to"){
				nq+="&date_to="+escape(cbNodes.item(x).value);
			}
		}
		nq+="&gran="+escape(Dom.get("pf_gran").value);
		var f=["label"];
		var h=[];
		for(var x in ele){
			f.push({key:ele[x], parser: "number"});
			h.push({ yField:ele[x], displayName:ele[x]});
			nq+="&pfe[]="+ele[x];
		}
		this.usage.ds.liveData=nq;
		this.usage.ds.responseSchema = {
			resultsList: "data",
			fields: f
		}
		this.usage.hSeries = h;
		if(this.usage.uChart){
			this.usage.uChart.set("series", this.usage.hSeries);
// 			this.usage.uChart.refreshData();
		}
	},
	
	init_mod: function(mod){
		switch(mod){
			case "usage":
				this.usage={};
				YAHOO.widget.Chart.SWFURL="/includes/packages/yui/2.7/charts/assets/charts.swf";
				this.usage.q="/modules/tt/ajax/stats.php?profile_id="+profile_id+"&sessionid="+sessionid;
				this.usage.ds = new YAHOO.util.DataSource(this.usage.q);
				this.usage.ds.responseType = YAHOO.util.DataSource.TYPE_JSON;
				this.usage.ds.connXhrMode = "queueRequests";
				this.usage.uChart = false;
				this.update_usage();
				var vAxis = new YAHOO.widget.NumericAxis();
				this.usage.uChart = new YAHOO.widget.LineChart( "usage_chart", this.usage.ds, {
					series: this.usage.hSeries,
					xField: "label",
					yAxis: vAxis,
					wmode: "opaque",
					//only needed for flash player express install
					expressInstall: "/includes/packages/yui/2.7/charts/assets/expressinstall.swf",
					style : {
						padding: 0,
						legend : {
							display: "bottom",
							padding: 1,
							spacing: 8
						}
					}
				});
				break;
			case "stats":
				// mince up the accordian
				var heads=Dom.getElementsByClassName("pfg", "li", "pf_"+mod);
				this.pfgc=[];
				this.pfgc[0]=0;
				this.pfgh = 99999;
				for(var x in heads){
					var ulNode=heads[x].getElementsByTagName("ul").item(0);
					var liNode=ulNode.getElementsByTagName("li");
					var r = Dom.getRegion(liNode.item(0));
					var id=heads[x].id.substr(3);
					this.pfgc[id]=liNode.length;
					if(r.height < this.pfgh){
						this.pfgh=r.height;
					}
					if(!Dom.hasClass(heads[x], "open")){
						ulNode.style.height="0px";
					}
				}
				break;
			case "students":
				this.students = {
					page:function(p){
						var activeNode=Dom.get("pf_student_active");
						var hiddenNode=Dom.get("pf_student_hidden");
						var tableNode=Dom.get("pf_student_"+p);
						var oldTable=activeNode.getElementsByTagName("table").item(0);
						hiddenNode.appendChild(oldTable);
						activeNode.appendChild(tableNode);
						var buttons = Dom.get('pf_student_sortrow').getElementsByTagName("a");
						for(var x = 0; x<buttons.length; x++){
							Dom.removeClass(buttons.item(x), "pf_disabled");
						}
						Dom.addClass("pf_student_button_"+p, "pf_disabled");
					}
					
				};
				break;
				var sortMenuClick = function(p_sType, p_aArgs, p_oItem){
					if(!p_oItem){
						p_oItem={value: "normalclout"};
					}
					var url="/modules/comment/report.phtml?tab=students&sort="+p_oItem.value+"&sessionid="+sessionid;
					window.location=url;
				};
				var splitMenu = [
					{ 
						text:"<img src='/modules/comment/icons/clout4.png' /> Rank",
						value: "normalclout",
						onclick:{fn: sortMenuClick}
					},{
						text:"<img src='/modules/tt/css/user.png' /> Name",
						value: "realname",
						onclick:{fn: sortMenuClick}
					},{
						text:"<img src='/modules/comment/icons/c-full-16.png' /> Participation",
						value: "participation",
						onclick:{fn: sortMenuClick}
					},{
						text:"<img src='/modules/comment/icons/award.png' /> Awards",
						value: "numPositiveAward",
						onclick:{fn: sortMenuClick}
					},{
						text:"<img src='/modules/comment/icons/comments.png' /> Comments",
						value: "numComments",
						onclick:{fn: sortMenuClick}
					},{
						text:"<img src='/modules/comment/icons/f12-16.png' /> Inappropriate Comments",
						value: "numInappropriate",
						onclick:{fn: sortMenuClick}
					}
				];
				this.students.splitButton = new YAHOO.widget.Button({type: "split", label: "<img src='/modules/comment/icons/clout4.png' /> Rank", name: "pf_student_sort_menu", menu: splitMenu, container: "pf_student_sort", onclick: {fn: sortMenuClick}});
				this.sortSelect=false;
				break;
		}
	},
	
	toggleAdmin : function(mod){
		var node = Dom.get("pf_"+mod);
		if(Dom.hasClass(node, "adm_mode")){
			Dom.removeClass(node, "adm_mode");
		}else{
			Dom.addClass(node, "adm_mode");
		}
	},
	
	// handles the accordian clicks
	statAccord : function(id){
		// close any open accordian
		var heads=Dom.getElementsByClassName("pfg", "li", "pf_stats");
		for(var x in heads){
			var hid=heads[x].id.substr(3);
			if(Dom.hasClass(heads[x], "open")){
				var ulNode=heads[x].getElementsByTagName("ul").item(0);
				var a = new YAHOO.util.Motion( 
					ulNode, {
						height: { to: 0 }
					}, 
					0.4, 
					YAHOO.util.Easing.easeIn 
				);
				a.animate();
// 				ulNode.style.height="0px";
				Dom.removeClass(heads[x], "open");
			}else if(hid==id){
				// open the specifid accordian, if it isn't already open
				var ulNode=heads[x].getElementsByTagName("ul").item(0);
				var h=this.pfgc[id]*this.pfgh;
				var a = new YAHOO.util.Motion( 
					ulNode, {
						height: { to: h }
					}, 
					0.4, 
					YAHOO.util.Easing.easeIn 
				);
				a.animate();
// 				ulNode.style.height=this.pfgh[id]+"px";
// 				ulNode.style.height="auto";
				Dom.addClass(heads[x], "open");
			}
		}
		
	}
};

Event.onDOMReady(SF.Profile.init, SF.Profile, true);
})();