// Navision Ajax Support 
// (c) E Foqus Danmark A/S 2006,2007
// Version 1.09

var requests = new Array();
var errorCode = 0;
//FN
MessageBoxObj = {	
	MoveObject:function(obj)
	{
		this.GetCentralPoints() //Get current viewpoint numbers
		obj.style.left = this.scroll_left+(this.docwidth-obj.offsetWidth)/2+"px";
		obj.style.top = this.scroll_top+(this.docheight-obj.offsetHeight)/2+"px";
	},
	GetCentralPoints:function(){ //get window viewpoint numbers
		var ie=document.all && !window.opera
		var domclientWidth=document.documentElement && parseInt(document.documentElement.clientWidth) || 100000 //Preliminary doc width in non IE browsers
		this.standardbody=(document.compatMode=="CSS1Compat")? document.documentElement : document.body //create reference to common "body" across doctypes
		this.scroll_top=(ie)? this.standardbody.scrollTop : window.pageYOffset
		this.scroll_left=(ie)? this.standardbody.scrollLeft : window.pageXOffset
		this.docwidth=(ie)? this.standardbody.clientWidth : (/Safari/i.test(navigator.userAgent))? window.innerWidth : Math.min(domclientWidth, window.innerWidth-16)
		this.docheight=(ie)? this.standardbody.clientHeight: window.innerHeight
	},
  createMessagebox: function (messagetext)
	{
		var msgdiv = document.getElementById("wsfn_messagelayer");
		if(!msgdiv)
		{
			var htmlbody = document.getElementsByTagName("body").item(0);
			if(!htmlbody)
			{
				alert(messagetext);
				return;
			}
			msgdiv = document.createElement('div');
			msgdiv.style.position = 'absolute';
			msgdiv.style.zIndex="1";
			msgdiv.id ='wsfn_messagelayer';
			var tbl = document.createElement('table');
			tbl.className = 'messagebox';
			var tblbody = document.createElement('tbody');
			var ntr = document.createElement('tr');			
			var ntd = document.createElement('td');
			var tblInner = document.createElement('table');
			var tblInnerbody = document.createElement('tbody');						
			var ntrInner = document.createElement('tr');			
			var ntdInner = document.createElement('td');			
			var img = document.createElement('img');
			img.src = 'images/info.gif';	
			var ntdInner2 = document.createElement('td');
			ntdInner2.id = 'wsfn_messsage_text';
			ntdInner2.innerHTML = messagetext;
			ntdInner2.className = 'tdmessagetext';
			var ntrInner2 = document.createElement('tr');
			var ntdInnerOk = document.createElement('td');
			ntdInnerOk.setAttribute("colSpan",2); 
			ntdInnerOk.align = 'middle';
			var ninputBtn = document.createElement('input');
			ninputBtn.type = 'button';
			ninputBtn.value ='OK';
			ninputBtn.className='messageboxbtn';
			ninputBtn.onclick = function() {
				msgdiv = document.getElementById("wsfn_messagelayer");
				if (msgdiv)
					msgdiv.style.visibility='hidden';				
			};
			ntdInnerOk.appendChild(ninputBtn);
			ntrInner2.appendChild(ntdInnerOk);			
			ntdInner.appendChild(img);
			ntrInner.appendChild(ntdInner);
			ntrInner.appendChild(ntdInner2);
			tblInnerbody.appendChild(ntrInner);
			tblInnerbody.appendChild(ntrInner2);
			tblInner.appendChild(tblInnerbody);
			ntd.appendChild(tblInner);
			ntr.appendChild(ntd);						
			tblbody.appendChild(ntr);			
			tbl.appendChild(tblbody);			
			msgdiv.appendChild(tbl);		
			htmlbody.appendChild(msgdiv);			
		}
		else
		{
			msgdiv.style.visibility='visible';
			messagetd = document.getElementById("wsfn_messsage_text");
			if (messagetd)
				messagetd.innerHTML = messagetext;
		}
		MessageBoxObj.MoveObject(msgdiv);		
	}
}

var globalField_d;
if(typeof(XMLHttpRequest) == 'undefined')
	var XMLHttpRequest = function()
	{
		var request = null;
		try
		{
			request = new ActiveXObject('Msxml2.XMLHTTP');
		}
		catch(e)
		{
			try
			{
				request = new ActiveXObject('Microsoft.XMLHTTP');
			}
			catch(ee)
			{}
		}
		return request;
	}

function ajax_stop()
{
	for(var i=0; i<requests.length; i++)
	{
		if(requests[i] != null)
			requests[i].abort();
	}
}

function ajax_create_request(context)
{
	for(var i=0; i<requests.length; i++)
	{
		if(requests[i].readyState == 4)
		{
			requests[i].abort();
			requests[i].context = null;
			return requests[i];
		}
	}

	var pos = requests.length;
	
	requests[pos] = Object();
	requests[pos].obj = new XMLHttpRequest();
	requests[pos].context = context;
	
	return requests[pos];
}

function ajax_request(url, data, callback, context)
{
	var request = ajax_create_request(context);
	var async = typeof(callback) == 'function';
	if(async) request.obj.onreadystatechange = function()
	{
		if(request.obj.readyState == 4)
			callback(new ajax_response(request));
	}
	request.obj.open('POST', url, async);
	request.obj.send(data);
	if(!async)
		return new ajax_response(request);
}

function ajax_response(request)
{
	this.request = request.obj;
	this.error = null;
	this.value = null;
	this.context = request.context;
	if(request.obj.status == 200)
	{
		try
		{
			this.value = request.obj.responseText;
				
			if(this.value && this.value.error)
			{
				this.error = this.value.error;
				this.value = null;
			}
		}
		catch(e)
		{
			this.error = new ajax_error('??' + e.name, e.description, e.number);
		}
	}
	else
	{
		this.error = new ajax_error('HTTP request failed with status: ' + request.obj.status, request.obj.status);
	}
	
	return this;
}

function enc(s)
{
	return s.toString().replace(/\%/g, "%26").replace(/=/g, "%3D");
}

function ajax_error(name, description, number)
{
	this.name = name;
	this.description = description;
	this.number = number;

	return this;
}

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Navision Support

function Navision_Empty()
{
}

var xRecValue;

// Can by assigned by a page to be executed after a successfull validate command ......
var ExtraValidateFunction = Navision_Empty;

function Navision_GetValue(form,d)
{
	switch(form.elements[d].type.toString())
	{
		case "checkbox":
			return form.elements[d].checked.toString();
			break;
		case "select-one":
			if (form.elements[d].selectedIndex < 0)			
				return '';
			return form.elements[d].options[form.elements[d].selectedIndex].value;						
			break;
		default:
            if (form.elements[d].value.toString().length > 250)
                return form.elements[d].value.toString().slice(0,250);
            else
			    return form.elements[d].value.toString();
			break;
	}
}

function Navision_SetValue(form,d,v)
{	
	switch(form.elements[d].type.toString())
	{
		case "checkbox":
			if (v == '1')
				form.elements[d].checked = true;
			else
				form.elements[d].checked = false;
			break;
		case "select-one":
		    if (typeof(v) == 'int')
				  form.elements[d].selectedIndex = parseInt(v);
		    else
		    {			
			for(i = 0; i < form.elements[d].options.length;i++)
			{				
				if (v == form.elements[d].options[i].value)
				{
					form.elements[d].selectedIndex = form.elements[d].options[i].index;
					return;
				}
			}
		    }
		break;
	        default:
			form.elements[d].value = v;
			break;
	}
}

function Navision_GetSingleValue(Table,Field)
{
	var i,d;
	var SearchName = Table.toString()+':'+Field.toString();
	for (i = 0; i < document.forms.length; i++)
		for (d = 0; d < document.forms[i].length; d++)
			if (document.forms[i].elements[d].name != null)
				if (document.forms[i].elements[d].name == SearchName)
					return Navision_GetValue(document.forms[i],d);
				
	return null;
}

function Navision_validate(entry,table,field)
{
  errorCode = 0;
	var data = "";
	var i,d;    
	var Rsp;
	var form = entry.form;
	var Message = 0;
	var field_d;
	var xxRecValue;
	if (xRecValue != null)
		xxRecValue = xRecValue;
	//document.body.style.cursor = "wait";
	for (d = 0; d < form.length; d++)
	{
		if (form.elements[d].name != null)
		{
			if (form.elements[d].name.slice(0,table.toString().length + 1) == table.toString()+':')
			{
					if (d > 0)
							data = data + '&';
					data = data + form.elements[d].name + '=' + encodeURIComponent(Navision_GetValue(form,d));
				if (form.elements[d].name == table.toString()+':'+field.toString())
				field_d = d;
			}
		}
	}
  //FN Add
    if (typeof(globalField_d != undefined) && (globalField_d != null))
      globalField_d = table.toString()+':'+field.toString(); 
 
		Rsp = ajax_request('/wsfn/navision.aspx?ajax=validate&Table='+table+'&Field='+field+'&'+encodeURI(window.location.search.substring(1)),data,true,null);
    if (Rsp.value.slice(0,5) == 'DATA1')
    {
        // The Record comes back
        //alert(Rsp.value.slice(100));
        bg = new String(Rsp.value.slice(5));
        split = bg.split("&");
        getvar = new Object();
        for(i= 0; i < split.length; i++)
        {
            bg = new String(split[i]);
            vaerdi = bg.split("=");
            getvar[vaerdi[0]] = decodeURIComponent(vaerdi[1]);
            if (vaerdi[0] == "_MESSAGE")
                Message = 1;
        }
			for (d = 0; d < form.length; d++)
			{
				if (form.elements[d].name != null)
				{
				//form.elements[d].value = getvar[form.elements[d].name];
					if (typeof(getvar[form.elements[d].name]) != 'undefined')
						Navision_SetValue(form,d,getvar[form.elements[d].name]);
					//ExtraValidateFunction();
					if (Message == 1)
					{
							var msg = getvar["_MESSAGE"];
							msg = msg.replace(/\x2B/g," ");
							msg = msg.replace(/\\/g,"\n");
							msg = msg.replace(/%2c/g,","); 
							alert(msg);
					}
				}
			}
			ExtraValidateFunction(); //Kun eengang og ikke for alle felterne i formen!
    }
    else
        if (Rsp.value.slice(0,5) == 'ERROR')
        {
		errorCode = 1;
		alert(Rsp.value.slice(5));
		if(xxRecValue != null)
		{
			Navision_SetValue(form,field_d,xxRecValue.toString());
			if(form.elements[field_d].type.toString() == "text")
				form.elements[field_d].focus();
		}
		document.body.style.cursor = "default";
		return;
        }
        else
        {
		errorCode = 1;
		alert('Communication error, try again.');
		if(xxRecValue != null) 
		{
			Navision_SetValue(form,field_d,xxRecValue.toString());
			if(form.elements[field_d].type.toString() == "text")
				form.elements[field_d].focus();
		}
		document.body.style.cursor = "default";
		return;
        }            
}

function Navision_Find(table,step,ViewString,InputForm,OutputForm)
{
	var data = "";
	var i,d;    
    var Rsp;
	var FirstField = true;
	//document.body.style.cursor = "wait";
	for (i = 0; i < document.forms.length; i++)
	{
        for (d = 0; d < document.forms[i].length; d++)
        {
			var CheckTablePos = document.forms[i].elements[d].name.indexOf(":");
			var CheckTable = "";
			if ( CheckTable != -1)
			{
				CheckTable = document.forms[i].elements[d].name.slice(0,CheckTablePos);
				if (CheckTable == table.toString()) 
				{
					if (OutputForm)
					{
						if (document.forms[i].name == InputForm)
						{
							if (!FirstField)
								data = data + '&';
							data = data + document.forms[i].elements[d].name + '=' + encodeURIComponent(Navision_GetValue(document.forms[i],d));
							FirstField = false;
						}
					}
					else
					{
						if (!FirstField)
							data = data + '&';
						data = data + document.forms[i].elements[d].name + '=' + encodeURIComponent(Navision_GetValue(document.forms[i],d));
						FirstField = false;
					}
				}
			}
        }
	}
	Rsp = ajax_request('/wsfn/navision.aspx?ajax=find&Table='+table+'&Step='+encodeURIComponent(step)+'&View='+encodeURIComponent(ViewString)+'&'+encodeURI(window.location.search.substring(1)),data,true,null);
    if (Rsp.value.slice(0,5) == 'DATA1')
    {
        // The Record comes back
        bg = new String(Rsp.value.slice(5));
        split = bg.split("&");
        getvar = new Object();
        for(i= 0; i < split.length; i++)
        {
            bg = new String(split[i]);
            vaerdi = bg.split("=");
            getvar[vaerdi[0]] = decodeURIComponent(vaerdi[1]);
        }
    	for (i = 0; i < document.forms.length; i++)
            for (d = 0; d < document.forms[i].length; d++)
			{
				var CheckTablePos = document.forms[i].elements[d].name.indexOf(":");
				var CheckTable = "";
				if ( CheckTable != -1)
				{
					if (OutputForm)
					{
						if (document.forms[i].name == OutputForm)
						{
							CheckTable = document.forms[i].elements[d].name.slice(0,CheckTablePos);
							if (CheckTable == table.toString()) 
								Navision_SetValue(document.forms[i],d,getvar[document.forms[i].elements[d].name]);
						}
					}
					else
					{
						CheckTable = document.forms[i].elements[d].name.slice(0,CheckTablePos);
						if (CheckTable == table.toString()) 
							Navision_SetValue(document.forms[i],d,getvar[document.forms[i].elements[d].name]);
					}
				}
			}
		document.body.style.cursor = "default";
		return true;
    }
    else
        if (Rsp.value.slice(0,5) == 'ERROR')
           alert(Rsp.value.slice(5));
        else
            if (Rsp.value.slice(0,5) == 'EMPTY')
            {
            	document.body.style.cursor = "default";
				return false;
            }
			else
				alert('Unknown Navision Ajax response (#2) ('+Rsp.value+')');
	document.body.style.cursor = "default";
}

function Navision_Focus(entry,table,field)
{
  var i,d;
	if (entry != null) 
	{
		if (entry.form != null)
		{
			var form = entry.form;
			for (d = 0; d < form.length; d++)
			{
				if (form.elements[d].name != null)
				{		
					if (form.elements[d].name == table.toString()+':'+field.toString())
						xRecValue = Navision_GetValue(form,d);
				}
			}
		}
	}
}

function Navision_CreateViewString(ParentTableNo,ViewString)
{
	// 
	var NewString = "";
	var i,d;
	
	for (i = 0; i < ViewString.length; i++)
	{
		if (ViewString.substring(i,i+1) == '?')
		{
			var FieldString = "";
			for (i++; i < ViewString.length && ViewString.substring(i,i+1) != '?'; i++)
				FieldString = FieldString + ViewString.substring(i,i+1);
			NewString = NewString + '0('+Navision_GetSingleValue(ParentTableNo,FieldString)+')';
		}
		else
			NewString = NewString + ViewString.substring(i,i+1);
	}
	return NewString;
}
function Navision_FillLines(TableNo,ParentTableNo,ViewString)
{
	var i,d;
	var VS = Navision_CreateViewString(ParentTableNo,ViewString);
	var FirstSearch = true;
	var MoreRecords = true;
	//while(1)
	//document.body.style.cursor = "wait";
	for (i = 0; i < document.forms.length; i++)
	{
		var Form = document.forms[i];
		var CheckTablePos = Form.name.indexOf(":");
		var CheckTable = "";
		if ( CheckTable != -1)
		{
			CheckTable = Form.name.slice(0,CheckTablePos);
			if (CheckTable == TableNo.toString()) 
			{
				if (!MoreRecords)
					Form.reset();
				else
				{
					if (FirstSearch)			
					{
						if (!Navision_Find(TableNo,'-',VS,document.forms[i].name,document.forms[i].name))
						{
							MoreRecords = false;
							Form.reset();
						}
						FirstSearch = false;
					}
					else
						if (!Navision_Find(TableNo,'>',VS,document.forms[i - 1].name,document.forms[i].name))
						{
							MoreRecords = false;
							Form.reset();
						}
				}
			}
		}
	}
	//document.body.style.cursor = "default";
}

function Navision_GetValueFromQueryString(Parm)
{
    bg = new String(window.location.search.slice(1));
    split = bg.split("&");
    getvar = new Object();
    for(i= 0; i < split.length; i++)
    {
        bg = new String(split[i]);
        vaerdi = bg.split("=");
        getvar[vaerdi[0]] = decodeURIComponent(vaerdi[1]);
    }
    return getvar[Parm];
}

function Navision_ShowError()
{
    msg = new String(Navision_GetValueFromQueryString("_ERRORMESSAGE"));
    msg = msg.replace(/\x2B/g," ");
    //alert(msg);
		if ((_timermsgcount) && (_timermsgcount > 0))
		{
		  var htmlbody = document.getElementsByTagName("body").item(0);
			if ((!htmlbody) && (_timermsgcount < 10))
			{
				_timermsgcount += 1;
				return;
			}
			else
				MessageBoxObj.createMessagebox(msg);
		}
		else
			MessageBoxObj.createMessagebox(msg);
		if (_timerMessageboks) 
		{
			clearInterval(_timerMessageboks);
			_timermsgcount = 0;
		}
		//XXXX
}

//if (window.location.search.search("_ERRORMESSAGE") != -1)
//    Navision_ShowError();
if (window.location.search.search("_ERRORMESSAGE") != -1)
{
  var _timerMessageboks = setInterval(function() { Navision_ShowError();  }, 100);
	var _timermsgcount = 1;
}
		
function Navision_Insert(entry,table)
{
	var data = "";
	var i,d;    
    var Rsp;
	var form = entry;
    var Message = 0;
	//document.body.style.cursor = "wait";
	for (d = 0; d < form.length; d++)
	{
		if(form.elements[d].name != null)
		{
			if (form.elements[d].name.slice(0,table.toString().length + 1) == table.toString()+':')
			{
					if (d > 0)
							data = data + '&';
					data = data + form.elements[d].name + '=' + encodeURIComponent(Navision_GetValue(form,d));
			}
		}
	}
	Rsp = ajax_request('/wsfn/navision.aspx?ajax=insert&Table='+table+'&'+encodeURI(window.location.search.substring(1)),data,true,null);
    if (Rsp.value.slice(0,5) == 'DATA1')
    {
        // The Record comes back
        //alert(Rsp.value.slice(100));
        bg = new String(Rsp.value.slice(5));
        split = bg.split("&");
        getvar = new Object();
        for(i= 0; i < split.length; i++)
        {
            bg = new String(split[i]);
            vaerdi = bg.split("=");
            getvar[vaerdi[0]] = decodeURIComponent(vaerdi[1]);
            if (vaerdi[0] == "_MESSAGE")
                Message = 1;
        }
			for (d = 0; d < form.length; d++)
			{
				if (form.elements[d].name != null)
				{
				//form.elements[d].value = getvar[form.elements[d].name];
					if (typeof(getvar[form.elements[d].name]) != 'undefined')
						Navision_SetValue(form,d,getvar[form.elements[d].name]);
					if (Message == 1)
					{
							var msg = getvar["_MESSAGE"];
							msg = msg.replace(/\x2B/g," "); 
							alert(msg);
					}
				}
			}
    }
    else
        if (Rsp.value.slice(0,5) == 'ERROR')
        {
           alert(Rsp.value.slice(5));
        }
        else
            alert('Unknown Navision Ajax response (#3) ('+Rsp.value+')');
	//document.body.style.cursor = "default";
}

function Navision_Modify(entry,table)
{
	var data = "";
	var i,d;    
    var Rsp;
	var form = entry;
    var Message = 0;
	//document.body.style.cursor = "wait";
	for (d = 0; d < form.length; d++)
	{
		if (form.elements[d].name != null)
		{
			if (form.elements[d].name.slice(0,table.toString().length + 1) == table.toString()+':')
			{
					if (d > 0)
							data = data + '&';
					data = data + form.elements[d].name + '=' + encodeURIComponent(Navision_GetValue(form,d));
			}
		}
	}
	Rsp = ajax_request('/wsfn/navision.aspx?ajax=modify&Table='+table+'&'+encodeURI(window.location.search.substring(1)),data,true,null);
    if (Rsp.value.slice(0,5) == 'DATA1')
    {
        // The Record comes back
        //alert(Rsp.value.slice(100));
        bg = new String(Rsp.value.slice(5));
        split = bg.split("&");
        getvar = new Object();
        for(i= 0; i < split.length; i++)
        {
            bg = new String(split[i]);
            vaerdi = bg.split("=");
            getvar[vaerdi[0]] = decodeURIComponent(vaerdi[1]);
            if (vaerdi[0] == "_MESSAGE")
                Message = 1;
        }
				for (d = 0; d < form.length; d++)
				{
					//form.elements[d].value = getvar[form.elements[d].name];
					if (form.elements[d].name != null)
					{
						if (typeof(getvar[form.elements[d].name]) != 'undefined')
						Navision_SetValue(form,d,getvar[form.elements[d].name]);
						if (Message == 1)
						{
								var msg = getvar["_MESSAGE"];
								msg = msg.replace(/\x2B/g," "); 
								alert(msg);
						}
					}
				}
    }
    else
        if (Rsp.value.slice(0,5) == 'ERROR')
        {
           alert(Rsp.value.slice(5));
        }
        else
            alert('Unknown Navision Ajax response (#4) ('+Rsp.value+')');
	//document.body.style.cursor = "default";
}

// Lookup fields!
function Navision_Lookup(TableNo,FieldNo,LookupTableNo,LookupFieldNo,DescriptionFieldNo,More)
{
    window.self.name='WSFN';
	if (More.toString() == "0")
	  More = "";
    LookupWindow=window.open("?action=lookup&_WINDOW="+window.self.name+
                                      "&_PTABLE="+TableNo.toString()+
                                      "&_PFIELD="+FieldNo.toString()+
                                      "&_TABLE="+LookupTableNo.toString()+
                                      "&_FIELD="+LookupFieldNo.toString()+
                                      "&_FIELD2="+DescriptionFieldNo.toString()+
									  "&"+More.toString()
                                      ,
                          "WSFNSELECT", 'dependent,scrollbars=no,width=500,height=430,innerheight=430,innerwidth=500');     
    LookupWindow.focus();	
 }

function Navision_LookupReturn(Value)
{
	var ptable = Navision_GetValueFromQueryString("_PTABLE");
	var pfield = Navision_GetValueFromQueryString("_PFIELD");
	var pwin = window.opener;
    var attr;
    var w,i,d,a;
    self.blur()
    for (w = 0; w < pwin.document.forms.length; w++)
        for (i = 0; i < pwin.document.forms[w].length; i++)
					if (pwin.document.forms[w].elements[i].name != null)
					{
            if (pwin.document.forms[w].elements[i].name == ptable.toString()+":"+pfield.toString())
            {
                d = i;        
                xRecValue = pwin.document.forms[w].elements[d].value;
                Navision_SetValue(pwin.document.forms[w],d,Value);
                attr = pwin.document.forms[w].elements[d].attributes;
                for (a = 0; a < attr.length; a++)
                {
                    if (attr[a].name == "onchange")
					  if (attr[a].value.toString() != "null")
                        if (attr[a].value.toString().slice(0,8) == 'Navision')
                            Navision_validate(pwin.document.forms[w].elements[d],ptable,pfield);
                }
                self.close();
                return;
            }
					}
    self.close();
}


function Navision_Press_Key(e)
{
    if (e == null)
    {
        // Internet Explorer
        if (event.keyCode == 27)
            event.returnValue = false;            
    }
    else
    {
        // Netscape
        if (e.charCode == 27)
            e.preventDefault();
    }
}

document.onkeydown= Navision_Press_Key;
function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

// written by Dean Edwards, 2005
// with input from Tino Zijdel, Matthias Miller, Diego Perini

// http://dean.edwards.name/weblog/2005/10/add-event/

function dean_addEvent(element, type, handler) {
	if (element.addEventListener) {
		element.addEventListener(type, handler, false);
	} else {
		// assign each event handler a unique ID
		if (!handler.$$guid) handler.$$guid = dean_addEvent.guid++;
		// create a hash table of event types for the element
		if (!element.events) element.events = {};
		// create a hash table of event handlers for each element/event pair
		var handlers = element.events[type];
		if (!handlers) {
			handlers = element.events[type] = {};
			// store the existing event handler (if there is one)
			if (element["on" + type]) {
				handlers[0] = element["on" + type];
			}
		}
		// store the event handler in the hash table
		handlers[handler.$$guid] = handler;
		// assign a global event handler to do all the work
		element["on" + type] = handleEvent;
	}
};
// a counter used to create unique IDs
dean_addEvent.guid = 1;

function removeEvent(element, type, handler) {
	if (element.removeEventListener) {
		element.removeEventListener(type, handler, false);
	} else {
		// delete the event handler from the hash table
		if (element.events && element.events[type]) {
			delete element.events[type][handler.$$guid];
		}
	}
};

function handleEvent(event) {
	var returnValue = true;
	// grab the event object (IE uses a global event object)
	event = event || fixEvent(((this.ownerDocument || this.document || this).parentWindow || window).event);
	// get a reference to the hash table of event handlers
	var handlers = this.events[event.type];
	// execute each event handler
	for (var i in handlers) {
		this.$$handleEvent = handlers[i];
		if (this.$$handleEvent(event) === false) {
			returnValue = false;
		}
	}
	return returnValue;
};

function fixEvent(event) {
	// add W3C standard event methods
	event.preventDefault = fixEvent.preventDefault;
	event.stopPropagation = fixEvent.stopPropagation;
	return event;
};
fixEvent.preventDefault = function() {
	this.returnValue = false;
};
fixEvent.stopPropagation = function() {
  this.cancelBubble = true;
};


// Dean's forEach: http://dean.edwards.name/base/forEach.js
/*
	forEach, version 1.0
	Copyright 2006, Dean Edwards
	License: http://www.opensource.org/licenses/mit-license.php
*/


