var onSubmitCalls = new Array();

var browser = new Object();
browser.isMSIE = (navigator.appName == "Microsoft Internet Explorer");
browser.isMSIE5 = browser.isMSIE && (navigator.userAgent.indexOf('MSIE 5') != -1);
browser.isMSIE5_0 = browser.isMSIE && (navigator.userAgent.indexOf('MSIE 5.0') != -1);
browser.isGecko = navigator.userAgent.indexOf('Gecko') != -1;
browser.isSafari = navigator.userAgent.indexOf('Safari') != -1;
browser.isMac = navigator.userAgent.indexOf('Mac') != -1;

function addEvent( obj, type, fn )
	{
	if ( obj.attachEvent )
		{
		obj['e'+type+fn] = fn;
		obj[type+fn] = function(){obj['e'+type+fn]( window.event );}
		obj.attachEvent( 'on'+type, obj[type+fn] );
		}
	else
		obj.addEventListener( type, fn, false );
	}

function removeEvent( obj, type, fn )
	{
	if ( obj.detachEvent )
		{
		obj.detachEvent( 'on'+type, obj[type+fn] );
		obj[type+fn] = null;
		}
	else
		obj.removeEventListener( type, fn, false );
	}

browser.addEvent = addEvent;
browser.removeEvent = removeEvent;


function setSelectionRange(field, selectionStart, selectionEnd) 
	{
	if (!selectionStart || !selectionEnd)
  	  return;

	try
	  {
	  if (field.setSelectionRange) 
		 {
		 field.focus();
		 field.setSelectionRange(selectionStart, selectionEnd);
		 }
   	  else if (field.createTextRange) 
  		{
		var range = field.createTextRange();
		range.collapse(true);
		range.moveEnd('character', selectionEnd);
    	range.moveStart('character', selectionStart);
    	range.select();
		}
	  }
	catch (ex)
	  {
	  }
	}

function wrapSelectedText(field, before, after)
	{
		value = getSelectedText(field);
		value = before + value + after;
		replaceSelectedText(field, value);
		return false;
	}

function getSelectedText(field)
	{
	// -- Internet Explorer
	//
	if (document.selection)
		{
		field.focus();
		sel = document.selection.createRange();
		return sel.text;
        }

	// -- Mozilla/Netscape
	//
    if (field.selectionStart || field.selectionStart == "0")
		{
		var startPos = field.selectionStart;
		var endPos   = field.selectionEnd;
		var content  = field.value;

		return content.substring(startPos, endPos);
        }

	// -- no selection support
	//
	return field.value;
	}

function replaceSelectedText(field, value)
	{
	// -- Internet Explorer
	//
	if (document.selection)
		{
		field.focus();
		sel = document.selection.createRange();
		sel.text = value;
		// theform.prevfield.focus();
        }

	// -- Mozilla/Netscape
	//
    else if (field.selectionStart || field.selectionStart == "0")
		{
		var startPos = field.selectionStart;
		var endPos   = field.selectionEnd;
		var content  = field.value;

		field.value = content.substring(0, startPos) + value + content.substring(endPos, content.length);
        }

	// -- no selection support
	//
	else
		{
        field.value += value;
        }
	return false;	
	}


function callAllOnSubmit()
	{
	for( var i=0; i < onSubmitCalls.length; i++ )
	    {
		if( typeof onSubmitCalls[i] == "function" ) 
		    {
		    onSubmitCalls[i]();
		    }
		else
		    {
		    eval(onSubmitCalls[i]);
		    }
	    }
	return true;		
	}
function addOnSubmitCall(s)
    {
	onSubmitCalls.push(s);
	}


// ----------------------------------------------------------------------
//
function getElementById(id)
	{
	if (document.getElementById) 
	  {
	  f = document.getElementById(id);
	  if (!f && document.getElementsByName)
		{
		arr = document.getElementsByName(id);
		f = arr[0];
		}
	  return f;
	  }

	if (document.all)
		return document.all[id];

	return null;
	}

function findElementById(id)
	{
	if (typeof id != "string")
		return id;

	if (document.getElementById) 
	  {
	  f = document.getElementById(id);
	  if (!f && document.getElementsByName)
		{
		arr = document.getElementsByName(id);
		f = arr[0];
		}

	  return f;
	  }



	if (document.all)
		return document.all[id];

	return null;
	}

function findElementsById(id)
{
	var a;

	if (document.getElementsByName)
	  a = document.getElementsByName(id);

	if (!a && document.getElementsById)
	  a = document.getElementsById(id);

	return a;
}

function findPosition(obj)
{
	if (typeof obj == "string")
		obj = findElementById(obj);

    var curleft = 0;
    var curtop = 0;

    if (obj.offsetParent) {
        while (1) {
            curleft+=obj.offsetLeft;
            curtop+=obj.offsetTop;

            if (!obj.offsetParent) {
                break;
            }
            obj=obj.offsetParent;
        }
    } else {
		if (obj.y) 
	        curtop+=obj.y;
		if (obj.x) 
	        curleft+=obj.x;
    }
    return new Array(curleft, curtop);
}

// ----------------------------------------------------------------------
//
function isElementHidden(name)
	{
	f = findElementById(name);
	return (!f || f.style.display == "none");
	}

function toggleElement(name)
	{
	if (isElementHidden(name))
		unhideElement(name);
	else
		hideElement(name);
	return true;
	}

function swapElements(name1,name2)
	{
	toggleElement(name1);
	toggleElement(name2);
	}


function enableField(name)
	{
	f = findElementById(name);
	if (f)
		f.disabled = false;
	return true;
	}

function disableField(name)
	{
	f = findElementById(name);
	if (f)
		f.disabled = true;
	return true;
	}

// ----------------------------------------------------------------------
//
function hideElement(name)
	{
	f = findElementById(name);

	if (f)
		{
		f.prevDisplayStyle = f.style.display;
		f.style.display = "none";
		}
	return f;
	}

function moveElement(f, x, y)
	{
	if (typeof f == "string")
		f = findElementById(f);

	if (f)
		{
		f.style.top = y + "px";
		f.style.left = x + "px";
		}

	return f;
	}

// ----------------------------------------------------------------------
//
function unhideElement(name)
	{
	f = findElementById(name);
	if (f)
		{
		if (f.prevDisplayStyle && f.prevDisplayStyle != "none")
			f.style.display = f.prevDisplayStyle;
		else
			f.style.display = "";
		}
	return f;
	}

function showElement(name)
	{
    return unhideElement(name);
	}

// ----------------------------------------------------------------------
//
function copySelectedOptions(fromElement, toElement)
	{
	fromElement = findElementById(fromElement);
	toElement = findElementById(toElement);

	isDuplicate=false;
	for (i=0; i < fromElement.options.length; i++)
		{
		if (fromElement.options[i].selected)
			{

			text = fromElement.options[i].text;
			for (n=0; n < toElement.options.length; n++)
				{
				if (fromElement.options[i].value == toElement.options[n].value)
						isDuplicate=true;
				}
			
			if (!isDuplicate)
				{
				value = fromElement.options[i].value;
				text = fromElement.options[i].text;
				
				len = toElement.options.length;

				toElement.options[len] = new Option(text, value);
				toElement.options[len].selected = true;
				}
			}
		isDuplicate=false;
		}
	}

// ----------------------------------------------------------------------
//
function removeSelectedOptions(element)
	{
	element = findElementById(element);
	if (!element)
		return;

	for (i=0; i < element.options.length; i++)
		{
		if (element.options[i].selected)
			{
			element.options[i] = null;
			i=i - 1;
			}
		}
	}

// ----------------------------------------------------------------------
//
function unselectAllOptions(element)
	{
	element = findElementById(element);
	if (!element)
		return;

	for (i=0; i < element.options.length; i++)
		{
		if (element.options[i].selected)
			element.options[i].selected = false;
		}
	}

// ----------------------------------------------------------------------
//
function selectAllOptions(element, force)
 	{
	element = findElementById(element);
	if (!element)
		return;

	if (element.options.length == 0 && force)
		{
		opt = new Option(" ", " ");
		element.options[0] = opt; 
		}

	for (i=0; i < element.options.length; i++)
		{
		if (!element.options[i].selected)
			element.options[i].selected = true;
		}
	}

function checkBoxWithValue(field, value)
{
	if (typeof field == "string")
	   field = findElementsById(field);

	for (i = 0; i < field.length; i++)
	   {
	   if (value == field[i].value)	
	       field[i].checked = true;
	   }
}

function uncheckBoxWithValue(field, value)
{
	if (typeof field == "string")
	   field = findElementsById(field);

	for (i = 0; i < field.length; i++)
	   {
	   if (value == field[i].value)	
	       field[i].checked = false;
	   }
}

function toggleBoxWithValue(field, value)
{
	if (typeof field == "string")
	   field = findElementsById(field);

	for (i = 0; i < field.length; i++)
	   {
	   if (value == field[i].value)	
	       field[i].checked = !field[i].checked;
	   }
}

function checkAllBoxes(field)
{
	if (typeof field == "string")
	   field = findElementsById(field);

	for (i = 0; i < field.length; i++)
       field[i].checked = true;
}

function uncheckAllBoxes(field)
{
	if (typeof field == "string")
	   field = findElementsById(field);

	for (i = 0; i < field.length; i++)
       field[i].checked = false;
}

function toggleAllBoxes(field)
{
	if (typeof field == "string")
	   field = findElementsById(field);

	for (i = 0; i < field.length; i++)
       field[i].checked = !field[i].checked;
}

function getSelectedValues(field)
{
	if (typeof field == "string")
	   arr = findElementsById(field);
	else
	   arr = new Array(field);	

	var varr = new Array();

	if (arr.length == 0)
		return varr;

	for (var i = 0; i < arr.length; i++)	
		{
		if (arr[i].type == "select-one" || arr[i].type == "select-multiple")
			{
			field = arr[i];
			for (var j = 0; j < field.options.length; j++)
				{
				if (field.options[j].selected)
					varr.push(field.options[j].value);
				}
			}
		else
			{
			if (arr[i].checked)
		   		varr.push(arr[i].value);
			}
		}
	return varr;
}


function openURL(url, target, force)
	{
	if (url == location.href)
		{
		location.reload(true);
		return;
		}

	if (!target)
		target = "_self";

	window.open(url, target);
	}

/* Create the new window */
function openInNewWindow(e,wname, opt)
	{
	 if (!wname)
		wname = "_blank";

	 var event;
	 if (!e)
	 	event = window.event;
	 else
	 	event = e;

	 // Abort if a modifier key is pressed
	 if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) 
		{
		return true;
		}
	else
		{
		if (typeof e == "string")
		  href = e;
		else
		  href = this.getAttribute("href");

		var newWindow = window.open(href, wname, opt);

		 if (newWindow) {
		   if (newWindow.focus) {
			 newWindow.focus();
		   }
		   return false;
		 }
		 return true;
		}
}


function htmlspecialchars(str) 
	{
	s = new String(str);
    s = s.replace(/\&/g, '&amp;');
	s = s.replace(/\"/g, '&quot;');
	s = s.replace(/'/g, '&#39;');
	s = s.replace(/</g,  '&lt;');
	s = s.replace(/>/g,  '&gt;');
    return s;
}

function addslashes( str )
    {
	return str.replace(/\'/g, '\\\'');
    }

var BrowserDetect = {
   init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
		|| this.searchVersion(navigator.appVersion)
		|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
   searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
   searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
   dataBrowser: [
{  string: navigator.userAgent,
   subString: "OmniWeb",
   versionSearch: "OmniWeb/",
   identity: "OmniWeb"
},
{
	string: navigator.vendor,
	subString: "Apple",
	identity: "Safari"
},
{
	prop: window.opera,
	identity: "Opera"
},
{
	string: navigator.vendor,
	subString: "iCab",
	identity: "iCab"
},
{
	string: navigator.vendor,
	subString: "KDE",
	identity: "Konqueror"
},
{
	string: navigator.userAgent,
	subString: "Firefox",
	identity: "Firefox"
},
{
	string: navigator.vendor,
	subString: "Camino",
	identity: "Camino"
},
{  // for newer Netscapes (6+)
	string: navigator.userAgent,
	subString: "Netscape",
	identity: "Netscape"
},
{
	string: navigator.userAgent,
	subString: "MSIE",
	identity: "Explorer",
	versionSearch: "MSIE"
},
{
	string: navigator.userAgent,
	subString: "Gecko",
	identity: "Mozilla",
	versionSearch: "rv"
},
{   // for older Netscapes (4-)
	string: navigator.userAgent,
	subString: "Mozilla",
	identity: "Netscape",
	versionSearch: "Mozilla"
}
],
   dataOS : [
{
	string: navigator.platform,
	subString: "Win",
	identity: "Windows"
},
{
	string: navigator.platform,
	subString: "Mac",
	identity: "Mac"
},
{
	string: navigator.platform,
	subString: "Linux",
	identity: "Linux"
}
]

};
BrowserDetect.init();

