var HTTP_ROOT = "http://www.vapaansuomenliitto.fi/";

//	X H R   H E L P E R S
function x2el(x) {
	var el = document.createElement("div");
	el.innerHTML = x.responseText;
	return el.firstChild;
}

function alertAjaxError(resp) {
	$(document.body).removeClassName('waiting');
	alert(resp.responseText);
}

//	O N   L O A D
function windowOnloadHandler() {
	var handlers = new Array();
	this.add = function(func) {
		handlers[handlers.length] = func;
	}
	this.drop = function(func) {}
	this.run =function() {
		for (var i = 0; i < handlers.length; i++) {
			eval(handlers[i]);
		}
	}
}

var WOH = new windowOnloadHandler();
// must appear before suckerfish.js
window.onload = WOH.run;

//	P I N J A   F U N C T I O N S
//	pinja functions rely on prototype.js or other pinja functions
//	convention: ajax handling functions' first param is the url, second the element (where applicable)

/**
*	paged table - works with lib/classes/DocumentForHttp/widgets/PagedTable
*/
var pinja_pagedTableOptions = new Object();

function pinja_PagedTable(id, gotoPage, sortCol) {
	var opts = pinja_pagedTableOptions[id];
	switch (gotoPage) {
	case 'first' :
		gotoPage = 1;
		break;
	case 'previous':
		gotoPage = opts.curPage - 1 < 1 ? 1 : opts.curPage - 1;
		break;
	case 'next':
		gotoPage = opts.curPage + 1 > opts.totPage ? opts.totPage : opts.curPage + 1;
		break;
	case 'last':
		gotoPage = opts.totPage;
		break;
	}
	if (isNaN(sortCol)){
		sortCol = opts.sortCol;
		sortDir = opts.sortDir;
	}
	else {
		sortDir = sortCol == opts.sortCol ?
			(opts.sortDir == 'asc' ? 'desc' : 'asc')
			:
			'asc';
	}
	new Ajax.Updater(
		id,
		opts.pageUrl,
		{
			method: 'get',
			parameters:
				'gotoPage=' + gotoPage
				+ '&sortCol=' + sortCol
				+ '&sortDir=' + sortDir
				+ '&id=' + id,
			evalScripts: true,
			onFailure: alertAjaxError
		});
}

function pinja_AutoComplete(url, el) {

}

/**
*	duoSelectAdd - works with lib/classes/DocumentForHttp/widgets/DuoSelect
*/

function pinja_duoSelectToggle(selEl) {
	var target;
	var selectInserted;
	if (selEl.id.search(/available$/) != -1) {
		target = $(selEl.id.replace(/^(\w*)available$/, '$1selected'));
		selectInserted = true;
	}
	else {
		target = $(selEl.id.replace(/^(\w*)selected$/, '$1available'));
		selectInserted = false;
	}
	var item = selEl.options[selEl.selectedIndex];
	var len = target.options.length;
	target.options[len] = item;
	for (var i = 0; i < selEl.options.length; i++) {
		selEl.options[i].selected = !selectInserted;
	}
	var newOpts = new Array();
	for (var i = 0; i < target.options.length; i++) {
		newOpts[i] = new Option(
			target.options[i].text,
			target.options[i].value);
		newOpts[i].selected = selectInserted;
	}
	newOpts.sort(function (a,b) { return a.text > b.text ? 1 : (a.text < b.text ? -1 : 0)});
	for (var i = 0; i < newOpts.length; i++) {
		target.options[i] = newOpts[i];
	}
	selEl.blur();
}

function pinja_duoSelectPrepareSubmitAll() {
	$$('duoSelect available').each(function (sel) {
		$H(sel.options).each(function (o) {
			o.selected = false;
		});
	});
	$$('duoSelect selected').each(function (sel) {
		$H(sel.options).each(function (o) {
			o.selected = true;
		});
	});
}

function pinja_duoSelectPrepareSubmit(idPrefix) {
	$H($(idPrefix + '_available').options).each(function (o) {
		o.selected = false;
	});
	$H($(idPrefix + '_selected').options).each(function (o) {
		o.selected = true;
	});
}

function pinja_toggleFieldset(fsEl) {
	if (!fsEl || !$(fsEl) || !$(fsEl).childNodes) {
		return false;
	}
	 $A($(fsEl).childNodes).each(function (el) {
		if (el.nodeName.toLowerCase() != 'legend') {
			$(el).toggle();
		}
	});
	$A($(fsEl).getElementsByTagName('IFRAME')).each(function(iEl) { pinja_resizeIframe(iEl); });
	var lg = $(fsEl).getElementsByTagName('LEGEND')[0];
	var imgSrc = lg.firstChild.src;
	if ($(fsEl).hasClassName('collapsed')) {
		$(fsEl).removeClassName('collapsed');
		$(fsEl).addClassName('collapsible');
		lg.firstChild.src = imgSrc.replace(/Right\.gif$/, 'Down.gif');
	}
	else {
		$(fsEl).removeClassName('collapsible');
		$(fsEl).addClassName('collapsed');
		lg.firstChild.src = imgSrc.replace(/Down\.gif$/, 'Right.gif');
	}
}

function pinja_resizeIframe(iframeEl) {
	iframeEl.height = iframeEl.contentWindow.document.body.scrollHeight + 1;
	iframeEl.height = iframeEl.contentWindow.document.body.scrollHeight;
}

//	O T H E R   H E L P E R S

/**
*	true if mouse really out of element el
*	false if mouse out of el, but in to child of el
*/
function pinja_mouseReallyOut(ev, el) {
	var e = ev ? ev : window.event;
	var outEl = window.event ? e.srcElement : e.target;
	var toEl = e.relatedTarget ? e.relatedTarget : e.toElement;
	while (toEl && toEl != document.body) {
		if (toEl == el) {
			return false;
		}
		toEl = toEl.parentNode;
	}
	return true;
}

function pinja_createElement(elName, attrs) {
	var el = document.createElement(elName);
	if (attrs) {
		for (var attr in attrs) {
			el[attr] = attrs[attr];
		}
	}
	for (var i = 2;  i < arguments.length;  i++) {
		var arg = arguments[i];
		switch (typeof arg) {
			case 'number': arg = '' + arg;  // fall through
			case 'string': arg = document.createTextNode( arg);
		}
		el.appendChild(arg);
	}
	return el;
}

function pinja_shimElement(el) {

}

function pinja_toggleModalForm(formEl) {
	var bgId = $(formEl).id + '_modalBG';
	if ($(bgId)) {
		$(bgId).parentNode.removeChild($(bgId));
	}
	else {
		bg = pinja_createElement('div', {id : bgId, className : 'PinjaModalBG'},
			pinja_createElement('div', {className : 'formContainer'},
				pinja_createElement('span', {
					className : 'formContainerTitle',
					title : 'close',
					onclick : function() { pinja_toggleModalForm(this.nextSibling); }
				}, '[ X ]')));
		bg.firstChild.appendChild(formEl);
		document.body.appendChild(bg);
		Position.clone(formEl, bg.firstChild);
		bg.firstChild.height += 20;
	}
}

function pinja_formChanged(formEl, changed) {
	if (changed && !$(formEl).hasClassName('changed')) {
		$(formEl).addClassName('changed');
	}
	if (!changed) {
		$(formEl).removeClassName('changed');
	}
}

if (!window.console || !console.firebug) {
    var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml",
    "group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"];
    window.console = {};
    for (var i = 0; i < names.length; ++i) {
        window.console[names[i]] = function() {};
    }
}
