// JavaScript Document

// top panel

var fsMoveTopPanel = function(from, to, instant)
{
	if ($('fsTopPanel'))
	{
		if (instant != null && instant == true)
		{
			$('fsTopPanel').setStyle({'height': to + 'px'});
			if ($('fsTopPanel').getStyle('position') != 'fixed')
				$('fsTopPanel').setStyle({'top': document.viewport.getScrollOffsets().top + 'px'});
		}
		else
		{
			new Effect.Tween
			(
				'fsTopPanel',
				from,
				to,
				{
					duration: fsTopPanelParams.duration,
					transition: fsTopPanelParams.transition
				},
				function(p)
				{
					this.setStyle({'height': p + 'px'});
					if (this.getStyle('position') != 'fixed')
						this.setStyle({'top': document.viewport.getScrollOffsets().top + 'px'});
				}
			);
		}
	}
}

var fsOpenTopPanel = function()
{
	if (fsBottomPanelParams.isOpen == 1)
		fsCloseBottomPanel();

	fsMoveTopPanel(fsTopPanelParams.position, fsTopPanelParams.position + fsTopPanelParams.openSize);
	fsTopPanelParams.position += fsTopPanelParams.openSize;
	fsTopPanelParams.isOpen = 1;
}

var fsCloseTopPanel = function()
{
	fsMoveTopPanel(fsTopPanelParams.position, fsTopPanelParams.closeSize);
	fsTopPanelParams.position = fsTopPanelParams.closeSize;
	fsTopPanelParams.isOpen = 0;
}

var fsInitTopPanel = function()
{
    if ($('fsTopPanelLasche'))
    {
    	$('fsTopPanelLasche').observe('click', function(event)
    	{
    		if (fsTopPanelParams.isOpen == 0)
    			fsOpenTopPanel();
    		else
    			fsCloseTopPanel();
    	});
	
    //	$('fsTopPanel').setStyle({'top': (document.viewport.getScrollOffsets().top + fsBottomPanelPosition) + 'px'});
    	fsTopPanelParams.position = fsTopPanelParams.closeSize;
    	fsMoveTopPanel(0, fsTopPanelParams.position, true);
    }
}

// bottom panel

var fsMoveBottomPanel = function(from, to, instant)
{
	if ($('fsBottomPanel'))
	{
		var offset = 0;
		if ($('fsBottomPanel').getStyle('position') != 'fixed')
			offset = document.viewport.getScrollOffsets().top;

		if (instant != null && instant == true)
		{
			$('fsBottomPanel').setStyle({'height': to + 'px'});
			$('fsBottomPanel').setStyle({'top': (document.viewport.getHeight() + offset - $('fsBottomPanel').getHeight()) + 'px'});
		}
		else
		{
			new Effect.Tween
			(
				'fsBottomPanel', 
				from, 
				to, 
				{ 
					duration: fsTopPanelParams.duration,
					transition: fsTopPanelParams.transition
				}, 
				function(p)
				{
					this.setStyle({'height': p + 'px'});
					this.setStyle({'top': (document.viewport.getHeight() + offset - this.getHeight()) + 'px'});
				}
			);
		}
	}
};

var fsOpenBottomPanel = function()
{
	if (fsTopPanelParams.isOpen == 1)
		fsCloseTopPanel();
	fsMoveBottomPanel(fsBottomPanelParams.position, fsBottomPanelParams.position + fsBottomPanelParams.openSize);
	fsBottomPanelParams.position += fsBottomPanelParams.openSize;
	fsBottomPanelParams.isOpen = 1;
};

var fsInitBottomPanel = function()
{
	if ($('fsBottomPanelLasche') && $('fsBottomPanel'))
	{
		$('fsBottomPanelLasche').observe('click', function(event)
		{
			if (fsBottomPanelParams.isOpen == 0)
				fsOpenBottomPanel();
			else
				fsCloseBottomPanel();
		});
	
		var offset = 0;
		if ($('fsBottomPanel').getStyle('position') != 'fixed');
			offset = document.viewport.getScrollOffsets().top;
	
		$('fsBottomPanel').setStyle({'top': (document.viewport.getHeight() + offset - $('fsBottomPanel').getHeight() + fsBottomPanelParams.position) + 'px'});
		fsBottomPanelParams.position = fsBottomPanelParams.closeSize;
		fsMoveBottomPanel(0, fsBottomPanelParams.position, true);
	}
};

var fsCloseBottomPanel = function()
{
	fsMoveBottomPanel(fsBottomPanelParams.position, fsBottomPanelParams.closeSize);
	fsBottomPanelParams.position = fsBottomPanelParams.closeSize;
	fsBottomPanelParams.isOpen = 0;
};

// input field labels

var fsShowInputLabel = function(element)
{
	if (element.readAttribute("label") != null)
	{
		if (element.value == "")
			element.value = element.readAttribute("label");
		
		if (element.value == element.readAttribute("label"))
		{
			element.addClassName("fsInputLabel");
			element.removeClassName("fsInputLabelDimmed");
		}
	}
};

var fsDimInputLabel = function(element)
{
	if (element.readAttribute("label") != null && element.value == element.readAttribute("label"))
	{
        element.removeClassName("fsInputLabel");
        element.value = "";     // some users have mental problems with dimmed values :-(
        /*
		element.addClassName("fsInputLabelDimmed");
		fsSetCaretPosition(element, 0);
        */
	}
};

var fsEditInputLabel = function(element)
{
	if (element.readAttribute("label") != null && element.value == element.readAttribute("label"))
	{
		element.removeClassName("fsInputLabelDimmed");
		element.value = "";
	}
};

// diverses

var fsSetCaretPosition = function(element, caretPos)
{
    var elem = element;

    if(elem != null) {
        if(elem.createTextRange) {
            var range = elem.createTextRange();
            range.move('character', caretPos);
            range.select();
        }
        else {
            if(elem.selectionStart) {
               elem.focus();
                elem.setSelectionRange(caretPos, caretPos);
            }
            else
                elem.focus();
        }
    }
};

var fsSubMenuHooks = function()
{
	//$('toptabGallop').observe('mouseover')
};

var fsToggleRaceResultDetails = function()
{
    if ($('fsDetailRaceResultsDetailsBox'))
    {
        if ($('fsDetailRaceResultsDetailsControl').readAttribute('expanded') == '0')
        {
            $('fsDetailRaceResultsDetailsControl').writeAttribute('expanded', 2);
            new Effect.Tween('fsDetailRaceResultsDetailsControl', 0, $('fsDetailRacePlacesBox').getHeight(), { duration: 0.5, afterFinish: function() { $('fsDetailRaceResultsDetailsControl').writeAttribute('expanded', 1); } }, function(p) { $('fsDetailRacePlaces').setStyle({'height': p + 'px'}); } );
        }
        else if ($('fsDetailRaceResultsDetailsControl').readAttribute('expanded') == '1')
        {
            $('fsDetailRaceResultsDetailsControl').writeAttribute('expanded', 3);
            new Effect.Tween('fsDetailRaceResultsDetailsControl', $('fsDetailRacePlacesBox').getHeight(), 0, { duration: 0.5, afterFinish: function() { $('fsDetailRaceResultsDetailsControl').writeAttribute('expanded', 0); } }, function(p) { $('fsDetailRacePlaces').setStyle({'height': p + 'px'}); } );
        }
    }
};

var fsInitRaceResultDetailsToggler = function()
{
    if ($('fsDetailRaceResultsDetailsControl'))
    {
        $('fsDetailRaceResultsDetailsControl').observe('click', function(event)
        {
            event.stop();
            fsToggleRaceResultDetails();
        });
    }
}

// expanding lines

var fsExpandTween = null;
var fsExpandLine = function(element)
{
	var collapsed = 17;
	var expanded = 52;
	
	if (fsExpandTween == null && element.getHeight() < 52)
	{
		fsExpandTween = new Effect.Tween
		(
			element,
			collapsed,
			expanded,
			{
				duration: 0.1,
				transition: Effect.Transitions.sinoidal,
				afterFinish: function()
				{
					fsExpandTween = null;
					element.siblings().each(function(sibling)
					{
						sibling.setStyle(
						{
							'height': collapsed + 'px'		// set final height in case of calculation errors
						});	
					});
				}
			},
			function(p)
			{
				var delta = p - Number(this.getHeight()-4);
				this.setStyle({'height': p + 'px'});
				this.siblings().each(function(sibling)
				{
					var h = Number(sibling.getHeight()-4);
					if (h > collapsed)
					{
						sibling.setStyle({'height': Number(h-delta) + 'px'});
						//$('output').innerHTML = "height 1: " + (element.getHeight()-4) + "<br>height 2: " + (sibling.getHeight()-4);
					}
				});
			}
		);
	}
};

// autocompleters

var fsAutocompleterInit = function()
{
	fsCreateAutocompleter("Trainer");
	fsCreateAutocompleter("Jockey");
	fsCreateAutocompleter("Owner");
    fsCreateAutocompleter("Horse");
};

var fsCreateAutocompleter = function(name)
{
	var inputElement = 'fs' + name  + 'Value';
	var completerElement = 'fs' + name + 'Autocompleter';
	var param = name.substr(0,1).toLowerCase();

	if ($(inputElement) && $(completerElement))
	{
		new Ajax.Autocompleter(inputElement, completerElement, '/services/autocomplete.php',
		{
			paramName: param, 
			minChars: 2,
			afterUpdateElement: function()
			{
				$(completerElement).innerHTML = "";
			}
		});
	}
};

// collapse/expand countries
var fsToggleCountries = function(element, action, instant)
{
	if (!(action == "collapse" || action == "expand"))
		action = "";
	
	var block = $(element.parentNode.parentNode);
	var headline = $(element.parentNode);
	var collapsed = headline.getHeight();
	var tweenStart = 0;
	var tweenEnd = 0;
	var l = fsJar.get("cblocks");

	if (action == "collapse" || (action == "" && block.getHeight() > collapsed+1))		// with border
	{
		// do collapse
		tweenStart = block.getHeight();
		tweenEnd = collapsed;
		//element.innerHTML = "[O]"
		element.setStyle({background: 'url(/Styles/fsfrontend/Images/buttons/block_simple_open.png) no-repeat scroll 0 0 transparent'});

		if ($(block.parentNode.parentNode).readAttribute("id") == "boxTomorrowsRaces")
			fsJar.put("cblocks", fsRemoveFromCSList(l, element.readAttribute("code")));
		else
			fsJar.put("cblocks", fsAddToCSList(l, element.readAttribute("code")));
		//alert("collapse!\nliste: " + element.readAttribute("code"));
	}
	else if (action == "expand" || (action == "" && block.getHeight() == collapsed+1))
	{
		// do expand
		var expanded = collapsed;
		headline.siblings().each(function(el){expanded += el.getHeight();});
		//tweenStart = collapsed;
		tweenStart = block.getHeight();
		tweenEnd = expanded;
		//element.innerHTML = "[X]";
		element.setStyle({background: 'url(/Styles/fsfrontend/Images/buttons/block_simple_close.png) no-repeat scroll 0 0 transparent'});
		
		if ($(block.parentNode.parentNode).readAttribute("id") == "boxTomorrowsRaces")
			fsJar.put("cblocks", fsAddToCSList(l, element.readAttribute("code")));
		else
			fsJar.put("cblocks", fsRemoveFromCSList(l, element.readAttribute("code")));
		//alert("expand!\nliste: " + element.readAttribute("code"));
	}
	
	if (tweenStart > 0 || tweenEnd > 0)
	{
		if (instant === true)
			var trans = Effect.Transitions.full;
		else
			var trans = Effect.Transitions.sinoidal;
		
		fsCountriesTween = new Effect.Tween
		(
		 	block,
			tweenStart,
			tweenEnd,
			{
				duration: 0.5,
				transition: trans
			},
			function(p)
			{
				this.setStyle({height: p + 'px'});
			}
		);
	}
};

var fsAddToCSList = function(l, value)
{
	if (!l)
		l = "";

	if (value && !value.empty())
	{
		result = new Array();
		var found = false;
		l.split(",").each(function(v)
		{
			if (!v.empty())
				result.push(v);

			if (v == value)
				found = true;
		});
	
		if (found == false)
		{
			result.push(value);
		}
	
		result = result.join(",");
	}
	else
	{
		result = l;
	}
	//console.log(result);
	return result;
};

var fsRemoveFromCSList = function(l, value)
{
	if (l)
	{
		result = new Array();
		l.split(",").each(function(v)
		{
			if (v != value && !v.empty())
				result.push(v);
		});

		return result.join(",");
	}
	else
		return "";
};

// div-height hack

var fsFixLineDivHeight = function()
{

	$$('div.fsEventRaces div.fsEventRaceLine').each(function(parentElement)
	{
	   /* fsLDHMaxHeight = 0;
	    var children = parentElement.select('div.fsEventRaceDetails,div.fsEventRaceWinners,div.fsEventRaceLinks');
	    children.each(function(element)
	    {
    		element.select('div.fsEventRaceNumber,div.fsEventRaceDetailInfos').each(function(nested)
    		{
    			fsLDHMaxHeight = Math.max(fsLDHMaxHeight, nested.getHeight());
    		});
    		fsLDHMaxHeight = Math.max(fsLDHMaxHeight, element.getHeight()-32);
	    });
	
	    children.each(function(element)
	    {
    		element.setStyle(
    		{
    		    'height': fsLDHMaxHeight + 'px',
    		    'borderBottom': '1px solid #AAA7A6',
    		    'borderRight': '1px solid #AAA7A6',
    		    'borderTop': '1px solid #ffffff',
    		    'borderLeft': '1px solid #ffffff'
            });

	    });

	    parentElement.setStyle(
	    {
	        'height': (fsLDHMaxHeight+32) + 'px'
	    });*/
	}
);
	
	$$('div.fsDetailTableRaceLine,div.fsDetailTableLineRunner').each(function(parentElement)
	{
	/*	var maxHeight = 0;
		var children = parentElement.select('div.fsDetailTableRace,div.fsDetailTableRunner');
		children.each(function(element)
		{
			maxHeight = Math.max(maxHeight, element.getHeight());
		});
		
                maxHeight -= 6;

		children.each(function(element)
		{
			element.setStyle(
            {
				'height': maxHeight + 'px',
                'borderBottom': '1px solid #AAA7A6',
                'borderRight': '1px solid #ffffff',
                'borderTop': '1px solid #ffffff',
                'borderLeft': '1px solid #ffffff'
            });
		});*/
	});
};

var fsFixAllStreamsHeight = function()
{
    $$('div.fsAllStreamsLine').each(function(element)
    {
        var lineHeight = element.getHeight();
        element.select('div.fsAllStreamsDescription').each(function(desc)
        {
            if (desc.getHeight() < lineHeight)
            {
                desc.setStyle({'height': (lineHeight-48) + 'px'});
            }
        });
    });
}

var fsExtractID = function(elementID, prefix)
{
	if (elementID.startsWith(prefix))
		return elementID.substr(prefix.length);
	else
		return false;
}

var fsAddRaceHooks = function()
{
	$$('div.fsDetailTableRaceLine').each(function(lineElement)
	{
		var raceID = fsExtractID(lineElement.id, 'fsRace');

        if (raceID == false)
        {
            raceID = lineElement.readAttribute('race');
            var horseID = fsExtractID(lineElement.id, 'fsHorse');
        }
        else
        {
            var horseID = 0;
        }

		if (raceID !== false && raceID != null && raceID != "")
		{
			lineElement.immediateDescendants().each(function(element)
			{
				if (!element.hasClassName('fsDetailTableButtonsWidth'))
					element.observe('click', function(event){ fsShowStarters(raceID, horseID) });
			});

            button = lineElement.select('input.fsButtonRacecard').first();
            if (button)
            {
			    button.observe('click', function(event){ fsShowStarters(raceID) });
            }
		}

        lineElement.select('div.fsDetailTableStartersWidth').each(function(element)
        {
            if (element.select('span').first().innerHTML == '(*)')
            {
                fsAddToToolTipsContainer(element);
            }
        });

	});
};

var fsShowStarters = function(raceID, horseID)
{
    var location = '/races/' + raceID + '/';
    if (horseID != null && horseID != "" && horseID > 0)
    {
        location += '?h=' + horseID
    }

	document.location.href = location;
}

var fsLoadCookieParams = function()
{
	// TODO: load values from cookie

	fsTopPanelParams.position = 0;
	fsTopPanelParams.isOpen = 0;
	fsTopPanelParams.openSize = 400;
	fsTopPanelParams.closeSize = 55;

	fsBottomPanelParams.position = 0;
	fsBottomPanelParams.isOpen = 0;
	fsBottomPanelParams.openSize = 300;
	fsBottomPanelParams.closeSize = 80;
}

// runners table stuff

var fsRunnerIDList = new Array();

var fsInitRunnersTable = function()
{
	if ($('fsRunnersList'))
	{
		fsSetRunnersBackgrounds();
		Sortable.create("fsRunnersList", 
		{
			tag:'div', 
			only:['fsDetailTableLineRunner'],
			onChange: fsRecalcStartersList,
			handle: 'fsLineHandle'
		});

		fsRunnerIDList = Sortable.sequence("fsRunnersList", {tag:'div', name:'test'});

		// hook up sort-buttons
		fsSorterHookups('#fsRunnerListHead div.fsDetailTableRunnersNumberWidth', 'span.fsSortableNumber', 'number', 'number');
		fsSorterHookups('#fsRunnerListHead div.fsDetailTableRunnersHorseWidth div.fsHorseNameText', 'span.fsSortableHorseName');
		fsSorterHookups('#fsRunnerListHead div.fsDetailTableRunnersHorseWidth span.fsHorseAgeText', 'span.fsSortableHorseAge', 'number');
		fsSorterHookups('#fsRunnerListHead div.fsDetailTableRunnersHorseWidth span.fsHorseGenderText', 'span.fsSortableHorseGender');
		fsSorterHookups('#fsRunnerListHead div.fsDetailTableRunnersBoxWidth', 'span.fsSortableBox', 'number');
		fsSorterHookups('#fsRunnerListHead div.fsDetailTableRunnersWeightWidth', 'span.fsSortableWeight', 'number', 'number');
		fsSorterHookups('#fsRunnerListHead div.fsJockeyText', 'span.fsSortableJockey');
		fsSorterHookups('#fsRunnerListHead div.fsDetailTableRunnersJockeyWidth div.fsHeadSub', 'span.fsSortableTrainer');

		// hook up line expanders
		fsGetElements('div.fsDetailTableLineRunner').each(function(element)
		{
			element.observe("mouseover", function(){ fsRunnerLineExpand(element); });
		});

		// expand selected runner
		$$('div.fsRunnerLinePinned').each(function(element)
		{
	        fsRunnerLineExpand(element, element.readAttribute('id'));
		});
	}
}

var fsRecalcStartersList = function()
{
    fsSetRunnersBackgrounds();
    fsHideTrottingLines();
}

var fsTweenContainer = new Array();
var fsElementsCache = {};

var fsGetElements = function(selector)
{
	if (!fsElementsCache['selector'])
	{
		fsElementsCache['selector'] = $$(selector);
	}

	return fsElementsCache['selector'];
}

var fsRunnerLineExpand = function(element, pin)
{
    if (!pin)
    {
        pin = false;
    }
	//$('fsTopPanelContentBg').setStyle({backgroundColor: '#880000'});
	var extraElement = element.select('div.fsDetailTableExtraLine').first();
	if (extraElement && !(element.hasClassName('fsRunnerLineExpanded') && !element.hasClassName('fsRunnerLinePinned')))
	{
		fsRunnerLineCollapseAll(extraElement);
		var newHeight = 0;
		var oldHeight = extraElement.getHeight();

		if (element.select('div.fsDetailTableExtra').first())
			newHeight = element.select('div.fsDetailTableExtra').first().getHeight();

		fsRunnerLineAnimation(element.id, extraElement, oldHeight, newHeight, pin);
		element.addClassName('fsRunnerLineExpanded');

        element.select('div.fsDetailTableNumberExtra').first().setStyle({ height: newHeight + "px" });    // too slow?

		if (!element.hasClassName('fsRunnerLinePinned'))
		{
			element.select('div.fsDetailTableRunnersPinWidth a img').first().setAttribute("src", "/Styles/fsfrontend/Images/buttons/line_closed.png");
		}
		fsSetRunnersBackgrounds();
	}
}

var fsRunnerLineCollapseAll = function (exclude)
{
	fsGetElements('div.fsDetailTableLineRunner').each(function(element)
	{
		if (!element.hasClassName('fsRunnerLinePinned'))
		{
			var extraElement = element.select('div.fsDetailTableExtraLine').first();
			if (extraElement && extraElement != exclude)
			{
				var oldHeight = extraElement.getHeight();
				fsRunnerLineAnimation(element.id, extraElement, oldHeight, 0);
			}

			element.removeClassName('fsRunnerLineExpanded');
			if (!element.hasClassName('fsRunnerLinePinned'))
			{
				element.select('div.fsDetailTableRunnersPinWidth a img').first().setAttribute("src", "/Styles/fsfrontend/Images/buttons/line_pin.png");
			}
		}
	});
}

var fsPinLine = function(id, forceClose)
{
    if (!forceClose)
    {
        forceClose = false;
    }

	if ($(id))
	{
		if ($(id).hasClassName('fsRunnerLinePinned') && !forceClose)
		{
			$(id).removeClassName('fsRunnerLinePinned');
			$(id).select('div.fsDetailTableRunnersPinWidth a img').first().setAttribute("src", "/Styles/fsfrontend/Images/buttons/line_pin.png");
		}
		else
		{
			$(id).addClassName('fsRunnerLinePinned');
			$(id).select('div.fsDetailTableRunnersPinWidth a img').first().setAttribute("src", "/Styles/fsfrontend/Images/buttons/line_pinned.png");
		}
	}
}

var fsRunnerLineAnimation = function (id, extraElement, from, to, pin)
{	
	if (fsTweenContainer[id])
		fsTweenContainer[id].cancel();
	
	if (from != to)
	{
		fsTweenContainer[id] = new Effect.Tween
		(
			extraElement,
			from,
			to,
			{
				duration: 0.2,
				transition: Effect.Transitions.sinoidal,
				afterFinish: function()
                {
                    fsRunnerLastRacesAjax(extraElement);
                    if (pin)
                    {
                        fsPinLine(id, true);
                    }
                }
			},
			function(p)
			{
				this.setStyle({'height':p+'px'});
			}
		);	
	}
}

var fsHideTrottingLines = function()
{
    $$('div.fsTrottingLine').each(function(element)
    {
        element.hide();
    });
}

var fsSorterHookups = function(buttonIdentifier, valueIdentifier, sortType, attribute)
{
	$$(buttonIdentifier).each(function(element)
	{
		element.setStyle({'cursor':'s-resize'});
		element.observe('click', function(event)
		{
			fsSortList(this, valueIdentifier, (this.readAttribute("sort") != "asc"), sortType, attribute);
            fsHideTrottingLines();
		});
	});
}

var fsSortList = function(headElement, elementClass, asc, sortType, attribute)
{
	if (asc !== false)
		asc = true;
	var list = fsRunnerIDList.sortBy(function(id)
	{
		var result = null;
		if (attribute)
			result = $('runner_' + id).select(elementClass).first().getAttribute(attribute);
		else ($('runner_' + id).select(elementClass).length > 0)
			result = $('runner_' + id).select(elementClass).first().innerHTML;
		
		if (result != null && sortType == "number")
		{
			result = String(result).replace(",", ".");
			return Number(result);
		}
		else
			return result;
	});
	//alert(fsRunnerIDList + "\n" + list);
	list.each(function(id)
	{
		var row = $('runner_' +id);
		var parent = $(row.parentNode);
		row.remove();
		if (asc)
		{
			$(headElement).writeAttribute("sort", "asc");
			parent.insert({ bottom: row });
		}
		else
		{
			$(headElement).writeAttribute("sort", "desc");
			parent.insert({ top: row });
		}
	});
	fsSetRunnersBackgrounds();
};

var fsSetRunnersBackgrounds = function()
{
	var isOdd = false;
	$$('div.fsDetailTableLineRunner').each(function(element)
	{
		var expanded = element.hasClassName('fsRunnerLineExpanded');
		fsSetLineBackground(element, isOdd, expanded);
		isOdd = !isOdd;
	});
};

var fsSetLineBackground = function(line, isOdd, expand)
{
	/*line.select('div').each(function(element)
	{
		p = $(element.parentNode);
		if (expand)
		{
			element.setStyle({backgroundColor: '#ffffff'});	//element.setStyle({backgroundColor: '#' + $('fsHeader').readAttribute('sectionlinebg')});
			p.setStyle({backgroundColor: '#ffffff'});	//p.setStyle({backgroundColor: '#' + $('fsHeader').readAttribute('sectionlinebg')});
			
		}
		else if (isOdd === true)
		{
			element.setStyle({backgroundColor: '#ffffff'});	//#eaeaea
			p.setStyle({backgroundColor: '#ffffff'});	//#eaeaea
		}
		else
		{
			element.setStyle({backgroundColor: '#ffffff'});	//d6d6d6
			p.setStyle({backgroundColor: '#ffffff'});	//d6d6d6
		}
	});
	*/
};

var fsRunnerLastRacesAjax = function(element)
{
	if ($$('div.fsDetailTableExtraTextLeft').length > 0 && element.readAttribute('loaded') != '1')
	{
		element.writeAttribute('loaded', '1');
		horse_id = element.readAttribute('h');
		event_id = $('fsDetailRaceInfos').readAttribute('e');
		//alert(horse_id + "/" + event_id);
		new Ajax.Updater
        (
            element.select('div.fsDetailTableExtraTextLeft').first(), 
            '/services/runner_last_races.php?h=' + horse_id + "&e=" + event_id + "&l=4", 
            {
                asynchronous:true, 
                evalScripts:true,
                onComplete: function(response)
		        {
                    fsInitRaceCardHighslide(element.select('div.fsDetailTableExtraTextLeft').first());
                }
            }
        );
	}
};

// Event Stuff

var fsRecalcPanelPositions = function()
{
    if ($('fsTopPanel'))
    {
    	var offset = 0;
    	if ($('fsTopPanel').getStyle('position') != 'fixed')	
    		offset = document.viewport.getScrollOffsets().top;
	
    	if ($('fsBottomPanel'))
    	{
    		$('fsBottomPanel').setStyle({top: (document.viewport.getHeight() + offset - $('fsBottomPanel').getHeight()) + 'px'});
    	}
    	if ($('fsTopPanel'))
    	{
    		$('fsTopPanel').setStyle({top: offset +'px'});
    	}
    }
};

var fsInitInputLabels = function()
{
	$$('input').each(function(element)
	{
		if (element.readAttribute("label") && (element.type == "text" || element.type == "password"))
		{
			fsShowInputLabel(element);
			element.observe('focus', function(event){fsDimInputLabel(this);});
			element.observe('blur', function(event){fsShowInputLabel(this);});
			element.observe('keydown', function(event){fsEditInputLabel(this);});
		}
	});
}

var fsFixFadedBorders = function()
{
	var body = $$('body').first();
	var bodyHeight = body.getHeight();
	if (bodyHeight > 0)
	{
		if ($('fsBgMainLeft'))
			$('fsBgMainLeft').setStyle({'height': bodyHeight + 'px', 'display':'inline'});
		if ($('fsBgMainRight'))
			$('fsBgMainRight').setStyle({'height': bodyHeight + 'px', 'display':'inline'});
	}
}

window.onresize = function()
{
    fsFixFadedBorders();
};

var fsSetStartersBackgrounds = function()
{
    $$('div.fsLineEven div').each(function(element)
    {
        element.addClassName('fsStartersLineEven');
    });

    $$('div.fsLineOdd div').each(function(element)
    {
        element.addClassName('fsStartersLineOdd');
    });
}

document.observe("dom:loaded", function()		// same as "ondomready"
{
	fsShowAbroad(fsJar.get('ablock'));
	fsInitTimer();
	fsInitLoginForm();
	fsLoadCookieParams();
	fsFixLineDivHeight();
    fsFixAllStreamsHeight();
	fsAddRaceHooks();
	fsSubMenuHooks();
	fsAutocompleterInit();
	fsInitInputLabels();
	fsInitRunnersTable();
	fsInitSliders();
	fsCountryListHookup();
	fsDayPickerInit();
	fsCustomerLogoutHook();
	fsFixFadedBorders();
    fsSetStartersBackgrounds();
    fsInitLiveStreamLinks();
    fsInitArchiveVideoLinks();
    fsInitOddsTrends();
    fsResetOddColor();
    fsInitRaceResultDetailsToggler();

	fsInitTopPanel();
	fsInitBottomPanel();	//.delay(1.5);

	if ($('fsBottomPanel') && $('fsBottomPanel').getStyle('position') != 'fixed' && $('fsTopPanel') && $('fsTopPanel').getStyle('position') != 'fixed')
		Event.observe(window, 'scroll', function(){ fsRecalcPanelPositions(); });
	Event.observe(window, 'resize', function(){ fsRecalcPanelPositions(); });
	
	$$('div.fsMiddle2Columns div.fsInnerContent div.fsContentLine').each(function(element)
	{
		element.observe('mouseover', function(event)
        {
            fsExpandLine(element);
            //alert("test");

        });
	});
	
	$$('#fsMainContent div.fsContentTitle div.fsToggleBlock').each(function(element)
	{
		element.observe('click', function(event){fsToggleCountries(element);});
	});

	$$('#fsMainContent div.fsCollapseAllBlocks').each(function(element)
	{
		var blockID = $(element.parentNode.parentNode.parentNode).readAttribute("id");
		if (blockID != "")
		{
			element.observe('click', function(event)
			{
				$$('#' + blockID + ' div.fsToggleBlock').each(function(toggler)
				{
					fsToggleCountries(toggler, "collapse");})
				;
			});
		}
	});
	
	$$('#fsMainContent div.fsExpandAllBlocks').each(function(element)
	{
		var blockID = $(element.parentNode.parentNode.parentNode).readAttribute("id");
		if (blockID != "")
		{
			element.observe('click', function(event)
			{
				$$('#' + blockID + ' div.fsToggleBlock').each(function(toggler){fsToggleCountries(toggler, "expand");});
			});
		}
	});

    if ($('fsModalWindowCloseLink'))
    {
    	$('fsModalWindowCloseLink').observe("click", function(event)
    	{
    		fsHideModalWindow();
    	});
    }

    $$('div.fsContentRaceDetailTextValueMiddle span, div.fsRaceTags div, div.fsRaceTags span, div.fsRacecardStable, span.fsRaceCardJockeyAllowance, div.fsContentRaceDetailTextLeft span, a.fsEventLiveStream').each(function(element)
    {
        fsAddToToolTipsContainer(element);
    });

	fsInitHighslide();

	fsShowErrors();
	fsInitBalanceUpdate();

    fsActivateToolTipsLeft();
    fsActivateToolTipsStartersAbroad();
    fsActivateToolTipsNavTabs();
    fsActivateToolTipsInContainer();
    fsActivateToolTipNextRaces();
    fsActivateToolTipCalendar();
    fsActivateToolTipsRates();
    fsActivateToolTipsWinners();

    fsCollapseCookieBlocks();

    if ($('fsRunnersList'))
    {
        $('fsRunnersList').observe('mouseout', function()
        {
            fsRunnerLineCollapseAll();
        });
    }

    if ($("raceinfosPanelRaceResults")) 
    {
        AjaxPanel.init($("raceinfosPanelRaceResults")); 
    }

    $$('div.fsInnerContent div.fsButton a').each(function(element)
    {
        if (element.href.endsWith("#"))
        {
            element.setStyle({'color':'#aaaaaa','cursor':'default','background-color':'#ffffff','border':'solid 1px #cccccc'});
        }
    });
});

var fsActivateToolTipsRaceSelectors = function()
{
    if ($('fsDetailRaceInfos') && $('fsDetailRaceInfos').hasAttribute('r'))
    {
        var activeRaceId = $('fsDetailRaceInfos').readAttribute('r');
        //alert("raceid: " + activeRaceId);
        var selectorElement = $$('div.fsContentRaceSelector[rid="' + activeRaceId + '"]').first();
        if (selectorElement)
        {
            if (selectorElement.hasAttribute('rstatusClass'))
            {
                var raceStatusClass = selectorElement.readAttribute('rstatusClass');
                if (raceStatusClass && $$('#fsDetailRaceInfos div.fsEventRaceNumber').first() && $$('#fsDetailRaceInfos div.fsEventRaceNumber').first().readAttribute('class') != raceStatusClass)
                {
                    $$('#fsDetailRaceInfos div.fsEventRaceNumber').first().writeAttribute('class', 'fsEventRaceNumber ' + raceStatusClass);
                }
            }

            var starttimeElement = selectorElement.select('span.fsRaceSelectorStarttime').first();
            if (starttimeElement && $('fsRaceInfosStarttime'))
            {
                var sourceStarttime = starttimeElement.innerHTML;
                //alert(el.first().innerHTML);
                var targetStarttime = $('fsRaceInfosStarttime').innerHTML;
        
                if (sourceStarttime != targetStarttime)
                {
                    $('fsRaceInfosStarttime').update(sourceStarttime);
                }
            }
        }
    }

    $$('div.fsContentRaceSelector').each(function(element)
    {
        var ttContent = element.select('div').first().clone(true);
        element.select('div').first().remove();

        //alert(ttContent.innerHTML);
        
        if (ttContent)
        {
            new Tip(element, ttContent.clone(true), 
            {
                style: 'fsYoobet',
                stem: 'topRight',
                hook: { tip: 'topRight', target: 'bottomMiddle' },
                offset: { x: 0, y: 10 },
                width: 500
            });
        }
    });
}

var fsInitOddsTrends = function()
{
    $$('span.fsTotoHistory').each(function(element)
    {
        var odds = element.readAttribute("history").split(",").reverse();
        var first = true;
        var text = odds.join(" - ");

        if (text == "")
        {
            text = "-";
        }
        
        var parentElement = element.ancestors().first();
        new Tip(parentElement, text, 
        {
            title: 'Trend',
            style: 'fsYoobetToto',
            stem: 'rightMiddle',
            hook: { tip: 'rightMiddle', target: 'leftTop' },
            offset: { x: 10, y: 10 },
            width: 115
        });

        parentElement.setStyle({'cursor': 'pointer'});
    });
};

var fsInitLiveStreamLinks = function()
{
    $$('div.fsEventLiveStream,a.fsEventLiveStream').each(function(element)
    {
        element.observe('click', function(event)
        {
            event.stop();

            var liveurl = element.readAttribute("href");
            if (element.readAttribute("stream") && element.readAttribute("code"))
            {
                var streamID = element.readAttribute("stream");
                var code = element.readAttribute("code");

                var liveurl = "/player/yoobetplayer.php?id=" + streamID + "&code=" + code + "&type=live";
            }
            
            fsPopup.open({url:liveurl,name:'fsStream',toolbar:"no",status:"no"});
        });
    });
}

var fsInitArchiveVideoLinks = function()
{
    $$('div.fsRaceArchiveVideo,a.fsRaceArchiveVideo').each(function(element)
    {
        element.observe('click', function(event)
        {
            event.stop();

            var liveurl = element.readAttribute("href");
            
            fsPopup.open({url:liveurl,name:'fsStream'});
        });
    });
}

var fsToolTipsContainer = new Array();
var fsAddToToolTipsContainer = function(element)
{
    if (element.hasAttribute('title') && element.readAttribute('title') != '')
    {
        fsToolTipsContainer.push(element);
    }
}

var fsActivateToolTipsInContainer = function()
{
    fsToolTipsContainer.each(function(element)
    {
        var content = element.readAttribute('title').split(';');
        if (content.length == 1)
        {
            var cbody = content[0];
            var ctitle = '';
        }
        else
        {
            var cbody = content[1];
            var ctitle = content[0];
        }

        element.writeAttribute('title', '');
        new Tip(element, cbody, 
        {
            title: ctitle,
            style: 'fsYoobet',
            stem: 'topMiddle',
            hook: { tip: 'topMiddle', target: 'bottomMiddle' },
            //offset: { x: 10, y: 10 },
            width: 130
        });
    });
}

var fsActivateToolTipsWinners = function()
{
    $$('div.fsWinnersLineName').each(function(element)
    {
        if (element.readAttribute('title'))
        {
            var content = element.readAttribute('title').split(';');
            if (content.length == 2)
            {
                var data = content[1].split('|||');

                var datacells = data[1].split('||');

                //alert(datacells);
                if (datacells.length > 0)
                {
                    for (var i=0; i<datacells.length; i++)
                    {
                        datacells[i] = fsStartersAbroadHTML(datacells[i]);
                    }
                }

                var datatable = datacells.join('</td><td style="vertical-align:top;width:50%;">');

                var cbody = '<table width="100%"><tr><td colspan="2">' + fsStartersAbroadHTML(data[0]) + '</td></tr><tr><td style="vertical-align:top;width:50%;">' + datatable + "</td></tr></table>";
                var ctitle = fsStartersAbroadHTML(content[0]);

                element.writeAttribute('title', '');
                new Tip(element, cbody,
                {
                    title: ctitle,
                    style: 'fsYoobet',
                    stem: 'topLeft',
                    hook: { tip: 'topLeft', target: 'bottomLeft' },
                    offset: { x: 20, y: 0 },
                    width: 400
                });
            }
        }
    });
}

var fsActivateToolTipsRates = function()
{
    $$('div.fsRatesLine').each(function(element)
    {
        if (element.readAttribute('title'))
        {
            var content = element.readAttribute('title').split(';');
            if (content.length == 1)
            {
                var cbody = content[0];
                var ctitle = '';
            }
            else
            {
                var cbody = content[1];
                var ctitle = content[0];
            }

            element.writeAttribute('title', '');
            jQuery(element).css('cursor', 'default');
            new Tip(element, cbody.split('|').join('<br>'), 
            {
                title: ctitle,
                style: 'fsYoobet',
                stem: 'topLeft',
                hook: { tip: 'topLeft', target: 'bottomLeft' },
                offset: { x: 20, y: 0 },
                width: 80
            });
        }
    });
}

var fsActivateToolTipsNavTabs = function()
{
    $$('#fsTabGallopTrotting,li.fsPNavi').each(function(element)
    {
        if (element.hasAttribute('title') && element.readAttribute('title') != '')
        {
            var content = element.readAttribute('title').split(';');
            if (content.length == 1)
            {
                var cbody = content[0];
                var ctitle = '';
            }
            else
            {
                var cbody = content[1];
                var ctitle = content[0];
            }

            element.writeAttribute('title', '');
            new Tip(element, cbody, 
            {
                title: ctitle,
                style: 'fsYoobet',
                stem: 'topLeft',
                hook: { tip: 'topLeft', target: 'bottomLeft' },
                offset: { x: 10, y: 10 },
                width: 90
            });
        }
    });
};

var fsActivateToolTipsLeft = function()
{
    $$('#fsContentLeft div.fsContentLine,#fsContentLeft div.fsContentTitle').each( function(input)
    {
        if (input.hasAttribute('title') && input.readAttribute('title') != '')
        {
            var ttWidth = 75;

            var content = input.readAttribute('title').split(';');
            if (content.length == 1)
            {
                var cbody = content[0];
                var ctitle = '';
            }
            else
            {
                var cbody = content[1];
                var ctitle = content[0];
            }

            if ($(cbody))
            {
                cbody = $(cbody).remove();
                ttWidth = 500;

                input.observe('prototip:shown', function()
                {
                    $$('div.fsToolTipTodaysRaces[rid]').each(function(line)
                    {
                        var raceId = line.readAttribute('rid');
                        line.writeAttribute('rid', null);
                        line.observe('click', function(event)
                        {
                            event.stop();
                            document.location.href = '/races/' + raceId;
                        });
                    });
                });
            }
            else
            {
                cbody = cbody.split('|').join('<br>');
            }
            //alert(cbody);

            input.writeAttribute('title', '');
            new Tip(input, cbody, 
            {
                title: ctitle,
                style: 'fsYoobetTodaysEvents',
                stem: 'leftTop',
                hook: { tip: 'topLeft', target: 'topRight' },
                offset: { x: 0, y: 5 },
                width: ttWidth
            });
        }
    });
};

var fsActivateToolTipNextRaces = function()
{
    if ($('fsPanelNextRace'))
    {
        
        var nextRacesToolTip = new Tip($('fsPanelNextRace'),
        {
            ajax:
            {
                url: '/services/tooltip_nextraces.php',
                options:
                {
                    method: 'get'
                }
            },
            target: 'fsUpdateLabelNextRace',
            style: 'fsYoobetNextRaces',
            offset: { x: 20, y: 25 },
            hook: { tip: 'topLeft', target: 'bottom' },
            stem: 'topLeft',
            width: 500
        });

        $('fsPanelNextRace').observe('prototip:shown', function()
        {
            // workaround, um tooltip nachträglich auf position:fixed zu setzen

            var elem = $$('div.prototip').find(function(e)
            {
                if (e.select('div.fsYoobetNextRaces').length > 0) return true;
                return false;
            });

            if (elem)
            {
                elem.setStyle(
                {
                    position: 'fixed'
                });
            }

            $$('#fsYoobetNextRacesBox > div[rid]').each(function(line)
            {
                var raceId = line.readAttribute('rid');
                line.writeAttribute('rid', null);

                if (parseInt(raceId) > 0)
                {
                    line.observe('click', function(event)
                    {
                        event.stop();
                        document.location.href='/races/' + raceId;
                    });
                }
            });
            
        });
    }
};

var fsActivateToolTipsStartersAbroad = function()
{
    $$('#fsContentRight div.fsContentLine,#fsContentRight div.fsContentTitle').each( function(input)
    {
        if (input.hasAttribute('title') && input.readAttribute('title') != '')
        {
            var content = input.readAttribute('title').split(';');
            var cbody2 = '';
            if (content.length == 1)
            {
                var cbody = content[0];
                var ctitle = '';
            }
            else
            {
                var cbody = content[1];
                if (content.length == 3)
                {
                    cbody2 = content[2];
                }
                var ctitle = content[0];
            }

            ctitle = fsStartersAbroadHTML(ctitle);
            cbody = fsStartersAbroadHTML(cbody);
            cbody2 = fsStartersAbroadHTML(cbody2);
            
            if (!cbody || cbody == "")
            {
                cbody = ctitle;
                ctitle = '';
            }
            else if (cbody2 != "")
            {
                cbody = cbody + "<br><strong>" + cbody2 + "</strong>";
            }

            input.writeAttribute('title', '');
            new Tip(input, cbody, 
            {
                title: ctitle,
                style: 'fsYoobet',
                stem: 'rightTop',
                hook: { tip: 'topRight', target: 'topLeft' },
                offset: { x: 0, y: 5 }
            });
        }
    });
};

var fsActivateToolTipCalendar = function()
{
    var element = $$('div.fsFormDayPickerExtend').first();
    if (element)
    {
        
        var calendarHook = new Element('div', {id: 'fsCalendar'});

        new Tip(element, calendarHook, 
        {
            //title: 'test',
            style: 'fsYoobetNextRaces',
            stem: 'rightTop',
            hook: { tip: 'topRight', target: 'topLeft' },
            offset: { x: 0, y: 35 },
            width: 180
        });

        element.observe('prototip:shown', function()
        {
            if (!$('fsCalendar').firstDescendant())
            {
                Calendar.setup(
                {
                    dateField     : 'fsPickerDayValue',
                    parentElement : 'fsCalendar'
                });
            }
        });
    }
};

var fsStartersAbroadHTML = function (string)
{
    lines = string.split('|');

    var result = "";

    lines.each(function(line)
    {
        if (line)
        {
            var parts = line.split('=');
            if (parts.length == 3)
            {
                if (parts[1] == "")
                {
                    result += parts[0] + ': ' + parts[2] + '<br>';
                }
                else
                {
                    result += parts[0] + ': ' + parts[2] + ' ' + '<img style="vertical-align:middle" src="/images/icons/flags/16x16/' + parts[1] + '.png" alt="' + parts[1] + '" />' + '<br>';
                }
            }
            else if (parts.length == 2)
            {
                if (parts[0] == "")
                {
                    result += parts[1];
                }
                else
                {
                /*
                    var pre = parts[0].split(": ");
                    if (pre.length == 2)
                    {
                        result += pre[0] + ': <img style="vertical-align:middle" src="/images/icons/flags/16x16/' + pre[1] + '.png" alt="' + pre[1] + '" /> ' + parts[1] + '<br />';
                    }
                    else
                    {   */
                        result += '<img style="vertical-align:middle" src="/images/icons/flags/16x16/' + parts[0] + '.png" alt="' + parts[0] + '" /> ' + parts[1];
                    //}
                }
            }
            else
            {
                result += line + "<br>";
            }
        }
    });

    return result;
};

var fsCollapseCookieBlocks = function()
{
	var x = fsJar.get("cblocks");
	if (x)
	{
		var l = x.split(",");
	
		$$('div.fsToggleBlock').each(function(e)
		{
			l.each(function(ll)
			{
				if (ll == e.readAttribute("code"))
				{
					if ($(e.parentNode.parentNode.parentNode.parentNode).readAttribute("id") == "boxTomorrowsRaces")
					{
						fsToggleCountries(e, "expand", true);
					}
					else
					{
						fsToggleCountries(e, "collapse", true);
					}
				}
			});
		});
	}
};

var fsTimerInterval = null;
var fsInitTimer = function()
{
	if ($('fsUpdateLabelServerTime'))
	{
		$('fsUpdateLabelServerTime').writeAttribute('delta', parseInt(Date.parse(new Date())) - parseInt($('fsUpdateLabelServerTime').readAttribute('stamp')));
		fsTimerInterval = window.setInterval("fsUpdateTimer()", 1000);	
	}
}

var fsUpdateTimerLabel = function()
{
	var fsServerTimer = parseInt(Date.parse(new Date())) - parseInt($('fsUpdateLabelServerTime').readAttribute('delta'));
	$('fsUpdateLabelServerTime').writeAttribute('stamp', fsServerTimer);
	$('fsUpdateLabelServerTime').update(fsFormatTime(new Date(fsServerTimer), parseDateFormat(getLocaleInfo("longTime"))));
}
var fsLastTimerUpdate = 0;
var fsUpdateTimer = function()
{
    fsUpdateTimerLabel();

	if ($('fsUpdateLabelNextRace') && $('fsNextRaceURL').readAttribute('href') != "/races//")
	{
		//alert("href: " + $('fsNextRaceURL').readAttribute('href'));
		var next = parseInt($('fsUpdateLabelNextRace').readAttribute('next'));//  + parseInt($('fsUpdateLabelServerTime').readAttribute('delta'));
		//var now = parseInt(Date.parse(new Date()));
		var now = parseInt($('fsUpdateLabelServerTime').readAttribute('stamp'));
		var delta = next - now;
        //alert(delta);
		if (delta <= 0)
		{	// last bet chance is closed, load next one
            if (now - fsLastTimerUpdate >= 10000)
            {
                fsActivateToolTipNextRaces();
			    fsTimerRequest();
            }
		}
		else if (delta <= 60000 && $('fsTimeToGoValue'))
		{	// switch to 'less than one minute'
			if ($('fsTimeToGoValue').innerHTML != "&lt; 1")
			{
				$('fsTimeToGoValue').update("&lt; 1");
                fsActivateToolTipNextRaces();
				if ($('fsNextBetChance'))
				{
					fsTimerRequest();
				}
			}
		}
		else if (delta <= 60 * 60000 && $('fsTimeToGoValue'))
		{	// update every minute
			var minutes = Math.floor(delta / 60000);
			if (minutes < parseInt($('fsTimeToGoValue').innerHTML))
			{
				$('fsTimeToGoValue').update(minutes);
                fsActivateToolTipNextRaces();

				if ($('fsNextBetChance'))
				{
					fsTimerRequest();
				}
			}
		}
	}
}

var ajaxUpdateTimer = null;
var fsTimerRequest = function()
{
	var browserTimeStart = parseInt(Date.parse(new Date()));

	var params = '';
	if ($('fsNextBetChance'))
	{
		params = '?nbc=1';
	}

	if (ajaxUpdateTimer == null && (fsLastTimerUpdate == 0 || parseInt(Date.parse(new Date())) - fsLastTimerUpdate > 20000))
	{
	
	ajaxUpdateTimer = new Ajax.Request('/services/update_timer.php' + params,
	{
		method: 'get',
		evalJSON: 'force',
		onSuccess: function(response)
		{
			if (response)
			{
				var browserTimeEnd = parseInt(Date.parse(new Date()));
				var browserTimeMid = (browserTimeEnd + browserTimeStart) / 2;
				var delta = browserTimeMid - parseInt(response.responseJSON.servertime_timestamp);
				$('fsUpdateLabelServerTime').writeAttribute('delta', delta);
				$('fsUpdateLabelServerTime').writeAttribute('stamp', response.responseJSON.servertime_timestamp);
                fsLastTimerUpdate = parseInt(Date.parse(new Date()))
				fsUpdateTimerLabel();

				$('fsUpdateLabelNextRace').update(response.responseJSON.nextrace_display);
				$('fsUpdateLabelNextRace').writeAttribute('next', response.responseJSON.nextrace_timestamp);
				$('fsNextRaceURL').href = response.responseJSON.nextrace_url;
				if ($('fsNextBetChance') && response.responseJSON.next_races)
				{
					var i = 0;
					var races = response.responseJSON.next_races;
					$('fsNextBetChance').select('div.fsContentLine').each(function(line)
					{
						if (races.size() > i)
						{
							line.select('div.fsContentIcon').first().writeAttribute('title', races[i].cc);
							line.select('div.fsContentTextMiddle').first().update(races[i].cn);
							line.select('div.fsContentTimeSpan').first().update(races[i].t);
							line.select('div.fsContentButton').first().select('input').first().writeAttribute('onclick', "document.location.href='/betslips/" + races[i].rid + "/'");
							line.select('div.fsContentRaceCount').first().update(races[i].rn);
							line.select('div.fsContentStarterCount').first().select('span').first().update(races[i].r);
							line.select('div.fsContentRaceLength').first().writeAttribute('title', races[i].dy + ' yds');
							line.select('div.fsContentRaceLength').first().update(races[i].dm + ' m');
							line.show();
							i++;
						}
						else
						{
							line.hide();
						}
					});
				}
			}
			else
            {
				//alert("success, but no response object");
            }
            ajaxUpdateTimer = null;
		},
		onFailure: function()
		{
			//alert("error while synchronizing time with server");
			ajaxUpdateTimer = null;
		}
	});
	
	}
}

var fsBalanceInterval = null;
var fsInitBalanceUpdate = function()
{
	//if ($('fsUpdateLabelBalance'))
	{
		fsTimerInterval = window.setInterval("fsUpdateBalanceRequest()", 60000);	// update every minute
	}
}

function fsUpdateBalanceRequest()
{
	var browserTimeStart = parseInt(Date.parse(new Date()));
	var params = "";
	if ($('fsDetailRaceInfos') && parseInt($('fsDetailRaceInfos').readAttribute('r')) > 0)
	{
		//if ($('fsUpdateLabelServerTime') && $('fsDetailRaceInfos') && $('fsDetailRaceInfos').readAttribute('t') > $('fsUpdateLabelServerTime').readAttribute('stamp'))
        if ($('fsUpdateLabelServerTime') && $('fsDetailRaceInfos') && $('fsDetailRaceInfos').readAttribute('s') != "r" && $('fsDetailRaceInfos').readAttribute('s') != "a")
		{ 
			params = "?r=" + $('fsDetailRaceInfos').readAttribute('r') + "&update_raceinfos=1";
		}
	}
	else if ($('fsContentDetails'))
	{
		var eventIDs = new Array();
		 $('fsContentDetails').select('div.fsDetailTableCountry').each(function(element)
		 {
		 	var event = element.readAttribute('e');
			if (parseInt(event) > 0)
				eventIDs.push(parseInt(event));
		 });

		 //alert(eventIDs.join(','));
		params = "?e=" + eventIDs.join(',');
	}
	
	new Ajax.Request('/services/update_balance.php' + params,
	{
		method: 'get',
		//evalJSON: 'force',
		onSuccess: function(response)
		{
			if (response.responseText)
			{
                var json = response.responseText.evalJSON();

                if ('fatal_error' in json && json.fatal_error == '1')
                {
                    document.location.href='/plainerror.php';
                }

				if ($('fsUpdateLabelOpenBets') && 'open_bets' in json)
                {
					$('fsUpdateLabelOpenBets').update(json.open_bets);
                }

				if ($('fsUpdateLabelBalance') && 'balance' in json)
                {
					$('fsUpdateLabelBalance').update(json.balance);
                }

                if ($('racetitlebarudpRaceSelectors') && 'update_raceinfos' in json && json.update_raceinfos == '1')
                {
                    AjaxPanel.reload($("racetitlebarudpRaceSelectors"));
                }

				if ($('fsUpdateLabelServerTime'))
				{
					var browserTimeEnd = parseInt(Date.parse(new Date()));
					var browserTimeMid = (browserTimeEnd + browserTimeStart) / 2;
					var delta = browserTimeMid - parseInt(json.servertime_timestamp);
					$('fsUpdateLabelServerTime').writeAttribute('delta', delta);
					$('fsUpdateLabelServerTime').writeAttribute('stamp', json.servertime_timestamp);
					fsUpdateTimer();
				}

				if ('odds' in json)
				{
					fsUpdateOdds(json.odds);
				}

				if ('races' in json)
				{
					fsUpdateRaces(json.races);
				}
			}
			else
            {
				//alert("success, but no response object");
            }
		},
		onFailure: function()
		{
			//alert("error while synchronizing time with server");
		}
	});
}

var fsUpdateRaces = function(races)
{
	races.each(function(v)
	{
		if (v.id)
		{
			if (v.t && $('fsRaceStarttime'+v.id))
			{
				$('fsRaceStarttime'+v.id).update(v.t);
			}

            if (v.t && $('fsRaceInfosStarttime'))
            {
                $('fsRaceInfosStarttime').update(v.t);
            }

			if (v.r && $('fsRaceStarters'+v.id))
			{
				var runners = v.r;

                if (v.r != "(*)")
                {
                    Tips.remove($('fsRaceStarters'+v.id).parentNode);
                    if (v.n)
                    {
    					runners = v.r + " (" + v.n + ")";
                    }
                }

				$('fsRaceStarters'+v.id).update(runners);
			}

			if (v.s && $('fsRaceStatus'+v.id))
			{
				$('fsRaceStatus'+v.id).update(v.s);
			}

            if ($('fsDetailRaceInfos') && v.sid)
            {
                var oldSid = $('fsDetailRaceInfos').readAttribute('s');
                $('fsDetailRaceInfos').writeAttribute('s', v.sid);
                if (oldSid != "r" && oldSid != "a" && v.sid != "o" && $("raceinfosPanelRaceResults"))
                {
                    AjaxPanel.reload($("raceinfosPanelRaceResults")); 
                }

                if (v.sid != "o" && $('fsRaceInfosBetslipLink') && $('fsRaceInfosBetslipLink').visible())
                {
                    $('fsRaceInfosBetslipLink').hide();
                }

                if (v.sid != "o" && v.sid != "s" && $('fsRaceInfosLiveStreamLink') && $('fsRaceInfosLiveStreamLink').visible())
                {
                    $('fsRaceInfosLiveStreamLink').hide();
                }
            }
		}
	});
}

var fsUpdateOdds = function(odds)
{
    var favourite = 0;
    
	odds.each(function(values)
	{
		if (values.starter)
		{
            var elementId = 'fs' + values.starter + 'toto';
			if (values.toto && $(elementId))
            {
                if ($(elementId).innerHTML != values.toto)
                {
                    $(elementId).setStyle({'color':'red','fontWeight':'normal','textDecoration': 'none'});
                }

				$(elementId).update(values.toto);
            }

            if (values.totohistory)
            {
                $(elementId).writeAttribute("history", values.totohistory);

                var trendElement = $(elementId).nextSiblings()[1];
                trendElement.removeClassName('fsTotoTrendUp');
                trendElement.removeClassName('fsTotoTrendSame');
                trendElement.removeClassName('fsTotoTrendDown');

                if (values.tototrend !== null && values.tototrend !== "")
                {
                    if (values.tototrend > 0)
                    {
                        trendElement.addClassName('fsTotoTrendUp');
                    }
                    else if (values.tototrend < 0)
                    {
                        trendElement.addClassName('fsTotoTrendDown');
                    }
                    else
                    {
                        trendElement.addClassName('fsTotoTrendSame');
                    }
                }
            }

            elementId = 'fs' + values.starter + 'win';
			if (values.win && $(elementId))
            {
                if ($(elementId).innerHTML != values.win)
                {
                    $(elementId).setStyle({'color':'red','fontWeight':'normal','textDecoration': 'none'});
                }

				$(elementId).update(values.win);
            }

            elementId = 'fs' + values.starter + 'place';
			if (values.place && $(elementId))
            {
                if ($(elementId).innerHTML != values.place)
                {
                    $(elementId).setStyle({'color':'red','fontWeight':'normal','textDecoration': 'none'});
                }

				$(elementId).update(values.place);
            }

		}
	});

    fsResetOddColor.delay(2);
    
    fsInitOddsTrends();
};

var fsResetOddColor = function()
{
    var favourite = fsGetTotoFavourite();
    $$('span.fsTotoHistory').each(function(element)
    {
        if (element.innerHTML == favourite)
        {
            element.setStyle({'color':'red','fontWeight':'bold','textDecoration': 'blink'});
        }
        else
        {
            element.setStyle({'color':'black'});
        }
    });

    $$('div.fsDetailTableRunnersWinWidth span,div.fsDetailTableRunnersPlaceWidth span').each(function(element)
    {
        element.setStyle({'color':'black'});
    });
};

var fsGetTotoFavourite = function()
{
    var favourite = 0;
    $$('span.fsTotoHistory').each(function(element)
    {
        if (favourite == 0 || (parseFloat(element.innerHTML) > 0 && parseFloat(element.innerHTML) < favourite))
        {
            favourite = parseFloat(element.innerHTML);
        }
    });

    return favourite;
};

var fsInitLoginForm = function()
{
	if ($('fsLoginForm'))
	{
		$('fsLoginForm').stopObserving('submit');
		$('fsLoginForm').observe('submit', function(event)
		{
			Event.stop(event);

			if ($('fsPanelLoginSubmit'))
			{
				$('fsLoginForm').stopObserving('submit');
				$('fsPanelLoginSubmit').disable();
			}

			$('fsLoginForm').request(
			{
				onSuccess: function(t)
				{
					$('fsPanelLogin').update(t.responseText);
					if ($('fsLoginFormLoginField'))
					{
						fsInitInputLabels();
						fsInitLoginForm();
						fsShowErrors();
					}
					else
					{
						var statusnode = $('fsLoginStatus');
						if(statusnode && statusnode.readAttribute("loggedin") == "1")
						{
							fsCustomerLogoutHook();
							fsInitBalanceUpdate();
							fsInitHighslide();
							$('fsTopPanelOverlay').hide();
							$('fsTopPanelOverlayText').hide();
                            if ($('reloadafterlogin'))
                            {
                                window.location.reload();
                            }
						}
					}
				}
			});
		});
	}
}

var fsShowErrors = function()
{
	//var errornode = $$('error').first();
    var errornodes = $$('error');
    if (errornodes.length > 0)
    {
        var errornode = errornodes.first();
    }
    else
    {
        errornode = $('domError');
    }

	if (errornode)
	{
		var errortitle = errornode.readAttribute("status");

        if (errortitle == "FATAL_ERROR")
        {
            //alert("test");
            document.location.href = "/plainerror.php";
            return;
        }
		var errormessage = errornode.readAttribute("message");
		if (!errortitle.empty() || !errormessage.empty())
		{
			if (errormessage == null || errormessage.empty())
				errormessage = errortitle;
			fsShowModalWindow(errormessage + '<br><br><input type="button" onclick="fsHideModalWindow();" value="OK" />', errortitle);
		}
	}
}

var fsInitSliders = function()
{
	if ($('fsDistanceSlider'))
	{
		var handles = ['fsDistanceSliderHandleMin', 'fsDistanceSliderHandleMax'];
		var distanceMinTextM = $('fsDistanceMinValueM');
		var distanceMaxTextM = $('fsDistanceMaxValueM');
		var distanceMinTextYd = $('fsDistanceMinValueYd');
		var distanceMaxTextYd = $('fsDistanceMaxValueYd');
		var distanceMinField = $('fsDistanceMin');
		var distanceMaxField = $('fsDistanceMax');
		var distanceValues = ($('fsDistanceSliderSpan').readAttribute('numbers')).split(",");

		var square_slider = new Control.Slider(handles, 'fsDistanceSlider',
		{
		    range: $R(500, 6500),
		    //values: distanceValues,
		    sliderValue: [distanceMinField.value, distanceMaxField.value],
		    spans: ["fsDistanceSliderSpan"],
		    restricted: true,
			onSlide: function(values)
			{
	        	distanceMinTextM.innerHTML = Math.round(values[0]);
				distanceMinTextYd.innerHTML = Math.round(values[0] * 1.09360);
				distanceMaxTextM.innerHTML = Math.round(values[1]);
				distanceMaxTextYd.innerHTML = Math.round(values[1] * 1.09360);
	      	},
			onChange: function(values)
			{
	        	distanceMinField.value = values[0];
				distanceMaxField.value = values[1];
			}
		});
	}
};

var fsCountryListHookup = function()
{
	if ($('fsCountries'))
	{
		$('fsCountries').observe('change', function(event)
		{
			fsRetrieveLocations();
		});
	}
};

var fsRetrieveLocations = function()
{
	if($('fsLocations'))
	{
		new Ajax.Request('/services/race_locations.php?c=' + $('fsCountries').value,
		{
			method:'get',
			onSuccess: function(transport)
			{
 				var json = transport.responseText.evalJSON();
				$('fsLocations').childElements().each(function(element)
				{
					element.remove();
				});

				var i = 0;	
				json.names.each(function(locationName)
				{
					var locationID = json.ids[i];
					element = new Element('option');
					element.setAttribute('value', locationID);
					element.innerHTML = locationName;
					$('fsLocations').insert(element);
					i++;
				});
			}
		});
	}
};

var fsDayPickerInit = function()
{
    if ($('fsFormDayPicker'))
    {
    	var activeDays = $$('div.fsFormDayPickerActive');
    	activeDays.each(function(element)
    	{
    		element.observe('click', function(event)
    		{
    			document.location.href="/races/?d=" + this.readAttribute("date");
    		});
    	});

        if ($('fsFormDayPicker').select('div.fsFormDayPickerPrev').length > 0)
        {
            var prevDayElement = $('fsFormDayPicker').select('div.fsFormDayPickerPrev')[0];
            if (prevDayElement.hasAttribute("date") && prevDayElement.readAttribute("date") != "")
            {
                prevDayElement.observe('click', function(event)
                {
                    document.location.href="/races/?d=" + prevDayElement.readAttribute("date");
                });
                prevDayElement.setStyle(
                {
                    "cursor":"pointer",
                    "opacity": 0.99
                });
            }
        }

        if ($('fsFormDayPicker').select('div.fsFormDayPickerNext').length > 0)
        {
            var nextDayElement = $('fsFormDayPicker').select('div.fsFormDayPickerNext')[0];
            if (nextDayElement.hasAttribute("date") && nextDayElement.readAttribute("date") != "")
            {
                nextDayElement.observe('click', function(event)
                {
                    document.location.href="/races/?d=" + nextDayElement.readAttribute("date");
                });
                nextDayElement.setStyle(
                {
                    "cursor":"pointer",
                    "opacity": 0.99
                });
            }
        }

        $$('div.fsFormDayPickerDay').each(function(selectedDay)
        {
            if (selectedDay.readAttribute('datetip'))
            {
                var titleText = '';
                var tipText = '';
                var tipWidth = 175;

                if (selectedDay.readAttribute('title'))
                {
                    titleText = selectedDay.readAttribute('datetip');
                    //tipText = selectedDay.readAttribute('title').split('|').join('<br />');
                    var events = selectedDay.readAttribute('title').split('|');
                    selectedDay.writeAttribute('title', '');
                    
                    events.each(function(line)
                    {
                        var elements = line.split(';');
                        
                        if (elements.length == 4)
                        {
                            
                            var countryFlag = '<img src="/images/icons/flags/16x16/' + elements[0] + '.png" alt="/images/icons/flags/16x16/' + elements[0] + '.png" style="vertical-align:middle;" />';
                            var boemmel = '<img src="/images/icons/kennzeichen_' + elements[1] + '.png" style="vertical-align:middle;top:-2px;position:relative;" />';
                            var eventLocation = elements[2];
                            var raceNumber = "(" + elements[3] + ")";
                        
                            tipText += countryFlag + "&nbsp;" + boemmel + "&nbsp;" + eventLocation + "&nbsp;" + raceNumber + "<br />";
                        }
                    });

                    tipWidth = 250;
                    //tipText = '<table>' + tipText + '</table>';
                }

                if (tipText == '')
                {
                    tipText = selectedDay.readAttribute('datetip');
                    titleText = '';
                }

                new Tip(selectedDay, tipText,
                {
                    stem: 'topLeft',
                    style: 'fsYoobet',
                    hook: { tip: 'topLeft', target: 'bottomLeft' },
                    offset: { x: 20, y: 10 },
                    width: tipWidth,
                    title: titleText
                });
            }
        });

    }
};

var fsShowAbroad = function(starters)
{
	if ($('fsStartersAbroadJockeys') && $('fsStartersAbroadTrainers') && $('fsStartersAbroadHorses'))
	{
		$('fsStartersAbroadHorses').hide();
		$('fsStartersAbroadTrainers').hide();
		$('fsStartersAbroadJockeys').hide();
        $('fsStartersAbroadNone').hide();
        
		if (starters != 'horses' && starters != 'trainers' && starters != 'jockeys')
		{
			if ($('fsStartersAbroadHorses').select('div.fsContentTitle').size() > 0)
			{
				starters = 'horses';
			}
			else if ($('fsStartersAbroadTrainers').select('div.fsContentTitle').size() > 0)
			{
				starters = 'trainers';
			}
			else if ($('fsStartersAbroadJockeys').select('div.fsContentTitle').size() > 0)
			{
				starters = 'jockeys';
			}
			else
			{
				starters = '';
				$('fsStartersAbroadNone').show();
				$('fsQuickSearchRight').hide();
				fsJar.put('ablock', '');
			}
		}
	
		if (starters == 'jockeys')
		{
			if ($('fsStartersAbroadJockeys').select('div.fsContentTitle').size() > 0)
			{
				$('fsStartersAbroadJockeys').show();
			}
			else
			{
				$('fsStartersAbroadNone').show();
			}
		}
	
		if (starters == 'trainers')
		{
			if ($('fsStartersAbroadTrainers').select('div.fsContentTitle').size() > 0)
			{
				$('fsStartersAbroadTrainers').show();
			}
			else
			{
				$('fsStartersAbroadNone').show();
			}
		}
	
		if (starters == 'horses')
		{
			if ($('fsStartersAbroadHorses').select('div.fsContentTitle').size() > 0)
			{
				$('fsStartersAbroadHorses').show();
			}
			else
			{
                $('fsStartersAbroadNone').show();
                /*
				starters = '';
				$('fsStartersAbroadNone').show();
				$('fsQuickSearchRight').hide();
                */
				fsJar.put('ablock', '');
			}
		}
	
        fsSetStartersTab(starters)
		fsJar.put('ablock', starters);
		fsCollapseCookieBlocks();
	}
}

var fsSetStartersTab = function(tab)
{
    $('fsStartersAbroadTabsBackground').childElements().each(function(element){element.hide();});
    if (tab == "horses")
    {
        $('fsStartersAbroadTabsHorses').show();
    }
    else if (tab == "trainers")
    {
        $('fsStartersAbroadTabsTrainers').show();
    }
    else if (tab == "jockeys")
    {
        $('fsStartersAbroadTabsJockeys').show();
    }
}

var fsCustomerLogoutHook = function()
{
	if ($('fsCustomerLogout'))
	{
		$('fsCustomerLogout').stopObserving('click');
		$('fsCustomerLogout').observe('click', function(event)
		{
			$('fsCustomerLogout').stopObserving('click');
			$('fsCustomerLogout').setStyle({'color':'#888888'});
			fsCustomerLogout();

		});
	}
}

var fsCustomerLogout = function()
{
	new Ajax.Request('/services/logout.php',
	{
		onSuccess: function(t)
		{
			$('fsPanelLogin').update(t.responseText);

			if ($('fsLoginFormLoginField'))
			{
				fsInitInputLabels();
				fsInitLoginForm();
				fsInitHighslide();
				$('fsTopPanelOverlay').show();
				$('fsTopPanelOverlayText').show();
			}
		}
	});
}

// modal window stuff

var fsAddOpacity = function(transparent)
{
	if ($("fsOpacity") != null)
	{
		return false;
	}

	var s = new Element("div");
	//alert(document.viewport.getScrollOffsets().top);
	s.setStyle(
	{
		position: 'absolute',
		display: 'block',
		zIndex: '9998',
		top: document.viewport.getScrollOffsets().top + 'px',
		left: document.viewport.getScrollOffsets().left + 'px',
		backgroundColor: '#000000',
		width: document.viewport.getWidth() + 'px',
		height: document.viewport.getHeight() + 'px'
	});

	if (transparent)
	{
		s.setOpacity(0);
	} else
	{
		s.setOpacity(0.4);
	} 

	s.id = "fsOpacity";
	$('fsBgMain').insert(s);
	$('fsBgMain').setStyle({overflow: 'hidden'});
	s.setStyle(
	{
		width: document.viewport.getWidth() + 'px',
		height: document.viewport.getHeight() + 'px'
	});
}

var fsRemoveOpacity = function()
{
	if ($("fsOpacity") == null)
	{
		return false;
	}

	$('fsOpacity').remove();
	$('fsBgMain').setStyle({overflow: 'auto'});
}

var fsShowModalWindow = function(content, headline, withCloseLink)
{
    fsAddOpacity();

	$('fsModalWindowHeadline').update(headline);
	$('fsModalWindowContent').update(content);

	$('fsModalWindow').show();

	if (withCloseLink === false)
	{
		$('fsModalWindowCloseLink').hide();
	}
}

var fsHideModalWindow = function()
{
    fsRemoveOpacity();
    $('fsModalWindow').hide();
}

var fsFormatTime = function(dateToFormat, parsedFormat)
{
  var resultArray = new Array(parsedFormat.length);
  for (var i=0; i<parsedFormat.length; i++)
  {
    switch (parsedFormat[i]) 
    {
      case "h": 
        resultArray[i] = fsCCSGet12Hour(dateToFormat.getHours());
        break;
      case "H": 
        resultArray[i] = dateToFormat.getHours();
        break;
      case "n": 
        resultArray[i] = dateToFormat.getMinutes();
        break;
      case "s": 
        resultArray[i] = dateToFormat.getSeconds();
        break;
      case "hh": 
        resultArray[i] = fsCCSAddZero(get12Hour(dateToFormat.getHours()), 2);
        break;
      case "HH": 
        resultArray[i] = fsCCSAddZero(dateToFormat.getHours(), 2);
        break;
      case "nn": 
        resultArray[i] = fsCCSAddZero(dateToFormat.getMinutes(), 2);
        break;
      case "ss": 
        resultArray[i] = fsCCSAddZero(dateToFormat.getSeconds(), 2);
        break;
      case "S": 
        resultArray[i] = "000";
        break;
      case "A/P": 
        resultArray[i] = fsCCSGetAMPM(dateToFormat.getHours(), "A", "P");
        break;
      case "a/p": 
        resultArray[i] = fsCCSGetAMPM(dateToFormat.getHours(), "a", "p");
        break;
      case "tt": 
        resultArray[i] = fsCCSGetAMPM(dateToFormat.getHours(), getLocaleInfo("AMDesignator"), getLocaleInfo("PMDesignator"));
        break;
      case "AM/PM": 
        resultArray[i] = fsCCSGetAMPM(dateToFormat.getHours(), "AM", "PM");
        break;
      case "am/pm": 
        resultArray[i] = fsCCSGetAMPM(dateToFormat.getHours(), "am", "pm");
        break;
      case ":": 
        resultArray[i] = ":";
        break;
      case "LongTime": 
        resultArray[i] = fsCCSFormatTime(dateToFormat, parseDateFormat(getLocaleInfo("longTime")));
        break;
      case "ShortTime": 
        resultArray[i] = fsCCSFormatTime(dateToFormat, parseDateFormat(getLocaleInfo("shortTime")));
        break;
      case "GeneralDate": 
        resultArray[i] = fsCCSFormatTime(dateToFormat, parseDateFormat(getLocaleInfo("shortDate")+" "+getLocaleInfo("longTime")));
        break;
      default:
        if (String(parsedFormat[i]).charAt(0)=="\\")
        resultArray[i] = String(parsedFormat[i]).substr(0);
      else
        resultArray[i] = parsedFormat[i];
    }
  }
  return resultArray.join("");
}

function fsCCSGet12Hour(hoursNumber)
{
  if (hoursNumber == 0)
    hoursNumber = 12;
  else if (hoursNumber > 12)
    hoursNumber = hoursNumber - 12;
  return hoursNumber;
}

function fsCCSAddZero(value, resultLength)
{
  var countZero = resultLength - String(value).length;
  var result = String(value);
  for (var i=0; i<countZero; i++)
    result = "0" + result;
  return result;
}

function fsCCSGetAMPM(HoursNumber, AnteMeridiem, PostMeridiem)
{
  if (HoursNumber >= 0 && HoursNumber < 12)
    return AnteMeridiem;
  else
    return PostMeridiem;
}

var fsInitHighslide = function()
{
	fsHighslideLinks.each(function(e)
	{
		if ($(e))
		{
			$(e).stopObserving('click');
			$(e).observe("click", function(e)
			{
				Event.stop(e);
				hs.htmlExpand(this, 
				{ 
					objectType: 'iframe',
                    objectWidth: 830,
                    objectHeight: 1600     
				});
			});	
		}
	});
}

var fsInitRaceCardHighslide = function(container)
{
    container.select('a').each(function(element)
    {
        $(element).stopObserving('click');
        $(element).observe("click", function(e)
        {
            Event.stop(e);
            hs.htmlExpand(this,
            {
                objectType: 'iframe',
                objectWidth: 830,
                objectHeight: 1600,
                headingText: element.readAttribute("name") + ": " + element.innerHTML
            });
        });
    });
}

var fsPopup = {
  open: function(options)
  {
    this.options = {
      url: '#',
      width: 800,
      height: 576,
      name:"_blank",
      location:"no",
      menubar:"no",
      toolbar:"no",
      status:"yes",
      scrollbars:"yes",
      resizable:"yes",
      left:"",
      top:"",
      normal:false
    }
    Object.extend(this.options, options || {});

    if (this.options.normal){
        this.options.menubar = "yes";
        this.options.status = "yes";
        this.options.toolbar = "yes";
        this.options.location = "yes";
    }

    this.options.width = this.options.width < screen.availWidth?this.options.width:screen.availWidth;
    this.options.height=this.options.height < screen.availHeight?this.options.height:screen.availHeight;
    var openoptions = 'width='+this.options.width+',height='+this.options.height+',location='+this.options.location+',menubar='+this.options.menubar+',toolbar='+this.options.toolbar+',scrollbars='+this.options.scrollbars+',resizable='+this.options.resizable+',status='+this.options.status
    if (this.options.top!="")openoptions+=",top="+this.options.top;
    if (this.options.left!="")openoptions+=",left="+this.options.left;
    var openedWindow = window.open(this.options.url, this.options.name,openoptions );
    openedWindow.focus();
    return false;
  }
}
