<!--{
	"Path": "/"
}-->

<div class="left">

<div id="learn">
<a class="popout share">Pop-out</a>
<div class="rootHeading">Try Go</div>
<div class="input">
<textarea spellcheck="false" class="code">// You can edit this code!
// Click here and start typing.
package main

import "fmt"

func main() {
	fmt.Println("Hello, 世界")
}</textarea>
</div>
<div class="output">
<pre>
Hello, 世界
</pre>
</div>
<div class="buttons">
<a class="run" href="#" title="Run this code [shift-enter]">Run</a>
<a class="share" href="#" title="Share this code">Share</a>
<a class="tour" href="http://tour.golang.org/" title="Learn Go from your browser">Tour</a>
</div>
<div class="toys">
<select>
	<option value="hello.go">Hello, World!</option>
	<option value="life.go">Conway's Game of Life</option>
	<option value="fib.go">Fibonacci Closure</option>
	<option value="peano.go">Peano Integers</option>
	<option value="pi.go">Concurrent pi</option>
	<option value="sieve.go">Concurrent Prime Sieve</option>
	<option value="solitaire.go">Peg Solitaire Solver</option>
	<option value="tree.go">Tree Comparison</option>
</select>
</div>
</div>

</div>

<div class="right">

<div id="about">
Go is an open source programming language that makes it easy to build
simple, reliable, and efficient software.
</div>

<div id="gopher"></div>

<a href="/doc/install" id="start">
<span class="big">Download Go</span>
<span class="desc">
Binary distributions available for<br>
Linux, Mac OS X, Windows, and more.
</span>
</a>

</div>

<div style="clear: both"></div>

<div class="left">

<div id="video">
<div class="rootHeading">Featured video</div>
<iframe width="415" height="241" src="//www.youtube.com/embed/ytEkHepK08c" frameborder="0" allowfullscreen></iframe>
</div>

</div>

<div class="right">

<div id="blog">
<div class="rootHeading">Featured articles</div>
<div class="read"><a href="http://blog.golang.org/">Read more</a></div>
</div>

</div>

<div style="clear: both;"></div>

<script type="text/javascript">

function readableTime(t) {
	var m = ["January", "February", "March", "April", "May", "June", "July",
		"August", "September", "October", "November", "December"];
	var p = t.substring(0, t.indexOf("T")).split("-");
	var d = new Date(p[0], p[1]-1, p[2]);
	return d.getDate() + " " + m[d.getMonth()] + " " + d.getFullYear();
}

function feedLoaded(result) {
	var blog = document.getElementById("blog");
	var read = blog.getElementsByClassName("read")[0];
	for (var i = 0; i < result.length && i < 2; i++) {
		var entry = result[i];
		var title = document.createElement("a");
		title.className = "title";
		title.href = entry.Link;
		title.innerHTML = entry.Title;
		blog.insertBefore(title, read);
		var extract = document.createElement("div");
		extract.className = "extract";
		extract.innerHTML = entry.Summary;
		blog.insertBefore(extract, read);
		var when = document.createElement("div");
		when.className = "when";
		when.innerHTML = "Published " + readableTime(entry.Time);
		blog.insertBefore(when, read);
	}
}

window.initFuncs.push(function() {
	// Set up playground if enabled.
	if (window.playground) {
		window.playground({
			"codeEl":        "#learn .code",
			"outputEl":      "#learn .output",
			"runEl":         "#learn .run",
			"shareEl":       "#learn .share",
			"shareRedirect": "http://play.golang.org/p/",
			"toysEl":        "#learn .toys select"
		});
	} else {
		$('#learn').hide()
	}

	// Load blog feed.
	$('<script/>').attr('text', 'text/javascript')
		.attr('src', 'http://blog.golang.org/.json?jsonp=feedLoaded')
		.appendTo('body');

	// Set the video at random.
	var videos = [
		{h: 241, s: "//www.youtube.com/embed/ytEkHepK08c"}, // Tour of Go
		{h: 241, s: "//www.youtube.com/embed/f6kdp27TYZs"}, // Concurrency Patterns
		{h: 233, s: "//player.vimeo.com/video/69237265"}    // Simple environment
	];
	var v = videos[Math.floor(Math.random()*videos.length)];
	$('#video iframe').attr('height', v.h).attr('src', v.s);
});

</script>
