//----------------------------------------------------------------------------------------------------------
// JAVASCRIPT TOOLS LIBRARY
// SHAPESHIFT INTERACTIVE 
// CREATED: 19.03.2009
// VER: 1.0 
//----------------------------------------------------------------------------------------------------------

//----------------------------------------------------------------------------------------------------------
// MODULE
//----------------------------------------------------------------------------------------------------------

function loadMessage(module, operation, instance, heading, message) {
	var url			= 'controller.php'; 
	
	var data_string	= '_id=';
	
	data_string	+= '&_module='		+ module;
	data_string	+= '&_operation='	+ operation;
	data_string	+= '&_instance='	+ instance;
	data_string	+= '&_heading='		+ heading;
	data_string	+= '&_message='		+ message;
	
	ajaxPost(url, data_string);
}

function loadModule(id, module, operation, instance, entity, form_data) {
	var url			= 'controller.php'; 
	
	var data_string	= form_data;
	
	data_string	+= '&_id='			+ id;
	data_string	+= '&_module='		+ module;
	data_string	+= '&_operation='	+ operation;
	data_string	+= '&_instance='	+ instance;
	data_string	+= '&_entity='		+ entity;
	
	ajaxPost(url, data_string);
}

function hideLoading() {
	if (document.getElementById('loading_div')) {
		document.body.removeChild(document.getElementById('loading_div'));
		unhideStubborns(document);
	}
}

function showLoading(id) {
//	if (id) {
		//showFlash(0, document.getElementById(id));
		/*
		var loading_div = createDiv('temp_' + Math.random(111111111, 999999999), 'loadingDiv');
		
		loading_div.style.width		= document.getElementById(id).offsetWidth + 'px';
		loading_div.style.height	= document.getElementById(id).offsetHeight + 'px';
		
		document.getElementById(id).appendChild(loading_div);
		*/
//	} else {
		//showFlash(0, document);
		
		hideStubborns(document);
		
		var loading_div = createDiv('loading_div', 'loadingBG');
		
		loading_div.style.width		= clientWidth() + 'px';
		loading_div.style.height	= documentHeight() + 'px';
		
		document.body.appendChild(loading_div);
//	}
}

function hideStubborns(parentObj) {
	if (isIE() == 6) {
		var selects			= parentObj.getElementsByTagName('select')
		
		for (var i=0; i<selects.length; i++)
			addClass(selects[i], 'hiddenStubborn');
	}
}

function unhideStubborns(parentObj) {
	if (isIE() == 6) {
		var selects			= parentObj.getElementsByTagName('select')
		
		for (var i=0; i<selects.length; i++)
			removeClass(selects[i], 'hiddenStubborn');
	}
}

function parseDocument() {
	var divs	= document.getElementsByTagName('div');
	
	for (i=0; i<divs.length; i++) {
		if (divs[i].getAttribute('module')) {
			loadModule(divs[i].id, divs[i].getAttribute('module'), 'view', divs[i].getAttribute('instance'), divs[i].getAttribute('entity'), '');
		}
	}
}

function submitLoadModule(obj, operation) {
	var	processOperation	= true;
	
	if (obj.getAttribute('confirm'))
		processOperation	= confirm(obj.getAttribute('confirm'));
	
	if (processOperation) {
		showLoading(id);
		
		var form_data	= getFormData(obj);
		
		if (obj.id) {
			form_data	+= (form_data != '')?'&':'';
			form_data	+= '_originator=' + obj.id;
		}
		
		var id			= defaultAttribute(obj, 'container', '');
		var module		= defaultAttribute(obj, 'module', '');
		var instance	= defaultAttribute(obj, 'instance', '');
		var entity		= defaultAttribute(obj, 'entity', '');
		
		if (module)
			loadModule(id, module, operation, instance, entity, form_data);
	}
	
	return false;
}

function submitModule() {
	submitLoadModule(this, this.getAttribute('operation'));
	
	return false;
}

function clickLoadModule(obj, operation) {
	var	processOperation	= true;
	
	if (obj.getAttribute('confirm'))
		processOperation	= confirm(obj.getAttribute('confirm'));
	
	if (processOperation) {
		var id			= defaultAttribute(obj, 'container', '');
		var module		= defaultAttribute(obj, 'module', '');
		var instance	= defaultAttribute(obj, 'instance', '');
		var entity		= defaultAttribute(obj, 'entity', '');
		var parent_id	= defaultAttribute(obj, 'parent', '');
		var child_id	= defaultAttribute(obj, 'child', '');
		var filter		= defaultAttribute(obj, 'filter', '');
		var reference	= defaultAttribute(obj, 'reference', '');
		var index		= defaultAttribute(obj, 'index', '');
		var limit		= defaultAttribute(obj, 'limit', '');
		
		showLoading(id);
		
		var form_data	= (obj.getAttribute('form_data'))?getFormData(obj.getAttribute('form_data')):'';
		
		if (parent_id) {
			form_data	+= (form_data != '')?'&':'';
			form_data	+= '_parent=' + parent_id;
		}
		
		if (child_id) {
			form_data	+= (form_data != '')?'&':'';
			form_data	+= '_child=' + child_id;
		}
		
		if (filter) {
			form_data	+= (form_data != '')?'&':'';
			form_data	+= '_filter=' + filter;
		}
		
		if (reference) {
			form_data	+= (form_data != '')?'&':'';
			form_data	+= '_reference=' + reference;
		}
		
		if (index) {
			form_data	+= (form_data != '')?'&':'';
			form_data	+= '_index=' + index;
		}
		
		if (limit) {
			form_data	+= (form_data != '')?'&':'';
			form_data	+= '_limit=' + limit;
		}
		
		if (obj.id) {
			form_data	+= (form_data != '')?'&':'';
			form_data	+= '_originator=' + obj.id;
		}
		
		if (module)
			loadModule(id, module, operation, instance, entity, form_data);
		else
			hideLoading();
	}
	
	return false;
}

function optionModule() {
	clickLoadModule(this.options[this.selectedIndex], this.options[this.selectedIndex].getAttribute('type'));
}

function popupModule() {
	clickLoadModule(this, 'popup');
	
	return false;
}

function popupImage() {
	clickLoadModule(this, 'popup_image');
	
	return false;
}

function liveModule() {
	clickLoadModule(this, 'live');
	
	return false;
}

function groupModule() {
	var inputs	= document.getElementsByTagName('input');
	
	var process_request	= true;
	
	if (this.getAttribute('confirm'))
		process_request	= confirm(this.getAttribute('confirm'));
	
	if (process_request) {
		for (i=0; i<inputs.length; i++) {
			if ((inputs[i].name == this.getAttribute('container')) && (inputs[i].checked))
				clickLoadModule(inputs[i], this.getAttribute('index'));
		}
		
		if (this.getAttribute('reset')) {
			if (document.getElementById(this.getAttribute('reset')))
				document.getElementById(this.getAttribute('reset')).checked = false;
		}
	}
	
	return false;
}

function expandModule() {
	clickLoadModule(this, 'expand');
	
	return false;
}

function operationModule() {
	clickLoadModule(this, this.getAttribute('media'));
	
	return false;
}

function refreshModule(divID) {
	var divObj	= document.getElementById(divID);
	//alert(divObj.id + ' ' + divObj.getAttribute('type'))
	clickLoadModule(divObj, divObj.getAttribute('type'));
}

//----------------------------------------------------------------------------------------------------------
// CLICK TO LOAD PAGE
//----------------------------------------------------------------------------------------------------------

function clickLocation() {
	document.location = this.getAttribute('target');
}

function clickRefresh() {
	document.location.reload(true);
}

//----------------------------------------------------------------------------------------------------------
// TOOLTIP
//----------------------------------------------------------------------------------------------------------

function showTooltip() {
	unhideObj(document.getElementById(this.getAttribute('container')))
}

function hideTooltip() {
	hideObj(document.getElementById(this.getAttribute('container')))
}

function positionDiv() {
	positionChildNodes(document.getElementById(this.getAttribute('container')).parentNode)
}

//----------------------------------------------------------------------------------------------------------
// IMAGE
//----------------------------------------------------------------------------------------------------------

function createImage(divObj) {
	var imageObj = document.createElement('img');
	
	var posX	= 0;
	var posY	= (parseInt(divObj.getAttribute('size')) + parseInt(divObj.getAttribute('height'))) / 2;
	
	imageSrc	= 'image.php?_filename=' + divObj.getAttribute('src') + '&_font=' + divObj.getAttribute('font') + '&_text=' + divObj.getAttribute('text') + '&_size=' + divObj.getAttribute('size') + '&_page_type=' + divObj.getAttribute('extension') + '&_colour=' + divObj.getAttribute('colour') + '&_base_colour=' + divObj.getAttribute('base') + '&_transparent_colour=' + divObj.getAttribute('transparent');
	
	imageObj.setAttribute('src', imageSrc);
	imageObj.setAttribute('alt', divObj.getAttribute('text'));
	imageObj.setAttribute('border', '0');
	
	if (divObj.id == 'image_heading_0')
		setCookie('imageSrc', imageSrc)
	
	//setOuterHTML(divObj, imageObj);
	divObj.appendChild(imageObj);
}

//----------------------------------------------------------------------------------------------------------
// CLOSE TARGET
//----------------------------------------------------------------------------------------------------------

function closeTarget() {
	if (this.getAttribute('target'))
		freeDiv(document.getElementById(this.getAttribute('target')));
	
	//showFlash(1, document);
	
	unhideStubborns(document);
	
	return false;
}

//----------------------------------------------------------------------------------------------------------
// DRAG AND DROP
//----------------------------------------------------------------------------------------------------------

var operation_onmouseup	= null;

function makeDraggable(e){
	e = e || window.event;
	
	var drag_div_id	= this.getAttribute('target');
	var tmp_div_id	= 'tmp_' + this.getAttribute('target');
	
	// BG DIV
	var bg_div	= createDiv('bg_' + this.getAttribute('target'), 'loadingBG');
	
	bg_div.setAttribute('target', this.getAttribute('target'));
	
	document.body.appendChild(bg_div);
	
	// TARGET DIV
	var drag_div		= document.getElementById(drag_div_id);
	
	var target_width	= drag_div.offsetWidth;
	var target_height	= drag_div.offsetHeight;
	
	//drag_div.style.width		= target_width + 'px';
	//drag_div.style.height		= target_height + 'px';
	
	// TMP DIV
	var tmp_div	= createDiv(tmp_div_id, 'dragDiv');
	
	tmp_div.style.position		= 'relative';
	tmp_div.style.width			= (target_width - 2) + 'px';
	tmp_div.style.height		= (target_height - 2) + 'px';
	
	tmp_div.style.border		= '1px dotted #FF0000';
	tmp_div.style.background	= '#FFFFFF';
	
	document.body.appendChild(tmp_div);
	
	// SWOP DIVS
	swapAttribute(tmp_div, drag_div, 'class');
	
	swapNode(tmp_div, drag_div);
	
	// POSITION DRAGABLE DIV
	dragObject					= drag_div;
	operation_onmouseup			= this.getAttribute('operation');
	mousePos					= mouseCoords(e);
	
	dragObject.style.position	= 'absolute';
	
	offsetX						= parseInt(this.getAttribute('x'));
	offsetY						= parseInt(this.getAttribute('y'));
	
	drag_div.setAttribute('x', offsetX);
	drag_div.setAttribute('y', offsetY);
	
	dragObject.style.left		= (mousePos.x + offsetX) + 'px';
	dragObject.style.top		= (mousePos.y + offsetY) + 'px';
	
	return false;
}

/*
function startDrag(e) {
	e	= e || window.event;
	
	// BG DIV
	var bg_div	= createDiv('bg_' + this.getAttribute('target'), 'loadingBG');
	
	bg_div.setAttribute('target', this.getAttribute('target'));
	
	document.body.appendChild(bg_div);
	
	bg_div.onmousemove	= dragOut;
	
	// TARGET DIV
	//alert(this.getAttribute('target') + ': ' + document.getElementById(this.getAttribute('target')))
	var target_div		= document.getElementById(this.getAttribute('target'));
	
	var target_width	= target_div.clientWidth;
	var target_height	= target_div.clientHeight;
	
	var offsetX			= e.clientX - findPosX(target_div);
	var offsetY			= e.clientY - findPosY(target_div);
	
	target_div.setAttribute('x', offsetX);
	target_div.setAttribute('y', offsetY);
	
	target_div.style.width		= target_width + 'px';
	target_div.style.height		= target_height + 'px';
	
	//target_div.onmousemove		= drag;
	//target_div.onmouseout		= drag;
	
	//target_div.style.left		= (e.clientX - offsetX) + 'px';
	//target_div.style.top		= (e.clientY - offsetY) + 'px';
	
	// TMP DIV
	var tmp_div	= createDiv('tmp_' + this.getAttribute('target'), 'dragDiv');
	
	tmp_div.style.height		= target_height + 'px';
	
	tmp_div.style.border		= '1px dotted #FF0000';
	
	document.body.appendChild(tmp_div);
	
	swapAttribute(tmp_div, target_div, 'class');
	
	swapNode(tmp_div, target_div);
	
	dragObject					= target_div;
	operation_onmouseup			= this.getAttribute('operation');
	mouseOffset					= getMouseOffset(this, e);
	
	var mousePos	= mouseCoords(e);
	
	dragObject.style.position	= 'absolute';
	dragObject.style.top		= mousePos.y;
	dragObject.style.left		= mousePos.x;
	
	return false;
}
*/

function drag(mousePos) {
	offsetX		= parseInt(dragObject.getAttribute('x'));
	offsetY		= parseInt(dragObject.getAttribute('y'));
	
	dragObject.style.position	= 'absolute';
	dragObject.style.left		= (mousePos.x + offsetX) + 'px';
	dragObject.style.top		= (mousePos.y + offsetY) + 'px';
	
	var tmp_div_id		= 'tmp_' + dragObject.id;
	
	var tmp_div			= document.getElementById(tmp_div_id);
	var parent_div		= tmp_div.parentNode;
	
	for (var i=0; i<parent_div.childNodes.length; i++) {
		if ((parent_div.childNodes[i].nodeName.toLowerCase() == 'div')) {
			if (hitTest(mousePos.x, mousePos.y, parent_div.childNodes[i]) && (((parent_div.childNodes[i].id != tmp_div_id) && !isIE()) || (isIE()))) {
				swapNode(tmp_div, parent_div.childNodes[i]);
				return true;
			}
		}
	}
}
/*
function drag(e) {
	if (isIE())
		e	= event;
	
	//alert(tmp_object)
	
	var offsetX			= this.getAttribute('x');
	var offsetY			= this.getAttribute('y');
	
	//this.style.left		= (mouseX - offsetX) + 'px';
	//this.style.top		= (mouseY - offsetY) + 'px';
	
	//window.status = (mouseX - offsetX);
	//window.status = e.clientX;
	
	var tmp_div			= document.getElementById('tmp_' + this.id);
	var parent_div		= tmp_div.parentNode;
	
	for (var i=0; i<parent_div.childNodes.length; i++) {
		if ((parent_div.childNodes[i].nodeName.toLowerCase() == 'div') && (parent_div.childNodes[i].id != tmp_div.id)) {
			if (checkBounds(parent_div.childNodes[i], mouseX, mouseY)) {
				swapNode(parent_div.childNodes[i], tmp_div);
			}
		}
	}
}
*/

function endDrag() {
	if (dragObject) {
		var tmp_div		= document.getElementById('tmp_' + dragObject.id);
		var bg_div		= document.getElementById('bg_' + dragObject.id);
		
		swapNode(tmp_div, dragObject);
		
		dragObject.style.position	= 'relative';
		dragObject.style.left		= '';
		dragObject.style.top		= '';
		
		setClass(dragObject, 'containerDiv')
		
		tmp_div.parentNode.removeChild(tmp_div);
		bg_div.parentNode.removeChild(bg_div);
		
		id			= dragObject.id;
		module		= dragObject.getAttribute('module');
		operation	= operation_onmouseup;
		instance	= dragObject.getAttribute('instance');
		entity		= dragObject.getAttribute('entity');
		form_data	= '_rank=' + (getDivIndex(dragObject, true) + 1);
		
		showLoading(id);
		
		loadModule(id, module, operation, instance, entity, form_data);
		
		operation_onmouseup	= null;
		previous_position	= null;
		dragObject			= null;
	}
}
/*
function stopDrag(e) {
	if (isIE())
		e	= event;
	
	var target_div	= document.getElementById(this.getAttribute('target'));
	var tmp_div		= document.getElementById('tmp_' + this.getAttribute('target'));
	var bg_div		= document.getElementById('bg_' + this.getAttribute('target'));
	
	swapAttribute(tmp_div, target_div, 'class');
	
	swapNode(tmp_div, target_div);
	
	tmp_div.parentNode.removeChild(tmp_div);
	bg_div.parentNode.removeChild(bg_div);
	
	target_div.onmousemove	= '';
	target_div.onmouseout	= '';
	
	target_div.style.left		= '';
	target_div.style.top		= '';
	
	this.onmousedown	= startDrag;
	
	id			= target_div.id;
	module		= target_div.getAttribute('module');
	operation	= this.getAttribute('operation');
	instance	= target_div.getAttribute('instance');
	entity		= target_div.getAttribute('entity');
	form_data	= '_rank=' + (getDivIndex(target_div, true) + 1);
	
	loadModule(id, module, operation, instance, entity, form_data);
}
*/

//----------------------------------------------------------------------------------------------------------
// PLACEHOLDER
//----------------------------------------------------------------------------------------------------------

function createPlaceholder(parentObj) {
	var div_id	= parentObj.id + '_' + Math.floor(Math.random() * 99999);
	
	var new_div	= createDiv(div_id, '');
	
	new_div.setAttribute('type', parentObj.getAttribute('type'));
	new_div.setAttribute('target', parentObj.getAttribute('target'));
	new_div.setAttribute('placeholder', parentObj.getAttribute('placeholder'));
	
	//parentObj.setAttribute('target', parentObj.id);
	
	if (document.getElementById(parentObj.getAttribute('target')))
		document.getElementById(parentObj.getAttribute('target')).setAttribute('container', div_id);
	
	parentObj.parentNode.insertBefore(new_div, parentObj);
	
	if (parentObj.getAttribute('placeholder') == 'after')
		swapNode(new_div, parentObj);
	
	if (parentObj.getAttribute('change') == 'false')
		swapAttribute(parentObj, new_div, 'id');
	
	return parentObj;
}

//----------------------------------------------------------------------------------------------------------
// STACK
//----------------------------------------------------------------------------------------------------------

var div_stack	= new Array();

function pushStack(containerObj) {
	if (!(div_stack[containerObj.id] instanceof Array))
		div_stack[containerObj.id]	= new Array();
	
	div_stack[containerObj.id].push(containerObj.innerHTML);
	
	return containerObj;
}

function pop_stack(container, index) {
	if (container) {
		for (var i=0; i<Math.min(index, div_stack[container].length); i++) {
			document.getElementById(container).innerHTML	= div_stack[container].pop();
			
			positionChildNodes(document.getElementById(container));
			
			setEvents(document.getElementById(container));
		}
	}
}

function popStack() {
	pop_stack(this.getAttribute('container'), Math.max(this.getAttribute('index'), 1));
}

function showPop(obj) {
	if (!div_stack[obj.getAttribute('container')] || (div_stack[obj.getAttribute('container')].length == 0))
		obj.style.display = 'none';
}

//----------------------------------------------------------------------------------------------------------
// DEQUE
//----------------------------------------------------------------------------------------------------------

var div_deque	= new Array();

function loadDeque(containerObj, innerHTML, offset) {
	var temp_div	= createDiv('tmp_' + containerObj.id, '');
	temp_div.innerHTML	= innerHTML;
	
	div_deque[containerObj.id]	= new Array();
	
	for (var i=0; i<temp_div.childNodes.length; i++) {
		if (temp_div.childNodes[i].nodeName.toLowerCase() == 'div') {
			div_deque[containerObj.id].push(temp_div.childNodes[i].innerHTML);
		}
	}
	
	containerObj.innerHTML	= div_deque[containerObj.id].shift();
	
	if (offset)
		jumpDeque(containerObj, offset);
	
	return containerObj.id;
}

function jumpDeque(container_div, offset) {
	for (var i=0; i<Math.abs(offset); i++) {
		if (offset > 0) {
			//alert(div_deque);
			//alert(container_div.id);
			div_deque[container_div.id].push(container_div.innerHTML);
			container_div.innerHTML	= div_deque[container_div.id].shift();
		} else {
			div_deque[container_div.id].unshift(container_div.innerHTML);
			container_div.innerHTML	= div_deque[container_div.id].pop();
		}
		
		positionChildNodes(container_div);
		
		setEvents(container_div);
	}
}

function previousDeque() {
	if (this.getAttribute('container')) {
		var container_div	= document.getElementById(this.getAttribute('container'));
		
		jumpDeque(container_div, -1);
		
		/*
		div_deque[container_div.id].push(container_div.innerHTML);
		
		container_div.innerHTML	= div_deque[container_div.id].shift();
		
		positionChildNodes(container_div);
		
		setEvents(container_div);
		*/
	}
	
	return false;
}

function nextDeque() {
	if (this.getAttribute('container')) {
		var container_div	= document.getElementById(this.getAttribute('container'));
		
		jumpDeque(container_div, 1);
		
		/*
		div_deque[container_div.id].unshift(container_div.innerHTML);
		
		container_div.innerHTML	= div_deque[container_div.id].pop();
		
		positionChildNodes(container_div);
		
		setEvents(container_div);
		*/
	}
	
	return false;
}

//----------------------------------------------------------------------------------------------------------
// TOGGLE DIV
//----------------------------------------------------------------------------------------------------------

function toggleDiv() {
	if (this.getAttribute('container') && this.getAttribute('index')) {
		var container_div	= document.getElementById(this.getAttribute('container'));
		var indexDiv		= document.getElementById(this.getAttribute('index'));
		
		removeClass(indexDiv, 'hidden');
		addClass(container_div, 'hidden');
		
		positionChildNodes(container_div);
		setEvents(container_div);
	}
	
	return false;
}

//----------------------------------------------------------------------------------------------------------
// LINK TARGETING
//----------------------------------------------------------------------------------------------------------

function targetAnother() {
	if (this.getAttribute('container'))
		document.location	= document.getElementById(this.getAttribute('container')).href;
	
	return false;
}

function linkTarget(obj) {
	if ((obj.href.indexOf('http') == 0) && (obj.href.indexOf(document.location.host) == -1) && (obj.target != "_blank")) {
		obj.target	= "_blank";
	}
}

//----------------------------------------------------------------------------------------------------------
// PAGENATION
//----------------------------------------------------------------------------------------------------------

var div_pagenation	= new Array();

function loadPagenation(containerObj, innerHTML, pageSize, currentPage) {
	var temp_div	= createDiv('tmp_' + containerObj.id, '');
	temp_div.innerHTML	= innerHTML;
	
	div_pagenation[containerObj.id]	= new Array();
	
	for (var i=0; i<temp_div.childNodes.length; i++) {
		if (temp_div.childNodes[i].nodeName.toLowerCase() == 'div') {
			div_pagenation[containerObj.id].push(temp_div.childNodes[i].innerHTML);
		}
	}
	
	containerObj.innerHTML	= div_pagenation[containerObj.id][0];
	
	loadPage(containerObj, pageSize, currentPage);
	
	return containerObj.id;
}

function loadPage(container_div, pageSize, currentPage) {
	var start_offset	= currentPage * pageSize;
	var pages			= div_pagenation[container_div.id].length / pageSize;
	
	container_div.innerHTML	= '';
	
	for (var i=start_offset; i<pageSize; i++) {
		container_div.innerHTML	=+ div_pagenation[container_div.id][i];
		
		positionChildNodes(container_div);
		
		setEvents(container_div);
	}
}

function gotoPage() {
	if (this.getAttribute('container')) {
		var container_div	= document.getElementById(this.getAttribute('container'));
		
		loadPage(container_div, this.getAttribute('pagesize'), this.getAttribute('index'));
	}
}

//----------------------------------------------------------------------------------------------------------
// FLASH
//----------------------------------------------------------------------------------------------------------

function flashObject(divObj) {
	var no_flash_content	= divObj.innerHTML;
	var fo = new FlashObject(divObj.getAttribute('src'), divObj.id + '_embed', divObj.getAttribute('width'), divObj.getAttribute('height'), divObj.getAttribute('version'), (divObj.getAttribute('bgcolor')?divObj.getAttribute('bgcolor'):'#FFFFFF'));
	fo.addParam("wmode", (divObj.getAttribute('wmode')?divObj.getAttribute('wmode'):'transparent'));
	fo.addParam("AllowFullScreen", (divObj.getAttribute('allowfullscreen')?divObj.getAttribute('allowfullscreen'):''));
	fo.addParam("AllowScriptAccess", (divObj.getAttribute('allowscriptaccess')?divObj.getAttribute('allowscriptaccess'):''));
	fo.write(divObj.id);
	
	//if (no_flash_content != divObj.innerHTML)
	//	removeClass(divObj, 'hidden');
}

function drawFlash(divObj) {
	if ((flashinstalled == 2) && (flashversion >= parseInt(divObj.getAttribute('version'))) && divObj.getAttribute('src') && !divObj.getAttribute('override')) {
		var flashObj = document.createElement('embed');
		
		if (!isIE() && ((divObj.getAttribute('width').indexOf('%') > -1) && (divObj.getAttribute('height').indexOf('%') > -1))) {
			divObj.setAttribute('width', document.body.clientWidth);
			divObj.setAttribute('height', document.body.clientHeight);
		}
		
		flashObj.setAttribute('id', divObj.id + '_object');
		flashObj.setAttribute('class', 'flashObject');
		flashObj.setAttribute('classid', 'clsid:D27CDB6E-AE6D-11cf-96B8-444553540000');
		inheritAttribute(divObj, flashObj, 'width');
		inheritAttribute(divObj, flashObj, 'height');
		
		appendParam(flashObj, 'default', escape(divObj.innerHTML), '');
		appendParam(flashObj, 'movie', divObj.getAttribute('src'), '');
		appendParam(flashObj, 'wmode', divObj.getAttribute('wmode'), 'transparent');
		appendParam(flashObj, 'AllowFullScreen', divObj.getAttribute('allowfullscreen'), '');
		appendParam(flashObj, 'AllowScriptAccess', divObj.getAttribute('allowscriptaccess'), '');
		appendParam(flashObj, 'quality', divObj.getAttribute('quality'), 'high');
		
		if (!isIE()) {
			var ffObject = document.createElement('object');
			ffObject.setAttribute('type', 'application/x-shockwave-flash');
			ffObject.setAttribute('data', divObj.getAttribute('src'));
			ffObject.setAttribute('wmode', 'transparent');
			inheritAttribute(divObj, ffObject, 'allowfullscreen');
			inheritAttribute(divObj, ffObject, 'allowscriptaccess');
			inheritAttribute(divObj, ffObject, 'width');
			inheritAttribute(divObj, ffObject, 'height');
			flashObj.appendChild(ffObject);
		}
		
		//alert(flashObj.outerHTML)
		
		divObj.setAttribute('override', 1);
		
		if (isIE()) {
			divObj.innerHTML	= flashObj.outerHTML;
		} else {
			divObj.innerHTML	= '';
			divObj.appendChild(flashObj)
		}
		
		removeClass(divObj, 'hidden');
	}
}

function showFlash(enabled, obj) {
	divs	= obj.getElementsByTagName('div');
	
	for (i=0; i<divs.length; i++) {
		if (divs[i].getAttribute('type') == 'flash') {
			if (enabled)
				drawFlash(divs[i]);
			else {
				if (divs[i].childNodes[0].nodeName == 'OBJECT')
					divs[i].innerHTML	= unescape(divs[i].childNodes[0].childNodes[0].value);
			}
		}
	}
}

//----------------------------------------------------------------------------------------------------------
// CALENDAR
//----------------------------------------------------------------------------------------------------------

function skipMonth(_this) {
	if (_this.type == 'change')
		_this	= this;
	
	var obj	= document.getElementById(_this.getAttribute('container'))
	
	obj.setAttribute('month', _this.options[_this.selectedIndex].value);
	
	loadCalendar(obj);
	
	return false;
}

function skipYear(_this) {
	if (_this.type == 'change')
		_this	= this;
	
	var obj	= document.getElementById(_this.getAttribute('container'))
	
	obj.setAttribute('year', _this.options[_this.selectedIndex].value);
	
	loadCalendar(obj);
	
	return false;
}

function incrementMonth(_this) {
	if (_this.type == 'click')
		_this	= this;
	
	var obj	= document.getElementById(_this.getAttribute('container'))
	
	var current_month	= parseInt(obj.getAttribute('month'));
	var current_year	= parseInt(obj.getAttribute('year'));
	
	if (current_month == 11) {
		obj.setAttribute('month', 0);
		obj.setAttribute('year', current_year + 1);
	} else {
		obj.setAttribute('month', current_month + 1);
	}
	
	loadCalendar(obj);
	
	return false;
}

function decrementMonth(_this) {
	if (_this.type == 'click')
		_this	= this;
	
	var obj	= document.getElementById(_this.getAttribute('container'))
	
	var current_month	= parseInt(obj.getAttribute('month'));
	var current_year	= parseInt(obj.getAttribute('year'));
	
	if (current_month == 0) {
		obj.setAttribute('month', 11);
		obj.setAttribute('year', current_year - 1);
	} else {
		obj.setAttribute('month', current_month - 1);
	}
	
	loadCalendar(obj);
	
	return false;
}

function setDate(_this) {
	if (_this.type == 'click')
		_this	= this;
	
	var obj	= document.getElementById(_this.getAttribute('container'))
	
	var	target	= document.getElementById(obj.getAttribute('target'));
	
	if ((new String(target.nodeName)).toLowerCase() == 'input')
		target.value		= _this.getAttribute('date');
	else
		target.innerHTML	= _this.getAttribute('date');
	
	obj.setAttribute('default', _this.getAttribute('date'));
	obj.setAttribute('show', 'false');
	
	loadCalendar(obj);
	
	return false;
}

function showCalendar(_this) {
	if (_this.type == 'click')
		_this	= this;
	
	var obj	= document.getElementById(_this.getAttribute('container'));
	
	obj.setAttribute('show', 'true');
	
	loadCalendar(obj);
	
	return false;
}

function hideCalendar(_this) {
	if (_this.type == 'click')
		_this	= this;
	
	var obj	= document.getElementById(_this.getAttribute('container'));
	
	obj.setAttribute('show', 'false');
	
	loadCalendar(obj);
	
	return false;
}

function loadCalendar(obj) {
	var array_day_names		= new Array('S', 'M', 'T', 'W', 'T', 'F', 'S');
	var array_month_days	= new Array("31", "28", "31", "30", "31", "30", "31", "30", "31", "30", "31", "30");
	var array_month_names	= new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
	
	var date_default	= new Date()
	
	if (obj.getAttribute('default') && !isNaN(obj.getAttribute('default')))
		date_default.setTime(parseInt(obj.getAttribute('default')) * 1000);
	
	var default_day			= date_default.getDate();
	var default_month		= date_default.getMonth();
	var default_year		= date_default.getFullYear();
	
	var calendar	= document.createElement('table');
		
	//calendar.setAttribute('border', '1');
	
	if (obj.getAttribute('show') == 'true') {
		var date_current		= new Date();
		date_current.setTime(0);
		
		if (obj.getAttribute('month') == '') {
			date_current.setMonth(default_month);
			obj.setAttribute('month', default_month);
		} else
			date_current.setMonth(obj.getAttribute('month'));
		
		if (obj.getAttribute('year') == '') {
			date_current.setFullYear(default_year);
			obj.setAttribute('year', default_year);
		} else
			date_current.setFullYear(obj.getAttribute('year'));
		
		var current_day			= date_current.getDate();
		var current_month		= date_current.getMonth();
		var current_year		= date_current.getFullYear();
		
		if (current_year % 4 == 0)
			array_month_days[1] = "29";
		
		var header			= document.createElement('tr');
		
		var header_combos	= document.createElement('th');
		header_combos.setAttribute('colspan', 7);
		
		button	= document.createElement('input');
		button.value	= '<';
		button.type		= 'button';
		button.setAttribute('container', obj.getAttribute('container'));
		
		if (isIE())
			button.onclick	= "decrementMonth(this)";
		else
			button.onclick	= decrementMonth;
		
		header_combos.appendChild(button);
		
		var month_select	= document.createElement('select');
		month_select.setAttribute('container', obj.getAttribute('container'));
		if (isIE())
			month_select.onchange	= "skipMonth(this)";
		else
			month_select.onchange	= skipMonth;
		
		for (var i=0; i<12; i++) {
			month_option	= document.createElement('option');
			month_option.setAttribute('value', i);
			if (current_month == i)
				month_option.setAttribute('selected', 'selected');
			month_option.innerHTML	= array_month_names[i];
			month_select.appendChild(month_option);
		}
		
		header_combos.appendChild(month_select);
		
		var year_select	= document.createElement('select');
		year_select.setAttribute('container', obj.getAttribute('container'));
		if (isIE())
			year_select.onchange	= "skipYear(this)";
		else
			year_select.onchange	= skipYear;
		
		for (var i=(current_year - 5); i<(current_year + 5); i++) {
			year_option	= document.createElement('option');
			year_option.setAttribute('value', i);
			if (current_year == i)
				year_option.setAttribute('selected', 'selected');
			year_option.innerHTML	= i;
			year_select.appendChild(year_option);
		}
		
		header_combos.appendChild(year_select);
		
		button	= document.createElement('input');
		button.value	= '>';
		button.type		= 'button';
		button.setAttribute('container', obj.getAttribute('container'));
		
		if (isIE())
			button.onclick	= "incrementMonth(this)";
		else
			button.onclick	= incrementMonth;
		
		header_combos.appendChild(button);
		
		header.appendChild(header_combos);
		
		calendar.appendChild(header);
		
		var header		= document.createElement('tr');
		
		for (var i=0; i<array_day_names.length; i++) {
			header_day				= document.createElement('th');
			header_day.innerHTML	= array_day_names[i];
			
			header.appendChild(header_day);
		}
		
		calendar.appendChild(header);
		
		var cell		= document.createElement('tr');
		
		var date_month	= new Date();
		date_month.setDate(1);
		date_month.setMonth(current_month);
		date_month.setFullYear(current_year);
		
		offset_days	= date_month.getDay();
		
		for (var i=0; i<offset_days; i++) {
			cell_day			= document.createElement('td');
			cell_day.innerHTML	= '';
			cell.appendChild(cell_day);
		}
		
		for (var i=0; i<31; i++) {
			if (i < array_month_days[current_month]) {
				cell_day			= document.createElement('td');
				
				var date_selected	= new Date();
				date_selected.setTime(0)
				date_selected.setDate(i + 1);
				date_selected.setMonth(current_month);
				date_selected.setFullYear(current_year);
				
				if (obj.getAttribute('target_format'))
					display_format	= obj.getAttribute('target_format');
				else
					display_format	= 'U';
				
				selected_unix_time	= Math.round(date_selected.getTime() / 1000);
				
				time_stamp	= date(display_format, selected_unix_time);
				
				link	= document.createElement('a');
				link.setAttribute('href', '#');
				link.setAttribute('date', time_stamp);
				link.setAttribute('container', obj.getAttribute('container'));
				
				if (obj.getAttribute('default') == selected_unix_time) {
					link.className	= 'selected';
					link.setAttribute('style', 'font-weight: bold');
				}
				
				if (isIE())
					link.onclick	= "setDate(this)";
				else
					link.onclick	= setDate;
				
				link.innerHTML	= i + 1;
				
				cell_day.appendChild(link);
				
				cell.appendChild(cell_day);
			}
			
			if (i % 7 == 6 - offset_days) {
				calendar.appendChild(cell);
				var cell		= document.createElement('tr');
			}
		}
		
		calendar.appendChild(cell);
	}
	
	var footer		= document.createElement('tr');
	
	var footer_cell	= document.createElement('td');
	footer_cell.setAttribute('colspan', 7);
	footer_cell.className	= 'footer';
	
	if (obj.getAttribute('display_format'))
		var display_format	= obj.getAttribute('display_format');
	else
		var display_format	= 'r';
	
	button			= document.createElement('input');
	button.type		= 'image';
	
	button.setAttribute('container', obj.getAttribute('container'));
	
	if (obj.getAttribute('show') == 'true') {
		button.value	= 'Cancel';
		button.src		= 'images/icons-shadowless/calendar--minus.png';
		
		if (isIE())
			button.onclick	= "hideCalendar(this)";
		else
			button.onclick	= hideCalendar;
	} else {
		button.value	= 'Edit';
		button.src		= 'images/icons-shadowless/calendar--plus.png';
		
		if (isIE())
			button.onclick	= "showCalendar(this)";
		else
			button.onclick	= showCalendar;
		
		if (obj.getAttribute('default') && !isNaN(obj.getAttribute('default')))
			footer_cell.innerHTML	+= date(display_format, parseInt(obj.getAttribute('default')));
	}
	
	footer_cell.appendChild(button);
	
	footer.appendChild(footer_cell);
	calendar.appendChild(footer);
	
	obj.innerHTML	= '';
	
	if (isIE())
		obj.innerHTML	= calendar.outerHTML;
	else
		obj.appendChild(calendar);
}

//----------------------------------------------------------------------------------------------------------
// OUTPUT MESSAGE
//----------------------------------------------------------------------------------------------------------

function publishMessage(message_data) {
	var count	= 0;
	
	var divs	= document.getElementsByTagName('div');
	
	for (i=0; i<divs.length; i++) {
		if (divs[i].getAttribute('type') == 'message') {
			divs[i].innerHTML	= message_data['message'];
			divs[i].className	= message_data['type'];
			count++;
		}
	}
	if (count)
		setInterval("idleMessage()", message_data['interval'])
	else
		alert(message_data['message'])
}

function idleMessage() {
	var divs	= document.getElementsByTagName('div');
	
	for (i=0; i<divs.length; i++) {
		if (divs[i].getAttribute('type') == 'message')
			divs[i].className	= 'idle';
	}
}

//----------------------------------------------------------------------------------------------------------
// WIDGET
//----------------------------------------------------------------------------------------------------------

function loadWidget(obj) {
	var id			= defaultAttribute(obj, 'container', '');
	var module		= defaultAttribute(obj, 'wsdl', '');
	var operation	= 'widget';
	var instance	= 0;
	var entity		= 0;
	
	var form_data	= (obj.getAttribute('form_data'))?getFormData(obj.getAttribute('form_data')):'';
	
	for (var i=0; i<obj.attributes.length; i++) {
		if (obj.attributes[i].specified) {
			if (form_data != '')
				form_data	+= '&';
			
			form_data	+= obj.attributes[i].nodeName + '=' + obj.attributes[i].nodeValue;
		}
	}
	
	loadModule(id, module, operation, instance, entity, form_data);
}

//----------------------------------------------------------------------------------------------------------
// FORMS
//----------------------------------------------------------------------------------------------------------

function setOrder(formObj) {
	var input_order	= formObj.getAttribute('order').split(',');
	
	for (var i=0; i<input_order.length; i++) {
		formObj[input_order[i]].setAttribute('order', lpad(i + 1, new String(input_order.length).length, '0'));
	}
}

function closeOnSubmit() {
	if (this.getAttribute('closeonsubmit'))
		freeDiv(document.getElementById(this.getAttribute('closeonsubmit')));
}

function loginSubmit() {
	try {
		showLoading(this.getAttribute('container'));
		
		validation_feedback	= validateForm(this);
		
		if (validation_feedback && !this.getAttribute('overridevalidation')) {
			loadMessage(this.getAttribute('module'), 'message', this.getAttribute('instance'), 'Notification', validation_feedback);
		} else {
			return true;
		}
		
		return false;
	} catch (e) {
		setCookie('error', e.description);
		hideLoading();
		return false;
	}
}

function uploadSubmit() {
	try {
		showLoading(this.getAttribute('container'));
		
		processOperation	= true;
		
		if (this.getAttribute('confirm'))
			processOperation	= confirm(this.getAttribute('confirm'));
		
		if (processOperation) {
			validation_feedback	= validateForm(this);
			
			if (validation_feedback && !this.getAttribute('overridevalidation')) {
				loadMessage(this.getAttribute('module'), 'message', this.getAttribute('instance'), 'Notification', validation_feedback);
			} else {
				return true;
			}
		}
		
		return false;
	} catch (e) {
		setCookie('error', e.description);
		hideLoading();
		return false;
	}
}

function formSubmit() {
	try {
		showLoading(this.getAttribute('container'));
		
		processOperation	= true;
		
		if (this.getAttribute('confirm'))
			processOperation	= confirm(this.getAttribute('confirm'));
		
		if (processOperation) {
			validation_feedback	= validateForm(this);
			
			if (validation_feedback && !this.getAttribute('overridevalidation')) {
				loadMessage(this.getAttribute('module'), 'message', this.getAttribute('instance'), 'Notification', validation_feedback);
			} else {
				var url			= 'controller.php'; 
				
				var data_string	= getFormData(this);
				
				data_string	+= '&_id='				+ defaultAttribute(this, 'container', '');
				data_string	+= '&_module='			+ defaultAttribute(this, 'module', '');
				data_string	+= '&_operation='		+ defaultAttribute(this, 'type', '');
				data_string	+= '&_instance='		+ defaultAttribute(this, 'instance', '');
				data_string	+= '&_entity='			+ defaultAttribute(this, 'entity', '');
				data_string	+= '&_parent='			+ defaultAttribute(this, 'parent', 0);
				data_string	+= '&_child='			+ defaultAttribute(this, 'child', '');
				data_string	+= '&_reset='			+ this.getAttribute('resetonsubmit');
				
				if (this.id)
					data_string	+= '&_form_id='		+ this.id;
					
				if (this.name)
					data_string	+= '&_form_name='	+ this.name;
				
				
				ajaxPost(url, data_string);
			}
		}
		
		return false;
	} catch (e) {
		setCookie('error', e.description);
		hideLoading();
		return false;
	}
}

function filterSubmit() {
	return true;
}

function resetForm(formObj) {
	for (i=0; i<formObj.elements.length; i++) {
		if (formObj.elements[i].type != 'submit')
			formObj.elements[i].value = formObj.elements[i].defaultValue;
	}
}

function validateForm(formObj) {
	var feedback	= new Array();
	
	var elements	= formObj.elements;
	
	for (i=0; i<elements.length; i++) {
		feedback.push(validateElement(formObj, elements[i]));
	}
	
	/*
	var ul		= document.createElement('ul');
	
	for (var i=0; i<feedback.length; i++) {
		if (feedback[i]) {
			li				= document.createElement('li');
			li.innerHTML	= feedback[i];
			ul.appendChild(li);
		}
	}
	
	var divObj	= document.createElement('div');
	
	if (ul.childNodes.length)
		divObj.appendChild(ul);
	
	return divObj.innerHTML;
	*/
	
	var retval	= new Array();
	
	for (var i=0; i<feedback.length; i++) {
		if (feedback[i] != '')
			retval.push(feedback[i]);
	}
	
	return retval.join(";");
}

function validateElement(formObj, elementObj) {
	var feedback	= '';
	
	switch(elementObj.getAttribute('required')) {
		case 'optional':
			break;
		
		case 'optional_format':
			if (elementObj.getAttribute('pattern') && (elementObj.value != '')) {
				try {
					var pattern	= new RegExp(base64_decode(elementObj.getAttribute('pattern')));
					
					if (elementObj.getAttribute('pattern') && !pattern.test(elementObj.value))
						feedback	= elementObj.title + ' must be in the format ' + elementObj.getAttribute('format');
				} catch (e) {
					feedback	= 'Invalid Regular Expression on ' + elementObj.name;
				}
			}
			break;
		
		case 'format':
			var pattern	= new RegExp(elementObj.getAttribute('pattern'));
			
			if (!pattern.test(elementObj.value) || (elementObj.value == ''))
				feedback	= elementObj.title + ' must be in the format ' + elementObj.getAttribute('format');
			break;
		
		case 'number':
			if (isNaN(elementObj.value) || (elementObj.value == ''))
				feedback	= elementObj.title + ' must be a number';
			break;
		
		case 'time':
			var pattern	= new RegExp("[012][\d]:[0-5][\d]");
			
			if (!pattern.test(elementObj.value) || (elementObj.value == ''))
				feedback	= elementObj.title + ' must be in the format HH:MM';
			break;
		
		case 'optional_time':
			var pattern	= new RegExp("^[012][0-9]:[0-5][0-9]$");
			
			if (!pattern.test(elementObj.value) && (elementObj.value != ''))
				feedback	= elementObj.title + ' must be in the format HH:MM';
			break;
		
		case 'telephone':
			if (!isNumeric(elementObj.value) || (elementObj.value == ''))
				feedback	= elementObj.title + ' must be a number';
			break;
		
		case 'optional_telephone':
			if (!isNumeric(elementObj.value) && (elementObj.value != ''))
				feedback	= elementObj.title + ' must be a number';
			break;
		
		case 'email':
			if (validateEmailAddress(elementObj.value))
				feedback	= elementObj.title + ' ' + validateEmailAddress(elementObj.value);
			break;
		
		case 'optional_email':
			if ((elementObj.value != elementObj.defaultValue) && (validateEmailAddress(elementObj.value)))
				feedback	= elementObj.title + ' ' + validateEmailAddress(elementObj.value);
			break;
		
		case 'select':
			if (elementObj.selectedIndex == -1)
				feedback	= elementObj.title + ' is a required field';
			else if (elementObj.options[elementObj.selectedIndex].value == elementObj.getAttribute('default'))
				feedback	= elementObj.title + ' is a required field';
			break;
		
		case 'checked':
			if (!elementObj.checked && elementObj.getAttribute('default'))
				feedback	= elementObj.title + ' is a required field';
			break;
		
		case 'group_checked':
			var inputs	= formObj.getElementsByTagName('input');
			
			var group_checked	= 0;
			
			for (var i=0; i<inputs.length; i++) {
				if ((inputs[i].getAttribute('group') == elementObj.getAttribute('group')) && (inputs[i].checked != inputs[i].getAttribute('default')))
					group_checked++;
			}
			
			if (!group_checked)
				feedback	= elementObj.title + ' is a required field';
			
			break;
		
		default:
			if ((elementObj.value == elementObj.defaultValue) && (elementObj.getAttribute('required')))
				feedback	= elementObj.title + ' is a required field';
			break;
	}
	
	return feedback;
}

function validateEmailAddress(field) {
//	var invalidChars = '\/\'\\ ";:?!()[]\{\}^|';
	var emailMessage = "";
	/*
	for (i=0; i<invalidChars.length; i++) {
		if (field.indexOf(invalidChars.charAt(i),0) > -1) {
			emailMessage = "\nEmail address contains invalid characters";
		}
	}
	for (i=0; i<field.length; i++) {
	   if (field.charCodeAt(i)>127) {
			emailMessage = "\nEmail address contains non ascii characters.";
		}
	}
	*/
	if (field == '')
		emailMessage = "is a required field";
	
	var atPos = field.indexOf('@',0);
	if (atPos == -1)
		emailMessage = "must be a valid email address";
		//emailMessage = "must contain an @";
	
	if (atPos == 0)
		emailMessage = "must not start with @";
	
	if (field.indexOf('@', atPos + 1) > - 1)
		emailMessage = "must contain only one @";
	
	if (field.indexOf('.', atPos) == -1)
		emailMessage = "is incomplete";
	
	if (field.indexOf('@.',0) != -1)
		emailMessage = "must be a valid email address";
	
	if (field.indexOf('.@',0) != -1)
		emailMessage = "must be a valid email address";
	
	if (field.indexOf('..',0) != -1)
		emailMessage = "must be a valid email address";
	
	var suffix = field.substring(field.lastIndexOf('.')+1);
	if (suffix.length != 2 && suffix != 'com' && suffix != 'net' && suffix != 'org' && suffix != 'edu' && suffix != 'int' && suffix != 'mil' && suffix != 'gov' & suffix != 'arpa' && suffix != 'biz' && suffix != 'aero' && suffix != 'name' && suffix != 'coop' && suffix != 'info' && suffix != 'pro' && suffix != 'museum')
		emailMessage = "must be a valid email address";
	
	return(emailMessage);
}

function sortKeys(sourceArray) {
	var keys = new Array();
	
	for(k in sourceArray) {
		keys.push(k);
	}
	
	keys.sort(function(a, b) {return (a > b) - (a < b);});
	
	var returnArray = new Array();
	
	for (var i = 0; i < keys.length; i++) {
		returnArray[keys[i]]	= sourceArray[keys[i]];
	}
	
	return returnArray;
}

function getFormData(formObj) {
	var fields		= new Array();
	var values		= new Array();
	
	var email		= '';
	var attachments	= '';
	
	str = '';
	
	for (i=0; i<formObj.elements.length; i++) {
		if (str != '')
			str += '&';
		
		if ((formObj.elements[i].value == formObj.elements[i].defaultValue)) {
			switch(formObj.elements[i].getAttribute('required')) {
				case 'optional':
				case 'optional_email':
					if (formObj.elements[i].getAttribute('default'))
						formObj.elements[i].value	= formObj.elements[i].getAttribute('default');
					else
						formObj.elements[i].value	= '';
					break;
			}
		}
		
		name = formObj.elements[i].name + '';
		
		if (name != 'undefined') {
			switch(formObj.elements[i].type) {
				case "checkbox":
				case "radio":
					if (!formObj.elements[i].checked) {
						value	= '';
					} else {
						value	= formObj.elements[i].value + '';
					}
					break;
				case "select-multiple_":
					if (!formObj.elements[i].selected) {
						value	= '';
						break;
					}
				case "select-multiple":
					value	= '';
					for (var j=0; j<formObj.elements[i].length; j++) {
						if (formObj.elements[i][j].selected) {
							if (value != '')
								value	+= ',';
							value	+= formObj.elements[i][j].value.toString();
						}
					}
					break;
				default:
					if (formObj.elements[i].name != '')
						value	= formObj.elements[i].value + '';
			}
			
			if (name.charAt(name.length - 1) == ']')
				name = name.substr(0, name.length - 2) + '%5B%5D';
			
			if (formObj.elements[i].getAttribute('altname')) {
				if (formObj.elements[i].checked || (formObj.elements[i].type != 'checkbox')) {
					if (formObj.elements[i].getAttribute('order'))
						index	= lpad(formObj.elements[i].getAttribute('order'), 3, '0') + '_alt_' + rand(11111, 99999);
					else
						index	= fields.length + '_alt_' + rand(11111, 99999);
					
					//alert(formObj.elements[i].getAttribute('altname') + ' ' + index)
					
					fields[index]	= formObj.elements[i].getAttribute('altname');
					fields[index]	= fields[index].replace(/\[\]/, '%5B%5D');
					
					if (formObj.elements[i].getAttribute('altvalue'))
						values[index]	= escape(formObj.elements[i].getAttribute('altvalue'));
					else
						values[index]	= escape(value);
				}
			}
			
			//if (value != '') {
				if (formObj.elements[i].getAttribute('order'))
					index	= lpad(formObj.elements[i].getAttribute('order'), 3, '0') + '_' + rand(11111, 99999);
				else
					index	= fields.length + '_' + rand(11111, 99999);
				
				//alert(formObj.elements[i].name + ' ' + index)
				
				str			+= name + '=' + escape(value);
				
				fields[index]	= name;
				values[index]	= escape(value);
			//}
		}
	}
	
	values	= sortKeys(values);
	fields	= sortKeys(fields);
	
	var retval	= '';
	
	for (k in values) {
		if (fields[k]) {
			if (retval != '')
				retval	+= '&';
			
			retval	+= fields[k] + '=' + values[k];
		}
	}
	
	//alert(str)
	//alert(retval)
	
	//setCookie('form_data', retval);
	
	//return str;
	return retval;
}

//----------------------------------------------------------------------------------------------------------
// MATHEMATICS
//----------------------------------------------------------------------------------------------------------

function isNumeric(val) {
	var validChars = "+0123456789. ";
	var isNumber=true;
	var Char;
	for (j = 0; j < val.length && isNumber == true; j++){
		Char = val.charAt(j);
		if (validChars.indexOf(Char) == -1) {
         isNumber = false;
        }
    }
    return isNumber;
}

//----------------------------------------------------------------------------------------------------------
// DEBUGGING
//----------------------------------------------------------------------------------------------------------

function output(str) {
	if (!document.getElementById('__terminal')) {
		var terminal	= createDiv('__terminal', '');
		document.body.insertBefore(terminal, document.body.childNodes[0]);
	}
	
	document.getElementById('__terminal').innerHTML	= 'terminal: ' + str;
}

//----------------------------------------------------------------------------------------------------------
// EMAIL OBFUSCATION
//----------------------------------------------------------------------------------------------------------

function decodeEmail(divObj) {
	var email	= base64_decode(divObj.getAttribute('text'));
	
	if (divObj.innerHTML)
		var text	= divObj.innerHTML;
	else
		var text	= email;
	
	divObj.innerHTML	= '<a href="mailto:' + email + '" class="' + divObj.getAttribute('meta') + '" title="' + email + '">' + text + '</a>';
}

//----------------------------------------------------------------------------------------------------------
// AUGMENTATION
//----------------------------------------------------------------------------------------------------------

function lpad(str, len, char) {
	retval	= '';
	for (var i=0; i<len-str.length; i+=char.length) {
		retval	+= char;
	}
	return retval + str;
}

//----------------------------------------------------------------------------------------------------------
// PNG FIX
//----------------------------------------------------------------------------------------------------------
 
function pngFix() {
 
 var arVersion = navigator.appVersion.split("MSIE");
 var version = parseFloat(arVersion[1]);
 
 if ((version >= 5.5) && (document.body.filters)) 
 {
    for(var i=0; i<document.images.length; i++)
    {
       var img = document.images[i];
       var imgName = img.src.toUpperCase();
 
       if (imgName.substring(imgName.length-3, imgName.length) == "PNG")
       {
          var imgID = (img.id) ? "id='" + img.id + "' " : "";
          var imgClass = (img.className) ? "class='" + img.className + "' " : "";
          var imgTitle = (img.title) ? "title='" + img.title + "' " : "title='" + img.alt + "' ";
          var imgStyle = "display:inline-block;" + img.style.cssText;
          if (img.align == "left") imgStyle = "float:left;" + imgStyle
          if (img.align == "right") imgStyle = "float:right;" + imgStyle
          if (img.parentElement.href) imgStyle = "cursor:hand;" + imgStyle
          var strNewHTML = "<span " + imgID + imgClass + imgTitle
          + " style=\"" + "width:" + img.width + "px; height:" + img.height + "px;" + imgStyle + ";"
          + "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader"
          + "(src=\'" + img.src + "\', sizingMethod='scale');\"></span>";
          img.outerHTML = strNewHTML;
          i = i-1;
       }
    }
 }
}