var DHTML = (document.getElementById || document.all || document.layers);
var num = 0;

function ro(img,n,t){
	temp = img.src;
	
	if(t=='on') {
		newname = "http://www.boardsource.org/img/nav." + n + "-roll.gif"
	} else {
		newname = "http://www.boardsource.org/img/nav." + n + ".gif"
	}
	
	img.src = newname;

}

function IsNumeric(sText){
   var ValidChars = "0123456789.";
   var IsNumber=true;
   var Char;
 
   for (i = 0; i < sText.length && IsNumber == true; i++) { 
      Char = sText.charAt(i); 
      if (ValidChars.indexOf(Char) == -1) IsNumber = false;
   }
   
   return IsNumber;
}

function redirect(url){
	window.location.href = url;
}

function getObj(name) {
	if (document.getElementById) {
		this.obj = document.getElementById(name);
	} else if (document.all)  {
		this.obj = document.all[name];
	} else if (document.layers)  {
		this.obj = document.layers[name];
	}
	return this.obj;
}

function objExist(name) {
	if (document.getElementById) {
		this.obj = document.getElementById(name);
	} else if (document.all)  {
		this.obj = document.all[name];
	} else if (document.layers)  {
		this.obj = document.layers[name];
	}
	if(this.obj) 
		return true;
	else 
		return false;
}

function divDsp(hideThis,dspState)
{
	if (!DHTML) return;
	var x = new getObj(hideThis);
	//if(!x.style) alert("divDsp: "+hideThis+" does not exsits");
	x.style.display = (dspState)? (dspState=='inline'?'':dspState) : (x.style.display=='inline'||x.style.display=='') ? 'none' : '';
}

function showHideOnCheckbox(parent_id, checkbox)
{
	if (!DHTML) return;
	
	tbody = 'category_'+parent_id;
	if (objExist(tbody)){
		//toggleChildren(parent_id,checkbox);		
		var x = new getObj(tbody);		
		if(checkbox.checked==true)			
			x.style.display='';
		else
			x.style.display='none';
	}
}

function toggleChildren(parent_id, checkbox)
{
	form = document.topicSearchForm;
	for(var i = 0;i < form.elements.length;i++) { 
		arr         = form.elements[i].id.split("_");		
		type        = form.elements[i].type;
		parent_part = arr[0];		
		
		if(parent_part==parent_id && type=='checkbox')
			form.elements[i].checked = checkbox.checked			
	}

}

function popup(href,width,height,win_name) {
	if (!win_name) win_name = 'none';
	var window_features = "height="+height+",width="+width+",toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=1,resizable=1,copyhistory=0,dependent=1,top=100,left=100";
	win = window.open(href,win_name,window_features);
	if(win) {win.focus();}
	return false;
}

function popup_ep(href,width,height,win_name) {
	if (!win_name) win_name = 'none';
	var window_features = "height="+height+",width="+width+",toolbar=0,location=0,directories=0,status=0,menubar=1,scrollbars=1,resizable=1,copyhistory=0,dependent=1,top=100,left=100";
	win = window.open(href,win_name,window_features);
	if(win) {win.focus();}
	return false;
}

function selectAll(selectBox){
	for(var i=0;i<selectBox.options.length;i++){
		selectBox.options[i].selected = true;
	}
	return;
}

function unSelectAll(selectBox){
	for(var i=0;i<selectBox.options.length;i++){
		selectBox.options[i].selected = false;
	}
	return;
}

function selectAllChecked(selectBox){
	for(var i=0;i<selectBox.length;i++){
		selectBox[i].checked = true;
	}
	return;
}

function unSelectAllChecked(selectBox){
	for(var i=0;i<selectBox.length;i++){
		selectBox[i].checked = false;
	}
	return;
}

function numOnly(el) {
	var tmp 	= el.value.replace(/[^0-9.]/g,'');
	var argv 	= numOnly.arguments;
	if (argv.length==2) {
		if(tmp.length >= argv[1]) {
			el.form[(getIndex(el)+1) % el.form.length].focus();
		}
	}
	return el.value=tmp;
}

function getIndex(input) {
	var index = -1, i = 0, found = false;
	while (i < input.form.length && index == -1)
	if (input.form[i] == input)index = i;
	else i++;
	return index;
}



function checkAll(checkBox){
	for(var i=0;i<checkBox.length;i++){
		checkBox[i].checked = true;
	}
	return;
}

function unCheckAll(checkBox){
	for(var i=0;i<checkBox.length;i++){
		checkBox[i].checked = false;
	}
	return;
}



checked_toggle_check = 0;

function checkToggle(checkBox){
	if(checked_toggle_check==0){
		checkAll(checkBox);
		checked_toggle_check = 1;
	} else {
		unCheckAll(checkBox);
		checked_toggle_check = 0;
	}
	return;
}



function Highlight(j,color) {
	if(!color) color 	= "#FFF8CB";
	var n 				= null;
	if (j.parentNode && j.parentNode.parentNode) {
		if (j.parentNode.parentNode.nodeName == 'TD') {
			n = j.parentNode.parentNode.parentNode;			
		} else {
			n = j.parentNode.parentNode;
		}
		//alert(n.nodeName);
	}
	else if (j.parentElement && j.parentElement.parentElement) {
		n = j.parentElement.parentElement;
	}
	if (n) {
		n.style.backgroundColor = color; //if (n.className == "row-color") {  } //E3F1FF //C1DDF2 //F4F6D3
	}
}

function Unhighlight(j) {
    var n = null;
	if (j.parentNode && j.parentNode.parentNode) {
		if (j.parentNode.parentNode.nodeName == 'TD' ) {
			n = j.parentNode.parentNode.parentNode;			
		} else {
			n = j.parentNode.parentNode;
		}		
	}
	else if (j.parentElement && j.parentElement.parentElement) {
		n = j.parentElement.parentElement;
	}
	if (n) {
		n.style.backgroundColor=n.getAttribute('bgcolor'); //if (n.className == "row-color") {  }
	}
}

function CheckRow(j,color) {
	if (j.checked) {
	    Highlight(j,color);
	} else {
	    Highlight(j,"#ffffff");
	}
}

// AJAX Functionality
//Last Update 11/09/2006
function holler(method, url, parameters, callback) {
	var xmlhttp 	= null;
	var method 		= method.toUpperCase();
	 try{
	    if (window.XMLHttpRequest) {
	        xmlhttp = new XMLHttpRequest();
	    } else if (window.ActiveXObject) {
			try {
				xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
			} catch (e) {
				try {
					xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
				} catch (e) {}
			}
	    }
		
		if(method=="POST"){
			xmlhttp.open(method, url, true);
			xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");//application/x-www-form-urlencoded
			xmlhttp.setRequestHeader("Content-length", parameters.length);//parameters.length
			xmlhttp.setRequestHeader("Connection", "close");
			xmlhttp.send(parameters);
		} else{
			xmlhttp.open(method, url+'&'+parameters, true);
			xmlhttp.send(null);
		}
		
     } catch(e){
	 	alert('Error occurred while trying to process your request');
	 	return;
	 }
	
    xmlhttp.onreadystatechange = function () {
	  		if (xmlhttp.readyState == 4 || xmlhttp.readyState == 'complete') {
				if (xmlhttp.status == 200) {
					eval(callback)
				} else{
					alert('An error occurred while trying to return your request. \nError '+xmlhttp.status+': '+xmlhttp.statusText);
					return;
				}
		    }
		};
}

//Last Update 11/08/06
function hollerBack(method,url,parameters,thisObj,LoadingTxt) {
	 var xmlhttp 	= null;
	 var method 	= method.toUpperCase();

	 try{
	    if (window.XMLHttpRequest) {
	        var xmlhttp = new XMLHttpRequest();
	    } else if (window.ActiveXObject) {
			try {
				var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
			} catch (e) {
				try {
					var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
				} catch (e) {}
			}
	    }
		
		if(method=="POST"){
			xmlhttp.open(method, url, true);
			xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");//application/x-www-form-urlencoded
			xmlhttp.setRequestHeader("Content-length", parameters.length);
			xmlhttp.setRequestHeader("Connection", "close");
			xmlhttp.send(parameters);
		} else{
			xmlhttp.open(method, url+'&'+parameters, true);
			xmlhttp.setRequestHeader("Pragma", "no-cache");
			xmlhttp.send(null);
		}
		
     } catch(e){
	 	alert('Error occurred while trying to process your request');
	 	return;
	 }
	
    xmlhttp.onreadystatechange = function () {
			
		if (objExist(thisObj)) { 
			var x = new getObj(thisObj);
		}

		if (xmlhttp.readyState == 4 || xmlhttp.readyState == 'complete') {

			try {
				x.innerHTML = xmlhttp.responseText;
			} catch (e) {
				alert('An error occurred while trying to return your request. \nError '+e.description);
			}
			
			if (xmlhttp.status != 200) {
				alert('An error occurred while trying to return your request. \nError '+xmlhttp.status+': '+xmlhttp.statusText);
				return;
			}
	    } else{
			
			if(LoadingTxt){
				x.innerHTML = '<div>'+LoadingTxt+'</div>';
			} else {
				x.innerHTML = '<div><img src="http://www.boardsource.org/img/icon.indicator.gif" alt="" width="16" height="16" border="0"></div>';				
			}
		}
	};
}


//Last Update 7/17/06
//Requires function loadFrame() (below)
function hollerAtMe(method,formObj,url,thisObj) 
{
	
	this.uniqueId = new Date().getTime();
	this.frameName = 'frame_'+this.uniqueId;
	
	try{
		// Create New hidden iframe
		var divElm = document.createElement('DIV');
		divElm.style.display = 'none';
		document.body.appendChild(divElm);
		divElm.innerHTML = '<iframe name=\"'+this.frameName+'\" id=\"'+this.frameName+'\" src=\"about:blank\" onload=\"loadFrame(this,\''+thisObj+'\')\"></iframe>';
	} catch(e){
	 	alert('Error occurred while trying to create frame');
	 	return;
	 }
	
	try{
		
		//alert(formObj.action+"="+url);
		h_action = formObj.action;
		h_method = formObj.method;
		h_target = formObj.target;
		
		// Set target of ajax call to frame
		formObj.action 	= url;
		formObj.method 	= method;
		formObj.target = this.frameName;
		formObj.submit();
		
		formObj.action	= h_action;
		formObj.method 	= h_method;
		formObj.target 	= h_target;
		
	} catch(e){
	 	alert('Error occurred while trying to submit form');
	 	return;
	 }

	// the source div to swap out
	if (objExist(thisObj)) { 
		var x = new getObj(thisObj);
		x.innerHTML = '<div><img src="http://www.boardsource.org/img/loading.gif" alt="" width="220" height="19" border="0" /></div>';
		//x.innerHTML = '<div><img src="http://www.boardsource.org/img/icon.indicator.gif" alt="" width="16" height="16" border="0" /></div>';
	}
	

}


function hollerBacki(method,url,thisObj) 
{
	this.uniqueId = new Date().getTime();
	this.frameName = 'frame_'+this.uniqueId;
	
	try{
		// Create New hidden iframe
		var divElm = document.createElement('DIV');
		//divElm.style.display = 'none';
		document.body.appendChild(divElm);
		divElm.innerHTML = '<iframe name=\"'+this.frameName+'\" id=\"'+this.frameName+'\" src=\"about:blank\" onload=\"loadFrame(this,\''+thisObj+'\')\"></iframe>';
		var xframe = new getObj(this.frameName);
		
	} catch(e){
	 	alert('Error occurred while trying to create frame');
	 	return;
	 }
	
	try{
		
	} catch(e){
	 	alert('Error occurred while trying to submit form');
	 	return;
	 }

	// the source div to swap out
	if (objExist(thisObj)) { 
		var x = new getObj(thisObj);
		x.innerHTML = '<div><img src="http://www.boardsource.org/img/loading.gif" alt="" width="220" height="19" border="0" /></div>';
		//x.innerHTML = '<div><img src="http://www.boardsource.org/img/icon.indicator.gif" alt="" width="16" height="16" border="0" /></div>';
	}
	

}


function loadFrame(iframeObj,thisObj) {
	try{
		frameName = iframeObj.id;
		var x = new getObj(thisObj);
		x.innerHTML = '<div><img src="http://www.boardsource.org/img/loading.gif" alt="" width="220" height="19" border="0" /></div>';
		x.innerHTML = window.frames[frameName].document.body.innerHTML;
	} catch(e){
	 	alert('Error occurred while trying to load data from frame');
	 	return;
	}
}

function addDoc(set_v) {
	docwin = popup('/admin/ul.asp?set_v='+set_v,400,250,'addDocWin');
}

function newPopup(submodule,set_v) {
	popupwin = popup('/admin/Popup.asp?module=popup.' + submodule + '&set_v='+set_v,640,550,'popupWin');
}

function upLoadFile(method,formObj,url,thisObj) 
{
	
	this.uniqueId = new Date().getTime();
	this.frameName = 'frame_'+this.uniqueId;
	
	try{
		// Create New hidden iframe
		var divElm = document.createElement('DIV');
		//divElm.style.display = 'none';
		document.body.appendChild(divElm);
		divElm.innerHTML = '<iframe name=\"'+this.frameName+'\" id=\"'+this.frameName+'\" src=\"about:blank\" onload=\"loadFrame(this,\''+thisObj+'\')\"></iframe>';
	} catch(e){
	 	alert('Error occurred while trying to create frame');
	 	return;
	 }
	
	try{
		
		// Hold on to what the form was before submitting
		h_encoding			= formObj.encoding;
		
		h = formObj;

		/*h_action			= formObj.action;*/
		h_method			= formObj.method;
		h_target			= formObj.target;
		
		// Set target of ajax call to frame
		formObj.action 	= url;
		formObj.method 	= method;
		formObj.target = this.frameName;
		formObj.submit();
		
		/*
		for (property in formObj.action) {
    	big_list +=property+"\n";
	  }	*/
	  
	  	alert(formObj.action);
		//alert(formObj.action);
		
		//Reset form back to what it was originally 
		formObj.action 		= h.action;
		formObj.method 		= h_method;
		formObj.target 		= h_target;
		formObj.encoding 	= h_encoding;/**/
	} catch(e){
	 	alert('Error occurred while trying to submit form');
	 	return;
	 }

	// the source div to swap out
	if (objExist(thisObj)) { 
		var x = new getObj(thisObj);
		x.innerHTML = '<div><img src="http://www.boardsource.org/img/icon.indicator.gif" alt="" width="16" height="16" border="0"></div>';
	}
	

}

function upLoadFile2(formObj,url,thisObj) 
{
	
	this.uniqueId = new Date().getTime();
	this.frameName = 'frame_'+this.uniqueId;
	
	try{
		// Create New hidden iframe
		var divElm = document.createElement('DIV');
		//divElm.style.display = 'none';
		document.body.appendChild(divElm);
		divElm.innerHTML = '<iframe name=\"'+this.frameName+'\" id=\"'+this.frameName+'\" src=\"about:blank\" onload=\"loadFrame(this,\''+thisObj+'\')\"></iframe>';
	} catch(e){
	 	alert('Error occurred while trying to create frame');
	 	return;
	 }
	
	try{
		//alert(formObj.encoding);
		
		// Hold on to what the form was before submitting
		h_encoding			= formObj.encoding;
		h_action			= formObj.action;
		h_method			= formObj.method;
		h_target			= formObj.target;
		
		
		
		// Set target of ajax call to frame
		formObj.encoding 	= "multipart/form-data";
		formObj.action 	= url;
		formObj.method 	= "POST";
		formObj.target = this.frameName;
		formObj.submit();
		
		
		
		//alert(formObj.action);
		// Submit Form with new file-encoding
		formObj.submit();
		
		//Reset form back to what it was originally 
		formObj.action 		= h_action;
		formObj.method 		= h_method;
		formObj.target 		= h_target;
		formObj.encoding 	= h_encoding;/**/
	} catch(e){
	 	alert('Error occurred while trying to submit form');
	 	return;
	 }

	// the source div to swap out
	if (objExist(thisObj)) { 
		var x = new getObj(thisObj);
		x.innerHTML = '<div><img src="http://www.boardsource.org/img/icon.indicator.gif" alt="" width="16" height="16" border="0"></div>';
	}
	

}


function loadFrame(iframeObj,thisObj) {
	try{
		frameName = iframeObj.id;
		var x = new getObj(thisObj);
		x.innerHTML = '<div><img src="http://www.boardsource.org/img/loading.gif" alt="" width="220" height="19" border="0" /></div>';
		x.innerHTML = window.frames[frameName].document.body.innerHTML;
	} catch(e){
	 	alert('Error occurred while trying to load data from frame');
	 	return;
	}
}

function getFormValues(fobj,valFunc) {    
	var str         = "";
	var valueArr     = null;
	var val         = "";
	var cmd         = "";

	for(var i = 0;i < fobj.elements.length;i++) {        
		switch(fobj.elements[i].type) {            
			case "hidden":
			case "text":
			case "textarea":
			case "password":
				if(valFunc) {
					//use single quotes for argument so that the value of
					//fobj.elements[i].value is treated as a string not a literal
					cmd = valFunc + "(" + 'fobj.elements[i].value' + ")";
					val = eval(cmd)
				}
				str += fobj.elements[i].name + "=" + escape(fobj.elements[i].value) + "&";
			break;            
			case "select-one":
				str += fobj.elements[i].name + "=" + fobj.elements[i].options[fobj.elements[i].selectedIndex].value + "&";
			break;
			case "select-multiple":                
				for(var z=0;z<fobj.elements[i].options.length;z++){
					if(fobj.elements[i].options[z].selected==true)
						str += fobj.elements[i].name + "=" + fobj.elements[i].options[z].value + "&";
				}
			break;
			case "checkbox":
				if(fobj.elements[i].checked==true)
					str += fobj.elements[i].name + "=" + escape(fobj.elements[i].value) + "&";
			break;
		}
	}
	str = str.substr(0,(str.length - 1)); 
	return str;
} 

function maxlength(obj, len)
{
	if(obj.value.length>=len) { obj.value = obj.value.substr(0,len) }
}

function print_r(obj) {
	big_list = "";
	for (property in obj) {
    	big_list +=property+"="+obj[property]+"\n";
	  }
	alert(big_list);
	return;
}


function clearSearch(obj,e){
	if(e.type=="blur" && obj.value=='') {
		obj.style.color = '#A9A9A9';
		obj.value = 'Keyword or Item #';
		
	}
	
	if(e.type=="focus") {
		obj.style.color = '#000000';
		
		if(obj.value=='Keyword or Item #') {
			obj.value = '';
		}
		
	}
	return;
}

//Adds a link thats addes order_by and order_desc to the url
//Note: your SQL must look for order_by and order_desc in the url to make this work
//i.e. if url.order_by IS NOT "" then "ORDER BY " & url.order_by ...
//Last Changed 5/25/2006
function sortHeader(title,field){
	var out		= "";
	var desc	= false;
	var sorting	= false; //is this one currently sorting
	
	var query = window.location.search.substring(1);
	
	//See whats in the query string now
	if(query.match("order_desc=on"))	desc = true;
	if(query.match("order_by="+field))	sorting = true;
	
	//remove order_by and order_desc from query
	query = query.replace(/&order_by=[A-Za-z_\-\.]*/g, "")
	query = query.replace(/&order_desc=[A-Za-z_\-\.]*/g, "")
	
	if(sorting){
		if(desc){
			out = "<a href=\"?"+query+"&order_by="+field+"\">"+title+"&nbsp;&uarr;</a>";
		} else {
			out = "<a href=\"?"+query+"&order_by="+field+"&order_desc=on\">"+title+"&nbsp;&darr;</a>";
		}
	} else {
		out = "<a href=\"?"+query+"&order_by="+field+"\">"+title+"</a>";
	}
	document.writeln(out);
}

function URLEncode(plaintext)
{
	// The Javascript escape and unescape functions do not correspond
	// with what browsers actually do...
	var SAFECHARS = "0123456789" +					// Numeric
					"ABCDEFGHIJKLMNOPQRSTUVWXYZ" +	// Alphabetic
					"abcdefghijklmnopqrstuvwxyz" +
					"-_.!~*'()";					// RFC2396 Mark characters
	var HEX = "0123456789ABCDEF";


	var encoded = "";
	for (var i = 0; i < plaintext.length; i++ ) {
		var ch = plaintext.charAt(i);
	    if (ch == " ") {
		    encoded += "+";				// x-www-urlencoded, rather than %20
		} else if (SAFECHARS.indexOf(ch) != -1) {
		    encoded += ch;
		} else {
		    var charCode = ch.charCodeAt(0);
			if (charCode > 255) {
			    alert( "Unicode Character '" 
                        + ch 
                        + "' cannot be encoded using standard URL encoding.\n" +
				          "(URL encoding only supports 8-bit characters.)\n" +
						  "A space (+) will be substituted." );
				encoded += "+";
			} else {
				encoded += "%";
				encoded += HEX.charAt((charCode >> 4) & 0xF);
				encoded += HEX.charAt(charCode & 0xF);
			}
		}
	} // for

	return encoded;
}

function URLDecode(encoded)
{
   // Replace + with ' '
   // Replace %xx with equivalent character
   // Put [ERROR] in output if %xx is invalid.
   var HEXCHARS = "0123456789ABCDEFabcdef"; 

   var plaintext = "";
   var i = 0;
   while (i < encoded.length) {
       var ch = encoded.charAt(i);
	   if (ch == "+") {
	       plaintext += " ";
		   i++;
	   } else if (ch == "%") {
			if (i < (encoded.length-2) 
					&& HEXCHARS.indexOf(encoded.charAt(i+1)) != -1 
					&& HEXCHARS.indexOf(encoded.charAt(i+2)) != -1 ) {
				plaintext += unescape( encoded.substr(i,3) );
				i += 3;
			} else {
				alert( 'Bad escape combination near ...' + encoded.substr(i) );
				plaintext += "%[ERROR]";
				i++;
			}
		} else {
		   plaintext += ch;
		   i++;
		}
	} // while
   return plaintext;
}