var DHTML = (document.getElementById || document.all || document.layers);
var num = 0;

function linkTo(url, div) {

	if(!objExist(div)) {	
		alert('Unable to link to ('+div+').');
		return false;
	}
	divDsp(div,'inline');
	var ajax = new hollerBack('GET','ajax.php'+url, '', div);
}

function removeEntity(url, div, msg) {

	if(!objExist(div)) {	
		alert('Unable to remove ('+div+').');
		return false;
	}
	
	var doThis = confirm(msg);
	
	if(doThis) {
		var ajax = new holler('POST','ajax.php', url,  Effect.DropOut(div) );
	}
	
	return doThis;
}

function linkToToggle(url, div) {

	if(!objExist(div)) {	
		alert('Unable to link to ('+div+').');
		return false;
	}
	divDsp(div);
	var ajax = new hollerBack('GET','ajax.php'+url, '', div);
}

function submitTo(formObj, action, div, url) {
	
	if(!objExist(div)) {	
		alert('Unable to submit this form '+div);
		return false;
	}
	var ajax = new hollerAtMe('POST', formObj, 'ajax.php?action='+action+'&'+url, div);
	return false;
}


/**
* updated popLayer  
* make function have defaults to make calling it easier
* remove useless arguments
* change to use named arguments for all but the required pop arg.
* remove netscape 4 support
*/
function popLayer (pop, options) {
	
	// Create transparent div if not already existing
	if(!objExist('transBack')) {
		var transBack = document.createElement('div');
		transBack.setAttribute('id','transBack');
		document.body.appendChild(transBack);
	}
	
	var transBack = new getObj('transBack');
	
	var defaults = {	
		visi: transBack.style.visibility == "visible" ? "hidden" : "visible",
		width: "200px" ,
		height: "400px",
		maskColor: "#000000", 
		top: String(document.body.scrollHeight / 2 - 200) + "px", 
		left: String(document.body.scrollWidth / 2 - 100) + "px"
	};
	
	if (typeof options == typeof []) {
		for (var i in options) {
			defaults[i] = options[i];
		}
	}
	
	if (document.getElementById) {
		
		var transStyleOptions = { 
			position:'absolute', 
			left:0, 
			top:0, 
			zIndex:999, 
			width: document.body.clientWidth + "px", 
			height: (screen.height > document.body.clientHeight ? screen.height : document.body.clientHeight) + "px", 
			padding:'10px', 
			filter:'alpha(opacity=50)', 
			MozOpacity:'.50', 
			opacity:'.50', 
			textAlign:'center', 
			backgroundColor: defaults.maskColor, 
			visibility: defaults.visi 
		};
		
		for (var i in transStyleOptions) {
			transBack.style[i] = transStyleOptions[i];
		}
	
		//getObj(pop).style.visibility			= defaults.visi;
		/*getObj(pop).style.display 				= "block";
		getObj(pop).style.width					= defaults.width;
		getObj(pop).style.height				= defaults.height;
		getObj(pop).style.left					= defaults.left;
		getObj(pop).style.top					= defaults.top;*/

	}
}

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( typeof(name) == 'object' ) {
		this.obj = name;
	} else {
		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( typeof(name) == 'object' ) {
		return true;
	} else {
		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;
		}		
	}

}

// Object check added - 11/15/2006
function divDsp(el, dspState)
{
	if (!DHTML) return;
	
	if( typeof(el) == 'object' ) {
		x = el;
	} else {
		var x = new getObj(el);
	}
	x.style.display = (dspState)? (dspState=='inline'?'':dspState) : (x.style.display=='inline'||x.style.display=='') ? 'none' : '';
}

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=0,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;
}


// AJAX Functionality
function holler(method,url,parameters,callback) {
	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);//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;
				}
		    }
		};
}


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="/img.admin/loading.gif" alt="" width="220" height="19" border="0" /></div>';
			}
			return;
			//x.innerHTML = '<b>Loading...</b>';
		}
	};
	//xmlhttp.setRequestHeader("Content-Length", "66");
}

function hollerBackNow(method, url, parameters, thisObj, LoadingTxt) {

	 var xmlhttp = null;
	 var method = method.toUpperCase();
	 try{
	    if (window.XMLHttpRequest) {
	       var xmlhttp = new XMLHttpRequest();
	    } else if (window.ActiveXObject) {
	        //var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
			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", "text/xml");//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.setRequestHeader("Content-type", "text/xml");
			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.responseXML;
				var response = xmlhttp.responseXML;
				alert(response.Length);
			} 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="/img.admin/loading.gif" alt="" width="220" height="19" border="0" /></div>';
			}
			return;
			//x.innerHTML = '<b>Loading...</b>';*/
		}
	};
	//xmlhttp.setRequestHeader("Content-Length", "66");
}

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="/img.admin/loading.gif" alt="" width="220" height="19" 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 x = new getObj(this.frameName);
		x.src = url;
	} 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="/img.admin/loading.gif" alt="" width="220" height="19" border="0" /></div>';
	}
	

}


function loadFrame(iframeObj, thisObj) {
	try{
		frameName = iframeObj.id;
		var x = new getObj(thisObj);
		x.innerHTML = '<div><img src="/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 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;
}