/*
	substituir todas as tag capitais por lower case
	<[A-Z]+|<\/[A-Z]+
	cpf: 17488598890
	
*/


/* Copyright (c) 2008
 * Author:
 * 	rogério sampaio
 * License:
 *	GPL-LICENSE
 */

//"tstart" is a temporary var. Must be removed before shipping
if	( !window.tstart )
{
	window.tstart	= new Date().getTime();
}
function jsRoger( obj, selector) 
{
	return jsRoger.GetObj( obj, selector);
}
jsRoger.author	= "rogério sampaio";
jsRoger.version	= "4.5.25";






jsRoger.Date			= 
{
	en:
	{
		months:		["January",	"February",		"March",		"April",		"May",			"June",			"July",		"August",		"September",	"October",	"November",	"December"],
		weekdays:	["Sunday",	"Monday",		"Tuesday",		"Wednesday",	"Thursday",		"Friday",		"Saturday"]
	},
	pt:
	{
		months:		["janeiro",	"Fevereiro",	"Mar&#231;o",		"Abril",		"Maio",			"junho",		"Julho",	"Agosto",		"Setembro",		"Outubro",	"Novembro",	"Dezembro"],
		weekdays:	["Domingo",	"Segunda-feira","Ter&#231;a-feira",	"Quarta-feira",	"Quinta-feira",	"Sexta-feira",	"S&#225;bado"]
	}
}



jsRoger.International	= 
{
	language:				'pt',
	dateLongFormat:			'%Y, %M %e - %W %T',
	dateShortFormat:		'%Y, %b %e - %T',
	thousandSeparator:		'.',
	decimalSeparator:		',',
	decimalWidth:			2,
	currencySimbol:			'R$'
}



jsRoger.Debug			= 
{
	displayErrors:		false,
	showWarnings:		false,
	alertOnDuplicates:	false
}


DEFAULT_SCROLL_SPEED			= 80;
DEFAULT_FRAMES_PER_SECOND		= 30;





jsRoger.Array					= {};
jsRoger.Color					= {};
jsRoger.Document				= {};
jsRoger.Element					= {SMP:{}};
jsRoger.Function				= {};
jsRoger.Math					= {};
jsRoger.Number					= {};
jsRoger.Object					= {};
jsRoger.Server					= {};
jsRoger.String					= {};
jsRoger.Transition				= {};
jsRoger.GUI						= {};
jsRoger.Window					= {};

SELECT							= "SELECT";
OPTION							= "OPTION";
INPUT							= "INPUT";
TABLE							= "TABLE";
TBODY                           = "TBODY";
TR                              = "TR";
TD                              = "TD";
DIV                             = "DIV";
SPAN                            = "SPAN";
IMG								= "IMG";
A                               = "A";
B                               = "B";

HORIZONTAL_ORIENTATION			= "horizontal";
VERTICAL_ORIENTATION			= "vertical";

LEFT							= "left";
TOP								= "top";
RIGHT							= "right";
BOTTOM							= "bottom";
ABSOLUTE_POSITION				= "absolute";
RELATIVE_POSITION				= "relative";


SIZE_REGULAR					= "regular";
SIZE_SMALL						= "small";
SIZE_MINI						= "mini";
SIZE_LARGE						= "large";
TEXT_NODE						= 3;
STRING							= "string";
NUMBER							= "number";
ARRAY							= "array";
OBJECT							= "object";
FUNCTION						= "function";

jsRoger.Element.methods			= {};






























/****************************************** jsRoger.GetObj( obj) ******************************************************/

jsRoger.GetObj	= function ( obj, selector)
{
	if	( typeof obj == STRING )
	{
		obj		= document.getElementById(obj);
	}
	if	(!obj)
	{
		return null;
	}
	
	if	( obj == window )
	{
		if	( jsRoger.Element.methods.addEvent)		{ window.addEvent	= jsRoger.Element.methods.addEvent;			}
		if	( jsRoger.Element.methods.removeEvent)	{ window.addEvent	= jsRoger.Element.methods.removeEvent;		}
		
		return obj;
	}
	
	
	
	if	( !obj.jsRogerReady && typeof obj == OBJECT )
	{
		jsRoger.Object.merge( obj, jsRoger.Element.methods);
		obj.jsRogerReady		= true;
	}
	
	if ( selector )
	{
		if ( !jsRoger.Element.GetElementsBySelector && jsRoger.Debug.showWarnings)
		{
			alert( 'A biblioteca "jsRoger.Element.GetElementsBySelector" é necessária para se executar a função "jsRoger( obj, selector)."')
		}
		else
		{
			return jsRoger.Element.GetElementsBySelector( obj, selector);
		}
		
	}
	
	
	return obj;
}






/*
	dollar function
*/

if ( !window.$ )
{
	window.$	= function ( obj)
	{
		if	( typeof obj == STRING )
			return jsRoger(obj);
		else
			return obj;
	};
}





/**
 * root path
*/

jsRoger.root	= function()
{
	for	( var i=0, crr, oScripts=document.getElementsByTagName("SCRIPT"); i<oScripts.length; i++)
	{
		crr	= oScripts[i].src.toLowerCase();
		if	( crr.substring( crr.length-10) == "jsroger.js" )
		{
			return oScripts[i].src.substring( 0, crr.length-10);
		}
	}
	
	return "";
}();









/****************************************** browser sniffer ********************************************************/

//Browser sniffer referencied by window and document objects
jsRoger.browser	= {};
if		( window.ActiveXObject )
{
	jsRoger.browser.msie	= true;
	jsRoger.browser.version	= window.XMLHttpRequest? 7: document.getBoundingClientRects?6:5.5;
	
	if	( window.XMLHttpRequest )
	{
		jsRoger.browser.msie7			= true;
	}
	else
	{
		jsRoger.browser.msie6AndBellow	= true;
	}
	
	
	//fixes image cache (css) for msie 5.5, 6
	if	( !window.XMLHttpRequest )
	{
		try
		{
			document.execCommand("BackgroundImageCache", false, true);
		}
		catch(e){};	
	}
}
else if	( window.opera)
{
	jsRoger.browser.opera	= true;
}
else if	(document.childNodes && !document.all && !navigator.taintEnabled )
{
	jsRoger.browser.safari	= true;
	jsRoger.browser.version	= !!(document.evaluate) ? "420" : "419";
}
else if	( document.createElementNS != null)
{
	jsRoger.browser.mozilla	= true;
}






















///////////////////////////////////////////// utilities //////////////////////////////////////////////////////
//some utilities
window.$now	= function( yyyy, mm, dd, h, min, secs)
{
	var t	= new Date();
	if	( yyyy )	t.setYear( yyyy);
	if	( mm )		t.setMonth( mm);
	if	( dd )		t.setDate( dd);
	if	( h )		t.setHours( h);
	if	( min )		t.setMinutes( min);
	if	( secs )	t.setSeconds( secs);
	
	return t.getTime();
}
Array.prototype.isArray			= true;
String.prototype.isString		= true;
Number.prototype.isNumber		= true;
Function.prototype.isFunction	= true;

/*END*/











// if	( $now(2008,5,16,   1)  <  $now() )
// {
// 	var sync	= 
// 	[
// 	];
// 	
// 	alert("Há arquivos a serem sincronizados!");
// 	alert( sync.join("\n") );
// }






jsRoger.addPngFix	= function()
{
	if	( jsRoger.browser.msie )
	{
		var styleHTML	= '<style type="text/css" >';
		
		for	( var i=0; i<arguments.length; i++)
		{
			styleHTML	+= arguments[i] +", ";
		}
		
		styleHTML	= styleHTML.substring( 0, styleHTML.length-2);
		
		styleHTML	+= " { behavior: url("+ jsRoger.root +"iepngfix.htc)}; ";
		
		
		styleHTML	+= "</style>";
		
		document.write( styleHTML);
	}
}









/*jsRoger.Include remove from here*/
jsRoger.Include	= function( )
{
	var urls	= [];
	for	( var i=0; i<arguments.length; i++)
	{
		urls[i]	= arguments[i];
	}
	
	for	( var i=0; i<urls.length; i++)
	{
		var parsedURL	= jsRoger.Include.ParseUrl( urls[i]),
			sURL		= parsedURL[0],
			jsURL		= parsedURL[1],
			cssURL		= parsedURL[2],
			url			= parsedURL[3];
		
		
		if	( !jsRoger.Include.filesloaded[urls[i]] )
		{
			jsRoger.Include.filesloaded[urls[i]]	= {};
			jsRoger.Include.count++;
			
			
// 			if	( window.loaded || ( jsRoger.Server.Asset&&jsRoger.Server.HttpRequest) )
			if	( jsRoger.Server.Asset && jsRoger.Server.HttpRequest )
			{
// 				alert(4444 +"\n"+ urls[i] +"\n\n"+ jsRoger.Include.files.length +"\n"+ jsRoger.Include.files.join("\n"))
				new jsRoger.Server.Asset( urls[i]);
			}
			else if	( jsURL )
			{
				var includedInParent	= false;
				try
				{
					//checa a existência de algum arquivo no cache de algum parent window
					if	( parent != window && parent.jsRoger && parent.jsRoger.Server.Asset && parent.jsRoger.Server.Asset[urls[i]] && parent.jsRoger.Server.Asset[urls[i]].content)
					{
// 						alert(1 +"\n"+ urls[i] +"\n\n"+ (jsRoger.Include.files.length+1) +"\n"+ jsRoger.Include.files.sort().join("\n"))
						document.write("<scr" + "ipt type=\"text/Javascript\" id=\""+ urls[i] +"\" >"+ parent.jsRoger.Server.Asset[urls[i]].content +"</scr" + "ipt>");
						includedInParent	= true;
					}
				}
				catch(e)
				{
					if	( jsRoger.Debug.displayErrors)
					{
						throw new Error("Erro ao tentar acessar o objeto \"parent\"!");
					}
				}
				if	( !includedInParent)
				{
					if	( jsRoger.Server.HttpRequest && jsRoger.Server.Asset)
					{
// 						alert(22 +"\n"+ urls[i] +"\n\n"+ (jsRoger.Include.files.length+1) +"\n"+ jsRoger.Include.files.join("\n"))
						new jsRoger.Server.Asset(urls[i]);
					}
					else
					{
// 						alert(333 +"\n"+ urls[i] +"\n\n"+ (jsRoger.Include.files.length+1) +"\n"+ jsRoger.Include.files.join("\n"))
						document.write("<scr" + "ipt type=\"text/Javascript\" id=\""+ urls[i] +"\" src=\""+ jsURL +"\" ></scr" + "ipt>");
					}
				}
// 				alert( urls[i])
				jsRoger.Include.filesloaded[urls[i]].type		= "js";
				jsRoger.Include.filesloaded[urls[i]].url		= jsURL;
				
				jsRoger.Include.missing.push( jsURL);
			}
			else if	( cssURL)
			{
				document.write('<link rel="stylesheet" type="text/css" href="'+ cssURL +'" />');
				
				
				jsRoger.Include.filesloaded[urls[i]].type		= "css";
				jsRoger.Include.filesloaded[urls[i]].url		= cssURL;
				jsRoger.Include.files.push( cssURL);
			}
		}
		else if	( jsRoger.Debug.alertOnDuplicates )
		{
			alert( "The following package \""+ urls[i] +"\" has already been loaded!" );
		}
	}
}
jsRoger.Include.count		= 1;
jsRoger.Include.ParseUrl	= function( url)
{
	var sURL	= null;
	var cssURL	= null;
	var jsURL	= null;
	
	if	( url.substring( url.length-4,url.length).toLowerCase() == ".css" )
	{
		cssURL	= jsRoger.root + url;
		sURL	= cssURL.toLowerCase();
	}
	else
	{
		if	( url.substring( url.length-3,url.length).toLowerCase() == ".js" )
		{
			jsURL	= jsRoger.root + url;
			sURL	= jsURL.toLowerCase();
		}
		else
		{
			if	( url.indexOf(".*") > -1 )
			{
				var nome	= url.substring(0, url.indexOf("."));
				var files	= jsRoger.Include[nome];
				for	( var f=1; f<files.length; f++)
				{
					urls.push( nome +"."+ files[f]);
				}
				url	= nome +"."+ files[0];
			}
			
			
			if	( url.indexOf(".") == -1 )
			{
				url		= url +"."+ url;
			}
			else
			{
				url		= url + url.substring( url.lastIndexOf("."));
			}
			
			jsURL	= jsRoger.root + url.replace(/\./g, "/") +".js";
			sURL	= jsURL.toLowerCase();
		}
	}
	sURL	= sURL.replace( /\//g, "_");
	sURL	= sURL.replace( /\./g, "D");
	
	return [ sURL, jsURL, cssURL, url];
}
jsRoger.Include.filesloaded			= [];
//to retrieve all files loaded, just type "jsRoger.Include.files.join('\n')"
jsRoger.Include.files				= ["jsRoger.js"];
jsRoger.Include.missing				= [];

//este precisa ser o primeiro, visto que todos os protótipos o utilizam
jsRoger.Include("Array.remove");
jsRoger.Include("Object.merge");



//jsRoger.Include.GenerateMainFile
jsRoger.Include.GenerateMainFile	= function()
{
	
	document.body.style.padding	= "0px";
	document.body.style.margin	= "0px";
	
	
	
	jsRoger.Include.GenerateMainFile.loading		= true;
	jsRoger.Include.GenerateMainFile.content		= [];
	jsRoger.Include.GenerateMainFile.jsContent		= [];
	jsRoger.Include.GenerateMainFile.cssContent		= [];
	jsRoger.Include.GenerateMainFile.oldLength		= jsRoger.Include.files.length;
	
	var len	= jsRoger.Include.GenerateMainFile.oldLength;
	for	( var i=0, files=jsRoger.Include.files; i<len; i++)
	{
		
		var crr	= files[i];
		var type;
		
		if	( crr.substring( crr.length-4).toLowerCase() == ".css" )
		{
			crr		= crr;
			type	= "css";
		}
		else
		{
			if	( crr.substring( crr.length-3,crr.length).toLowerCase() == ".js" )
			{
				crr	= jsRoger.root + crr;
			}
			else
			{
				if	( crr.indexOf(".") == -1 )
				{
					crr		= crr +"."+ crr;
				}
				else
				{
					crr		= crr + crr.substring( crr.lastIndexOf("."));
				}
				crr		= jsRoger.root + crr.replace(/\./g, "/") +".js";
			}
			type	= "js";
		}
		
		
		
		
		if	( !jsRoger.Server.HttpRequest)
		{
			alert('"jsRoger.ServerHttpRequest" file missing!');
			return;
		}
		
		var newRequest	= new jsRoger.Server.HttpRequest( crr, jsRoger.Server.GET, jsRoger.Server.ASYNCHRONIZED);
		
		newRequest.type	= type;
		
		
		newRequest.onError	= function()
		{
			alert('O arquivo "'+ this.url +'" não pode ser carregado!\nVerifique a mensagem de erro abaixo e tente solucionar o problema.\n-------------\n'+ this.responseText);
		}
		newRequest.onLoad	= function()
		{
			if	( this.type == "css" )
			{
				this.responseText	= '<style source="jsRoger" version="'+ jsRoger.version +'" >'+ this.responseText +'</style>';
				jsRoger.Include.GenerateMainFile.cssContent.push( this.responseText );
			}
			else
			{
				if	( this.responseText.indexOf("/*jsRoger.Include remove from here*/") > -1 )
				{
					this.responseText	= this.responseText.substring(0, this.responseText.indexOf("/*jsRoger.Include remove from here*/"));
				}
				
				this.responseText	= '<script type="text/Javascript" source="jsRoger" version="'+ jsRoger.version +'" >'+ this.responseText +'</script>';
				jsRoger.Include.GenerateMainFile.jsContent.push( this.responseText);
			}
			jsRoger.Include.GenerateMainFile.length		+= this.responseText.length;
			jsRoger.Include.GenerateMainFile.content.push( this.responseText);
			
			
			if	( (jsRoger.Include.GenerateMainFile.jsContent.length+jsRoger.Include.GenerateMainFile.cssContent.length) == jsRoger.Include.GenerateMainFile.oldLength )
			{
				alert
				(
					(jsRoger.Include.GenerateMainFile.jsContent.length+jsRoger.Include.GenerateMainFile.cssContent.length) +" files of "+ jsRoger.Include.GenerateMainFile.oldLength +"\n"+ 
					"\njs files:\t"+ jsRoger.Include.GenerateMainFile.jsContent.length +"\ncss files:\t"+ jsRoger.Include.GenerateMainFile.cssContent.length +" css files."
				)
				
				document.body.innerHTML	= "<textarea style='WIDTH:100%; HEIGHT:100%; ' >"+
					jsRoger.Include.GenerateMainFile.jsContent.join("\n") +"\n\n"+ 
					jsRoger.Include.GenerateMainFile.cssContent.join("\n")+
					"</textarea>";
			}
			
		}
		newRequest.start();
		newRequest	= null;
		
	}
	
	
	
	
	
	
	
}




jsRoger.Debug.onLoad	= function()
{
	
	//stupid opera calls this fx as many times as there are scripts presents
	if	( !jsRoger.browser.opera )
	{
		//this var assures that window has loaded
		window.loaded	= true;
		
		if	( jsRoger.Include.missing.length && !jsRoger.browser.safari)
		{
// 			alert("The following file"+ (jsRoger.Include.missing.length>1?"s are":" is") +" missing:\n*\t"+ jsRoger.Include.missing.join("\n*\t"));
		}
		jsRoger.Include.files.shift();
		jsRoger.Include.files[0]	= "jsRoger.js";
	}
}


////////////////////////////////////////////////////// Debug ///////////////////////////////////////////////////////////
//Display error messages
window.onerror	= function ( msg, url, line)
{
	if	( jsRoger.Debug.displayErrors )
	{
		alert( "Error message:\n\t"+ msg +"\nline:\t"+ line +"\n\nurl:\t"+ url );
	}
	return false;
}
/*END*/


//Se estiver faltando algum arquivo...
if	( window.addEventListener )
{
	window.addEventListener( "load", jsRoger.Debug.onLoad, true);
}
else
{
	window.attachEvent( "onload", jsRoger.Debug.onLoad);
}
