
var ajax = false; 
var ajaxQueue = []
var ajaxDebug = 0

var ajaxBusyIcon = 'img/ajaxbusy3.gif'
var ajaxBusyIconStyle = 'padding:10px'


if (ajaxStr == undefined)
{
	var ajaxStr = ['Ajax Request Failed : ',"Your browser does not support AJAX!"]
}



function ajaxShowBusyIcon(on){
	
	var  e,s
	
	e=byId('ajaxbusyicon')
	
	s=getScroll()		
	
	if (on) {
	
		if (e.style.position=='absolute'){
				
			e.style['left'] = s[0]+'px'
			e.style['top'] = s[1]+'px'
		}
		
		e.style['display']='block'
	} else
	{
		e.style['display']='none'
	}
	
	
}



function ajaxInitBusyIcon(icon){
	
	var divNode,ie7;
	
	if (icon != undefined) ajaxBusyIcon = icon
	
	divNode = document.createElement('div');
	divNode.setAttribute('id','ajaxbusyicon');
	divNode.style['display']='none';
	divNode.style.position = 'fixed';
	divNode.style.left = '0px'
	divNode.style.top = '0px'
	
	ie7=typeof document.body.style.maxHeight != "undefined"
	if (document.all && navigator.appName.match('Microsoft')!=null && !ie7) divNode.style['position']='absolute'
	
	divNode.style['z-index']='20';
	divNode.innerHTML = '<img style="'+ajaxBusyIconStyle+'" src="'+ajaxBusyIcon+'" />';
	document.body.appendChild(divNode)

}


//
//
//  readyState 
//  0 - not initialized request
//  1 - request set up 
//  2 - request sent
//  3 - reqest in process
//  4 - request complete
//
//  onreadystatechange
// 
//  responseText 
//  status 200
//



ajax_auto_handlers = {'div':'handler_div','js':'handler_js'}

function handler_div (context,data)
{
	var e;
		
	e=document.getElementById(context)
	if (e==null) return
	
	e.innerHTML = data
}

function handler_js (context,data)
{
	if (ajaxDebug >= 4) alert('handler_js: '+data)
	eval(data)
	if (ajaxDebug >= 4) alert('~handler');
}

function ajaxAutoProcessResponse()
{
	var xmlstart;
	var xml;
	var x,i,e;
	var type,context,data;
	
	if (ajax.responseXML === null) 
	{
		if (ajaxDebug >= 1) alert("AJAXXMLERROR:"+ajax.responseText);
		return;
	}

	xmlstart = ajax.responseText.substring(0,5);
	if (xmlstart != '<?xml') 
	{
		if (ajaxDebug >= 1) alert("AJAXINVALIDXML:"+ajax.responseText);
		return;
	}
	
	if (ajax.responseXML.normalize) ajax.responseXML.normalize();

	xml = ajax.responseXML.documentElement.firstChild;
	
	x=xml
	
	i=0
	while(x){
		
		if (x.nodeName==='response')
		{
			i++;
			if (ajaxDebug>=5) alert('response:'+i);
			type=x.getElementsByTagName('type')[0].firstChild.nodeValue;
			context=''
			data=''
			
			if (x.getElementsByTagName('context')[0].firstChild!==null) context=x.getElementsByTagName('context')[0].firstChild.nodeValue;			
			if (x.getElementsByTagName('data')[0].firstChild!==null) data=x.getElementsByTagName('data')[0].firstChild.nodeValue;
			
			data=jsdecode(data)
			
			if (ajax_auto_handlers[type]!==undefined)
			{
				e=ajax_auto_handlers[type] + '(context,data);';
				eval(e)
			}
			
		}
		
		x=x.nextSibling
	}
	
}

function ajaxOnReadyStateChange ()
{
	var e,a;
	if (ajax.readyState==4)
	{
		a=ajaxQueue[0]
		ajaxRemoveCurrentFromQueue ();
		
		if (ajax.status==200)
		{
			// Ok
			
			if (a[3]===false)
			{
				// AUTOPROCESS - NO CALLBACK
				ajaxAutoProcessResponse();
				
			}
			else
			{
				// PROCESS VIA CALLBACK
				
				e = a[3] + ' ( a[4] )';
				eval ( e );
			}
			
			
		}
		else
		{
			alert ( ajaxStr[0]+ajax.status+' - '+ajax.statusText );
		}
		
		// remove current request
		ajax=false
		ajaxRunQueue();
		
	}
	
}

function ajaxRemoveCurrentFromQueue ()
{
	var items,i;
	
	items = ajaxQueue.length
	if (items == 0) return
	
	for (i=0;i<items-1;i++) ajaxQueue[i]=ajaxQueue[i+1]
	ajaxQueue.pop()
}

function ajaxBusy()
{
	if (ajax==false || ajax.readyState == 0 || ajax.readyState==4) return false
	
	return true
}

function ajaxRunQueue()
{
	var a,xcontent;
	
	if (ajaxQueue.length == 0) 
	{
		ajaxShowBusyIcon(0);
		return;
	}
	
	
	if (ajaxBusy()) return
	if (ajax != false) ajax.abort()
	ajax = ajaxCreate()
	
	a=ajaxQueue[0]
	
	ajax.open ( a[0], a[1], true)
	
	xcontent = null
	
		
	if (a[2]!=false)
	{
		xcontent = a[2]
		
	 	ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");	
	}

	
	ajax.setRequestHeader("from-ajax", "1");

	ajax.send ( xcontent)
	
	ajaxShowBusyIcon(1);
}

function ajaxRequest ( method, url,post)
{
	ajaxRequestCallback (method,url,false,false,post);
}

function setFormEnabled ( form, enable)
{
	var f,i;
	
	f = document.forms[form]
	for (i=0;i<f.elements.length;i++)
	if (f.elements[i].type == 'submit') 
	{
		f.elements[i].disabled = !enable
		
	}
}

function enableForm (form) { setFormEnabled(form,true); }
function disableForm ( form) {setFormEnabled(form,false); }

function ajaxSubmitForm ( form, url)
{
	var post;
	
	post = buildPost ( form );
	
	ajaxRequest ( 'POST', url, post);
}

function ajaxRequestCallback ( method, url, callback, callback_data, post)
{
	var a,qi
	a = [method, url, post, callback,callback_data]
	qi=ajaxQueue.length
	ajaxQueue[qi] = a
	
	ajaxRunQueue();
}

function ajaxCreate ()
{
  var xmlHttp,e;
  
  xmlHttp=false
  try
    {
    // Firefox, Opera 8.0+, Safari
    xmlHttp=new XMLHttpRequest();
    }
  catch (e)
    {
    // Internet Explorer
    try
      {
      xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
      }
    catch (e)
      {
      try
        {
        xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
        }
      catch (e)
        {
        alert(ajaxStr[1]);
        return false;
        }
      }
    }
    xmlHttp.onreadystatechange = ajaxOnReadyStateChange
    return xmlHttp;
}



function buildPost (formname) // dont support: checkbox,radio,select
{
	var f,i,t,e,v;
	
	f = document.forms[formname]
	post = ''
	
	for (i=0;i<f.elements.length;i++)
	{
		e=f.elements[i]
		v=e.value
		
		if (e.type=='checkbox')
		{
			if (e.checked) v=v; else v='';
		}
		
		if (i>0) post+='&'
		post += e.name + '=' + encodeURIComponent(v)
	}
	
	return post;
}



function myalert(x)
{
	var x;
	x=jsdecode(x);
	alert(x)
}

function myredir(url,time)
{
	if (time != null){
		window.setTimeout("location.href = jsdecode('"+url+"');",time*1000);
	}
	else {
		location.href = jsdecode(url);
	}
}


function setDivDisplay ( id, display)
{
	var e;
	e = document.getElementById(id)
	if (e==null)return
	e.style.display = display
}
function setDivDisplayByName ( name, display)
{
	
	
	var e;
	e = byName(name)
	if (e==false){
		
		return
	}
	e.style.display = display
}

function showDiv (id) { setDivDisplay(id,'block');}
function hideDiv (id) { setDivDisplay(id,'none');}
function toggleDiv (id) { if (document.getElementById(id).style.display=='none') showDiv(id); else hideDiv(id); }

function showDivByName (name) { setDivDisplayByName(name,'block');}
function hideDivByName (name) { setDivDisplayByName(name,'none');}
function toggleDivByName (name) { if (byName(name).style.display=='none') showDivByName(name); else hideDivByName(name); }


function div (id,content,encoded) { var e;if (encoded==1 || encoded==true) content=jsdecode(content); e=document.getElementById(id); if (e!=undefined) e.innerHTML = content; }
function wdiv(win,id,content,encoded) { var e;if (encoded==1 || encoded==true) content=jsdecode(content); e=win.document.getElementById(id); if (e!=undefined) e.innerHTML = content; }



function scrollDiv(id,xtop,xleft,name)
{
	var e;
	
	e=name?byName(id):byId(id)
	
	if (e!=false) 
	{
		if (xtop != null) e.scrollTop=xtop
		if (xleft != null) e.scrollLeft=xleft
	}
}

function divExist(id) {
	var e;
	
	e=document.getElementById(id)
	if (e==undefined) return false
	return e
}

function byId(id){ return divExist(id);}
function byIdVal(id,enc) { 
	var e;
	
	e  = byId(id)
	if (e.value == undefined) return false
	v = e.value
	if (enc == true || enc==1) v=encodeURIComponent(v)
	return v;
}



function byName(name){
	
	var l
	l=document.getElementsByName(name)
	if (l.length!=1) return false
	
	return l[0]
}

function byIdSelVal(id,enc) {
	var e;
	
	e  = byId(id)
	if (e.options == undefined) return false
	v = e.options[e.selectedIndex].value
	if (enc == true || enc==1) v=encodeURIComponent(v)
	return v;
}

function addChildDiv (id,childid,html,decode) {
	
	var e,divNode;
	e = document.getElementById(id);
	
	divNode = document.createElement('div');
	divNode.setAttribute('id',childid);
	divNode.innerHTML = decode==null?html:jsdecode(html)
	e.appendChild(divNode)
}


function addDivAfter(parentid,childid,html,decode){
	
	var p,divNode,next;
	if (byId(childid) != false) {
		byId(childid).innerHTML = decode==null?html:jsdecode(html)
		return
	}
	
	p = document.getElementById(parentid);
	
	
	next=p.nextSibling
	divNode = document.createElement('div');
	divNode.setAttribute('id',childid);
	divNode.innerHTML = decode==null?html:jsdecode(html)
	
	p.parentNode.insertBefore(divNode, next);
	
}

function delDiv(id)
{
	var e;	
	e=document.getElementById(id)
	if (e==null) return
	
	e.parentNode.removeChild(e);
	
}


function jsdecode(s)
{
	return decodeURIComponent(s)
}


function jsencode(s){
	
	c=parseInt(String("'").charCodeAt(0))
	c2=c.toString(16)
	
	s=encodeURIComponent(s)
	s=s.replace(/'/g,"%"+c2);
	return s
}

function setIdStyle(id,s,val)
{
	var e
	e=byId(id)
	if (e==false) return
	e.style[s] = val
}



function setOpacity(id,f,byname){
	
	var e
	e=byname==undefined?byId(id):byName(id)
	
	e.style['-moz-opacity'] = f
	e.style['opacity'] = f
	e.style['filter'] = 'alpha(opacity='+parseInt(f*100)+');'
}