window.FSite2 = new Object();

FSite2._imageMaps = new Object();

FSite2._callRef = function(funRef, objectRef)
{
	return (function()
	{
		funRef(objectRef);
	});
}

FSite2._removeElement = function(el)
{
	el.parentNode.removeChild(el);
}

FSite2._simulateClickOnSpace = function(event)
{
	if (!event) var event = window.event;
	if (event.keyCode == 0x20)
	{
		if (this._image._OnClick)
			this._image._OnClick();
		event.returnValue = false;
	}
}

FSite2._simulateClick = function()
{
	if (this._OnClick)
		this._OnClick();
	return false;
}

FSite2._propagateClick = function(event)
{
	if (!event) var event = window.event
	if (this._image._OnClick)
		this._image._OnClick();
	event.returnValue = false;
	event.cancelBubble = true;
	return false;
}

FSite2.debugMessage = function(msg)
{
	if (debugElement = document.getElementById('FSite2_debug'))
	{
		debugElement.innerHTML = debugElement.innerHTML + '<p>' + msg + '</p>';
	}
}

FSite2.addImageFocus = function(imageElement, mapName)
{
	var imageMap = document.createElement('map');
	if (FSite2._imageMaps[mapName] != undefined)
	{
		mapName = mapName + '_' + FSite2._imageMaps[mapName];
		FSite2._imageMaps[mapName]++;
	}
	else
		FSite2._imageMaps[mapName] = 1;
	imageMap.name = mapName;
	imageMap.id = mapName;
	var imageArea = document.createElement('area');
	imageArea.shape = 'rect';
	imageArea.coords = '0,0,' + imageElement.width + ',' + imageElement.height;
	imageMap.appendChild(imageArea);
	imageArea._image = imageElement;
	imageArea.href = '#';
	imageElement.onclick = window.FSite2._simulateClick;
	imageElement._area = imageArea;
	imageElement.parentNode.insertBefore(imageMap, imageElement);
	imageElement.onload = function() {
		this._area.coords = '0,0,' + this.width + ',' + this.height;
	};
	imageElement.style.border = 'none';
	imageElement.useMap = '#' + imageMap.name;
	imageArea.onkeydown = window.FSite2._simulateClickOnSpace;
	imageArea.onclick = window.FSite2._propagateClick;
	return imageArea;
}

FSite2.getElementsByClassName = function(className, node1, node2, node3, node4)
{
	if (!node1) node1=document;
	var i, a, d;
	var db = node1.getElementsByTagName('*');
	for (i = 0, a = [], d; d = db[i++]; )
		if (RegExp('\\b' + className + '\\b','gi').test(d.className)) a.push(d);
	if (node2)
	{
		db = node2.getElementsByTagName('*');
		for (i = 0; d = db[i++]; )
			if (RegExp('\\b' + className + '\\b','gi').test(d.className)) a.push(d);
	}
	if (node3)
	{
		db = node3.getElementsByTagName('*');
		for (i = 0;d = db[i++]; )
			if (RegExp('\\b' + className + '\\b','gi').test(d.className)) a.push(d);
	}
	if (node4)
	{
		db = node4.getElementsByTagName('*');
		for (i = 0;d = db[i++]; )
			if (RegExp('\\b' + className + '\\b','gi').test(d.className)) a.push(d);
	}
	return a;
}

FSite2.extendForm = function(formElement, params)
{
	var inputArray;
	var i;
	var images;
	if (FSite2.extendCheckbox || FSite2.extendRadio || FSite2.extendCalendar || FSite2.extendAutocomplete)
	{
		inputArray = formElement.getElementsByTagName('input');
		for (i = 0; i < inputArray.length; i++)
		{
			if (FSite2.extendCalendar && params.calendarClass && RegExp('\\b' + params.calendarClass + '\\b', 'gi').test(inputArray[i].className))
				FSite2.extendCalendar(inputArray[i], params);
			if (FSite2.extendCheckbox && (inputArray[i].type == 'checkbox') && params.checkboxChecked && params.checkboxUnchecked)
				FSite2.extendCheckbox(inputArray[i], params.checkboxChecked, params.checkboxUnchecked);
			if (FSite2.extendRadio && (inputArray[i].type == 'radio') && params.radioChecked && params.radioUnchecked)
				FSite2.extendRadio(inputArray[i], params.radioChecked, params.radioUnchecked);
			if (FSite2.extendAutocomplete && (inputArray[i].type == 'text') && params.autoCompleteClass && RegExp('\\b' + params.autoCompleteClass + '\\b', 'gi').test(inputArray[i].className) && params.autoCompleteUrl)
				FSite2.extendAutocomplete(inputArray[i], params.autoCompleteHelperClass, params.autoCompleteUrl, (params.autoCompleteMinChar)?(params.autoCompleteMinChar):0,(params.autoCompleteInterval)?params.autoCompleteInterval:500);
		}
	}
	if (FSite2.extendSelect || FSite2.extendCalendar)
	{
		inputArray = formElement.getElementsByTagName('select');
		for (i = 0; i < inputArray.length; i++)
		{
			if (FSite2.extendCalendar && params.calendarClass && RegExp('\\b' + params.calendarClass + '\\b', 'gi').test(inputArray[i].className))
				FSite2.extendCalendar(inputArray[i], params);
			if (FSite2.extendSelect && (inputArray[i].className || params.selectClass))
			{
				if (params.selectImagesClass)
					images = RegExp('\\b' + params.selectImagesClass + '\\b', 'gi').test(inputArray[i].className);
				else
					images = false;
				var dropClass = inputArray[i].className;
				if (params.calendarClass)
					dropClass = dropClass.replace(new RegExp('\\s*\\b' + params.calendarClass + '\\b\\s*', 'gi'), '');
				FSite2.extendSelect(inputArray[i], params.selectClass ? params.selectClass : dropClass, images);
			}
		}
	}
	if (FSite2.extendHelpers && params.helperClass)
		FSite2.extendHelpers(formElement, params);
}

FSite2.loadScript = function(scriptSource)
{
	if (!scriptSource.length)
		scriptSource = new Array(scriptSource);
	for (var i = 0; i < scriptSource.length; i++)
		document.write('<scr' + 'ipt src="' + scriptSource[i] + '" type="text/javascript"></scr' + 'ipt>');
}

FSite2._loadScriptsFromParam = function(paramName)
{
	if (!paramName)
		var paramName = 'load';
	var scripts = document.getElementsByTagName('script');
	for (var i = 0; i < scripts.length; i++)
	{
		if (scripts[i].src)
		{
			var parts = scripts[i].src.split('?');
			var re = new RegExp('^(.*\/)FSite2\.js$');
			if ((parts.length == 2) && (matches = re.exec(parts[0])))
			{
				var baseURL = matches[1];
				var params = parts[1].split('&');
				for (var j = 0; j < params.length; j++)
				{
					var value = params[j].split('=');
					if (value[0] == paramName)
					{
						var scriptsToLoad = value[1].split(',');
						for (var k = 0; k < scriptsToLoad.length; k++)
						{
							scriptsToLoad[k] = baseURL + scriptsToLoad[k] + '.js';
						}
						FSite2.loadScript(scriptsToLoad);
					}
				}
			}
		}
	}
}

FSite2._loadScriptsFromParam();

