/***
 *** This file will hold the javascript functions all pages can use, for the sake of globalisation :P
 ***/
 
/**
 * This function will attach the moodal popups for links requiring then.
 * The attachment will use the rel attribute of links with the specific classes to open the pages.
 * Available classes are:
 * - songinfo > for the songinfo, rel format '<song-id>:<title>' (songinfo for <title>)
 * - request > for the requesting, rel format '<song-id>:<title>' (requesting <title>)
 * - ?
 */
function attachMoodal() {
	$$('a.songinfo').each(function(elem, index, array) {
		elem.removeEvents();
		
		elem.addEvent('click', 
		function(event) {
			if (event.control)
				return true; // On control, we want a new tab, not a popup window :)
				
			event.preventDefault();

			var elem = $(event.target);
			if (elem.get('tag') != 'a') // all should be links. (Sometimes a browser seems to give the child ID for the event, for some reason...)
				elem = $(elem.getParent());

			var data = elem.get("rel");
			var id = data.substring(0, data.indexOf(":"));
			var title = data.substring(data.indexOf(":") + 1);
			var width = 800;
			if ($('content_pane') != null)
				width = $('content_pane').getSize().x;
			
			var qs = "id="+id;
			if (event.alt)
				qs += "&action=edit";
			
			if (event.shift)
				window.open("songinfo.php?"+qs, "", "width=800,height=600,scrollbars=yes,resizable=yes,location=no,toolbar=no");
			else
				MOOdalBox.open("songinfo.php?"+qs+"&moodalbox=true", "Song info for "+title+".", width+" 600");
		});
	});
	
	$$('a.request').each(function(elem, index, array) {
		elem.removeEvents();
		
		elem.addEvent('click', 
		function(event) {
			if (event.control)
				return true; // On control, we want a new tab, not a popup window :)
				
			event.preventDefault();

			var elem = $(event.target);
			if (elem.get('tag') != 'a') // all should be links. (Sometimes a browser seems to give the child ID for the event, for some reason...)
				elem = $(elem.getParent());

			var data = elem.get("rel");
			var id = data.substring(0, data.indexOf(":"));
			var title = data.substring(data.indexOf(":") + 1);
			if ($('content_pane') != null)
				width = $('content_pane').getSize().x;
			
			if (event.shift)
				window.open("request.php?id="+id, "", "width=800,height=600,scrollbars=yes,resizable=yes,location=no,toolbar=no");
			else
				MOOdalBox.open("request.php?id="+id+"&moodalbox=true", "Attempting to request "+title+".", width+" 600");
		});
	});
	
	$$('form.ajaxform').each(function(elem, index, array) {
		elem.removeEvents();
		
		elem.addEvent('submit', function(event) {
			event.preventDefault();
			
			var elem = event.target;
			var target = elem.get("rel");
			var theurl = elem.get("action");
			
			var querystring = elem.toQueryString();
			
			// Check for cross-referencing forms? Special feature tiemz?
			elem.getElements('input.crossref').each(function (child, cindex, carray) {
				querystring += "&"+$(child.get("rel")).toQueryString();
			});
			
			new Request.HTML({url: theurl, method: 'post', update: target, onComplete: function() {
				attachMoodal();
			}}).send(querystring);
		});
	});
	
	$$('span.tooltipspan').each(function(elem, index, array) {
		var rel = elem.get("rel");
		var title = rel.substring(0, rel.indexOf(":"));
		var text = rel.substring(rel.indexOf(":") + 1);
		elem.store('tip:title', title);
		elem.store('tip:text', text);
	});
	
	new Tips('span.tooltipspan');
	
	$$('input.enabledisable[type="checkbox"]').each(function(elem, index, array) {
		elem.removeEvents();
		
		elem.addEvent('change', function(event) {
			var elem = event.target;
			var rel = elem.get("rel");
			var enable = elem.get("checked");
			
			$$('input.enabledisable[type!="checkbox"]').each(function(el, index, array) {
				if (el.get("rel") == rel) {
					if (enable) {
						el.removeProperty("disabled");
						el.setStyle("background-color", "#e1e6f5");
					} else {
						el.setProperty("disabled", "disabled");
						el.setStyle("background-color", "#6f7589");
					}
				}
			});
			$$('select.enabledisable').each(function(el, index, array) {
				if (el.get("rel") == rel) {
					if (enable) {
						el.removeProperty("disabled");
						el.setStyle("background-color", "#e1e6f5");
					} else {
						el.setProperty("disabled", "disabled");
						el.setStyle("background-color", "#6f7589");
					}
				}
			});
			$$('textarea.enabledisable').each(function(el, index, array) {
				if (el.get("rel") == rel) {
					if (enable) {
						el.removeProperty("disabled");
						el.setStyle("background-color", "#e1e6f5");
					} else {
						el.setProperty("disabled", "disabled");
						el.setStyle("background-color", "#6f7589");
					}
				}
			});
		});
	});
	
	$$('input.massenabler[type="checkbox"]').each(function(elem, index, array) {
		elem.removeEvents();
		
		elem.addEvent('change', function(event) {
			var elem = event.target;
			var rel = elem.get("rel");
			var enable = elem.get("checked");
			
			$$('input.massenable[type="checkbox"]').each(function(el, i, a) {
				if (el.get("rel") == rel) {
					if (enable)
						el.set("checked", "checked");
					else
						el.removeProperty("checked");
				}
			});
		});
	});
	
	// Check box multi toggle
	$$('input.parentbox[type="checkbox"]').each(function(elem, index, array) {
		elem.removeEvents();
		
	//	alert('adding parentbox events to '+elem.get("rel"));
		
		elem.addEvent('click', function(event) {			
			var elem = $(event.target);
			
			//alert('changing '+elem.get("rel"));
			
			if (elem.get("checked")) {
				elem.fireEvent('childenable', event);
			} else {
				elem.fireEvent('childdisable', event)
			}
		});
		elem.addEvent('childenable', function(event) {
			var elem = $(event.target);
			var rel = elem.get("rel");
			
			elem.set('checked', "checked");
			
			$$('input.child_'+rel+'[type="checkbox"]').each(function(target, index, array) {
				var targetevent = event;
				targetevent.target = target;
				target.fireEvent('childenable', targetevent);
			});
		});
		elem.addEvent('childdisable', function(event) {
			var elem = $(event.target);
			var rel = elem.get("rel");
			
			elem.erase('checked');
			
			$$('input.child_'+rel+'[type="checkbox"]').each(function(target, index, array) {
				var targetevent = event;
				targetevent.target = target;
				target.fireEvent('childdisable', targetevent);
			});
		});
	});
	$$('input.childbox[type="checkbox"]').each(function(elem, index, array) {		
		if (!elem.hasClass("parentbox")) {
			elem.removeEvents();
			
			//alert('adding childbox events to '+elem.get("name"));
			
			elem.addEvent('childenable', function(event) {
				var elem = $(event.target);
				elem.set('checked', "checked");
			});
			elem.addEvent('childdisable', function(event) {
				var elem = $(event.target);
				elem.erase('checked');
			});
		}
	});
}