var utils = {};

utils.MESI = [ "Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre" ];
utils.GIORNI = [ "Domenica", "Luned&igrave;", "Marted&igrave;", "Mercoled&igrave;", "Gioved&igrave;", "Venerd&igrave;", "Sabato" ];

utils.strip_html_body = function ( s )
{
	var p, p2;

	p = s.indexOf ( "<body" );
	if ( p < 0 ) p = s.indexOf ( "<BODY" );
	if ( p >= 0 )
	{
		p2 = s.indexOf ( ">", p + 5 );
		if ( p2 >= 0 )
			s = s.substr ( p2 + 1 );
	}

	p = s.indexOf ( "</body>" );
	if ( p < 0 ) p = s.indexOf ( "</BODY>" );
	if ( p >= 0 )
		s = s.substr ( 0, p );

	return s;
};


utils.get_browser = function ()
{	
	var s = navigator.userAgent;
	var res = '';

	if ( document.all && s.toLowerCase().indexOf ( 'msie' ) != -1 )
	{
		s = navigator.userAgent.substr ( s.toLowerCase().indexOf ( 'msie' ), 8 );
		res = 'IE';

		if ( s.indexOf ( '6.0' ) != -1 ) res += '6';
		else if ( s.indexOf ( '7.0' ) != -1 ) res += '7';
	}
	else if ( s.toLowerCase().indexOf ( 'mozilla' ) != -1 )
	{
		s = navigator.userAgent.substr ( navigator.userAgent.toLowerCase().indexOf ( 'firefox' ), 15);

		if ( s.toLowerCase().indexOf ( 'firefox' ) != -1 )
		{
			s = s.split ( "/" );

			res = 'FF';

			if ( s.length >= 1 )
				res += s [ 1 ]; 
		}
	}
	else
		res = navigator.appName + navigator.appVersion;

	return res;
};


utils.order_date = function ( date, sep, order, new_sep )
{
	var s = '';

	if ( date )
	{
		if ( order == "IT" && sep )
		{
			s = date.split ( sep );

			if ( s.length < 2 ) return s;

			if ( new_sep ) sep = new_sep;

			s = s [ 2 ] + sep + s [ 1 ] + sep + s [ 0 ];
		}
	}

	return s;
};


utils.get_file = function ( url, cback )
{
	kernel.ajax ( url, {}, function ( v )
	{
		if ( v.readyState != 4 ) return;
		if ( cback ) cback ( v.responseText, v.status );
	}, false );
};

utils.multi_wait = function ( lst, cback, vars, elem, n )
{
	var t, l = lst.length;
	if ( ! n ) n = 0;

	if ( n > 30 )
	{
		console.error ( "Non sono riuscito a caricare: " + elem );
		return;
	}

	for ( t = 0; t < l; t ++ )
	{
		if ( ! liwe.utils.is_def ( lst [ t ] ) )
		{
			console.debug ( "Attendo " + lst [ t ] );
			setTimeout ( function () { utils.multi_wait ( lst, cback, vars, lst [ t ], ++n );  }, 500 );
			return;
		}
	}

	if ( cback ) cback ( vars );
};

utils.fill_mask = function ( mask, div_name, cback, ds )
{
	kernel.show_mask ( mask, div_name, function ( v )
	{
		var requery = false;
		var data = kernel.history_data;

		if ( data )
		{
			var fields = v [ "fields" ];
			var ds_fields = ds ? ds.get_fields () : {};
			if ( ! ds_fields ) ds_fields = {};

			var t, l = fields.length;
			for ( t = 0; t < l; t ++ )
			{
				var f = fields [ t ] [ 0 ];
				var ftype = fields [ t ] [ 1 ];
				var val = data.get ( f, "" );  // dalla history

				if ( ftype == "radio" )
				{
					var el = $ ( f + "_" + val );
					if ( el ) el.checked = true;
				}
				else
				{
					var el = document.getElementById ( f );
					if ( ! el ) continue;

					if ( ftype == "checkbox" )
						el.checked = ( val.length > 0 );
					else if ( ftype == "select" && el.multiple )
					{
						var sval = val.split ( "|" );
						var opts = el.getElementsByTagName ( "option" );
						var oi, ol = opts.length;
						for ( oi = 0; oi < ol; oi ++ )
						{
							var opt = opts [ oi ];
							opt.selected = sval.indexOf ( opt.value ) >= 0;
						}
					}
					else
						el.value = val;
				}

				if ( val != ds_fields.get ( f, "" ) )
					requery = true;
			}
		}

		if ( cback ) cback ( v, requery );
	} );
};


utils.auto_focus = function ( field1, length, field2 )
{
	if ( field1.value.length < length ) return;
	if ( ! field2 )
	{
		field2 = field1.nextSibling;
		while ( field2 && ! field2 [ "focus" ] )
			field2 = field2.nextSibling;
	}
	else if ( typeof field2 == "string" )
		field2 = document.getElementById ( field2 );
	
	if ( field2 ) setTimeout ( function () { field2.focus(); }, 100 );
};


utils.get_sommarietto = function ( key, cback )
{
	var km = new KeyMan ();
	km.set ( key );
	var order_list = [ 18, 9, 15, 16, 19, 17 ];

	var dtm = DocTypeManager.get ( km.kind );
	if ( ! dtm [ "sommarietto" ] )
	{
		cback ( [] );
		return;
	}

	var fq = new FulQuery ();
	fq.opera = km.opera;
	fq.db_name = km.get_dbname ();
	fq.mode = "QUERY";
	fq.add ( "ID", "LIKE", km.main_key );
	fq.set_fields ( "ID", "FULTIPO" );
	fq.lines = 1000;

	var res = [];

	kernel.fulquery ( fq, function ( v )
	{
		var i, rows = v [ "rows" ];
		for ( i = 0; i < rows; i ++ )
		{
			var r = v [ "row" + i ];
			var fultipo = r [ "FULTIPO" ];
			var id = r [ "ID" ];

			var item = dtm.get_somm_item ( fultipo );
			if ( ! item ) continue;

			if ( item.ext == km.ext ) continue;
			if ( ! km.ext && item.ext == "OGG" ) continue;

			res.push ( [ id, item.descr, parseInt ( fultipo, 10 ) ] );
		}

		res.sort ( function ( a, b ) { 
			var at = a [ 2 ];
			var bt = b [ 2 ];

			var ai = order_list.indexOf ( at );
			var bi = order_list.indexOf ( bt );

			return ai - bi;
		} );

		cback ( res );
	} );
};


utils.getScrollXY = function ()
{
	var x = 0, y = 0;

	if ( typeof ( window.pageYOffset ) == 'number' )
	{
		// Netscape
		x = window.pageXOffset;
		y = window.pageYOffset;
	} else if ( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
		// DOM
		x = document.body.scrollLeft;
		y = document.body.scrollTop;
	} else if ( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
		// IE6 standards compliant mode
		x = document.documentElement.scrollLeft;
		y = document.documentElement.scrollTop;
	}

	return [ x, y ];
};


utils.tree = {};

utils.tree.show_tree = function ( tree_id, expand_limit, show_checkbox, w, h, lst_file )
{
	var tree = new OS3Tree.instance ( tree_id );

	//tree.check_explorer = true;
	tree.expand_limit = expand_limit;
	tree.show_checkbox = show_checkbox;
	tree.width = w;
	//tree.height = h;
	tree.expand_request = utils.tree.expand_request;
	tree.lst_file = lst_file;

	kernel.command ( "tree_get", { FILE_NAME: tree.lst_file },
		function ( v ) 
		{
			var t, l = v [ "nodes" ].length;

			for ( t = 0; t < l; t ++ )
			{
				var node = v [ "nodes" ] [ t ];
				if ( node.folder )
					tree.add_folder ( null, node.text, node.val, node.val );
				else
					tree.add_node ( null, node.text, node.val, node.val );
			}
			
			tree.render ( tree_id + "_DIV" );
		}
	);

	return tree;
};


utils.tree.expand_request = function ( node )
{
	kernel.command ( "tree_get", { FILE_NAME: node.tree.lst_file, NODE_ID: node.val, LEVEL: node.level },
		function ( vars ) { node.expand_done ( vars [ 'nodes' ] ); } );
};


utils.hide_windowed = function ( cnt )
{
	if ( ! cnt ) cnt = document;

	utils._windowed_status = [];

	var windowed = [ "select", "object", "iframe", "applet", "plugin", "embed" ];
	var k, len = windowed.length;
	for ( k = 0; k < len; k++ )
	{
		var els = cnt.getElementsByTagName ( windowed [ k ] );

		var t, l = els.length;
		for ( t = 0; t < l; t++ )
		{
			var el = els [ t ];
			var vis = el.style.visibility;
			utils._windowed_status.push ( [ el, vis ] );
			el.style.visibility = "hidden";
		}
	}
};


utils.restore_windowed = function ()
{
	var t, l = utils._windowed_status.length;
	for ( t = 0; t < l; t ++ )
	{
		var item = utils._windowed_status [ t ];
		var el = item [ 0 ];
		var vis = item [ 1 ];
		el.style.visibility = vis;
	}
};


utils.scrollTo = function ( el )
{
        if ( typeof el == "string" ) el = $ ( el );
        if ( ! el ) return;

        var ypos = liwe.dom.get_offset_top ( el );
        window.scrollTo ( 0, ypos );
};


utils.magic_button = function ( key )
{
	var OMEN_URL = "omen.leggiditalia.it";

	if ( kernel.user_info && kernel.user_info.attive.indexOf ( "PQ" ) >= 0 )
	{
		var km = new KeyMan ();
		km.set ( key );

		return String.format ( "http://%s/deaplugins/pm/pm_info.php?DOC_KEY=%s&ART=%s&SSCKEY=%s&LOGINDB=%s", 
			OMEN_URL, key, km.art_num, kernel.user_info.ssckey, kernel.user_info.db_name );
	}
	else
		return null;
};

utils.replace_anchors = function ( src )
{
	var as = src.getElementsByTagName ( "a" );
	var a, l, t;
	var name, href;
	var _anchors = {};

	l = as.length;

	for ( t = 0; t < l; t ++ )
	{
		a = as [ t ];

		name = a.getAttribute ( 'name' );
		if ( name )
		{
			a.setAttribute ( "id", name );
		}
		else
		{
			href = a.getAttribute ( 'href' );

			if ( ! href || ( href.indexOf ( "#" ) == -1 ) ) continue;

			var spl = href.split ( "#" );
			href = spl [ 1 ];

			a.setAttribute ( "name", href ); 

			_anchors [ href ] = a;

			a.setAttribute ( 'href', "javascript:utils.scrollTo('" + href + "')" );
		}
	}
};

