/**
 * This file implements general Javascript functions.
 *
 * This file is part of the evoCore framework - {@link http://evocore.net/}
 * See also {@link http://sourceforge.net/projects/evocms/}.
 *
 * @copyright (c)2003-2006 by Francois PLANQUE - {@link http://fplanque.net/}
 * Parts of this file are copyright (c)2004-2006 by Daniel HAHLER - {@link http://thequod.de/contact}.
 */

function addEvent( elm, evType, fn, useCapture )
{
if( elm.addEventListener )
{
elm.addEventListener( evType, fn, useCapture );
return true;
}
else if( elm.attachEvent )
{
var r = elm.attachEvent( 'on'+evType, fn );
return r;
}
else
{
elm['on'+evType] = fn;
return false;
}
}

function setstatus( message )
{
window.status = message;
return true;
}

function resetstatus()
{
window.status = 'Done';
}

function pop_up_window( href, target, width, height, params )
{
 if( typeof(width) == 'undefined' )
 {
width = 750;
}
if( typeof(height) == 'undefined' )
{
height = 550;
}
var left = (screen.width - width) / 2;
var top = (screen.height - height) / 2;
if( typeof(params) == 'undefined' )
{
params = 'scrollbars=yes, status=yes, resizable=yes, menubar=yes';
}
params = 'width=' + width + ', height=' + height + ', ' + 'left=' + left + ', top=' + top + ', ' + params;
opened = window.open( href, target, params );
opened.focus();
if( typeof(openedWindows) == 'undefined' )
{
openedWindows = new Array(opened);
}
else
{
openedWindows.push(opened);
}
return false;
}

function toggle_display_by_id( text_id, target_id, text_when_displayed, text_when_hidden )
{
if( document.getElementById(target_id).style.display=="" )
{
document.getElementById( text_id ).innerHTML = text_when_hidden;
document.getElementById( target_id ).style.display="none";
}
else
{
document.getElementById( text_id ).innerHTML = text_when_displayed;
document.getElementById( target_id ).style.display="";
}
return false;
}

function toggle_clickopen( id, hide, displayVisible )
{
if( !( clickdiv = document.getElementById( 'clickdiv_'+id ) )
|| !( clickimg = document.getElementById( 'clickimg_'+id ) ) )
{
alert( 'ID '+id+' not found!' );
return false;
}
if( typeof(hide) == 'undefined' )
{
hide = document.getElementById( 'clickdiv_'+id ).style.display != 'none';
}
if( typeof(displayVisible) == 'undefined' )
{
displayVisible = '';
}
if( hide )
{
clickdiv.style.display = 'none';
clickimg.src = imgpath_expand;
return false;
}
else
{
clickdiv.style.display = displayVisible;
clickimg.src = imgpath_collapse;
return false;
}
}

function textarea_replace_selection( myField, snippet, target_document )
{
textarea_wrap_selection( myField, snippet, '', 1, target_document );
}

function textarea_wrap_selection( myField, before, after, replace, target_document )
{
target_document = target_document || document;
var hook_params = {
'element': myField,
'before': before,
'after': after,
'replace': replace,
'target_document': target_document
};
if( b2evo_Callbacks.trigger_callback( "wrap_selection_for_"+myField.id, hook_params ) )
{
return;
}
if( window.opener
&& window.opener.b2evo_Callbacks
&& ( typeof window.opener.b2evo_Callbacks != "undefined" ) )
{
if( window.opener.b2evo_Callbacks.trigger_callback( "wrap_selection_for_"+myField.id, hook_params ) )
{
return;
}
}
if(target_document.selection)
{
myField.focus();
sel = target_document.selection.createRange();
if( replace )
{
sel.text = before + after;
}
else
{
sel.text = before + sel.text + after;
}
myField.focus();
}
else if (myField.selectionStart || myField.selectionStart == '0')
{
var startPos = myField.selectionStart;
var endPos = myField.selectionEnd;
var cursorPos;
var scrollTop, scrollLeft;
if( myField.type == 'textarea' && typeof myField.scrollTop != 'undefined' )
{
scrollTop = myField.scrollTop;
scrollLeft = myField.scrollLeft;
}
if( replace )
{
myField.value = myField.value.substring( 0, startPos)
+ before
+ after
+ myField.value.substring( endPos, myField.value.length);
cursorPos = startPos + before.length + after.length;
}
else
{
myField.value = myField.value.substring( 0, startPos)
+ before
+ myField.value.substring(startPos, endPos)
+ after
+ myField.value.substring( endPos, myField.value.length);
cursorPos = endPos + before.length + after.length;
}
if( typeof scrollTop != 'undefined' )
{
myField.scrollTop = scrollTop;
myField.scrollLeft = scrollLeft;
}

myField.focus();
myField.selectionStart = cursorPos;
myField.selectionEnd = cursorPos;
}
else
{
myField.value += before + after;
myField.focus();
}
}

function toggle_filter_area( filter_name )
{
if( !( clickdiv = document.getElementById( 'clickdiv_'+filter_name ) )
|| !( clickimg = document.getElementById( 'clickimg_'+filter_name ) ) )
{
alert( 'ID '+filter_name+' not found!' );
return false;
}
hide = document.getElementById( 'clickdiv_'+filter_name ).style.display != 'none';
if( hide )
{
clickdiv.style.display = 'none';
clickimg.src = imgpath_expand;
asyncRequest( htsrv_url+'async.php?collapse='+filter_name );
}
else
{
clickdiv.style.display = 'block';
clickimg.src = imgpath_collapse;
asyncRequest( htsrv_url+'async.php?expand='+filter_name );
}
return false;
}

function asyncRequest( url )
{
if (window.XMLHttpRequest)
{
req = new XMLHttpRequest();
}
else if (window.ActiveXObject)
{
req = new ActiveXObject("Microsoft.XMLHTTP");
}
if(req)
{
swapSection( '...' );
req.onreadystatechange = asyncResponseHandler;
req.open( 'GET', url, true );
req.setRequestHeader("content-type","application/x-www-form-urlencoded");
req.send('dummy');
}
else
{
swapSection('Your browser does not seem to support XMLHttpRequest.');
}

return false;
}

function asyncResponseHandler()
{
if( req.readyState == 4 )
{
if( req.status == 200 )
{
swapSection( req.responseText );
}
else
{
swapSection("There was a problem retrieving the XML data:\n" + req.statusText);
}
}
}

function swapSection( data )
{
var swappableSection = document.getElementById('asyncResponse');
if( swappableSection )
{
swappableSection.innerHTML = data;
}
}

function b2evo_Callbacks() {
this.eventHandlers = new Array();
};

b2evo_Callbacks.prototype = {
register_callback : function(event, f) {
if( typeof this.eventHandlers[event] == "undefined" )
{
this.eventHandlers[event] = new Array();
}
this.eventHandlers[event][this.eventHandlers[event].length] = f;
},
trigger_callback : function(event, args) {
if( typeof this.eventHandlers[event] == "undefined" )
{
return null;
}
var r = false;
var cb_args = '';
var cb_arguments = arguments;
for( var i = 1; i < arguments.length; i++ ) {
cb_args += "cb_arguments[" + i + "], ";
}
if( cb_args.length )
{
cb_args = cb_args.substring( 0, cb_args.length - 2 );
}
for( var i = 0; i < this.eventHandlers[event].length; i++ )
{
var f = this.eventHandlers[event][i];
r = eval( "f("+cb_args+");" ) || r;
}
return r;
}
};

var b2evo_Callbacks = new b2evo_Callbacks();
