/**
 * @author Stefan Gross <sgr@silversolutions.de>
 * @author Markus Birth <mab@silversolutions.de>
 */

// FirebugX for browsers without Firebug
if (!window.console || !console.firebug) {
    var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml",
                 "group", "groupCollapsed", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"];

    var emptyFunction = function() {};

    window.console = {};
    for (var i = 0, count = names.length; i < count; ++i) {
        window.console[names[i]] = emptyFunction;
    }
}


// BEGIN --- borrowed from http://forums.devshed.com/javascript-development-115/get-position-of-a-relatively-placed-element-433914.html
function relative_to_fixed( object ) {
    console.groupCollapsed('relative_to_fixed( %o )', object);
    this.X = 0;
    this.Y = 0;
    while (object.offsetParent && object!=document.getElementsByTagName('body')[0]) {
        console.log('Adding offset of %o (%i, %i)', object, object.offsetLeft, object.offsetTop);
        this.X += object.offsetLeft;
        this.Y += object.offsetTop;
        object = object.offsetParent;
    }
    console.groupEnd();
    return this;
}
// END --- borrowed from http://forums.devshed.com/javascript-development-115/get-position-of-a-relatively-placed-element-433914.html

function show_details(adr_id, evt_id, mask, collapse_image, expand_image)
{
	var expanded = 0;
	var image = document.getElementById("gis_detail_image_" + evt_id);

	if (image.src == expand_image) 
	{
		expanded = 1;
	}

	if(expanded == 1)
	{
		//zusammenklappen
		image.src=collapse_image;
		
		document.getElementById("gis_row_" + evt_id).style.backgroundColor = "#FFFFFF";
		document.getElementById("gis_detail_row_" + evt_id).style.display = "none";	
	}
	else
	{
		//auseinanderklappen
		image.src=expand_image;
		
		document.getElementById("gis_row_" + evt_id).style.backgroundColor = "#F5F5F5";
		document.getElementById("gis_detail_row_" + evt_id).style.display = "table-row";
		
		if( (adr_id != undefined) && (evt_id != undefined) )
		{
			xajax_LoadEventDetail(adr_id,evt_id, mask);
		}
	}
}

function change_view(mode, prevIDs, sender_sel, limit, offset, destId, sort_field, sort_direction, bland_id, node_id, plz)
{   
	var menu_list = document.getElementById('gis_menu_list');
	var menu_map = document.getElementById('gis_menu_map');
	
    var menu_list_cls = document.getElementById('gis_menu_list').className;
    
	if(sort_direction === undefined){sort_direction = "ASC";}
	if(sort_field === undefined){sort_field = "events_titel";}
	
    if(limit === undefined)
	{
		limit = "10";
	}
		
	if(offset === undefined)
	{
		offset = "0";
	}
	
    if(mode != 'map' && mode != 'list')
    {
        if (menu_list_cls.indexOf('selected') != -1) {
            params = "mode=map";
        }
        else {
            params = "mode=list";
        }
    }
    else
    {
        params = "mode="+mode;    
    }
    
    params += "|sort_field=" + sort_field +"|sort_direction="+sort_direction+"|bland_id="+bland_id+"|plz="+plz;
    
    select_array = getSelectedValues("gis_select_",prevIDs);
    
    ValueString = '';
    if(select_array['ValueString'] != '')
    {
        ValueString	= select_array['ValueString'] + "|";
    }
    
	switch(mode)
	{
		case "list":
			menu_list.className = 'selected';
			menu_map.className  = '';
			//sendSelectedGisValues(prevIDs, sender_sel, limit, offset, "mode=list|sort_field=" + sort_field +"|sort_direction="+sort_direction, destId);
			xajax_LoadView(prevIDs, destId, ValueString, offset, limit, params, plz, bland_id, node_id);
			break;
		case "map":
            menu_list.className = '';
			menu_map.className  = 'selected';
			//sendSelectedGisValues(prevIDs, sender_sel, limit, offset, "mode=map|sort_field=" + sort_field +"|sort_direction="+sort_direction, destId);
			xajax_LoadView(prevIDs, destId, ValueString, offset, limit, params, plz, bland_id, node_id);
			break;
	}
}

function getSelectedValues(prefix_selection, prevIDs)
{
	var prevElements 	= prevIDs.split("|");
	var prevValues		= new Array(prevElements.length);
	var IDString		= "";
	var ValueString		= "";
	var result			= new Array(2);
	
	for(i = 0; i < prevElements.length; i++)
	{
		if(document.getElementById(prefix_selection + prevElements[i]).value != '')
		{
            prevValues[i]	= document.getElementById(prefix_selection + prevElements[i]).value;
			
            if(i > 0) 
            {
                IDString += "|";
                ValueString += "|";
            }
            IDString 	   += prevElements[i];
			ValueString    += prevValues[i];
		}
	}
	
	result['IDString'] 		= IDString;
	result['ValueString']	= ValueString;
    
	return result;	
}

function sendSelectedGisValues(prevIDs, tag_group_id, limit, offset, params, dest_ids)
{    
	var current_id = tag_group_id;
    
    if(current_id != '')
    {
    	var current_value = document.getElementById("gis_select_" + current_id).value;
    	var sender_div	= "gis_div_tags_" + current_id;
    }
    else
    {
    	current_value = '';
    }
    var dest_id_array = new String(dest_ids).split('|');        
	var select_dest_id = document.getElementById("select_dest_id").innerHTML;  
	var menu_list_cls 	= document.getElementById('gis_menu_list').className;

	var i;
    
	var plz = document.getElementById("gis_suggest_input").value;	
	plz = plz.split(" ");

    if(limit === undefined)
	{
		limit = "10";
	}
		
	if(offset === undefined)
	{
		offset = "0";
	}
	
	if(menu_list_cls.indexOf('selected') != -1)
	{
		if(params === undefined)
		{
			params = "mode=list";
		}
		else
		{
			params = params + "|mode=list";
		}
	}
	else
	{
		if(params === undefined)
		{
			params = "mode=map";
		}
		else
		{
			params = params + "|mode=map";
		}
	}
	select_array = getSelectedValues("gis_select_", prevIDs);
    IDString = '';
    if(select_array['IDString'] != '') 
    {
        IDString = select_array['IDString'] + "|";
    }
	IDString += current_id;
    
    ValueString = '';
    if(select_array['ValueString'] != '')
    {
        ValueString	= select_array['ValueString'] + "|";
    }
	ValueString	+= current_value;
    
    for(i = 0; i < dest_id_array.length; i++)
    {        
    	xajax_LoadTags(IDString, ValueString, sender_div, offset, limit, params, dest_id_array[i], select_dest_id, plz[0], prevIDs);
    }
}

//  check for valid numeric strings	
function IsNumeric(strString)
{
	var strValidChars = "0123456789";
	var strChar;
	var blnResult = true;
	if (strString.length == 0) {
            return false;
	}

	//  test strString consists of valid characters listed above
	for (i = 0; i < strString.length && blnResult == true; i++)
	{
            strChar = strString.charAt(i);
            if (strValidChars.indexOf(strChar) == -1)
            {
                blnResult = false;
            }
  	}
  	return blnResult;
}

function prepareSearch(input_string, plz_status, prevIDs, prevIDsAdditional)
{
	var plz = input_string.split(" ");
	var i;
	var select_array = new Array(2);
	//alert ( input_string );
	if(plz_status == "1")
	{
		// Additional
		select_array = getSelectedValues("gis_select_",prevIDs + "|" + prevIDsAdditional);
	}
	else
	{
		// only...
		select_array = getSelectedValues("gis_select_", prevIDs);
	}
	
	ValueString = '';
    if(select_array['ValueString'] != '')
    {
        ValueString	= select_array['ValueString'] + "|";
    }
    
	if(IsNumeric(plz[0]))
	{
		xajax_HandlePLZ(plz[0], plz_status, ValueString);
	}
}

function clicked_suggestion(value, plz_status, prevIDs, prevIDsAdditional, mode, node_id)
{
    var input_obj 	= document.getElementById("gis_suggest_input");
    var div_obj 	= document.getElementById("gis_suggest_div");
    
	input_obj.value = value;
    div_obj.style.display = "none";
    
    if(mode == '')
    {
    	mode = 'map';
    }
    //prepareSearch(value, plz_status, prevIDs, prevIDsAdditional);
    sendSelectedGisValues('47|82|120|90|15', '', '10', '0', 'mode='+mode+'|refresh_tags=1|sort_field=adr_postort|sort_direction=ASC|node_id='+node_id, '');
}

function make_suggestion(self, value, plz_status, prevIDs, prevIDsAdditional, mode, node_id)
{
    console.group('make_suggestion( %o, %o, %o, %o, %o, %o, %o )', self, value, plz_status, prevIDs, prevIDsAdditional, mode, node_id);
    var div_obj = document.getElementById("gis_suggest_div");
    var new_loc = relative_to_fixed( self );

    console.log('self is at fixed %i, %i', new_loc.X, new_loc.Y);

    if (window.pageYOffset) {
    	new_loc.Y -= window.pageYOffset;
    } else {
    	new_loc.Y -= document.body.scrollTop;
    }
    new_loc.Y += 30;  // accomodate INPUT box as there seems to be no way to get its height via DOM

    console.log('New location for suggestions will be at fixed %i, %i', new_loc.X, new_loc.Y);

    div_obj.style.position = 'fixed';
    div_obj.style.left = new_loc.X+"px";
    div_obj.style.top  = new_loc.Y+"px";

    if( (value.length >= 2) && (IsNumeric(value)) )
    {
    	// Load Zip Code
    	xajax_LoadCityZip(value, plz_status, prevIDs, prevIDsAdditional, mode, node_id);
        div_obj.style.display = 'block';
    }
    else if( (value.length >= 3) && (IsNumeric(value) == false) )
    {
    	// Load city name...
    	xajax_LoadCityZip(value, plz_status, prevIDs, prevIDsAdditional, mode, node_id);
        div_obj.style.display = 'block';
    }
    else
    {
    	div_obj.style.display = 'none';
    }
    console.groupEnd();
}

function hide_suggestion()
{
    document.getElementById('gis_suggest_div').style.display = 'none';
}

function check_input(value)
{
	if(value == '')
	{
		sendSelectedGisValues('47|82|120|90|15', '', '10', '0', 'mode=list|refresh_tags=1', '');
	}
}

var jsEnabled = document.getElementById ? true : false;

/*
 *
 */
function area_over(title) 
{
	return true;
}

/*
 *
 */
function area_out() 
{
	return true;
}
