/* frame.js - User Interface Frame
**
** $Id: frame.js 114 2009-05-16 03:38:54Z mcnelis $
**
** Copyright 2007-2008, CloseTies, Inc. All Rights Reserved.
*/

/******************************************************************************/

window.Frame=(window.Frame||function(){});

/********************************************************************************/

Frame.autoopen = false;

/********************************************************************************/

Frame.formSubmit = function(formname,button,klass)
{
	button = (button == undefined ? false : button);
	klass = (klass == undefined ? 'pushbutton' : klass);
	var form = $.$id(formname);
	if (form) {
		if (button) {
			button.className=klass+'disabled';
			button.disabled=true;
		}
		form.submit();
	}
	return false;
}

/********************************************************************************/

Frame.closeupMenus = function(event)
{
	var menus = $.$class('navmenu');
	for (var i = 0; i < menus.length; i++) {
		if (menus[i].closeup) menus[i].closeup();
	}
}

/********************************************************************************/

Frame.dropdownMenu = function(link,menu,event)
{
	if (Frame.autoopen) {
		Frame.closeupMenus();
	}
	if (menu.style.display == 'none') {
		menu.style.display = 'block';
		if (link){
			link.className='droppeddownbutton';
		}
		menu.changed=true;
		var frame = $.$id(menu.id+'IFrame');
		if (frame) {
			frame.style.top = menu.style.top;
			frame.style.right = menu.style.right;
			frame.style.display = 'block';
			frame.style.width = (menu.offsetWidth)+'px';
			frame.style.height = (menu.offsetHeight)+'px';
		}
		menu.closeup = function(e) {if(Frame.autoopen || !menu.changed){$.hide(this);if(link){link.className='dropdownbutton';}
var frame=$.$id(menu.id+'IFrame');if(frame){frame.style.display='none';frame.style.width=menu.offsetWidth+'px';frame.style.height=menu.offsetHeight+'px';}
Frame.removeEvent(document,'click',this.closeup,menu.id);}else{menu.changed=false;}}.bind(menu);
		Frame.addEvent(document,'click',menu.closeup,menu.id);
	}
	return false;
}

/********************************************************************************/

Frame.logodropdownMenu = function(link,menu,event)
{
	if (Frame.autoopen) {
		Frame.closeupMenus();
	}
	if (menu.style.display == 'none') {
		menu.style.display = 'block';
		if (link){
			link.className='logodroppeddownbutton';
		}
		menu.changed=true;
		var frame = $.$id(menu.id+'IFrame');
		if (frame) {
			frame.style.top = menu.style.top;
			frame.style.right = menu.style.right;
			frame.style.display = 'block';
			frame.style.width = (menu.offsetWidth)+'px';
			frame.style.height = (menu.offsetHeight)+'px';
		}
		menu.closeup = function(e) {if(Frame.autoopen || !menu.changed){$.hide(this);if(link){link.className='logodropdownbutton';}
var frame=$.$id(menu.id+'IFrame');if(frame){frame.style.display='none';frame.style.width=menu.offsetWidth+'px';frame.style.height=menu.offsetHeight+'px';}
Frame.removeEvent(document,'click',this.closeup,menu.id);}else{menu.changed=false;}}.bind(menu);
		Frame.addEvent(document,'click',menu.closeup,menu.id);
	}
	return false;
}

/********************************************************************************/

Frame.closeupControls = function(event)
{
	var controls = $.$class('control');
	for (var i = 0; i < controls.length; i++) {
		if (controls[i].closeup) controls[i].closeup();
	}
}

/********************************************************************************/

Frame.dropdownControl = function(link,klass,control,event)
{
	if (Frame.autoopen) {
		Frame.closeupControls();
	}
	if (control.style.display == 'none') {
		control.style.display = 'block';
		if (link){
			link.klass =  link.className;
			link.className = klass;
		}
		control.changed=true;
		var frame = $.$id(control.id+'IFrame');
		if (frame) {
			frame.style.top = control.style.top;
			frame.style.right = control.style.right;
			frame.style.display = 'block';
			frame.style.width = (control.offsetWidth)+'px';
			frame.style.height = (control.offsetHeight)+'px';
		}
		control.closeup = function(e) {
/*
	Frame.$target = e.target;
	var descendant = $.isDescendantOf(e.target,control);
Debug.add('','control.closeup','trace');
Debug.dump('','control.closeup','descendant',descendant);
*/
			if(Frame.autoopen || !control.changed){if (!$.isDescendantOf(e.target,control)) {$.hide(this);if(link){link.className=link.klass;}
var frame=$.$id(control.id+'IFrame');if(frame){frame.style.display='none';frame.style.width=control.offsetWidth+'px';frame.style.height=control.offsetHeight+'px';}
Frame.removeEvent(document,'click',this.closeup,control.id);}}else{control.changed=false;}}.bind(control);
		Frame.addEvent(document,'click',control.closeup,control.id);
	}
	return false;
}

/********************************************************************************/

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

/********************************************************************************/

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

/********************************************************************************/

Frame.pushButton = function(id,klass,text,title,link,click,extended,margin) {
	var buffer = '';
	buffer += '<a class="'+(klass ? klass : 'pushbutton')+'"';
	if (id) {
		buffer += ' id="'+id+'"';
	}
	if (extended) {
		buffer += ' '+extended+' ';
	}
	if (link) {
		buffer += ' href="'+link+'"';
	}
	if (click) {
		buffer += ' onclick="'+click+'"';
	}
	if (title) {
		buffer += ' title="'+title+'"';
	}
	if (margin) {
		buffer += ' style="margin-left: '+margin+'px"';
	}
	buffer += '>';
	if (text) {
		buffer += '<span>'+text+'</span>';
	}
	buffer += '</a>';
	return buffer;
}

/********************************************************************************/

Frame.disableButton = function(button,klass)
{
	klass = (klass == undefined ? 'pushbutton' : klass);
	if (button){
		button.className=klass+'disabled';
		button.disabled=true; 
	}
	return;
}

/********************************************************************************/

Frame.enableButton = function(button,klass)
{
	klass = (klass == undefined ? 'pushbutton' : klass);
	if (button){
		button.className=klass;
		button.disabled=false; 
	}
	return;
}

/******************************************************************************/

Frame.status = function(message,klass) {
	var statusbar = $.$id('statusbar');
	var statusarea = $.$id('statusarea');
	if (statusarea && statusbar && message) {
		statusarea.innerHTML = '<h4>'+message+'</h4>';
		statusarea.className = (klass ? klass : 'success');
		statusbar.style.display = 'block';
	}
	else if (statusbar) {
		statusbar.style.display = 'none';
	}
	return true;
}

/******************************************************************************/

Frame.photoGridBegin = function(id,klass,multiselect,style,disabled,attribs) {
	var buffer = '';
	buffer += '<input'+(id ? ' id="'+id+'"' : ' id="photogrid"')+(id ? ' name="'+id+'"' : ' name="photogrid"')+' type="hidden" value="">';
	buffer += '<div'+(id ? ' id="'+id+'select"' : ' id="photogridselect"')+(klass ? ' class="'+klass+'"' : ' class="photogrid"')+(style ? ' style="'+style+'"' : '')+'><table selectinput="'+(id ? id : 'photogrid')+'"'+(multiselect ? ' multiselect="true"' : '')+(disabled ? ' disabled' : '')+' cellspacing="0" cellpadding="0" border="0"'+(attribs ? ' '+attribs : '')+'><tr>';
	return buffer;
}

/******************************************************************************/

Frame.photoGridCell = function(id,src,title,value,style) {
	var buffer = '';
	buffer += '<td'+(id ? ' id="'+id+'"' : '')+' class="photocell" selectvalue="'+value+'" style="font-size:3px;line-height:3px;" onclick="Frame.photoGridClick(this);" onmouseout="Frame.photoGridOut(this);" onmouseover="Frame.photoGridOver(this);"><img src="' + src + '"'+(style ? ' style="'+style+'"' : '')+(title ? ' alt="'+title+'"' : '')+(title ? ' title="'+title+'"' : '')+'></td>';
	return buffer;
}

/******************************************************************************/

Frame.photoGridBreak = function(i,n,m) {
	var buffer = '';
	if ((i+1) < n) {
		if (((i+1) % m) == 0) {
			buffer += '</tr><tr>';
		}
	}
	return buffer;
}

/******************************************************************************/

Frame.photoGridEnd = function() {
	var buffer = '';
	buffer += '</tr>';
	buffer += '</table></div>';
	return buffer;
}

/******************************************************************************/

Frame.photoGridOver = function(elem) {
	var disabled = (elem.parentNode.parentNode.parentNode.getAttribute && elem.parentNode.parentNode.parentNode.getAttribute("disabled") ? true : false);
	if (!disabled) {
		var selected = (elem.getAttribute && elem.getAttribute("selected") ? true : false);
		if (selected) {
			elem.className = "photocellselectedover";
		}
		else {
			elem.className = "photocellover";
		}
	}
	return true;
}

/******************************************************************************/

Frame.photoGridOut = function(elem) {
	var disabled = (elem.parentNode.parentNode.parentNode.getAttribute && elem.parentNode.parentNode.parentNode.getAttribute("disabled") ? true : false);
	if (!disabled) {
		var selected = (elem.getAttribute && elem.getAttribute("selected") ? true : false);
		if (selected) {
			elem.className = "photocellselected";
		}
		else {
			elem.className = "photocell";
		}
	}
	return true;
}

/******************************************************************************/

Frame.photoGridClick = function(elem) {
	var disabled = (elem.parentNode.parentNode.parentNode.getAttribute && elem.parentNode.parentNode.parentNode.getAttribute("disabled") ? true : false);
	if (!disabled) {
		var onchange = (elem.parentNode.parentNode.parentNode.parentNode.getAttribute ? elem.parentNode.parentNode.parentNode.parentNode.getAttribute("onchange") : false);
		var table;
		var tbody;
		var tr;
		var td;
		tbody = elem.parentNode.parentNode;
		table = tbody.parentNode;
		var multiselect = (table.getAttribute && table.getAttribute("multiselect") ? true : false);
		if (!multiselect) {
			var rows = tbody.childNodes;
			for (var r = 0; r < rows.length; r++) {
				var cells = rows[r].childNodes;
				for (var c = 0; c < cells.length; c++) {
					if (cells[c] != elem && cells[c].getAttribute && cells[c].getAttribute("selected")) {
						cells[c].removeAttribute("selected");
						cells[c].className = "photocell";
					}
				}
			}
		}
	
		var selected = (elem.getAttribute && elem.getAttribute("selected") ? true : false);
		selected = !selected;
		if (selected) {
			elem.setAttribute("selected","true");
			elem.className = "photocellselectedover";
		}
		else {
			elem.removeAttribute("selected");
			elem.className = "photocellover";
		}
		if (onchange) {
			var self = this;
			with (self) {
				var  f = eval('Frame.__onchange = function () {'+onchange+'}');
				f.apply(self,[]);
			}
		}
		var selectinput = (table.getAttribute && table.getAttribute("selectinput") ? table.getAttribute("selectinput") : false);
		if (selectinput) {
			var text = '';
			var rows = tbody.childNodes;
			for (var r = 0; r < rows.length; r++) {
				var cells = rows[r].childNodes;
				for (var c = 0; c < cells.length; c++) {
					if (cells[c].getAttribute && cells[c].getAttribute("selected")) {
						if (cells[c].getAttribute("selectvalue")) {
							text += (text.length > 0 ? ',' : '')+cells[c].getAttribute("selectvalue");
						}
					}
				}
			}
			$.$id(selectinput).value = text;
		}
	}
	return true;
}

/******************************************************************************/

Frame.photoGridValue = function(id,selection) {
	var elem = $.$id((id ? id+'select' : 'photogridselect'));
	if (!elem) return false;
	var pieces = [];
	if (selection.split) pieces = selection.split(',');
	var n = pieces.length;
	var table;
	var tbody;
	var tr;
	var td;
	table = elem.childNodes[0];
	tbody = table.childNodes[0];
	var multiselect = (table.getAttribute && table.getAttribute("multiselect") ? true : false);
	if (!multiselect) {
		n = 1;
	}
	var selectinput = (table.getAttribute && table.getAttribute("selectinput") ? table.getAttribute("selectinput") : false);
	var text = '';
	var value = '';
	var rows = tbody.childNodes;
	for (var r = 0; r < rows.length; r++) {
		var cells = rows[r].childNodes;
		for (var c = 0; c < cells.length; c++) {
			if (cells[c].getAttribute && cells[c].getAttribute("selected")) {
				cells[c].removeAttribute("selected");
				cells[c].className = "photocell";
			}
			value = ((cells[c].getAttribute && cells[c].getAttribute("selectvalue")) ? cells[c].getAttribute("selectvalue") : '');
			for (var p = 0; p < n; p++) {
				if (value.length > 0 && value == pieces[p]) {				
					cells[c].setAttribute("selected","true");
					cells[c].className = "photocellselected";
					text += (text.length > 0 ? ',' : '')+value;
				}
			}
		}
	}
	if (selectinput) {
		$.$id(selectinput).value = text;
	}
	return true;
}

/******************************************************************************/

Frame.imageListBegin = function(id,klass,multiselect,style) {
	var buffer = '';
	buffer += '<input'+(id ? ' id="'+id+'"' : ' id="imagelist"')+' type="hidden" value="">';
	buffer += '<div'+(id ? ' id="'+id+'select"' : ' id="imagelistselect"')+(klass ? ' class="'+klass+'"' : ' class="imagelist"')+(style ? ' style="'+style+'"' : '')+'><table selectinput="'+(id ? id : 'imagelist')+'"'+(multiselect ? ' multiselect="true"' : '')+' cellspacing="0" cellpadding="0" border="0">';
	return buffer;
}

/******************************************************************************/

Frame.imageListCell = function(id,src,label,title,value,style) {
	var buffer = '';
	buffer += '<tr selectvalue="'+value+'"><td'+(id ? ' id="'+id+'"' : '')+' class="imagecell" style="font-size:3px;line-height:3px;" onclick="Frame.imageListClick(this);" onmouseout="Frame.imageListOut(this);" onmouseover="Frame.imageListOver(this);"><img src="' + src + '"'+(style ? ' style="'+style+'"' : '')+(title ? ' alt="'+title+'"' : '')+(title ? ' title="'+title+'"' : '')+'"></td><td class="imagelabel" onclick="Frame.imageListClick(this);" onmouseout="Frame.imageListOut(this);" onmouseover="Frame.imageListOver(this);">'+label+'</td></tr>';
	return buffer;
}

/******************************************************************************/

Frame.imageListEnd = function() {
	var buffer = '';
	buffer += '</table></div>';
	return buffer;
}

/******************************************************************************/

Frame.imageListOver = function(elem) {
	var row = (elem ? elem.parentNode : false);
	var image = (row ? row.childNodes[0] : false);
	var label = (row ? row.childNodes[1] : false);
	var selected = (row && row.getAttribute && row.getAttribute("selected") ? true : false);
	if (selected) {
		image.className = "imagecellselectedover";
		label.className = "imagelabelselectedover";
	}
	else {
		image.className = "imagecellover";
		label.className = "imagelabelover";
	}
	return true;
}

/******************************************************************************/

Frame.imageListOut = function(elem) {
	var row = (elem ? elem.parentNode : false);
	var image = (row ? row.childNodes[0] : false);
	var label = (row ? row.childNodes[1] : false);
	var selected = (row && row.getAttribute && row.getAttribute("selected") ? true : false);
	if (selected) {
		image.className = "imagecellselected";
		label.className = "imagelabelselected";
	}
	else {
		image.className = "imagecell";
		label.className = "imagelabel";
	}
	return true;
}

/******************************************************************************/

Frame.imageListClick = function(elem) {
	var disabled = (elem.parentNode.parentNode.parentNode.getAttribute && elem.parentNode.parentNode.parentNode.getAttribute("disabled") ? true : false);
	if (!disabled) {
		var onchange = (elem.parentNode.parentNode.parentNode.getAttribute ? elem.parentNode.parentNode.parentNode.getAttribute("onchange") : false);
		var row = (elem ? elem.parentNode : false);
		var image = (row ? row.childNodes[0] : false);
		var label = (row ? row.childNodes[1] : false);
		var table;
		var tbody;
		var tr;
		var td;
		tbody = row.parentNode;
		table = tbody.parentNode;
		var multiselect = (table.getAttribute && table.getAttribute("multiselect") ? true : false);
		if (!multiselect) {
			var rows = tbody.childNodes;
			for (var r = 0; r < rows.length; r++) {
				if (rows[r] != row && rows[r].getAttribute && rows[r].getAttribute("selected")) {
					rows[r].removeAttribute("selected");
					rows[r].childNodes[0].className = "imagecell";
					rows[r].childNodes[1].className = "imagelabel";
				}
			}
		}
	
		var selected = (row.getAttribute && row.getAttribute("selected") ? true : false);
		selected = !selected;
		if (selected) {
			row.setAttribute("selected","true");
			image.className = "imagecellselectedover";
			label.className = "imagelabelselectedover";
		}
		else {
			row.removeAttribute("selected");
			image.className = "imagecellover";
			label.className = "imagelabelover";
		}
		if (onchange) {
			var self = this;
			with (self) {
				var  f = eval('Frame.__onchange = function () {'+onchange+'}');
				f.apply(self,[]);
			}
		}
		var selectinput = (table.getAttribute && table.getAttribute("selectinput") ? table.getAttribute("selectinput") : false);
		if (selectinput) {
			var text = '';
			var rows = tbody.childNodes;
			for (var r = 0; r < rows.length; r++) {
				if (rows[r].getAttribute && rows[r].getAttribute("selected")) {
					if (rows[r].getAttribute("selectvalue")) {
						text += (text.length > 0 ? ',' : '')+rows[r].getAttribute("selectvalue");
					}
				}
			}
			$.$id(selectinput).value = text;
		}
	}
	return true;
}

/******************************************************************************/

Frame.imageListValue = function(id,selection) {
	var elem = $.$id((id ? id+'select' : 'imagelistselect'));
	if (!elem) return false;
	var pieces = [];
	if (selection.split) pieces = selection.split(',');
	var n = pieces.length;
	var table;
	var tbody;
	var tr;
	var td;
	table = elem.childNodes[0];
	tbody = table.childNodes[0];
	var multiselect = (table.getAttribute && table.getAttribute("multiselect") ? true : false);
	if (!multiselect) {
		n = 1;
	}
	var selectinput = (table.getAttribute && table.getAttribute("selectinput") ? table.getAttribute("selectinput") : false);
	var text = '';
	var value = '';
	var rows = tbody.childNodes;
	for (var r = 0; r < rows.length; r++) {
		if (rows[r].getAttribute && rows[r].getAttribute("selected")) {
			rows[r].removeAttribute("selected");
			rows[r].childNodes[0].className = "imagecell";
			rows[r].childNodes[1].className = "imagelabel";
		}
		value = (rows[r].getAttribute("selectvalue") ? rows[r].getAttribute("selectvalue") : '');
		for (var p = 0; p < n; p++) {
			if (value == pieces[p]) {				
				rows[r].setAttribute("selected","true");
				rows[r].childNodes[0].className = "imagecellselected";
				rows[r].childNodes[1].className = "imagelabelselected";
				text += (text.length > 0 ? ',' : '')+value;
			}
		}
	}
	if (selectinput) {
		$.$id(selectinput).value = text;
	}
	return true;
}

