/*************************************************************
********** CROSSBROWSER OBJECTLIBRARY BY GEORG HOFF **********
**************************************************************
Licensed to the private use of Georg Hoff and
to Framfab International.
**************************************************************
Contact the author: georg.hoff@framfab.de
					contact@bobgeorge.de
**************************************************************
All rights reserved by Georg Hoff and Framfab. (c) 2001.
**************************************************************/

function crossbrowserobject()
{
	browser=0;
	if (document.layers) hide="hide";
	else hide="hidden";
	show="visible";
	//Browser
	this.browsertype=browsertype;
	this.browserlanguage=browserlanguage;
	//Window
	this.open_popup=open_popup;
	this.get_scrollpositionx=get_scrollpositionx;
	this.get_scrollpositiony=get_scrollpositiony;
	this.get_visiblewidth=get_visiblewidth;
	this.get_visibleheight=get_visibleheight;
	this.get_screenwidth=screen.width;
	this.get_screenheight=screen.height;
	//Event
	this.event_onmousemove=event_onmousemove;
	this.mouseposition_type="relative";
	this.get_mouseposition=get_mouseposition;
	//Misc. Elements
	this.load_images=load_images;
	this.imageswitch=imageswitch;
	this.imageswitch_array=imageswitch_array;
	//Layerobject
	this.objectcheck=objectcheck;
	this.get_positionx=get_positionx;
	this.set_positionx=set_positionx;
	this.get_positiony=get_positiony;
	this.set_positiony=set_positiony;
	this.get_visibility=get_visibility;
	this.set_visibility=set_visibility;
	this.get_zindex=get_zindex;
	this.set_zindex=set_zindex;
	this.innerhtml=innerhtml;
	this.get_objectwidth=get_objectwidth;
	this.set_objectwidth=set_objectwidth;
	this.get_objectheight=get_objectheight;
	this.set_objectheight=set_objectheight;
	this.set_clipping=set_clipping;
	//Form
	this.get_inputvalue=get_inputvalue;
	this.set_inputvalue=set_inputvalue;
	this.get_radiovalue=get_radiovalue;
	this.set_radiostatus=set_radiostatus;
	this.get_checkboxvalue=get_checkboxvalue;
	this.set_checkboxstatus=set_checkboxstatus;
	this.get_selectvalue=get_selectvalue;
	this.set_selectvalue=set_selectvalue;
	this.get_selecttext=get_selecttext;
	this.set_selecttext=set_selecttext;
	this.formelementfocus=formelementfocus;
	this.formsubmit=formsubmit;
	this.formreset=formreset;
}

function browsertype()
{
	if (document.all && document.getElementById && !window.opera) return "ie5";
	if (document.all && !document.getElementById) return "ie4";
	if (document.layers && !document.all) return "nn4";
	if (window.opera) return "opera";
	if (document.getElementById && !document.all) return "mozilla";
}

function browserlanguage()
{
	switch (browser)
	{
		case "ie4": return navigator.browserLanguage.slice(0,2); break;
		case "ie5": return navigator.browserLanguage.slice(0,2); break;
		default: return navigator.language.slice(0,2); break;
	}
}

var popup=0;
function open_popup(popupurl,popupname,width,height,scrollbars)
{
	if (popup.closed==false) popup.close();
	switch (browser)
	{
		default: popup=open(popupurl,popupname,"width="+width+",height="+height+",scrollbars="+scrollbars+",left=0,top=0,directories=no,location=no,menubar=no,resizable=no,status=no,toolbar=no"); break;
	}

}

function get_scrollpositionx()
{
	switch (browser)
	{
		case "ie4": return document.body.scrollLeft; break;
		case "ie5": return document.body.scrollLeft; break;
		default: return window.pageXOffset; break;
	}
}

function get_scrollpositiony()
{
	switch (browser)
	{
		case "ie4": return document.body.scrollTop; break;
		case "ie5": return document.body.scrollTop; break;
		default: return window.pageYOffset; break;
	}
}

function get_visiblewidth()
{
	switch (browser)
	{
		case "ie4": return document.body.clientWidth; break;
		case "ie5": return document.body.clientWidth; break;
		default: return window.innerWidth; break;
	}
}

function get_visibleheight()
{
	switch (browser)
	{
		case "ie4": return document.body.clientHeight; break;
		case "ie5": return document.body.clientHeight; break;
		default: return window.innerHeight; break;
	}
}

function event_onmousemove()
{
	switch (browser)
	{
		case "ie4": ie4_onmousemove_start=true; break;
		case "ie5": document.attachEvent("onmousemove",mousemove_control); break;
		case "nn4": document.captureEvents(Event.MOUSEMOVE);
					document.onmousemove=mousemove_control; break;
		case "opera": document.captureEvents(Event.MOUSEMOVE);
					  document.onmousemove=mousemove_control; break;
		case "mozilla": document.addEventListener("mousemove",mousemove_control,true);
	}
}

function get_mouseposition(passed_event)
{
	if (this.mouseposition_type=="absolute")
	{
		switch (browser)
		{
			case "ie4": mousex=window.event.x; mousey=window.event.y; break;
			case "ie5": mousex=window.event.offsetX; mousey=window.event.offsetY; break;
			case "nn4": mousex=passed_event.pageX; mousey=passed_event.pageY; break;
			case "opera": mousex=passed_event.clientX; mousey=passed_event.clientY; break;
			default: mousex=passed_event.pageX; mousey=passed_event.pageY; break;
		}
	}
	else
	{
		switch (browser)
		{
			case "ie4": mousex=window.event.clientX; mousey=window.event.clientY; break;
			case "ie5": mousex=window.event.clientX; mousey=window.event.clientY; break;
			case "nn4": mousex=passed_event.pageX-this.get_scrollpositionx(); mousey=passed_event.pageY-this.get_scrollpositiony(); break;
			case "opera": mousex=passed_event.clientX-this.get_scrollpositionx(); mousey=passed_event.clientY-this.get_scrollpositiony(); break;
			default: mousex=passed_event.clientX; mousey=passed_event.clientY; break;
		}
	}
}

var images=new Array();
function load_images(image_normal,image_over,newindex)
{
	if (!newindex) newindex=images.length;
	images[newindex]=new Array(2);
	images[newindex][0]=new Image;
	images[newindex][0].src=image_normal;
	images[newindex][1]=new Image;
	images[newindex][1].src=image_over;
}

function imageswitch_array(objectid,imagename,imageindex,onoffindex)
{
	switch (browser)
	{
		case "nn4": document.layers[objectid].document[imagename].src=images[imageindex][onoffindex].src; break;
		case "ie4": document.images[imagename].src=images[imageindex][onoffindex].src; break;
		default: document.images[imagename].setAttribute("src",images[imageindex][onoffindex].src); break;
	}
}

function imageswitch(objectid,imagename,value)
{
	switch (browser)
	{
		case "nn4": document.layers[objectid].document[imagename].src=value; break;
		case "ie4": document.images[imagename].src=value; break;
		case "mozilla": document.images[imagename].src=value; break;
		default: document.images[imagename].setAttribute("src",value);
	}
}

function objectcheck(objectid)
{
	switch (browser)
	{
		case "ie4": if (document.all[objectid]) return true; break;
		case "nn4": if (document.layers[objectid]) return true; break;
		default: if (document.getElementById(objectid)) return true; break;
	}
}

function get_positionx(objectid)
{
	switch (browser)
	{
		case "ie4": return document.all[objectid].style.pixelLeft; break;
		case "nn4": return document.layers[objectid].pageX; break;
		default: return parseInt(document.getElementById(objectid).style.left); break;
	}
}

function set_positionx(objectid,value)
{
	switch (browser)
	{
		case "ie4": document.all[objectid].style.pixelLeft=value; break;
		case "nn4": document.layers[objectid].pageX=value; break;
		default: document.getElementById(objectid).style.left=value+"px"; break;
	}
}

function get_positiony(objectid)
{
	switch (browser)
	{
		case "ie4": return document.all[objectid].style.pixelTop; break;
		case "nn4": return document.layers[objectid].pageY; break;
		default: return parseInt(document.getElementById(objectid).style.top); break;
	}
}

function set_positiony(objectid,value)
{
	switch (browser)
	{
		case "ie4": document.all[objectid].style.pixelTop=value; break;
		case "nn4": document.layers[objectid].pageY=value; break;
		default: document.getElementById(objectid).style.top=value+"px"; break;
	}
}

function get_objectwidth(objectid)
{
	switch (browser)
	{
		case "ie4": return document.all[objectid].offsetWidth; break;
		case "nn4": return document.layers[objectid].document.width; break;
		case "opera": return document.getElementById(objectid).style.pixelWidth; break;
		default: return document.getElementById(objectid).offsetWidth; break;
	}
}

function set_objectwidth(objectid,value)
{
	switch (browser)
	{
		case "ie4": document.all[objectid].style.pixelWidth=value; break;
		case "nn4": document.layers[objectid].resizeTo(value,this.get_objectheight(objectid)); break;
		case "opera": document.getElementById(objectid).style.pixelWidth=value; break;
		default: document.getElementById(objectid).style.width=value; break;
	}
}

function get_objectheight(objectid)
{
	switch (browser)
	{
		case "ie4": return document.all[objectid].offsetHeight; break;
		case "nn4": return document.layers[objectid].document.height; break;
		case "opera": return document.getElementById(objectid).style.pixelHeight; break;
		default: return document.getElementById(objectid).offsetHeight; break;
	}
}

function set_objectheight(objectid,value)
{
	switch (browser)
	{
		case "ie4": document.all[objectid].style.pixelHeight=value; break;
		case "nn4": document.layers[objectid].resizeTo(this.get_objectwidth(objectid),value); break;
		case "opera": document.getElementById(objectid).style.pixelHeight=value; break;
		default: document.getElementById(objectid).style.height=value; break;
	}
}

function set_clipping(objectid,valuetop,valueright,valuebottom,valueleft)
{
	switch (browser)
	{
		case "ie4": document.all[objectid].style.clip="rect("+valuetop+"px "+valueright+"px "+valuebottom+"px "+valueleft+"px)"; break;
		case "nn4": document.layers[objectid].clip.left=valueleft;
					document.layers[objectid].clip.top=valuetop;
					document.layers[objectid].clip.width=valueright-valueleft;
					document.layers[objectid].clip.height=valuebottom-valuetop;
					break;
		case "opera": alert("Sorry, your Opera browser does not support clipping."); break;
		default: document.getElementById(objectid).style.clip="rect("+valuetop+"px "+valueright+"px "+valuebottom+"px "+valueleft+"px)";
	}
}

function get_visibility(objectid)
{
	switch (browser)
	{
		case "ie4": return document.all[objectid].style.visibility; break;
		case "nn4": if (document.layers[objectid].visibility.indexOf("hid")==-1) return "visible";
					else return "hidden";
					break;
		default: return document.getElementById(objectid).style.visibility; break;
	}
}

function set_visibility(objectid,value)
{
	switch (browser)
	{
		case "ie4": document.all[objectid].style.visibility=value; break;
		case "nn4": document.layers[objectid].visibility=value; break;
		default: document.getElementById(objectid).style.visibility=value; break;
	}
}

function get_zindex(objectid,value)
{
	switch (browser)
	{
		case "ie4": return document.all[objectid].style.zIndex; break;
		case "nn4": return document.layers[objectid].zIndex; break;
		default: return document.getElementById(objectid).style.zIndex;
	}
}

function set_zindex(objectid,value)
{
	switch (browser)
	{
		case "ie4": document.all[objectid].style.zIndex=value; break;
		case "nn4": document.layers[objectid].zIndex=value; break;
		default: document.getElementById(objectid).style.zIndex=value;
	}
}

function innerhtml(objectid,value)
{
	switch (browser)
	{
		case "ie4": document.all[objectid].innerHTML=value; break;
		case "nn4": document.layers[objectid].document.open();
					document.layers[objectid].document.writeln(value);
					document.layers[objectid].document.close();
					break;
		case "opera": alert("Sorry, your Opera browser does not support innerHTML."); break;
		default: document.getElementById(objectid).innerHTML=value; break;
	}
}

function get_inputvalue(objectid,formname,elementname)
{
	switch (browser)
	{
		case "nn4": return document.layers[objectid].document.forms[formname].elements[elementname].value; break;
		default: return document.forms[formname].elements[elementname].value; break;
	}
}

function set_inputvalue(objectid,formname,elementname,value)
{
	switch (browser)
	{
		case "nn4": document.layers[objectid].document.forms[formname].elements[elementname].value=value; break;
		default: document.forms[formname].elements[elementname].value=value; break;
	}
}

function get_radiovalue(objectid,formname,elementname)
{
	switch (browser)
	{
		case "nn4": for (i=0; i<document.layers[objectid].document.forms[formname].elements[elementname].length; i++)
					{
						if (document.layers[objectid].document.forms[formname].elements[elementname][i].checked)
							return document.layers[objectid].document.forms[formname].elements[elementname][i].value;
					}
					return false;
					break;
//workaround for Opera because it can't address to a single radiobutton in a group of radiobuttons
//(2D array like [groupname][elementindex] does not work)
		case "opera": for (i=0; i<document.forms[formname].length; i++)
					{
						while (document.forms[formname].elements[i].name==elementname)
						{
							if (document.forms[formname].elements[i].checked)
							{
								return document.forms[formname].elements[i].value;
								break;
							}
							else i++;
						}
					}
					return false;
					break;
		default:	for (i=0; i<document.forms[formname].elements[elementname].length; i++)
					{
						if (document.forms[formname].elements[elementname][i].checked)
							return document.forms[formname].elements[elementname][i].value;
					}
					return false;
					break;
	}
}

function set_radiostatus(objectid,formname,elementname,value)
{
	switch (browser)
	{
		case "nn4": document.layers[objectid].document.forms[formname].elements[elementname][value].checked=true;
					break;
//workaround for Opera because it can't address to a single radiobutton in a group of radiobuttons
//(2D array like [groupname][elementindex] does not work)
		case "opera": for (i=0; i<document.forms[formname].length; i++)
					{
						if (document.forms[formname].elements[i].name==elementname)
						{
							document.forms[formname].elements[i+value].checked=true;
							break;
						}
					}
					break;
		default:	document.forms[formname].elements[elementname][value].checked=true;
					break;
	}
}

function get_checkboxvalue(objectid,formname,elementname)
{
	switch (browser)
	{
		case "nn4": if (document.layers[objectid].document.forms[formname].elements[elementname].checked)
						return document.layers[objectid].document.forms[formname].elements[elementname].value;
					else return false;
					break;
		default:	if (document.forms[formname].elements[elementname].checked)
					return document.forms[formname].elements[elementname].value;
					else return false;
					break;
	}
}

function set_checkboxstatus(objectid,formname,elementname,value)
{
	switch (browser)
	{
		case "nn4": document.layers[objectid].document.forms[formname].elements[elementname].checked=value; break;
		default:	document.forms[formname].elements[elementname].checked=value; break;
	}
}

function get_selectvalue(objectid,formname,elementname)
{
	switch (browser)
	{
		case "nn4": return document.layers[objectid].document.forms[formname].elements[elementname][document.layers[objectid].document.forms[formname].elements[elementname].selectedIndex].value; break;
		default: return document.forms[formname].elements[elementname][document.forms[formname].elements[elementname].selectedIndex].value; break;
	}
}

function set_selectvalue(objectid,formname,elementname,index,value)
{
	switch (browser)
	{
		case "nn4": document.layers[objectid].document.forms[formname].elements[elementname].options[index].value=value; break;
		case "opera": alert("It seems that this won\'t work in Opera 5."); break;
		default: document.forms[formname].elements[elementname].options[index].value=value; break;
	}
}

function get_selecttext(objectid,formname,elementname)
{
	switch (browser)
	{
		case "nn4": return document.layers[objectid].document.forms[formname].elements[elementname][document.layers[objectid].document.forms[formname].elements[elementname].selectedIndex].text; break;
		default: return document.forms[formname].elements[elementname][document.forms[formname].elements[elementname].selectedIndex].text; break;
	}
}

function set_selecttext(objectid,formname,elementname,index,value)
{
	switch (browser)
	{
		case "nn4": document.layers[objectid].document.forms[formname].elements[elementname].options[index].text=value; break;
		case "opera": alert("It seems that this won\'t work in Opera 5."); break;
		default: document.forms[formname].elements[elementname].options[index].text=value; break;
	}
}

function formelementfocus(objectid,formname,elementname)
{
	switch (browser)
	{
		case "nn4": document.layers[objectid].document.forms[formname].elements[elementname].focus(); break;
		default: document.forms[formname].elements[elementname].focus(); break;
	}
}

function formreset(objectid,formname)
{
	switch (browser)
	{
		case "nn4": document.layers[objectid].document.forms[formname].reset(); break;
		default: document.forms[formname].reset(); break;
	}
}

function formsubmit(objectid,formname)
{
	switch (browser)
	{
		case "nn4": document.layers[objectid].document.forms[formname].submit(); break;
		default: document.forms[formname].submit(); break;
	}
}

