/////////////////////// xmlhttp => general
function init_xmlhttp() {
   // Internet Explorer
   try {req = new ActiveXObject("Msxml2.XMLHTTP");}
   catch(e) {
      try {req = new ActiveXObject("Microsoft.XMLHTTP");}
      catch(oc) {req = null;}
   }

   // Mozilla/Safari
   if (!req && typeof XMLHttpRequest != "undefined") {req = new XMLHttpRequest();}
}

function get_object(name) {
   var ns4 = (document.layers) ? true : false;
   var w3c = (document.getElementById) ? true : false;
   var ie4 = (document.all) ? true : false;

   if (ns4) return eval('document.' + name);
   if (w3c) return document.getElementById(name);
   if (ie4) return eval('document.all.' + name);
   return false;
}

function escape_uri(what){
  if(encodeURIComponent) {
    return encodeURIComponent(what);
  }
  if(escape) {
    return escape(what)
  }
}


/////////////////////// xmlhttp => catalog
function init_cat() {
	// called onLoad => after page has loaded
	// init objects
	sf=get_object('sel_sc');
	si=get_object('q');
	ca=get_object('cc');
	frm=get_object('fr');
	
	// xmlhttp
	init_xmlhttp();
	if (req != null) {
		req.onreadystatechange = process_change_cat_init;
		req.open("GET",the_url_cat,true);
		req.send(null);
	}
}

function send_query_cat(sort_col) {
	// init
	init_xmlhttp();
	
	// globals => ord=passed 'sort_col'; sc=popup val
	ord=sort_col;
	sc=sf.options[sf.selectedIndex].value;
	
	// search input value
	var sv=si.value;
	
	// sort direction
	var dir=(ord=='protected')?'DESC':'ASC';
	
	/// url concat: append 'ts' argument to prevent Safari v2 caching
	var uri = the_url_cat + "?ord=" + ord + "&dir=" + dir + "&q=" + escape_uri(sv) + "&sc=" + sc + "&ts=" + (new Date()).getTime();
	
	// call process_change_cat() when page has loaded
	if (req != null) {
		req.onreadystatechange = process_change_cat;
		res=req.open("GET",uri,true);
		req.send(null);
	}
}

function process_change_cat_init() {
   // page has loaded and HTTP status code is 200 OK
   if (req.readyState == 4 && req.status == 200) {
		// write content
		ca.scrollTop=0;
		ca.innerHTML=req.responseText;
		
		// div visibility
		frm.style.visibility = "visible";
		
		// search input focus
		si.focus();
		
		// resize parent win
		var cook=getCookie("itsaud_win_resized");
		if (!cook) {resize_win();}
	}
}

function process_change_cat() {
   // page has loaded and HTTP status code is 200 OK
   if (req.readyState == 4 && req.status == 200) {
		// write content
		ca.scrollTop=0;
		ca.innerHTML=req.responseText;
		tog_cat_headings(ord);
	}
}
function tog_cat_headings(ord) {	
	// tobble headings layers visibility
	var v_se = document.getElementById("hs_se");
	var v_ti = document.getElementById("hs_ti");
	var v_co = document.getElementById("hs_co");
	var v_au = document.getElementById("hs_au");
	var v_pw = document.getElementById("hs_pw");
	
	// default: series_name
	switch(ord) {
		case 'series_title':
			v_se.style.visibility = "hidden";
			v_ti.style.visibility = "visible";
			v_co.style.visibility = "hidden";
			v_au.style.visibility = "hidden";
			v_pw.style.visibility = "hidden";
			break;
		case 'course':
			v_se.style.visibility = "hidden";
			v_ti.style.visibility = "hidden";
			v_co.style.visibility = "visible";
			v_au.style.visibility = "hidden";
			v_pw.style.visibility = "hidden";
			break;
		case 'series_author':
			v_se.style.visibility = "hidden";
			v_ti.style.visibility = "hidden";
			v_co.style.visibility = "hidden";
			v_au.style.visibility = "visible";
			v_pw.style.visibility = "hidden";
			break;
		case 'protected':
			v_se.style.visibility = "hidden";
			v_ti.style.visibility = "hidden";
			v_co.style.visibility = "hidden";
			v_au.style.visibility = "hidden";
			v_pw.style.visibility = "visible";
			break;
		default:
			v_se.style.visibility = "visible";
			v_ti.style.visibility = "hidden";
			v_co.style.visibility = "hidden";
			v_au.style.visibility = "hidden";
			v_pw.style.visibility = "hidden";
			break;
	}
}


/////////////////////// xmlhttp => series
function init_ser() {
	// called onLoad => after page has loaded
	// init objects
	se=get_object('sec');
	frm=get_object('fr');
	mv=get_object('mov');
	ast=get_object('astat');
	
	// xmlhttp => init
	init_xmlhttp();
	
	// xmlhttp => series
	if (req != null) {
		req.onreadystatechange = process_change_ser_init;
		req.open("GET",the_url_ser,true);
		req.send(null);
	}
}


function send_query_ser(sort_col) {
	// init
	init_xmlhttp();
	
	// globals => ord=passed 'sort_col'
	ord=sort_col;
	
	// sort direction
	var dir=(ord=='asset_bitrate')?'DESC':'ASC';
	
	// url concat: append 'ts' argument to prevent Safari v2 caching
	var uri = the_url_ser + "&ord=" + ord + "&dir=" + dir + "&ts=" +  (new Date()).getTime();
	
	// call process_change_cat() when page has loaded
	if (req != null) {
		req.onreadystatechange = process_change_ser;
		res=req.open("GET",uri,true);
		req.send(null);
	}
}

function process_change_ser_init() {
   // page has loaded and HTTP status code is 200 OK
   if (req.readyState == 4 && req.status == 200) {
		// write content
		se.scrollTop=0;
		se.innerHTML=req.responseText;
		frm.style.visibility = "visible";
		
		// resize parent win
		var cook=getCookie("itsaud_win_resized");
		if (!cook) {resize_win();}	}
}

function process_change_ser() {
   // page has loaded and HTTP status code is 200 OK
   if (req.readyState == 4 && req.status == 200) {
		// write content
		se.scrollTop=0;
		se.innerHTML=req.responseText;
		tog_ser_headings(ord);
	}
}

function tog_ser_headings() {	
	// tobble headings layers visibility
	var v_se = document.getElementById("hs_se");
	var v_ti = document.getElementById("hs_ti");
	var v_ts = document.getElementById("hs_ts");
	var v_br = document.getElementById("hs_br");
	
	// default: asset_seq
	switch(ord) {
		case 'asset_title':
			v_se.style.visibility = "hidden";
			v_ti.style.visibility = "visible";
			v_ts.style.visibility = "hidden";
			v_br.style.visibility = "hidden";
			break;
		case 'asset_time_secs':
			v_se.style.visibility = "hidden";
			v_ti.style.visibility = "hidden";
			v_ts.style.visibility = "visible";
			v_br.style.visibility = "hidden";
			break;
		case 'asset_bitrate':
			v_se.style.visibility = "hidden";
			v_ti.style.visibility = "hidden";
			v_ts.style.visibility = "hidden";
			v_br.style.visibility = "visible";
			break;
		default:
			v_se.style.visibility = "visible";
			v_ti.style.visibility = "hidden";
			v_ts.style.visibility = "hidden";
			v_br.style.visibility = "hidden";
			break;
	}
}

/////////////////////// xmlhttp => series2
function init_ser2() {
	// called onLoad => after page has loaded
	// init objects
	se=get_object('sec');
	frm=get_object('fr');
	ast=get_object('astat');
	
	// xmlhttp => init
	init_xmlhttp();
	
	// xmlhttp => series
	if (req != null) {
		req.onreadystatechange = process_change_ser_init;
		req.open("GET",the_url_ser,true);
		req.send(null);
	}
}

/////////////////////// xmlhttp => asset status
function send_query_asset_status(uri) {
	// init
	init_xmlhttp();
	
	if (req != null) {
		req.onreadystatechange = process_change_asset_status;
		res=req.open("GET",uri,true);
		req.send(null);
	}
	
}

function process_change_asset_status() {
   // page has loaded and HTTP status code is 200 OK
   if (req.readyState == 4 && req.status == 200) {
		// write content
		parent.ast.innerHTML=req.responseText;
	}
}


/////////////////////// xmlhttp => catalog print
function init_cpr() {
	// called onLoad => after page has loaded
	// init objects
	cpr=get_object('cat_pr');
	
	// xmlhttp => init
	init_xmlhttp();
	
	if (req != null) {
		// req.onreadystatechange = process_change_cpr;
		res=req.open("GET",the_url_cpr,false);
		req.send(null);
		cpr.innerHTML=req.responseText;
	}
}


function send_query_cpr(sort_col) {
	// init
	init_xmlhttp();
	
	// if no argument, default sort order:
	var temp=(sort_col) ? sort_col : 'series_name' ;
	
	// globals => ord=passed 'sort_col'
	ord=temp;
	
	// sort direction
	var dir=(ord=='active' || ord=='protected')?'DESC':'ASC';
	
	// url concat: append 'ts' argument to prevent Safari v2 caching
	var uri = the_url_cpr + "?ord=" + ord + "&dir=" + dir + "&ts=" +  (new Date()).getTime();
	
	// call process_change_cat() when page has loaded
	if (req != null) {
		req.onreadystatechange = process_change_cpr;
		res=req.open("GET",uri,true);
		req.send(null);
	}
}

function process_change_cpr() {
   // page has loaded and HTTP status code is 200 OK
   if (req.readyState == 4 && req.status == 200) {
		// write content
		parent.cpr.innerHTML=req.responseText;
	}
}


/////////////////////// xmlhttp => mov
function init_mov(uri) {
	// called onLoad => after page has loaded
	// init objects
	mv=get_object('mov');
	
	// xmlhttp => init
	init_xmlhttp();
	
	if (req != null) {
		res=req.open("GET",uri,false);
		req.send(null);
		mv.innerHTML=req.responseText;
		mv.style.visibility="visible";
	}
}


function send_query_mov(uri) {
	// hide layer
	parent.mv.style.visibility="hidden";
	
	// init
	init_xmlhttp();
	
	// call process_change_cat() when page has loaded
	if (req != null) {
		req.onreadystatechange = process_change_mov;
		res=req.open("GET",uri,true);
		req.send(null);
	}
}

function process_change_mov() {
   // page has loaded and HTTP status code is 200 OK
   if (req.readyState == 4 && req.status == 200) {
		// write content
		parent.mv.style.visibility="visible";
		parent.mv.innerHTML=req.responseText;
	}
}

function mov_visible() {
	// visible
	parent.mv.style.visibility="visible";
}


/////////////////////// go
function jump (where,sel_obj,restore){ //v3.0
  parent.location.href=where;
  if (restore) sel_obj.selectedIndex=0;
}

function go_series(what) {
	// this_url='index.php?' + (new Date()).getTime();
	// location.replace(this_url); // prevent cache
	
	var url_base='series.php';
	var jump_url=url_base+'?series_name='+what;
	parent.location.href=jump_url;
}

function go_play(series,asset,url_base,url_base2) {
	var url_suff='series_name='+series+'&asset_id='+asset;

	// update player
	parent.mv.src="";
	parent.mv.style.visibility="hidden";
	setTimeout(function(){parent.mv.src=url_base+url_suff},100);
	setTimeout(function(){parent.mv.style.visibility="visible"},700);

	// update status msg
	send_query_asset_status(url_base2+url_suff);
}


function go_play_qtl(series,asset,asset_file_name_base,url_base2) {
	// vars
	var qtl_uri='qtl/'+series+'/'+asset_file_name_base+'.qtl';
	var url_suff='series_name='+series+'&asset_id='+asset;
	
	// update status msg
	// send_query_asset_status(url_base2+url_suff)
	
	// xmlhttp
	init_xmlhttp();
	if (req != null) {
		req.open("GET",url_base2+url_suff,false);
		req.send(null);
		
		// update status msg
		ast.innerHTML=req.responseText;
		
		// open qtl
		location.href=qtl_uri;
	}
}



/////////////////////// form_focus
function form_auth_focus() {
// focus, focus, focus
	if (document.auth.username.value != "") {
		document.auth.password.focus();
	}
	else {
		document.auth.username.focus();
		// document.auth.username.select() ;
	}
}


/////////////////////// form validation
function validate_login() {
	var errlist = "";
	var ff = new Array(3);
	ff[1] = "username";
	ff[2] = "password";
		
	for (i=1; i < 3 ; i++) {
		str = "document.auth." + ff[i] + ".value";
		fv = eval (str);

		if (fv == "" || fv == "0") {
			errlist = errlist + ff[i] + ", ";
		}
	}
	
	if (errlist) {
	// get rid of trailing comma
		errlist = errlist.substring (0, (errlist.length - 2));
		errstring = 'You have not filled in required fields (' + ff[1] + ', ' + ff[2] + '). The following fields were left blank:\n\n' + errlist;
		alert (errstring);
		form_auth_focus();
		return false;
	}
	
	else {		
		return true;
	}
}


/////////////////////// windows
function main_win_open (the_url_cat)   {
	window.opener.document.location = the_url_cat;
	window.opener.focus();
}

function open_second_win(uri,width,height,the_win,scroll,tool) {
	var win2_params = "titlebar=0,scrollbars=" + scroll + ",toolbar=" + tool + ",resizable=yes,left=0,top=0,width=" + width + ",height=" + height;
	win2 = open (uri,the_win,win2_params);
	win2.focus();
	if (win2.opener == null) {
		win2.opener = window;
	}
	win2.opener.name = "main_window";    
}

function resize_win() {
	// iw=1019, ih=689;
	var iw=1100;
	var ih=700;
	var sw=self.screen.width;
	var sh=self.screen.height;
	var aw=self.screen.availWidth;
	var ah=self.screen.availHeight;
	var myw=0;
	var myh=0;
	
	if (sw>1024) {
		// above minimal size: 
		// we have to get win size by first loading oversized window (+200 h)
		parent.window.resizeTo(100,100);
		parent.window.resizeTo(iw,ih+200);

		// now get browser dimensions
		if(self.innerWidth) {
			myw = self.innerWidth;
			myh = self.innerHeight;
		}
		else if (document.documentElement && document.documentElement.clientWidth){
			myw = document.documentElement.clientWidth;
			myh = document.documentElement.clientHeight;
		}
		else if (document.body){
			myw = document.body.clientWidth;
			myh = document.body.clientHeight;
		}
		
		// resize
		parent.window.resizeTo(iw,ih+((ih+200)-myh));
	}
	else if (sw==1024) {
		//minimal size
		parent.window.resizeTo(aw,ah) ;

	}
	else if (sw<1024) {
		// less than minimal size
		alert ("This application is optimized for displays of 1024 (w) x 768 (h) or larger.")
	}
	
	// moveTo
	parent.window.moveTo(0,0);
			
	// set itsaud_win_resized cookie
	setCookie("itsaud_win_resized","set",false,false,false,false);
}


/////////////////////// mm
function MM_jumpMenu(targ,selObj,restore){ //v3.0
  eval(targ+".location='"+selObj.options[selObj.selectedIndex].value+"'");
  if (restore) selObj.selectedIndex=0;
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}


/////////////////////// cookie
function setCookie(name, value, expires, path, domain, secure) { 
	var curCookie = name + "=" + escape(value) + 
		((expires) ? "; expires=" + expires.toGMTString() : "") + 
		((path) ? "; path=" + path : "") + 
		((domain) ? "; domain=" + domain : "") + 
		((secure) ? "; secure" : ""); 
	document.cookie = curCookie; 
}

function getCookie(name){
	var dc = document.cookie;
	var prefix = name + "=";
	var begin = dc.indexOf("; " + prefix);
	
	if (begin == -1) {
		begin = dc.indexOf(prefix);
		if (begin != 0) return null;
	}
	else{
		begin += 2;
	}
	
	var end = document.cookie.indexOf(";", begin);
	if (end == -1){
		end = dc.length;
	}
	return unescape(dc.substring(begin + prefix.length, end));
}

function testCookiesAlert() { 
	var exp = new Date(); 
	exp.setTime(exp.getTime() + 1800000);
	
 	// first write a test cookie 
 	setCookie("cookies","cookies",exp,false,false,false); 
	if (document.cookie.indexOf('cookies') != -1) { 
   		alert("Got Cookies!"); 
 	} 
 	else { 
		alert("No Cookies!"); 
 	} 
	
	// now delete the test cookie 
	exp = new Date(); 
	exp.setTime(exp.getTime() - 1800000); 
	setCookie("cookies", "cookies", exp, false, false, false); 
 }

function testCookies() { 
	var exp = new Date(); 
	exp.setTime(exp.getTime() + 1800000);
	
 	// first write a test cookie 
 	setCookie("cookies","cookies",exp,false,false,false); 
	cookieEnabled=(document.cookie.indexOf('cookies') != -1) ? true : false;
	
	// now delete the test cookie 
	exp = new Date(); 
	exp.setTime(exp.getTime() - 1800000); 
	setCookie("cookies", "cookies", exp, false, false, false);
	
	// now return value
	return cookieEnabled;
 }


/////////////////////// etc
function pause_ms(qty) {
	// pause milliseconds
	d = new Date() //today's date
	while (1){
		mill=new Date() // Date Now
		diff = mill-d //difference in milliseconds
		if( diff > qty ) {break;}
	}
}

