// javascript for affiliate editor
// all this code requires prototype and scriptaculous
// neat. ;) 
// IE IS A FUCKING JOKE STOP USING IT ASSHOLES
// This is a perfect example of the problem with MONOPOLIES UGH!!!!!

// this is a little fn to convert css to html colors
// to be used with getStyle(...) from prototype
function hexColor(rgbColor)
{
	if (rgbColor.substr(0, 3) != 'rgb')
		return rgbColor;

	var numbers = rgbColor.slice(rgbColor.indexOf('(')+1, rgbColor.indexOf(')'));
	var components = numbers.replace(" ","").split(',', 3);
	var hex = "#";
	for (var i = 0; i < components.length; i++) {
		var n = parseInt(components[i]);
		hex += n.toColorPart();
	}

	return hex;
}

function showEditor(evt)
{
	var elm = Event.element(evt);
	Event.stop(evt);

	while (!Element.hasClassName(elm, 'item')) {
		if (elm.hasClassName('button'))
			return false; // skip buttons
		elm = elm.parentNode;
	}

	var editor = $('editor');
	if (editor) {
		var id = $F('editor_id');
		if (id && elm.id) {
			$(id).title = "Click to edit";
			var editing = $A(editor.getElementsByClassName("value")).any
				(function(field) { return field.ipe.editing; });
			if (editing && !confirm('You will lose unsaved changes if you continue. Are you sure?'))
				return false;

			if (id == elm.id) { // roll up when clicking same item
				var preview = document.getElementsByClassName('button', elm)[0];
				Element.hide(preview);

				new Effect.BlindUp(editor, {duration: 1});
				setTimeout(function(){ Element.remove(editor); }, 1000);
				return false;
			}
		}
		
		var buttons = document.getElementsByClassName('item_buttons', $('list'));
		buttons.each(function(item){ Element.hide(document.getElementsByClassName('button', item)[0]); });
		Element.remove(editor);
	}
	
	elm.title = '';
	var parms = 'function=show_editor&arg0=' + elm.id;
	new Insertion.After(elm, '<div id="editor"><span class="loading">Loading editor...</span></div>');
	new Ajax.Updater('editor', 'editor.php', { method: 'get', parameters: parms, evalScripts: true });

	var del = document.getElementsByClassName('button', elm)[0];
	Element.show(del);
	return false;
}

/*function reloadList()
{
	Element.update('list', '<span class="loading">Loading list...</span>');
	new Ajax.Updater('list', 'editor.php', { method: 'get', 
		parameters: 'function=show_list', evalScripts: true });
}*/

function previewAd(id)
{
	var url = "editor.php?function=preview&arg0=" + id;
  window.open(url, "ad_preview", "status = 1, width = 500, height = 500, resizable = 1, scrollbars = 1");
  return false;
}

function deleteAd(id)
{
	Effect.Pulsate(id);
	if (!confirm('Really delete this ad?'))
		return false;

	Element.update('list', '<span class="loading">Loading list...</span>');
	new Ajax.Updater('list', 'editor.php', { method: 'get', evalScripts: true,
		parameters: 'function=delete&arg0='+id });
}

function showTemplate(template)
{
	if (!template) return;
	Element.update('template_data', '<span class="loading">Loading "'+template+'"</span>'); 
	new Ajax.Updater('template_data', 'editor.php', { method: 'get', evalScripts: true,
		parameters: 'function=show_template&arg0=' + escape(template)	});
}

function createAd(template)
{
	$('create', 'create_hide_button').each(function(item) { Element.hide(item); });
	Element.update('list', '<span class="loading">Loading list...</span>');
	new Ajax.Updater('list', 'editor.php', { method: 'get', evalScripts: true,
		parameters: 'function=create_ad&arg0=' + escape(template) });
}

function toggleActive(ad)
{
	Element.update('edit__active', '<span class="loading">Saving...</span>');
	new Ajax.Updater('edit__active', 'editor.php', { method: 'get', evalScripts: true,
		parameters: 'function=activate&arg0=' + escape(ad) + '&arg1=1' });
}

function toggleCreate()
{
	$('create','create_hide_button').each(function(item){ 
			Effect.toggle(item, 'appear', {duration: 0.5}); 
	});
}

function enableEditing(element, fn, rows, options)
{
	element = $(element);
	var extCtrl = $(element.id + "_button");
	var bgColor = '#eeeeee'; // sorry :(
	var url = window.location.href;
	var field = element.id.replace(fn+'_','');
	var id = $('id') ? $F('id') : '';
	if (!rows) rows = 1;

	var defaults = 
	{
		field: field,
		rows: rows,
		size: 25, 
		okText: "save", 
		loadingText: '',
		highlightcolor: bgColor, 
		highlightendcolor: bgColor,
		externalControl: extCtrl,
		formClassName: "ipe_form",
		savingClassName: "loading", 
		ajaxOptions: { method: 'get' },
		onComplete: function(xhr,elm) { 
			Effect.Pulsate(elm, { pulses: 2, duration: 1 }); 
		},
		callback: function(f,val) { 
			var id = $('editor_id');
			if (id != undefined) id = $F('editor_id');
			return url + '?function=' + escape(fn) + '&arg0=' + escape(field)
				+ '&arg1=' + escape(val) + '&arg2=' + id;
		}
	};

	var creation_options = Object.extend(defaults, (options || {}));
	if (creation_options.hasOwnProperty('collection')) {
	  element.ipe = new Ajax.InPlaceCollectionEditor(element, 
	    url, creation_options);
	}
	else {
	  element.ipe = new Ajax.InPlaceEditor(element, 
	    url, creation_options);
	}
}


function switchTab(evt)
{
	var main = $('main');
 	var tab = Event.element(evt);
	var sheet = $(tab.id.replace("tab_", "sheet_"));
	Event.stop(evt);

	$('tabs').getElementsByClassName("tab").each
		(function(item){ item.removeClassName("tab_active"); });
	tab.addClassName("tab_active");

	main.getElementsByClassName('sheet').each(function(item) { 
		if (item.id != sheet.id && item.onHiding) item.onHiding();
		item.hide() 
	});

	sheet.show();
}

function logout()
{
	if (confirm("Really log out?"))
		new Ajax.Request('editor.php?function=logout', { method: 'get',
			onComplete: function() { window.location.href = 'editor.php'; }});
}

function sortTable(evt)
{
	var el = Event.element(evt);
	var order = 0;
	try {
		var sort = el.textContent.toLowerCase();
	} catch (IESUCKS) {
		var sort = el.innerText.toLowerCase();
	}

	if (sort == '') // arrow image clicked
		sort = this.sort;

	sort = sort.replace(/^\s+/g, '').replace(/\s+$/g, '').replace(/\s+/g, '_');

	if (sort == this.sort) // change sort order
		order = this.order ^ 1;

	if (!this.printing)
	{
		var track = this.track ? '&arg3=' + escape(this.track) : '';
		var pars = 'function=' + escape(this.fn) + '&arg0=' + this.start
			+ '&arg1=' + escape(sort) + '&arg2=' + order + track;
	
		new Ajax.Updater(this.element, 'editor.php', 
			{ method: 'get', parameters: pars, evalScripts: true });
	}
	else
	{
		this.sort = sort;
		this.order = order;
		printTable.call(this);
	}
}

function refreshTable()
{
	var track = this.track ? '&arg3=' + escape(this.track) : '';
	var pars = 'function=' + escape(this.fn) + '&arg0=' + this.start
		+ '&arg1=' + escape(this.sort) + '&arg2=' + this.order + track;
	
	new Ajax.Updater(this.element, 'editor.php', 
		{ method: 'get', parameters: pars, evalScripts: true });
}

function printTable()
{
	var args = $H({ track: this.track, sort: this.sort, order: this.order }).toQueryString();
	var report = window.open('report.php?' + args, 'report', 
		'status=no,location=no,resizable=yes,scrollbars=yes,menubar=yes,toolbar=no');
	if (! report) { 
		alert('Your browser would not allow the report window to open, sorry.');
		return
	}
}

function signupPartner(id)
{
	var signup = window.open('signup_partner.php?p=' + id, 'signup', 
		'status=no,location=no,resizable=yes,width=600,scrollbars=yes,menubar=yes,toolbar=no');
	if (! signup) { 
		alert('Your browser would not allow the singup window to open, sorry.');
		return
	}
}

function nextResults(evt)
{
	var track = this.track ? '&arg3=' + escape(this.track) : '';
	new Ajax.Updater(this.element, 'editor.php', { method: 'get',
		parameters: 'function=' + escape(this.fn) + '&arg0=' + 
		(this.start + this.count) + '&arg1=' + escape(this.sort) +
		'&arg2=' + this.order + track, evalScripts: true });
}

function prevResults(evt)
{
	var track = this.track ? '&arg3=' + escape(this.track) : '';
	new Ajax.Updater(this.element, 'editor.php', { method: 'get',
		parameters: 'function=' + escape(this.fn) + '&arg0=' + 
		(this.start - this.count) + '&arg1=' + escape(this.sort) +
		'&arg2=' + this.order + track, evalScripts: true });
}

function firstResults(evt)
{
	var track = this.track ? '&arg3=' + escape(this.track) : '';
	new Ajax.Updater(this.element, 'editor.php', { method: 'get',
		parameters: 'function=' + escape(this.fn) + '&arg0=0&arg1=' + 
		escape(this.sort) + '&arg2=' + this.order + track, evalScripts: true });
}
