
var openWindows = {};
var openWindowsTypes = {
	'default' :
	{
		'height'    			: 600,
		'width'     			: 800,
		'top'     				: 10,
		'left'     				: 10,
		'location'   			: true,
		'menubar'   			: true,
		'toolbar'   			: true,
		'scrollbars'			: true,
		'resizable'				: true,
		'status'				  : true
	},
	'popup' :
	{
		'height'    			: 400,
		'width'     			: 200,
		'toolbar'   			: false,
		'scrollbars'			: true,
		'resizable'				: true
	}


};
function openWinCustom( ) {
	var args = openWinCustom.arguments;
	if ( args.length < 1 ) return false;
	var	pageUrl = args[0];
	var typeWin='';
	var customOptions={};
	for(var i=1; i < args.length;i++ )
	{
		if ( typeof(args[i]) == 'object' )
			customOptions = args[i];
		if ( typeof(args[i]) == 'string' )
			typeWin = args[i];
	}

	var defaultOptions = getKeyElse(openWindowsTypes, typeWin, 'default', {} );
	for ( o in defaultOptions )
	{
		if ( ! hasKey(customOptions, o) )
			customOptions[o] = defaultOptions[o];
	}

	var optionsArray = [];
	for ( o in customOptions )
	{
		if ( o == 'height' || o == 'width' )
			optionsArray.push ( o+'='+customOptions[o]+'px' );
		else
			optionsArray.push ( o+'='+(customOptions[o] ? 1 : 0) );
	}

	var optionsString = optionsArray.join(',');


	if( pageUrl != "" ) {
		try {
			if (!typeWin)
				typeWin = 'win'+Math.round(Math.random()*10000);

			if ( hasKey(openWindows, typeWin) && hasKey(openWindows[typeWin],'closed') && !openWindows[typeWin].closed )
			{
				var urlWin = (openWindows[typeWin].location+'').replace(/#.*$/,'');
				var urlUsr = pageUrl.replace(/#.*$/,'');
				if ( urlWin != urlUsr )
					openWindows[typeWin].location = pageUrl;

				if ( navigator.userAgent.toLowerCase().indexOf('chrome') > 0 )
					openWindows[typeWin].blur();
			}
			else
				openWindows[typeWin] = window.open(pageUrl,typeWin,optionsString);

			openWindows[typeWin].focus();
		}
		catch(e) { alert("Error: " + e ); }
	}
	return false;
}


function hasKey ( a, b )
{
	if ( typeof(b) == 'undefined' )
		return typeof(this[a]) != 'undefined';
	else
		return typeof(a[b]) != 'undefined';
}
function getKeyElse()
{
	var args = getKeyElse.arguments;
	try{
		if ( args.length < 3 )
			throw('fewArguments');
		var i;
		for(i=1; i<args.length-1;i++)
		{
			if (hasKey(args[0], args[i]))
				return args[0][args[i]];
		}
		return args[i]; // last arg (the else
	}
	catch(err)
	{
		if (err='fewArgument')
			alert('Method call error: getKeyElse() requires at least three arguments: object/array, key(s) to search for sequentially, default value to return if key(s) not found');
		else
			alert("Error: " + err );
	}
}
function isset( a )
{
	return typeof(a) != 'undefined';
}

