if (typeof Fly == 'undefined')
{
	Fly = { };
}

Fly.nbsp = '\xA0';

Fly.randomId = function(element)
{
	var id = 'fly-'+Math.floor(Math.random()*1000000000);

	if (element)
	{
		element.id = id;
	}

	return id;
};

Fly.luhnCheck = function(cardNumber)
{
	var no_digit = cardNumber.length;
	var oddoeven = no_digit & 1;
	var sum = 0;

	for (var count = 0; count < no_digit; count++)
	{
		var digit = parseInt(cardNumber.charAt(count));

		if (!((count & 1) ^ oddoeven))
		{
			digit *= 2;

			if (digit > 9) digit -= 9;
		}
		sum += digit;
	}

	var result = (sum % 10 == 0);
	
	if (!result)
	{
		JSLog.debug("Luhn check failed: " + cardNumber);
	}

	return result;
};

Fly.disableEnterSubmit = function()
{
	//Event.observe(document, "keypress", function(evt)
	var oldhandler = document.onkeypress;

	document.onkeypress = function(evt)
	{
		var evt = (evt) ? evt : ((event) ? event : null);
		var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
		if ((evt.keyCode == 13) && (node.type=="text"))  {return false;}
		if (oldhandler) return oldhandler.call(evt);
	};
};

Fly.moneyString = function(p)
{
        if (p && !isUndef(p.rounded))
        {
                if (!isUndef(p.scale))
        {
                        var scale = Number(p.scale);
                        if (!isNaN(scale))
                        {
                                var rounded = Number(p.rounded);

                                if (rounded >= 0)
                                {
                                        return p.symbol + rounded.toFixed(scale);
                                }
                                else
                                {
                                        return "-" + p.symbol + (0-rounded).toFixed(scale);
                                }
                        }
                }
                else
                {
                        return p.symbol + p.rounded;
                }
        }
        return '';
}

Fly.removeEnclosingTag = function(elem, tag)
{
        while (elem && elem.tagName != tag) elem = elem.parentNode;

        if (elem) elem.parentNode.removeChild(elem);
};

Fly.isInDocument = function(elem)
{
        for (var e=elem;e;e=e.parentNode)
        {
                if (e == document.body) return true;
        }
        return false;
}

Fly.createSearchComponent = function(idBase)
{
        var map = {};

        var component = Fly.Dom.create(
                ["table",{className:"itSearch",cellspacing:"0",cellpadding:"0"},
			["tbody",,
				["tr",,
					["td",{className:"itSearchIcon"},["div"]],
					["td",{className:"itSearchFieldWrapper"},["input",{id:idBase,"=":"input"}]],
					["td",{className:"itSearchClear"},["div",{id:idBase+"Clear","=":"clear"}]]
				]
			]
                ], map);

        var input = map.input;

        map.clear.onclick = function()
	{
		input.value = '';

		if (input.onchange) input.onchange.apply(input);
	};

        return component;
};

Fly.displayAmount = function(amount, scale)
{
	if (isNun(scale)) scale = 2;

	amount = Number(amount);
				
	if (amount >= 0)
	{
		return "$" + amount.toFixed(scale);
	}
	else
	{
		return "-$" + (0-amount).toFixed(scale);
	}
};

Fly.fixAllPNG = function()
{
	if (Fly.BrowserDetect.fixPNG)
	{
	   for(var i = 0; i < document.images.length; i = i+1)
	   {
	      $(document.images[i]).fixPNG();
	   }
	}
};

