var xmlHttp;

var statusTimer;

function testJS() {
	alert('AJAX loaded');
} 

var executing = false;
var queue = [];

function getEntity(theKey,theURL,theElement) {

	params = [theKey,theURL,theElement];
	queue.push(params);
	processQueue();
}

function processQueue() {
	if (!executing) {
		if (queue.length > 0) {
			params = queue.shift();
			_getEntity(params[0],params[1],params[2]);	
		}
	}
}

function _getEntity(theKey,theURL,theElement) {

	xmlHttp=getXmlHttpObject()

	if (xmlHttp==null) {
		  alert ("Your browser does not support AJAX!");
	return;
	} 

	if (document.getElementById('loadingSpan')) {
		document.getElementById('loadingSpan').className='loading';
	}

	var url=theURL;
	url=url+"?key="+theKey;

	xmlHttp.onreadystatechange=function() {
		if (xmlHttp.readyState==4) {
			myElement=document.getElementById(theElement)
			if(myElement){
				myElement.innerHTML = xmlHttp.responseText;
			}
			if (document.getElementById('loadingSpan')) {
				document.getElementById('loadingSpan').className='hidden';
			}
			executing = false;
			processQueue();
		}
	}
	executing = true;
	xmlHttp.open("GET",url,true);
	xmlHttp.send(null);
	
} 



function postEntity(theFormName,theURL,theElementName) {

	if (statusTimer) {
		clearTimeout(statusTimer);
	}

	xmlHttp=getXmlHttpObject()

	if (xmlHttp==null) {
		  alert ("Your browser does not support AJAX!");
	return;
	} 

	if (document.getElementById('loadingSpan')) {
		document.getElementById('loadingSpan').className='loading';
	}

	var url=theURL;
	myForm = document.getElementById(theFormName);
	params = serializeForm(myForm);

	xmlHttp.open("POST",url,true);

	xmlHttp.onreadystatechange=function() {
		if (xmlHttp.readyState==4) {
			myElement=document.getElementById(theElementName);

			myElement.innerHTML = xmlHttp.responseText;

			if (document.getElementById('loadingSpan')) {
				document.getElementById('loadingSpan').className='hidden';
			}
		}
	}
	
	xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	xmlHttp.setRequestHeader("Content-length", params.length);
	xmlHttp.setRequestHeader("Connection", "close");

	xmlHttp.send(params);
	

} 



function getData(strSQL,theTable,theElement,returnAs,id,theKey) {
	if (strSQL.length==0) { 
  		return 'No data found';
  	}

	xmlHttp=getXmlHttpObject()

	if (xmlHttp==null) {
		  alert ("Your browser does not support AJAX!");
	return;
	} 

	var url="getdata.asp";
	url=url+"?sql="+strSQL;
	url=url+"&table="+theTable;
	url=url+"&returnas="+returnAs;
	url=url+"&id="+id;
	url=url+"&key="+theKey;

	xmlHttp.onreadystatechange=function() {
		if (xmlHttp.readyState==4) {
			myElement=document.getElementById(theElement)
			myElement.innerHTML = xmlHttp.responseText;
		}
	}
	xmlHttp.open("GET",url,true);
	xmlHttp.send(null);

} 


function getXmlHttpObject() {
	var xmlHttp=null;
	try {
		// Firefox, Opera 8.0+, Safari
		xmlHttp=new XMLHttpRequest();
  	}
	catch (e)  {
		// Internet Explorer
		try {
			xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
    		}
  		catch (e) {
			xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
    		}
  	}
	
	return xmlHttp;

}

function serializeForm(theForm) { 

	var els = theForm.elements; 
	var len = els.length; 
	var queryString = ""; 
	
	this.addField = function(name,value) { 
		if (queryString.length>0) { 
			queryString += "&"; 
		} 
		queryString += encodeURIComponent(name) + "=" + encodeURIComponent(value); 
	}; 

	for (var i=0; i<len; i++) { 
		var el = els[i]; 
		if (!el.disabled) { 
			switch(el.type) { 
				case 'text': 
				case 'password': 
				case 'hidden': 
				case 'textarea': 
					this.addField(el.name,el.value); 
				break; 
				case 'select-one': 
					if (el.selectedIndex>=0) { 
						this.addField(el.name,el.options[el.selectedIndex].value); 
					} 
				break; 
				case 'select-multiple': 
					for (var j=0; j<el.options.length; j++) { 
						if (el.options[j].selected) { 
							this.addField(el.name,el.options[j].value); 
						} 
					} 
				break; 
				case 'checkbox': 
				case 'radio': 
					if (el.checked) { 
						this.addField(el.name,el.value); 
					} 
				break; 
			} 
		} 
	}
 
	return queryString; 

}

	/************************************************************************************/
	/*********************   user_preferences Object Starts   ***************************/
	/*********************   this bit is reusable             ***************************/
	/************************************************************************************/
	
	var user_preferences = {};
	user_preferences.User_ID = 0;
	user_preferences.URL = '';
	
	user_preferences.bind = function(){
		inputs = document.getElementsByTagName('input');
		var idx;
		for(idx=0;idx < inputs.length;idx++){
			sInput = inputs[idx];
			if(sInput.getAttribute("is_pref")==""){
				pref = this.getItem(sInput.name);
				sInput.checked = (pref.value=="true")?true:false;
				this.setItem(sInput);
			}
		}
	}
	user_preferences.save = function(){
		var idx;
		params = this.User_ID + "&url=" + this.URL;
		for(idx=0;idx < this.items.length;idx++){
			sItem = this.items[idx];
			params += "&" + sItem.name + "=" + sItem.value;
		}
		getEntity(params + '&action=save','/services/user_preferences.php','POSTBACKDIV');
		//window.open('save_preferences.php?key='+params + '&action=newsfeedpreferences','POSTBACKDIV','width=500,height=400');
	}
	user_preferences.getItem = function(name){
		var idx;
		for(idx=0;idx < this.items.length;idx++){
			sItem = this.items[idx];
			if(sItem.name == name){
				return sItem;
			}
		}
		retVal = user_preferences.newItem(name);
		this.items.push(retVal);
		return retVal;
	}
	user_preferences.newItem = function(name){
		retVal = new Object();
		retVal.name = name;
		ctrl = document.getElementById(name);
		if(ctrl != null){
			retVal.value = ctrl.hasAttribute('checked')?'true':'false';;
		}
		else{
			retVal.value = 'true';
		}
		return retVal;
	}
	user_preferences.setItem = function(ctrl){
		name = ctrl.name;
		value = ctrl.checked;
		this.getItem(name).value= value;
		this.onChange(ctrl);
		this.save();
	}
	user_preferences.onChange = function(ctrl){
	}
	
	/************************************************************************************/
	/*********************          TextSearch Object         ***************************/
	/************************************************************************************/
	var TextSearch = {};

	TextSearch.searchText = "";
	TextSearch.Nodes = Array(); 
	TextSearch.BookMarks = Array(); 
	TextSearch.isInVisible = function (node){
		return (node.style)?node.style.display == 'none': false;
	}
	TextSearch.walkChildren = function (node,fun){
		var i;
		for(i=0;i<node.childNodes.length;i++){
			childNode = node.childNodes[i];
			if(!TextSearch.isInVisible(childNode)){
				fun(childNode);
				TextSearch.walkChildren(childNode,fun);
			}
		}
	}
	TextSearch.getRange = function(){
		return  (document.createRange)?document.createRange():(document.body.createTextRange)?document.body.createTextRange():alert('Not Supported');
	}
	TextSearch.select = function(range){
		if (range.select) {
			range.select();
		} else if (window.getSelection) {
			mySel = window.getSelection();
			mySel.removeAllRanges();
			mySel.addRange(range);
		} else {
			alert("Not Supported");
		}
	}

	TextSearch.findText = function (node){
		s = new String(node.nodeValue);
		s = s.toLowerCase();
		startIdx = s.indexOf(TextSearch.searchText);
		if(startIdx>=0){
			range = TextSearch.getRange();
			range.setStart(node,startIdx);
			range.setEnd(node,startIdx+ TextSearch.searchText.length);
			TextSearch.Nodes.push(range);
			return true;
		}
		return false;
	}
	TextSearch.findTextIE = function (node){
		s = new String(node.nodeValue);
		s = s.toLowerCase();
		startIdx = s.indexOf(TextSearch.searchText);
		if(startIdx>=0){
			range = TextSearch.getRange();
			range.moveToElementText(node.parentNode);
			range.findText(TextSearch.searchText);
			TextSearch.Nodes.push(range);
			return true;
		}
	}
	TextSearch.showNext = function(){
		if(TextSearch.Nodes.length>0){
			range = TextSearch.Nodes[TextSearch.CurrentIndex];
			TextSearch.select(range);
			(range.scrollIntoView)?range.scrollIntoView():range.startContainer.parentNode.scrollIntoView();
			TextSearch.CurrentIndex++;
			if(TextSearch.CurrentIndex == TextSearch.Nodes.length){
				TextSearch.CurrentIndex=0;
			}
		}
		else{alert("Not Found");}
	}

	TextSearch.find = function(node,txt){ 
			TextSearch.Node = node;
			s = String(txt)
			s = s.toLowerCase();
			if (s != this.searchText){
				this.searchText = s;
				TextSearch.Nodes = new Array();
				TextSearch.CurrentIndex = 0;
				if(window.find){
					this.walkChildren(node,this.findText)
				}
				else{
					this.walkChildren(node,this.findTextIE);
				}
			}
			TextSearch.showNext();
	}


function onBodyLoad(){
	//choose one of these
	U_Name = document.getElementById("modlgn_username"); 
	if(U_Name!=null){
		U_Name.focus();
	}
	if (document.getElementById('search_searchword')) {
		document.getElementById('search_searchword').focus();
	}
	Ajax.onLoad.addHandler(Ajax.getUser);  
	Ajax.onLoad.RaiseEvents();  
}
