
	// function that can take a block of text and add a tag
	// it also must be able to do selected text eventually
	// it should really just have the id of the text box
	
	
	var ie4 = (document.all) ? true : false;
	var ns4 = (document.layers) ? true : false;
	var ns6 = (document.getElementById && !document.all) ? true : false;
	
	var visible = new Array();
	
	function hidelayer(lay) {
		if (ie4) {document.all[lay].style.display = "none";}
		if (ns4) {document.layers[lay].visibility = "none";}
		if (ns6) {document.getElementById([lay]).style.display = "none";}
		//alert( "hide" );
		visible[lay] = false;
	}
	// returns a json encoded array for posting to a php script, used for checkboxes
	
	/*
	function get_form_array(frm, item)
	{
		var a = new Array();
		for (i = 0; i < frm.elements.length; i++) 
		{
	 		if( (frm.elements[i].getAttribute('name')  == item) 
	 				&& frm.elements[i].checked  )
	 		{
				alert(frm.elements[i].value);
				a[a.length] = frm.elements[i].value;
			}
		}
		// turn the array into a string
		
	}
	*/
	
	function windowheight() {
		  if (document.getElementById){
                 if (!!document.documentElement || !!document.documentElement.clientHeight) {
                      var width = (document.all) ? document.body.clientWidth : window.innerWidth;
                      var height = (document.all) ? document.body.clientHeight : window.innerHeight;
                 } else {
                      var width = document.documentElement.clientWidth;
                      var height = document.documentElement.clientHeight;
                 } 
            } else if (document.layers) {
                 var width = window.innerWidth;
                 var height = window.innerHeight;
            }
            
            if (!width || !height) {
                var height = screen.availHeight;
                var width = screen.availWidth;
            }
            return height;
	}
		
	function windowwidth() {
		  if (document.getElementById){
                 if (!!document.documentElement || !!document.documentElement.clientHeight) {
                      var width = (document.all) ? document.body.clientWidth : window.innerWidth;
                      var height = (document.all) ? document.body.clientHeight : window.innerHeight;
                 } else {
                      var width = document.documentElement.clientWidth;
                      var height = document.documentElement.clientHeight;
                 } 
            } else if (document.layers) {
                 var width = window.innerWidth;
                 var height = window.innerHeight;
            }
            
            if (!width || !height) {
                var height = screen.availHeight;
                var width = screen.availWidth;
            }
            return width;
	}
	
	function getypos() { 
		if (document.body && document.body.scrollTop) 
	   		return document.body.scrollTop; 
	 	if (document.documentElement && document.documentElement.scrollTop) 
	   		return document.documentElement.scrollTop; 
	 	if (window.pageYOffset) 
	   		return window.pageYOffset; 
	 	return 0; 
	}
	
	function showlayer(lay) {
		if (ie4) {document.all[lay].style.display = "block";}
		if (ns4) {document.layers[lay].visibility = "show";}
		if (ns6) {document.getElementById([lay]).style.display = "block";}

		visible[lay] = true;
	}
	function getElement(e) {
		if(ie4) return document.all[e];
		if(ns4) return document.layers[e];
		else return document.getElementById(e);
	}

	function hideandsave(lay)
	{
		hidelayer(lay);
	}
	
	function alternate( lay )
	{
		
		if( visible[lay] == null || visible[lay] == true )
			hidelayer( lay );
		else
			showlayer( lay );
					
	}
	
	function AddTag( field, tag )
	{
		// for now we assume nothing is selected
		if (ie4 ) 
		{
			txt = document.selection.createRange().text;
			txt2 = field.value;
			field.value = txt2.replace(txt, '[' + tag + ']' + txt + '[/' + tag + '] ' );			
		}
		else
		{
			field.value = field.value + '[' + tag + '] ' + ' [/' + tag + ']';
		}
		//else if (window.getSelection ) txt = window.getSelection();
		//else if (document.getSelection ) txt = document.getSelection();

	}

	function createRequestObject() {
		var ro;
		var browser = navigator.appName;
		if(browser == "Microsoft Internet Explorer")
		{
			try 
			{
				ro = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch(e) 
			{
				try 
				{
					ro = new XMLHttpRequest();
				}
				catch(e)
				{
					ro = false;
				}
			}
		} 
		else{
			ro = new XMLHttpRequest();
		}
		return ro;
	}
	
	
//	var ajax_url;
//	var ajax_div;
	// i should use a semaphore
	
	
	function simple_ajax_handler(ajax_object, ajax_div) {

		if(ajax_object.readyState == 4){
			var response = ajax_object.responseText;
			document.getElementById(ajax_div).innerHTML = response;
			// maybe it should try to load the next ajax request now?
		}
		
	}
	
	function simple_ajax(url, divid)
	{
		var ajax_object = createRequestObject() ;
		ajax_object.open('get', url );
			
		ajax_object.onreadystatechange = function() {simple_ajax_handler(ajax_object, divid); };
		ajax_object.send(null);
	}
	
	function simple_json(url, func)
	{
		var ajax_object = createRequestObject() ;
		ajax_object.open('get', url );
		ajax_object.onreadystatechange = function() 
			{ 
				simple_json_handler(ajax_object, func);
			};
		ajax_object.send(null);
	}
	
	function simple_json_post(url, func, form)
	{
		var ajax_object = createRequestObject() ;
		var parameters = formData2QueryString(form);
	
		ajax_object.open('POST', url );
		ajax_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		ajax_object.setRequestHeader("Content-length", parameters.length);
		ajax_object.setRequestHeader("Connection", "close");
		
		ajax_object.onreadystatechange = function() 
			{ 
				simple_json_handler(ajax_object, func);
			};
		ajax_object.send(parameters);
	}
	
	function simple_json_handler(ajax_object, func) {
		if(ajax_object.readyState == 4){
			var response = ajax_object.responseText;			
			func(JSON.parse(response));
		}		
	}

	var http = createRequestObject();

	function makePOSTRequest(url, parameters, divid) 
	{
		var ajax_object = createRequestObject() ;
		ajax_object.open('POST', url, true);
		ajax_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		ajax_object.setRequestHeader("Content-length", parameters.length);
		ajax_object.setRequestHeader("Connection", "close");
		if(divid) {
			ajax_object.onreadystatechange = function() 
				{simple_ajax_handler(ajax_object, divid); };
		}
		ajax_object.send(parameters);

   }
   
   
   
   
   
   	function formData2QueryString(formName) 
	{
	
		var docForm = document.forms[formName];
	
		var strSubmitContent = '';
		var formElem;
		var strLastElemName = '';
	
		for (i = 0; i < docForm.elements.length; i++) {
		
		formElem = docForm.elements[i];
		switch (formElem.type) {
			// Text fields, hidden form elements
			case 'text':
			case 'hidden':
			case 'password':
			case 'textarea':
			case 'select-one':
				strSubmitContent += formElem.name + '=' + URLEncode(formElem.value) + '&'
				break;
				
			// Radio buttons
			case 'radio':
				if (formElem.checked) {
					strSubmitContent += formElem.name + '=' + URLEncode(formElem.value) + '&'
				}
				break;
				
			// Checkboxes
			case 'checkbox':
				if (formElem.checked) {
					// Continuing multiple, same-name checkboxes
					if (formElem.name == strLastElemName) {
						// Strip of end ampersand if there is one
						if (strSubmitContent.lastIndexOf('&') == strSubmitContent.length-1) {
							strSubmitContent = strSubmitContent.substr(0, strSubmitContent.length - 1);
						}
						// Append value as comma-delimited string
						strSubmitContent += ',' + URLEncode(formElem.value);
					}
					else {
						strSubmitContent += formElem.name + '=' + URLEncode(formElem.value);
					}
					strSubmitContent += '&';
					strLastElemName = formElem.name;
				}
				break;
				
		}
	}
	
	// Remove trailing separator
	strSubmitContent = strSubmitContent.substr(0, strSubmitContent.length - 1);
	return strSubmitContent;
}
function setStyleById(i, p, v) {
    var n = getElement(i);
    n.style[p] = v;
}

function getRadioValue(radioObj) {
	if(!radioObj)
		return "";
	var radioLength = radioObj.length;
	if(radioLength == undefined)
		if(radioObj.checked)
			return radioObj.value;
		else
			return "";
	for(var i = 0; i < radioLength; i++) {
		if(radioObj[i].checked) {
			return radioObj[i].value;
		}
	}
	return "";
}


function URLEncode( str )
{
	// 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 plaintext = str
	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) {
				encoded += "+";
			} else {
				encoded += "%";
				encoded += HEX.charAt((charCode >> 4) & 0xF);
				encoded += HEX.charAt(charCode & 0xF);
			}
		}
	} // for

	return encoded;
}
