String.prototype.trim = function(){return this.replace(/(^\s*)|(\s*$)/g, "");};
String.prototype.startsWith = function(str){return this.substring(0,str.length)==str;};
String.prototype.endsWith = function(str){return this.lastIndexOf(str)==this.length-str.length;};
String.prototype.pad = function(l, s, t){
	return s || (s = " "), (l -= this.length) > 0 ? (s = new Array(Math.ceil(l / s.length)
		+ 1).join(s)).substr(0, t = !t ? l : t == 1 ? 0 : Math.ceil(l / 2))
		+ this + s.substr(0, l - t) : this;
}
String.prototype.repeat = function(c){var s=''; for(var i=0;i<c;i++)s+=this; return s;}
Array.prototype.clean = function(){var a=new Array;for(var i=0,c=0,l=this.length;i<l;i++)if(this[i]!=undefined){a[c]=this[i];c++;}return a;};
Array.prototype.copy = function(){var a=new Array;for(var i=0,l=this.length;i<l;i++){a[i]=this[i];}return a;};
Array.prototype.indexOf = function(v){for(var i=0,l=this.length;i<l;i++){if(this[i]==v)return i;}return -1;};
var fn_number_array_sort = function(a,b){return a - b;};

if (typeof(util)!="object") util = new function(){

	this.PopupWndw = function(url, WndwName, WndwHandle, w, h,
	 Menubar, Resizable, Scrollbars, Status, Toolbar, bSilent)
	{
		if(WndwHandle!=null && typeof(WndwHandle)=="object" && !WndwHandle.closed && WndwHandle.document.location==url){
			WndwHandle.focus();
		}else{
			var Width=(w)? w: 620, Height=(h)? h: 400;
			var screenPosX = window.screen.availWidth / 2 - Width / 2;
			var screenPosY = window.screen.availHeight / 2 - Height / 2 -30;
			Menubar=(!Menubar)? "no": "yes";
			Resizable=(!Resizable)? "no": "yes";
			Scrollbars=(Scrollbars==null||Scrollbars)? "yes": "no";
			Status=(Status==null||Status)? "yes": "no";
			Toolbar=(!Toolbar)? "no": "yes";
			
			WndwHandle = window.open(url, (WndwName? WndwName: "Wndw"), 
			 "dependent=yes,hotkeys=no,width=" + Width + ",height=" + Height + ",left=" + screenPosX + ",top=" + screenPosY 
			 + ",menubar="+Menubar+",resizable="+Resizable+",scrollbars="+Scrollbars+",status="+Status+",toolbar="+Toolbar);
			if(WndwHandle){try{WndwHandle.focus();}catch(e){WndwHandle=null;}}
			if(!WndwHandle&&!bSilent) alert("Popup window could not be launched or was blocked! \nPlease allow popup windows for this site.");
		}
		return WndwHandle;
	};

};

function page_week(increment){
	var week_date = document.forms[0].week_date;
	var yw = week_date.value.split('W'); yw[0] = parseInt(yw[0],10); yw[1] = parseInt(yw[1],10);
	if (increment > 0 && yw[1]==52){
		yw[0] += increment; yw[1] = 1;
	}else if (increment < 0 && yw[1]==1){
		yw[0] += increment; yw[1] = 52;
	}else{
		yw[1] += increment;
	}
	if (yw[1]<10) yw[1] = '0'+yw[1];
	week_date.value = yw.join('W');
}

var CLEAN_URL = true;
function get_href(lnkname, args){
	var href, arg = get_href.arguments;
	switch(lnkname){
		case "scores":
			href = CLEAN_URL? "report/"+ args["student"] + (args["game_id"]?"-game"+args["game_id"]+ (args["difficulty"]? "-"+args["difficulty"]: "-grade"+args["grade"]) +"-scores":"-games") + "-" + args["wk"]
				: 'results.php?student='+ args["student"] + (args["game_id"]?"game_id="+args["game_id"]+(args["difficulty"]? "&level="+args["difficulty"]: "&grade="+args["grade"]):'') + "&wk=" + args["wk"];
			break;
		case "scores-summary":
			href = CLEAN_URL? "report/"+ args["student"] + (args["game_id"]?"-game"+args["game_id"]+ (args["difficulty"]? "-"+args["difficulty"]: "-grade"+args["grade"]) +"-scores":"-summary") + "-" + args["wk"]
				: 'results_summary.php?student='+ args["student"] + (args["game_id"]?"game_id="+args["game_id"]+(args["difficulty"]? "&level="+args["difficulty"]: "&grade="+args["grade"]):'') + "&wk=" + args["wk"];
			break;
		case "mvp-chart": href = CLEAN_URL? "report/most-vigorous-players-"+args["wk"]: "chart_mvp.php?wk="+args["wk"]; break;
		case "mvp-chart-i": href = CLEAN_URL? "report/most-vigorous-players-I-"+args["wk"]: "chart_mvp.php?group=I&wk="+args["wk"]; break;
		case "mvp-chart-ii": href = CLEAN_URL? "report/most-vigorous-players-II-"+args["wk"]: "chart_mvp.php?group=II&wk="+args["wk"]; break;
		case "warm-up-chart": href = CLEAN_URL? "report/warm-up-scoreboards-"+args["wk"]: "chart_warmup.php?wk="+args["wk"]; break;
		case "students":
			href = CLEAN_URL? "report/"+ (args["school"]?args["school"]:"school") +"-"+ (args["teacher"]?args["teacher"]:"teacher") +"-students-" + args["wk"]
				: "students.php?school="+args["school"]+"&teacher="+args["teacher"]+"&wk="+args["wk"];
			break;
		case "teachers":
			href = CLEAN_URL? "report/" + (args&&args["school"]?args["school"]:"school") + "-teachers"
				: "teachers.php"+(args&&args["school"]?"?school="+args["school"]:'');
			break;
		case "schools": href = CLEAN_URL? "report/schools": "schools.php"; break;
		case "admin": href = CLEAN_URL? "admin.php?wk="+args["wk"]: "admin.php?wk="+args["wk"]; break;
		case "admin-pacing-calendar": href = CLEAN_URL? "admin-pacing-calendar-"+args["wk"]: "admin_calendar.php?wk="+args["wk"]; break;
		default: throw "could not generate url";
	}
	return (QZ_BASE_URL?QZ_BASE_URL:'') + href;
}

function cache_update_timer(server_date, cache_date, sec_to_update, call_end){
	var dt = new Date();
	if (server_date instanceof Date){
		var dt2 = new Date(dt);
		dt2.setSeconds(dt.getSeconds() + ((cache_date - server_date)/1000));
		cache_date = dt2;
		this.cache_date = cache_date;
		this.sec_to_update = sec_to_update;
		this.call_end = call_end;
	}else{
		cache_date = this.cache_date;
		sec_to_update = this.sec_to_update;
	}
	var ONE_DAY = 60*60*1000*24, ONE_HOUR = 60*60*1000;
	var expire_date = new Date(dt);
	expire_date.setSeconds(expire_date.getSeconds() + ((cache_date - dt)/1000) + sec_to_update);
	var dd = expire_date - dt;
	dday=Math.floor(dd/ONE_DAY*1);
	dhour=Math.floor((dd%ONE_DAY)/ONE_HOUR*1);
	dmin=Math.floor(((dd%ONE_DAY)%ONE_HOUR)/(60*1000)*1);
	dsec=Math.floor((((dd%ONE_DAY)%ONE_HOUR)%(60*1000))/1000*1);
	if(dday<=0&&dhour<=0&&dmin<=0&&dsec<=0){
		document.getElementById("cache_update").innerHTML = "0:00:00";
		if (typeof(this.call_end)=="function") this.call_end();
	}else{
		document.getElementById("cache_update").innerHTML = String(dhour)+":"+String(dmin).pad(2,'0')+":"+String(dsec).pad(2,'0');
		setTimeout("cache_update_timer();", 1000);
	}
}


