﻿var _tmplCache = {}
this.parseTemplate = function(str, data) {
    /// <summary>
    /// Client side template parser that uses &lt;#= #&gt; and &lt;# code #&gt; expressions.
    /// and # # code blocks for template expansion.
    /// NOTE: chokes on single quotes in the document in some situations
    ///       use &amp;rsquo; for literals in text and avoid any single quote
    ///       attribute delimiters.
    /// </summary>    
    /// <param name="str" type="string">The text of the template to expand</param>    
    /// <param name="data" type="var">
    /// Any data that is to be merged. Pass an object and
    /// that object's properties are visible as variables.
    /// </param>    
    /// <returns type="string" />  
    var err = "";
    try {
        var func = _tmplCache[str];
        if (!func) {
            var strFunc =
            "var p=[],print=function(){p.push.apply(p,arguments);};" +
                        "with(obj){p.push('" +
            //                        str
            //                  .replace(/[\r\t\n]/g, " ")
            //                  .split("<#").join("\t")
            //                  .replace(/((^|#>)[^\t]*)'/g, "$1\r")
            //                  .replace(/\t=(.*?)#>/g, "',$1,'")
            //                  .split("\t").join("');")
            //                  .split("#>").join("p.push('")
            //                  .split("\r").join("\\'") + "');}return p.join('');";

            str.replace(/[\r\t\n]/g, " ")
               .replace(/'(?=[^#]*#>)/g, "\t")
               .split("'").join("\\'")
               .split("\t").join("'")
               .replace(/<#=(.+?)#>/g, "',$1,'")
               .split("<#").join("');")
               .split("#>").join("p.push('")
               + "');}return p.join('');";

            //alert(strFunc);
            func = new Function("obj", strFunc);
            _tmplCache[str] = func;
        }
        return func(data);
    } catch (e) { err = e.message; }
    return "< # ERROR: " + err + " # >";
}

var _twitterData;

$().ready(function() {
    $('.postBody img').wrap("<div class='blogPhoto'></div>");

    //    $('body').append($('<script type="text/javascript" language="javascript" src="http://friendfeed.com/api/feed/user/ericappel?service=twitter&num=4&callback=ffCallback"></script>'));
    $('#sidebarHeadings a').each(function(i) {
        $(this).click(function() {
            $('#sidebarHeadings a').removeClass('selected');
            $(this).addClass('selected');
            var container = $('#sidebarContentContainer');
            var el = container[0];
            var scrollTween = new Tween(el.style, 'left', Tween.strongEaseOut, parseInt(container.css('left').substring(0, container.css('left').indexOf("px"))), -1 * $('#sidebarViewport').width() * i, 0.5, 'px');
            scrollTween.start();
        });
    }).slice(0,1).addClass('selected');

    var tweets = parseTemplate($("#ffTemplate").html(), { entries: _twitterData });
    $('#ffContent').html(tweets);

});

function ffCallback(results) {
    _twitterData = results.entries;
}