Index: trunk/SimpleTemplateSets/templates/vanilla+authentication/home.mtml
===================================================================
--- trunk/SimpleTemplateSets/templates/vanilla+authentication/home.mtml (revision 891)
+++ trunk/SimpleTemplateSets/templates/vanilla+authentication/home.mtml (revision 891)
@@ -0,0 +1,5 @@
+<mt:IncludeBlock module="wrapper">
+
+    <p><__trans phrase="No entries - authentication example only"></p>
+
+</mt:IncludeBlock>
Index: trunk/SimpleTemplateSets/templates/vanilla+authentication/readme_javascript.txt
===================================================================
--- trunk/SimpleTemplateSets/templates/vanilla+authentication/readme_javascript.txt (revision 891)
+++ trunk/SimpleTemplateSets/templates/vanilla+authentication/readme_javascript.txt (revision 891)
@@ -0,0 +1,38 @@
+<$mt:var name="user-auth" value="signin-content"$>
+// The cookie name to use for storing the blog-side comment session cookie.
+var mtCookieName = "<$mt:UserSessionCookieName$>";
+var mtCookieDomain = "<$mt:UserSessionCookieDomain$>";
+var mtCookiePath = "<$mt:UserSessionCookiePath$>";
+var mtCookieTimeout = <$mt:UserSessionCookieTimeout$>;
+var is_preview;
+var user;
+
+var mtFetchedUser = false;
+function mtFetchUser(cb) // Issues a request to the MT comment script to retrieve the currently logged-in user (if any).
+function mtUpdateSignInWidget(u) // A routine that displays various phrases based upon users authenticated status
+function mtGetUser() // Retrieves an object of the currently logged in user's state. If no user is logged in or cookied, this will return null.
+function mtSetUser(u) // Assigns a user object as the actively logged in user; also saves the user information in a browser cookie.
+function mtSaveUser(f) // Persists a copy of the current user cookie into the browser cookie stash.
+function mtSignIn() // Handles the action of the "Sign in" link. First clears any existing user cookie, then directs to the MT comment script to sign the user in.
+function mtSignInOnClick(sign_in_element) //
+function mtSetUserOrLogin(u) //
+function mtSignOut(entry_id) // Handles sign out from the web site. First clears any existing user cookie, then direts to the MT comment script to sign the user out.
+function mtSignOutOnClick() // Handles the action of the "Sign out" link.
+
+/* Cookie *****************************************************************/
+
+function mtSaveUser(f) // Persists a copy of the current user cookie into the browser cookie stash.
+function mtClearUser() // Clears the blog-side user cookie.
+function mtSetCookie(name, value, expires, path, domain, secure) // Sets a browser cookie.
+function mtGetCookie(name) // Retrieves a browser cookie.
+function mtDeleteCookie(name, path, domain, secure) // Deletes a browser cookie.
+function mtBakeUserCookie(u) // Serializes a user object into a string, suitable for storing as a cookie.
+function mtUnbakeUserCookie(s) // Unserializes a user cookie and returns a user object with the restored state.
+
+/* Utility Functions *****************************************************************/
+
+function mtFireEvent(eventName,param) // Calls the event named, if there are handlers for it.
+function mtFixDate(date) // 
+function mtEscapeJS(s) // Simple function that escapes single quote characters for storing in a cookie.
+function mtUnescapeJS(s) // Simple function that unescapes single quote characters that were stored in a cookie.
+function mtAttachEvent(eventName,func) // A utility function for assigning/adding handlers to window events.
Index: trunk/SimpleTemplateSets/templates/vanilla+authentication/wrapper.mtml
===================================================================
--- trunk/SimpleTemplateSets/templates/vanilla+authentication/wrapper.mtml (revision 891)
+++ trunk/SimpleTemplateSets/templates/vanilla+authentication/wrapper.mtml (revision 891)
@@ -0,0 +1,34 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" id="sixapart-standard">
+<head>
+    <title><$mt:BlogName encode_html="1"$></title>
+    <meta http-equiv="Content-Type" content="text/html; charset=<$mt:PublishCharset$>" />
+    <meta name="generator" content="<$mt:ProductName version="1"$>" />
+    <script type="text/javascript" src="<$mt:Link template="JavaScript"$>"></script>
+</head>
+<body>
+
+    <h1><a href="<$mt:BlogURL$>" accesskey="1"><$mt:BlogName encode_html="1"$></a></h1>
+
+    <div id="signin-content"><a href="javascript:void(0)" onclick="return mtSignInOnClick('signin-content')"><__trans phrase="Sign In"></a></div>
+
+<!-- end header -->
+
+
+    <$mt:Var name="contents"$>
+
+
+<!-- start footer -->
+
+    <p><__trans phrase="_POWERED_BY"> and the Vanilla template set</p>
+
+<script type="text/javascript">
+/* <![CDATA[ */
+mtAttachEvent('usersignin', mtUpdateSignInWidget);
+mtUpdateSignInWidget();
+/* ]]> */
+</script>
+
+</body>
+</html>
Index: trunk/SimpleTemplateSets/templates/vanilla+authentication/javascript.mtml
===================================================================
--- trunk/SimpleTemplateSets/templates/vanilla+authentication/javascript.mtml (revision 891)
+++ trunk/SimpleTemplateSets/templates/vanilla+authentication/javascript.mtml (revision 891)
@@ -0,0 +1,486 @@
+<$mt:var name="user-auth" value="signin-content"$>
+
+/* section *****************************************************************/
+
+// The cookie name to use for storing the blog-side comment session cookie.
+var mtCookieName = "<$mt:UserSessionCookieName$>";
+var mtCookieDomain = "<$mt:UserSessionCookieDomain$>";
+var mtCookiePath = "<$mt:UserSessionCookiePath$>";
+var mtCookieTimeout = <$mt:UserSessionCookieTimeout$>;
+var is_preview;
+var user;
+
+<mt:Ignore>
+/***
+ * Issues a request to the MT comment script to retrieve the currently
+ * logged-in user (if any).
+ */
+</mt:Ignore>
+var mtFetchedUser = false;
+<mt:IfBlog>
+function mtFetchUser(cb) {
+    if (!cb) cb = 'mtSetUser';
+    if ( ( cb == 'mtSetUser' ) && mtGetUser() ) {
+        var url = document.URL;
+        url = url.replace(/#.+$/, '');
+        url += '#comments-open';
+        location.href = url;
+    } else {
+        // we aren't using AJAX for this, since we may have to request
+        // from a different domain. JSONP to the rescue.
+        mtFetchedUser = true;
+        var script = document.createElement('script');
+        var ts = new Date().getTime();
+        script.src = '<$mt:CGIPath$><$mt:CommentScript$>?__mode=session_js&blog_id=<$mt:BlogID$>&jsonp=' + cb + '&ts=' + ts;
+        (document.getElementsByTagName('head'))[0].appendChild(script);
+    }
+}
+</mt:IfBlog>
+
+<mt:Ignore>
+/***
+ * A routine that displays various phrases based upon users authenticated status
+ */
+</mt:Ignore>
+
+// <a href="#">Signin</a>
+// You are signed in as <a href="#">UserName</a> (<a href="#">Sign out</a>)
+// You do not have permission to sign in to this blog
+
+function mtUpdateSignInWidget(u) {
+    var el = document.getElementById('<$mt:var name="user-auth"$>');
+    var content = '';
+    var doit = 1;
+    if (!el) return;
+    if (u) {
+        if (u && u.is_authenticated) {
+            user = u;
+            mtSaveUser();
+        } else {
+            // user really isn't logged in; so let's do this!
+            return mtSignIn();
+        }
+    } else {
+        u = mtGetUser();
+    }
+    if (u && u.name) {
+        var url;
+        if (u.is_authenticated) {
+            if (u.is_author) {
+                url = '<$mt:CGIPath$><$mt:CommentScript$>?__mode=edit_profile&blog_id=<$mt:BlogID$>';
+                url += '&static=' + encodeURIComponent( location.href );
+            } else {
+                url = u.url;
+            }
+        } else if (u.url) {
+            url = u.url;
+        } else {
+            url = null;
+        }
+        var content = '<__trans phrase="You are signed in as " escape="js">';
+        if (url)
+            content += '<a href="' + url + '">' + u.name + '</a>';
+        else
+            content += u.name;
+        content += '.  (<a href="javascript:void(0)" onclick="return mtSignOutOnClick()"><__trans phrase="sign out" escape="js"></a>)';
+    } else if (u && u.is_banned) {
+        content = '<__trans phrase="You do not have permission to sign in to this blog." escape="js">';
+    } else {
+    //    content = '<a href="javascript:void(0)" onclick="return mtSignInOnClick(\'<$mt:var name="user-auth"$>\')"><__trans phrase="Sign In" escape="js"></a>';
+        doit = 0;
+    }
+    if (doit) {
+        el.innerHTML = content;
+    }
+}
+
+<mt:Ignore>
+/***
+ * Retrieves an object of the currently logged in user's state.
+ * If no user is logged in or cookied, this will return null.
+ */
+</mt:Ignore>
+function mtGetUser() {
+    if (!user) {
+        var cookie = mtGetCookie(mtCookieName);
+        if (!cookie) return;
+        user = mtUnbakeUserCookie(cookie);
+        if (! user) {
+            user = {};
+            user.is_anonymous = true;
+            user.can_post = false;
+            user.is_author = false;
+            user.is_banned = false;
+            user.is_trusted = false;
+        }
+    }
+    return user;
+}
+
+<mt:Ignore>
+/***
+ * Assigns a user object as the actively logged in user; also saves the
+ * user information in a browser cookie.
+ */
+</mt:Ignore>
+function mtSetUser(u) {
+    if (u) {
+        // persist this
+        user = u;
+        mtSaveUser();
+        // sync up user greeting
+        mtFireEvent('usersignin');
+    }
+}
+
+<mt:Ignore>
+/***
+ * Persists a copy of the current user cookie into the browser cookie stash.
+ */
+</mt:Ignore>
+function mtSaveUser(f) {
+    // We can't reliably store the user cookie during a preview.
+    if (is_preview) return;
+
+    var u = mtGetUser();
+
+    if (f && (!u || u.is_anonymous)) {
+        if ( !u ) {
+            u = {};
+            u.is_authenticated = false;
+            u.can_comment = true;
+            u.is_author = false;
+            u.is_banned = false;
+            u.is_anonymous = true;
+            u.is_trusted = false;
+        }
+        if (f.author != undefined) u.name = f.author.value;
+        if (f.email != undefined) u.email = f.email.value;
+        if (f.url != undefined) u.url = f.url.value;
+    }
+
+    if (!u) return;
+
+    var cache_period = mtCookieTimeout * 1000;
+
+    // cache anonymous user info for a long period if the
+    // user has requested to be remembered
+    if (u.is_anonymous && f && f.bakecookie && f.bakecookie.checked)
+        cache_period = 365 * 24 * 60 * 60 * 1000;
+
+    var now = new Date();
+    mtFixDate(now);
+    now.setTime(now.getTime() + cache_period);
+
+    var cmtcookie = mtBakeUserCookie(u);
+    mtSetCookie(mtCookieName, cmtcookie, now, mtCookiePath, mtCookieDomain,
+        location.protocol == 'https:');
+}
+
+<mt:Ignore>
+/***
+ * Handles the action of the "Sign in" link. First clears any existing
+ * user cookie, then directs to the MT comment script to sign the user in.
+ */
+</mt:Ignore>
+function mtSignIn() {
+    var doc_url = document.URL;
+    doc_url = doc_url.replace(/#.+/, '');
+    var url = '<$mt:SignInLink$>';
+    if (is_preview) {
+        if ( document['comments_form'] ) {
+            var entry_id = document['comments_form'].entry_id.value;
+            url += '&entry_id=' + entry_id;
+        } else {
+            url += '&return_url=<$mt:BlogURL encode_url="1"$>';
+        }
+    } else {
+        url += '&return_url=' + encodeURIComponent(doc_url);
+    }
+    mtClearUser();
+    location.href = url;
+}
+
+function mtSignInOnClick(sign_in_element) {
+    var el;
+    if (sign_in_element) {
+        // display throbber
+        el = document.getElementById(sign_in_element);
+        if (!el)  // legacy MT 4.x element id
+            el = document.getElementById('comment-form-external-auth');
+    }
+    if (el)
+        el.innerHTML = '<__trans phrase="Signing in..." escape="js"> <span class="status-indicator">&nbsp;</span>';
+
+    mtClearUser(); // clear any 'anonymous' user cookie to allow sign in
+    mtFetchUser('mtSetUserOrLogin');
+    return false;
+}
+
+function mtSetUserOrLogin(u) {
+    if (u && u.is_authenticated) {
+        mtSetUser(u);
+    } else {
+        // user really isn't logged in; so let's do this!
+        mtSignIn();
+    }
+}
+
+<mt:Ignore>
+/***
+ * Handles sign out from the web site.
+ * First clears any existing user cookie, then direts to the MT comment
+ * script to sign the user out.
+ */
+</mt:Ignore>
+function mtSignOut(entry_id) {
+    mtClearUser();
+    var doc_url = document.URL;
+    doc_url = doc_url.replace(/#.+/, '');
+    var url = '<$mt:SignOutLink$>';
+    if (is_preview) {
+        if ( document['comments_form'] ) {
+            var entry_id = document['comments_form'].entry_id.value;
+            url += '&entry_id=' + entry_id;
+        } else {
+            url += '&return_url=<$mt:BlogURL encode_url="1"$>';
+        }
+    } else {
+        url += '&return_url=' + encodeURIComponent(doc_url);
+    }
+    location.href = url;
+}
+
+<mt:Ignore>
+/***
+ * Handles the action of the "Sign out" link.
+ */
+</mt:Ignore>
+function mtSignOutOnClick() {
+    mtSignOut();
+    return false;
+}
+
+
+
+/* Cookie *****************************************************************/
+
+<mt:Ignore>
+/***
+ * Persists a copy of the current user cookie into the browser cookie stash.
+ */
+</mt:Ignore>
+function mtSaveUser(f) {
+    // We can't reliably store the user cookie during a preview.
+    if (is_preview) return;
+
+    var u = mtGetUser();
+
+    if (f && (!u || u.is_anonymous)) {
+        if ( !u ) {
+            u = {};
+            u.is_authenticated = false;
+            u.can_comment = true;
+            u.is_author = false;
+            u.is_banned = false;
+            u.is_anonymous = true;
+            u.is_trusted = false;
+        }
+        if (f.author != undefined) u.name = f.author.value;
+        if (f.email != undefined) u.email = f.email.value;
+        if (f.url != undefined) u.url = f.url.value;
+    }
+
+    if (!u) return;
+
+    var cache_period = mtCookieTimeout * 1000;
+
+    // cache anonymous user info for a long period if the
+    // user has requested to be remembered
+    if (u.is_anonymous && f && f.bakecookie && f.bakecookie.checked)
+        cache_period = 365 * 24 * 60 * 60 * 1000;
+
+    var now = new Date();
+    mtFixDate(now);
+    now.setTime(now.getTime() + cache_period);
+
+    var cmtcookie = mtBakeUserCookie(u);
+    mtSetCookie(mtCookieName, cmtcookie, now, mtCookiePath, mtCookieDomain,
+        location.protocol == 'https:');
+}
+
+<mt:Ignore>
+/***
+ * Clears the blog-side user cookie.
+ */
+</mt:Ignore>
+function mtClearUser() {
+    user = null;
+    mtDeleteCookie(mtCookieName, mtCookiePath, mtCookieDomain,
+        location.protocol == 'https:');
+}
+
+<mt:Ignore>
+/***
+ * Sets a browser cookie.
+ */
+</mt:Ignore>
+function mtSetCookie(name, value, expires, path, domain, secure) {
+    if (domain && domain.match(/^\.?localhost$/))
+        domain = null;
+    var curCookie = name + "=" + escape(value) +
+        (expires ? "; expires=" + expires.toGMTString() : "") +
+        (path ? "; path=" + path : "") +
+        (domain ? "; domain=" + domain : "") +
+        (secure ? "; secure" : "");
+    document.cookie = curCookie;
+}
+
+<mt:Ignore>
+/***
+ * Retrieves a browser cookie.
+ */
+</mt:Ignore>
+function mtGetCookie(name) {
+    var prefix = name + '=';
+    var c = document.cookie;
+    var cookieStartIndex = c.indexOf(prefix);
+    if (cookieStartIndex == -1)
+        return '';
+    var cookieEndIndex = c.indexOf(";", cookieStartIndex + prefix.length);
+    if (cookieEndIndex == -1)
+        cookieEndIndex = c.length;
+    return unescape(c.substring(cookieStartIndex + prefix.length, cookieEndIndex));
+}
+
+<mt:Ignore>
+/***
+ * Deletes a browser cookie.
+ */
+</mt:Ignore>
+function mtDeleteCookie(name, path, domain, secure) {
+    if (mtGetCookie(name)) {
+        if (domain && domain.match(/^\.?localhost$/))
+            domain = null;
+        document.cookie = name + "=" +
+            (path ? "; path=" + path : "") +
+            (domain ? "; domain=" + domain : "") +
+            (secure ? "; secure" : "") +
+            "; expires=Thu, 01-Jan-70 00:00:01 GMT";
+    }
+}
+
+<mt:Ignore>
+/***
+ * Serializes a user object into a string, suitable for storing as a cookie.
+ */
+</mt:Ignore>
+function mtBakeUserCookie(u) {
+    var str = "";
+    if (u.name) str += "name:'" + mtEscapeJS(u.name) + "';";
+    if (u.url) str += "url:'" + mtEscapeJS(u.url) + "';";
+    if (u.email) str += "email:'" + mtEscapeJS(u.email) + "';";
+    if (u.auth_type) str += "auth_type:'" + u.auth_type + "';";
+    if (u.is_authenticated) str += "is_authenticated:'1';";
+    if (u.profile) str += "profile:'" + mtEscapeJS(u.profile) + "';";
+    if (u.userpic) str += "userpic:'" + mtEscapeJS(u.userpic) + "';";
+    if (u.sid) str += "sid:'" + mtEscapeJS(u.sid) + "';";
+    str += "is_trusted:'" + (u.is_trusted ? "1" : "0") + "';";
+    str += "is_author:'" + (u.is_author ? "1" : "0") + "';";
+    str += "is_banned:'" + (u.is_banned ? "1" : "0") + "';";
+    str += "can_post:'" + (u.can_post ? "1" : "0") + "';";
+    str += "can_comment:'" + (u.can_comment ? "1" : "0") + "';";
+    str = str.replace(/;$/, '');
+    return str;
+}
+
+<mt:Ignore>
+/***
+ * Unserializes a user cookie and returns a user object with the restored
+ * state.
+ */
+</mt:Ignore>
+function mtUnbakeUserCookie(s) {
+    if (!s) return;
+
+    var u = {};
+    var m;
+    while (m = s.match(/^((name|url|email|auth_type|is_authenticated|profile|userpic|sid|is_trusted|is_author|is_banned|can_post|can_comment):'([^']+?)';?)/)) {
+        s = s.substring(m[1].length);
+        if (m[2].match(/^(is|can)_/)) // boolean fields
+            u[m[2]] = m[3] == '1' ? true : false;
+        else
+            u[m[2]] = mtUnescapeJS(m[3]);
+    }
+    if (u.is_authenticated) {
+        u.is_anonymous = false;
+    } else {
+        u.is_anonymous = true;
+        u.can_post = false;
+        u.is_author = false;
+        u.is_banned = false;
+        u.is_trusted = false;
+    }
+    return u;
+}
+
+/* Utility Functions *****************************************************************/
+
+<mt:Ignore>
+/***
+ * Calls the event named, if there are handlers for it.
+ */
+</mt:Ignore>
+function mtFireEvent(eventName,param) {
+    var fn = window['on' + eventName];
+    if (typeof fn == 'function') return fn(param);
+    return;
+}
+
+function mtFixDate(date) {
+    var skew = (new Date(0)).getTime();
+    if (skew > 0)
+        date.setTime(date.getTime() - skew);
+}
+
+<mt:Ignore>
+/***
+ * Simple function that escapes single quote characters for storing
+ * in a cookie.
+ */
+</mt:Ignore>
+function mtEscapeJS(s) {
+    s = s.replace(/'/g, "&apos;");
+    return s;
+}
+
+<mt:Ignore>
+/***
+ * Simple function that unescapes single quote characters that were
+ * stored in a cookie.
+ */
+</mt:Ignore>
+function mtUnescapeJS(s) {
+    s = s.replace(/&apos;/g, "'");
+    return s;
+}
+
+<mt:Ignore>
+/***
+ * A utility function for assigning/adding handlers to window events.
+ */
+</mt:Ignore>
+function mtAttachEvent(eventName,func) {
+    var onEventName = 'on' + eventName;
+    var old = window[onEventName];
+    if( typeof old != 'function' )
+        window[onEventName] = func;
+    else {
+        window[onEventName] = function( evt ) {
+            old( evt );
+            return func( evt );
+        };
+    }
+}
+
+/* section *****************************************************************/
Index: trunk/SimpleTemplateSets/templates/vanilla+pages/home.mtml
===================================================================
--- trunk/SimpleTemplateSets/templates/vanilla+pages/home.mtml (revision 891)
+++ trunk/SimpleTemplateSets/templates/vanilla+pages/home.mtml (revision 891)
@@ -0,0 +1,14 @@
+<mt:IncludeBlock module="wrapper">
+
+    <mt:Entries>
+        <h2><a href="<$mt:EntryPermalink$>"><$mt:EntryTitle$></a></h2>
+        <p><__trans phrase="By [_1] on [_2]" params="<$mt:EntryAuthorLink$>%%<$mt:EntryDate format="%x %X"$>"></p>
+        <mt:If tag="EntryBody">
+            <$mt:EntryBody$>
+        </mt:If>
+        <mt:If tag="EntryMore" convert_breaks="0">
+            <em><__trans phrase="Continue reading <a href="[_1]">[_2]</a>." params="<$mt:EntryPermalink$>%%<$mt:EntryTitle$>"></em>
+        </mt:If>
+    </mt:Entries>
+
+</mt:IncludeBlock>
Index: trunk/SimpleTemplateSets/templates/vanilla+pages/page.mtml
===================================================================
--- trunk/SimpleTemplateSets/templates/vanilla+pages/page.mtml (revision 891)
+++ trunk/SimpleTemplateSets/templates/vanilla+pages/page.mtml (revision 891)
@@ -0,0 +1,12 @@
+<mt:IncludeBlock module="wrapper">
+
+    <h1><$mt:PageTitle$></h1>
+    <p><__trans phrase="By [_1] on [_2]" params="<$mt:PageAuthorLink$>%%<$mt:PageDate format="%x %X"$>"></p>
+    <mt:If tag="PageBody">
+        <$mt:PageBody$>
+    </mt:If>
+    <mt:If tag="PageMore" convert_breaks="0">
+        <$mt:PageMore$>
+    </mt:If>
+
+</mt:IncludeBlock>
Index: trunk/SimpleTemplateSets/templates/vanilla+pages/wrapper.mtml
===================================================================
--- trunk/SimpleTemplateSets/templates/vanilla+pages/wrapper.mtml (revision 891)
+++ trunk/SimpleTemplateSets/templates/vanilla+pages/wrapper.mtml (revision 891)
@@ -0,0 +1,32 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" id="sixapart-standard">
+<head>
+    <title><$mt:BlogName encode_html="1"$></title>
+    <meta http-equiv="Content-Type" content="text/html; charset=<$mt:PublishCharset$>" />
+    <meta name="generator" content="<$mt:ProductName version="1"$>" />
+</head>
+<body>
+
+    <h1><a href="<$mt:BlogURL$>" accesskey="1"><$mt:BlogName encode_html="1"$></a></h1>
+
+    <h3><__trans phrase="Navigation"></h3>
+    <ul>
+        <li><a href="<$mt:Link template="home"$>"><__trans phrase="Home"></a></li>
+        <mt:Pages>
+            <li><a href="<$mt:PagePermalink$>"><$mt:PageTitle$></a></li>
+        </mt:Pages>
+    </ul>
+
+<!-- end header -->
+
+
+    <$mt:Var name="contents"$>
+
+
+<!-- start footer -->
+
+    <p><__trans phrase="_POWERED_BY"> and the Vanilla template set</p>
+
+</body>
+</html>
Index: trunk/SimpleTemplateSets/templates/vanilla+pages/entry.mtml
===================================================================
--- trunk/SimpleTemplateSets/templates/vanilla+pages/entry.mtml (revision 891)
+++ trunk/SimpleTemplateSets/templates/vanilla+pages/entry.mtml (revision 891)
@@ -0,0 +1,12 @@
+<mt:IncludeBlock module="wrapper">
+
+    <h1><$mt:EntryTitle$></h1>
+    <p><__trans phrase="By [_1] on [_2]" params="<$mt:EntryAuthorLink$>%%<$mt:EntryDate format="%x %X"$>"></p>
+    <mt:If tag="EntryBody">
+        <$mt:EntryBody$>
+    </mt:If>
+    <mt:If tag="EntryMore" convert_breaks="0">
+        <$mt:EntryMore$>
+    </mt:If>
+
+</mt:IncludeBlock>
Index: trunk/SimpleTemplateSets/templates/vanilla+authentication+comments/home.mtml
===================================================================
--- trunk/SimpleTemplateSets/templates/vanilla+authentication+comments/home.mtml (revision 891)
+++ trunk/SimpleTemplateSets/templates/vanilla+authentication+comments/home.mtml (revision 891)
@@ -0,0 +1,14 @@
+<mt:IncludeBlock module="wrapper">
+
+    <mt:Entries>
+        <h2><a href="<$mt:EntryPermalink$>"><$mt:EntryTitle$></a></h2>
+        <p><__trans phrase="By [_1] on [_2]" params="<$mt:EntryAuthorLink$>%%<$mt:EntryDate format="%x %X"$>"></p>
+        <mt:If tag="EntryBody">
+            <$mt:EntryBody$>
+        </mt:If>
+        <mt:If tag="EntryMore" convert_breaks="0">
+            <em><__trans phrase="Continue reading <a href="[_1]">[_2]</a>." params="<$mt:EntryPermalink$>%%<$mt:EntryTitle$>"></em>
+        </mt:If>
+    </mt:Entries>
+
+</mt:IncludeBlock>
Index: trunk/SimpleTemplateSets/templates/vanilla+authentication+comments/comment_response.mtml
===================================================================
--- trunk/SimpleTemplateSets/templates/vanilla+authentication+comments/comment_response.mtml (revision 891)
+++ trunk/SimpleTemplateSets/templates/vanilla+authentication+comments/comment_response.mtml (revision 891)
@@ -0,0 +1,21 @@
+<__trans_section component="commercial">
+<mt:If name="comment_confirmation">
+    <$mt:Var name="page_title" value="<__trans phrase="Confirmation...">"$>
+    <$mt:Var name="message" value="<p><__trans phrase="Your comment has been submitted!"></p>"$>
+<mt:Else name="comment_pending">
+    <$mt:Var name="page_title" value="<__trans phrase="Thank you for commenting.">"$>
+    <$mt:Var name="message" value="<p><__trans phrase="Your comment has been received and held for approval by the blog owner."></p>"$>
+<mt:Else name="comment_error">
+    <$mt:Var name="page_title" value="<__trans phrase="Comment Submission Error">"$>
+    <mt:SetVarBlock name="message"><p><__trans phrase="Your comment submission failed for the following reasons: [_1]" params="<$mt:ErrorMessage$>"></p></mt:SetVarBlock>
+</mt:If>
+<mt:SetVarBlock name="title"><$mt:BlogName encode_html="1"$>: <$mt:Var name="page_title"$></mt:SetVarBlock>
+
+<$mt:Include module="<__trans phrase="Header">"$>
+
+<h1 id="page-title"><$mt:Var name="page_title"$></h1>
+<$mt:Var name="message"$>
+<p><__trans phrase="Return to the <a href="[_1]">original entry</a>." params="<mt:If name="comment_error">javascript:history.back()<mt:Else><$mt:EntryLink$></mt:If>"></p>
+
+<$mt:Include module="<__trans phrase="Footer">"$>
+</__trans_section>
Index: trunk/SimpleTemplateSets/templates/vanilla+authentication+comments/wrapper.mtml
===================================================================
--- trunk/SimpleTemplateSets/templates/vanilla+authentication+comments/wrapper.mtml (revision 891)
+++ trunk/SimpleTemplateSets/templates/vanilla+authentication+comments/wrapper.mtml (revision 891)
@@ -0,0 +1,34 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" id="sixapart-standard">
+<head>
+    <title><$mt:BlogName encode_html="1"$></title>
+    <meta http-equiv="Content-Type" content="text/html; charset=<$mt:PublishCharset$>" />
+    <meta name="generator" content="<$mt:ProductName version="1"$>" />
+    <script type="text/javascript" src="<$mt:Link template="JavaScript"$>"></script>
+</head>
+<body>
+
+    <h1><a href="<$mt:BlogURL$>" accesskey="1"><$mt:BlogName encode_html="1"$></a></h1>
+
+    <div id="signin-content"><a href="javascript:void(0)" onclick="return mtSignInOnClick('signin-content')"><__trans phrase="Sign In"></a></div>
+
+<!-- end header -->
+
+
+    <$mt:Var name="contents"$>
+
+
+<!-- start footer -->
+
+    <p><__trans phrase="_POWERED_BY"> and the Vanilla template set</p>
+
+<script type="text/javascript">
+/* <![CDATA[ */
+mtAttachEvent('usersignin', mtUpdateSignInWidget);
+mtUpdateSignInWidget();
+/* ]]> */
+</script>
+
+</body>
+</html>
Index: trunk/SimpleTemplateSets/templates/vanilla+authentication+comments/entry.mtml
===================================================================
--- trunk/SimpleTemplateSets/templates/vanilla+authentication+comments/entry.mtml (revision 891)
+++ trunk/SimpleTemplateSets/templates/vanilla+authentication+comments/entry.mtml (revision 891)
@@ -0,0 +1,101 @@
+<mt:IncludeBlock module="wrapper">
+
+    <h1><$mt:EntryTitle$></h1>
+    <p><__trans phrase="By [_1] on [_2]" params="<$mt:EntryAuthorLink$>%%<$mt:EntryDate format="%x %X"$>"></p>
+    <mt:If tag="EntryBody">
+        <$mt:EntryBody$>
+    </mt:If>
+    <mt:If tag="EntryMore" convert_breaks="0">
+        <$mt:EntryMore$>
+    </mt:If>
+
+
+    <mt:IfCommentsActive>
+    <div id="comments">
+
+
+        <mt:Comments>
+            <mt:CommentsHeader>
+        <h2 class="comments-header"><__trans phrase="Comments"></h2>
+        <ol class="comments-content">
+            </mt:CommentsHeader>
+            <li>
+                <div class="comment-header">
+                    <$mt:CommentAuthorIdentity$>
+                    <mt:IfCommentParent>
+                        <__trans phrase="[_1] replied to [_2]<a href="[_3]">comment from [_4]</a>[_5]" params="<$mt:CommentAuthorLink$>%%<mt:CommentParent>%%<$mt:CommentLink$>%%<$mt:CommentAuthor$>%%</mt:CommentParent>">
+                    <mt:Else>
+                        <$mt:CommentAuthorLink$>
+                    </mt:IfCommentParent>
+                    | <a href="<$mt:CommentLink$>"><abbr class="published" title="<$mt:CommentDate format_name="iso8601"$>"><$mt:CommentDate$></abbr></a>
+                    <mt:IfCommentsAccepted>
+                    | <$mt:CommentReplyToLink$>
+                    </mt:IfCommentsAccepted>
+                </div>
+                <div class="comment-body">
+                    <$mt:CommentBody$>
+                </div>
+            </li>
+            <mt:CommentsFooter>
+        </ol>
+            </mt:CommentsFooter>
+        </mt:Comments>
+
+
+        <mt:IfCommentsAccepted>
+        <div id="comments-open">
+            <h2 class="comments-open-header"><__trans phrase="Leave a comment"></h2>
+            <div class="comments-open-content">
+                <div id="comment-greeting"></div>
+                <form method="post" action="<$mt:CGIPath$><$mt:CommentScript$>" name="comments_form" id="comments-form" onsubmit="return mtCommentOnSubmit(this)">
+                    <input type="hidden" name="static" value="1" />
+                    <input type="hidden" name="entry_id" value="<$mt:EntryID$>" />
+                    <input type="hidden" name="__lang" value="<$mt:BlogLanguage$>" />
+                    <input type="hidden" name="parent_id" value="<$mt:CommentParentID$>" id="comment-parent-id" />
+                    <input type="hidden" name="armor" value="1" />
+                    <input type="hidden" name="preview" value="" />
+                    <input type="hidden" name="sid" value="" />
+                    <div id="comments-open-data">
+                        <label for="comment-author"><__trans phrase="Name"></label>
+                        <input id="comment-author" name="author" size="30" value="<mt:If name="comment_preview"><$mt:CommentAuthor encode_html="1"$></mt:If>" onfocus="mtCommentFormOnFocus()" />
+
+                        <label for="comment-email"><__trans phrase="Email Address"></label>
+                        <input id="comment-email" name="email" size="30" value="<mt:If name="comment_preview"><$mt:CommentEmail encode_html="1"$></mt:If>" onfocus="mtCommentFormOnFocus()" />
+
+                        <label for="comment-url"><__trans phrase="URL"></label>
+                        <input id="comment-url" name="url" size="30" value="<mt:If name="comment_preview"><$mt:CommentURL encode_html="1"$></mt:If>" onfocus="mtCommentFormOnFocus()" />
+
+                        <input type="checkbox" id="comment-bake-cookie" name="bakecookie" onclick="mtRememberMeOnClick(this)" value="1" accesskey="r" />
+                        <label for="comment-bake-cookie"><__trans phrase="Remember personal info?"></label>
+                    </div>
+                    <div id="comment-form-reply"<mt:IfCommentParent><mt:Else> style="display:none"</mt:IfCommentParent>>
+                        <input type="checkbox" id="comment-reply" name="comment_reply" value="<$mt:CommentParentID$>"<mt:IfCommentParent> checked="checked"</mt:IfCommentParent> onclick="mtSetCommentParentID()" />
+                        <label for="comment-reply" id="comment-reply-label"><mt:IfCommentParent><__trans phrase="Replying to comment from [_1]" params="<mt:CommentParent><$mt:CommentAuthor$></mt:CommentParent>"></mt:IfCommentParent></label>
+                    </div>
+                    <div id="comments-open-text">
+                        <label for="comment-text"><__trans phrase="Comments">
+                        <mt:IfAllowCommentHTML><__trans phrase="(You may use HTML tags for style)"></mt:IfAllowCommentHTML></label>
+                        <textarea id="comment-text" name="text" rows="15" cols="50" onfocus="mtCommentFormOnFocus()"><mt:If name="comment_preview"><$mt:CommentBody autolink="0" sanitize="0" convert_breaks="0" encode_html="1"$></mt:If></textarea>
+                    </div>
+                    <div id="comments-open-captcha"></div>
+                    <div id="comments-open-footer">
+                        <input type="submit" accesskey="v" name="preview_button" id="comment-preview" value="<__trans phrase="Preview">" onclick="this.form.preview.value='1';" />
+                        <input type="submit" accesskey="s" name="post" id="comment-submit" value="<__trans phrase="Submit">" />
+                    </div>
+                </form>
+            </div>
+        </div>
+        <script type="text/javascript">
+        <!--
+        mtAttachEvent("load", mtEntryOnLoad);
+        mtAttachEvent("unload", mtEntryOnUnload);
+        //-->
+        </script>
+        </mt:IfCommentsAccepted>
+
+
+    </div>
+    </mt:IfCommentsActive>
+
+
+</mt:IncludeBlock>
Index: trunk/SimpleTemplateSets/templates/vanilla+authentication+comments/comment_preview.mtml
===================================================================
--- trunk/SimpleTemplateSets/templates/vanilla+authentication+comments/comment_preview.mtml (revision 891)
+++ trunk/SimpleTemplateSets/templates/vanilla+authentication+comments/comment_preview.mtml (revision 891)
@@ -0,0 +1,22 @@
+<__trans_section component="commercial">
+<$mt:Var name="page_layout" value="layout-wm"$>
+<mt:SetVarBlock name="page_title"><__trans phrase="Previewing your Comment"></mt:SetVarBlock>
+<mt:SetVarBlock name="title"><$mt:BlogName encode_html="1"$>: <$mt:Var name="page_title"$></mt:SetVarBlock>
+<mt:SetVarBlock name="html_head">
+    <script type="text/javascript">
+    /* <![CDATA[ */
+    var user = <$mt:UserSessionState$>;
+    var is_preview = true;
+    /* ]]> */
+    </script>
+</mt:SetVarBlock>
+<$mt:Include module="<__trans phrase="Header">" body_class="mt-comment-preview"$>
+
+<h1 id="page-title"><$mt:Var name="page_title"$></h1>
+
+<$mt:Include module="<__trans phrase="Comment Detail">"$>
+
+<$mt:Include module="<__trans phrase="Comments">"$>
+
+<$mt:Include module="<__trans phrase="Footer">"$>
+</__trans_section>
Index: trunk/SimpleTemplateSets/templates/vanilla+authentication+comments/comment_detail.mtml
===================================================================
--- trunk/SimpleTemplateSets/templates/vanilla+authentication+comments/comment_detail.mtml (revision 891)
+++ trunk/SimpleTemplateSets/templates/vanilla+authentication+comments/comment_detail.mtml (revision 891)
@@ -0,0 +1,27 @@
+<__trans_section component="commercial">
+<div class="comment<mt:If name="__odd__"> odd<mt:Else> even</mt:If>"<mt:IfArchiveTypeEnabled archive_type="Individual"> id="comment-<$mt:CommentID$>"</mt:IfArchiveTypeEnabled>>
+    <div class="inner">
+        <div class="comment-header">
+            <div class="asset-meta">
+               <span class="byline">
+                   <$mt:CommentAuthorIdentity$>
+<mt:IfCommentParent>
+                    <__trans phrase="[_1] replied to <a href="[_2]">comment from [_3]</a>" params="<span class="vcard author"><$mt:CommentAuthorLink$></span>%%<mt:CommentParent><$mt:CommentLink$></mt:CommentParent>%%<mt:CommentParent><$mt:CommentAuthor$></mt:CommentParent>">
+<mt:Else>
+                    <span class="vcard author"><$mt:CommentAuthorLink$></span>
+</mt:IfCommentParent>
+                    | <a href="<$mt:CommentLink$>"><abbr class="published" title="<$mt:CommentDate format_name="iso8601"$>"><$mt:CommentDate$></abbr></a>
+<mt:Unless name="comment_preview">
+    <mt:IfCommentsAccepted>
+                    | <$mt:CommentReplyToLink$>
+    </mt:IfCommentsAccepted>
+</mt:Unless>
+               </span>
+            </div>
+        </div>
+        <div class="comment-content">
+            <$mt:CommentBody$>
+        </div>
+    </div>
+</div>
+</__trans_section>
Index: trunk/SimpleTemplateSets/templates/vanilla+authentication+comments/comment_form.mtml
===================================================================
--- trunk/SimpleTemplateSets/templates/vanilla+authentication+comments/comment_form.mtml (revision 891)
+++ trunk/SimpleTemplateSets/templates/vanilla+authentication+comments/comment_form.mtml (revision 891)
@@ -0,0 +1,60 @@
+<mt:IfCommentsAccepted>
+<div class="comments-open" id="comments-open">
+    <h2 class="comments-open-header"><__trans phrase="Leave a comment"></h2>
+    <div class="comments-open-content">
+        <div id="comment-greeting"></div>
+        <form method="post" action="<$mt:CGIPath$><$mt:CommentScript$>" name="comments_form" id="comments-form" onsubmit="return mtCommentOnSubmit(this)">
+            <input type="hidden" name="static" value="1" />
+            <input type="hidden" name="entry_id" value="<$mt:EntryID$>" />
+            <input type="hidden" name="__lang" value="<$mt:BlogLanguage$>" />
+            <input type="hidden" name="parent_id" value="<$mt:CommentParentID$>" id="comment-parent-id" />
+            <input type="hidden" name="armor" value="1" />
+            <input type="hidden" name="preview" value="" />
+            <input type="hidden" name="sid" value="" />
+            <div id="comments-open-data">
+                <div id="comment-form-name">
+                    <label for="comment-author"><__trans phrase="Name"></label>
+                    <input id="comment-author" name="author" size="30" value="<mt:If name="comment_preview"><$mt:CommentAuthor encode_html="1"$></mt:If>" onfocus="mtCommentFormOnFocus()" />
+                </div>
+                <div id="comment-form-email">
+                    <label for="comment-email"><__trans phrase="Email Address"></label>
+                    <input id="comment-email" name="email" size="30" value="<mt:If name="comment_preview"><$mt:CommentEmail encode_html="1"$></mt:If>" onfocus="mtCommentFormOnFocus()" />
+                </div>
+                <div id="comment-form-url">
+                    <label for="comment-url"><__trans phrase="URL"></label>
+                    <input id="comment-url" name="url" size="30" value="<mt:If name="comment_preview"><$mt:CommentURL encode_html="1"$></mt:If>" onfocus="mtCommentFormOnFocus()" />
+                </div>
+<mt:Unless name="comment_preview">
+                <div id="comment-form-remember-me">
+                    <input type="checkbox" id="comment-bake-cookie" name="bakecookie" onclick="mtRememberMeOnClick(this)" value="1" accesskey="r" />
+                    <label for="comment-bake-cookie"><__trans phrase="Remember personal info?"></label>
+                </div>
+</mt:Unless>
+            </div>
+            <div id="comment-form-reply"<mt:IfCommentParent><mt:Else> style="display:none"</mt:IfCommentParent>>
+                <input type="checkbox" id="comment-reply" name="comment_reply" value="<$mt:CommentParentID$>"<mt:IfCommentParent> checked="checked"</mt:IfCommentParent> onclick="mtSetCommentParentID()" />
+                <label for="comment-reply" id="comment-reply-label"><mt:IfCommentParent><__trans phrase="Replying to comment from [_1]" params="<mt:CommentParent><$mt:CommentAuthor$></mt:CommentParent>"></mt:IfCommentParent></label>
+            </div>
+            <div id="comments-open-text">
+                <label for="comment-text"><__trans phrase="Comments">
+                <mt:IfAllowCommentHTML><__trans phrase="(You may use HTML tags for style)"></mt:IfAllowCommentHTML></label>
+                <textarea id="comment-text" name="text" rows="15" cols="50" onfocus="mtCommentFormOnFocus()"><mt:If name="comment_preview"><$mt:CommentBody autolink="0" sanitize="0" convert_breaks="0" encode_html="1"$></mt:If></textarea>
+            </div>
+            <div id="comments-open-captcha"></div>
+            <div id="comments-open-footer">
+                <input type="submit" accesskey="v" name="preview_button" id="comment-preview" value="<__trans phrase="Preview">" onclick="this.form.preview.value='1';" />
+                <input type="submit" accesskey="s" name="post" id="comment-submit" value="<__trans phrase="Submit">" />
+    <mt:If name="comment_preview">
+                <input type="button" name="cancel" id="comment-cancel" value="<__trans phrase="Cancel">" onclick="window.location='<$mt:EntryPermalink$>'" />
+    </mt:If>
+            </div>
+        </form>
+    </div>
+</div>
+<script type="text/javascript">
+<!--
+mtAttachEvent("load", mtEntryOnLoad);
+mtAttachEvent("unload", mtEntryOnUnload);
+//-->
+</script>
+</mt:IfCommentsAccepted>
Index: trunk/SimpleTemplateSets/templates/vanilla+authentication+comments/comments.mtml
===================================================================
--- trunk/SimpleTemplateSets/templates/vanilla+authentication+comments/comments.mtml (revision 891)
+++ trunk/SimpleTemplateSets/templates/vanilla+authentication+comments/comments.mtml (revision 891)
@@ -0,0 +1,22 @@
+<__trans_section component="commercial">
+<mt:IfCommentsActive>
+<div id="comments" class="comments">
+    <mt:If name="comment_preview">
+    <$mt:Include module="<__trans phrase="Comment Form">"$>
+    </mt:If>
+    <mt:Comments>
+        <mt:CommentsHeader>
+    <h2 class="comments-header"><$mt:EntryCommentCount singular="<__trans phrase="1 Comment">" plural="<__trans phrase="# Comments">" none="<__trans phrase="No Comments">"$></h2>
+    <div class="comments-content">
+        </mt:CommentsHeader>
+        <$mt:Include module="<__trans phrase="Comment Detail">"$>
+        <mt:CommentsFooter>
+    </div>
+        </mt:CommentsFooter>
+    </mt:Comments>
+    <mt:Unless name="comment_preview">
+    <$mt:Include module="<__trans phrase="Comment Form">"$>
+    </mt:Unless>
+</div>
+</mt:IfCommentsActive>
+</__trans_section>
Index: trunk/SimpleTemplateSets/templates/vanilla+authentication+comments/javascript.mtml
===================================================================
--- trunk/SimpleTemplateSets/templates/vanilla+authentication+comments/javascript.mtml (revision 891)
+++ trunk/SimpleTemplateSets/templates/vanilla+authentication+comments/javascript.mtml (revision 891)
@@ -0,0 +1,925 @@
+<$mt:var name="user-auth" value="signin-content"$>
+
+/* section *****************************************************************/
+
+// The cookie name to use for storing the blog-side comment session cookie.
+var mtCookieName = "<$mt:UserSessionCookieName$>";
+var mtCookieDomain = "<$mt:UserSessionCookieDomain$>";
+var mtCookiePath = "<$mt:UserSessionCookiePath$>";
+var mtCookieTimeout = <$mt:UserSessionCookieTimeout$>;
+var is_preview;
+var user;
+
+<mt:Ignore>
+/***
+ * Issues a request to the MT comment script to retrieve the currently
+ * logged-in user (if any).
+ */
+</mt:Ignore>
+var mtFetchedUser = false;
+<mt:IfBlog>
+function mtFetchUser(cb) {
+    if (!cb) cb = 'mtSetUser';
+    if ( ( cb == 'mtSetUser' ) && mtGetUser() ) {
+        var url = document.URL;
+        url = url.replace(/#.+$/, '');
+        url += '#comments-open';
+        location.href = url;
+    } else {
+        // we aren't using AJAX for this, since we may have to request
+        // from a different domain. JSONP to the rescue.
+        mtFetchedUser = true;
+        var script = document.createElement('script');
+        var ts = new Date().getTime();
+        script.src = '<$mt:CGIPath$><$mt:CommentScript$>?__mode=session_js&blog_id=<$mt:BlogID$>&jsonp=' + cb + '&ts=' + ts;
+        (document.getElementsByTagName('head'))[0].appendChild(script);
+    }
+}
+</mt:IfBlog>
+
+<mt:Ignore>
+/***
+ * A routine that displays various phrases based upon users authenticated status
+ */
+</mt:Ignore>
+
+// <a href="#">Signin</a>
+// You are signed in as <a href="#">UserName</a> (<a href="#">Sign out</a>)
+// You do not have permission to sign in to this blog
+
+function mtUpdateSignInWidget(u) {
+    var el = document.getElementById('<$mt:var name="user-auth"$>');
+    var content = '';
+    var doit = 1;
+    if (!el) return;
+    if (u) {
+        if (u && u.is_authenticated) {
+            user = u;
+            mtSaveUser();
+        } else {
+            // user really isn't logged in; so let's do this!
+            return mtSignIn();
+        }
+    } else {
+        u = mtGetUser();
+    }
+    if (u && u.name) {
+        var url;
+        if (u.is_authenticated) {
+            if (u.is_author) {
+                url = '<$mt:CGIPath$><$mt:CommentScript$>?__mode=edit_profile&blog_id=<$mt:BlogID$>';
+                url += '&static=' + encodeURIComponent( location.href );
+            } else {
+                url = u.url;
+            }
+        } else if (u.url) {
+            url = u.url;
+        } else {
+            url = null;
+        }
+        var content = '<__trans phrase="You are signed in as " escape="js">';
+        if (url)
+            content += '<a href="' + url + '">' + u.name + '</a>';
+        else
+            content += u.name;
+        content += '.  (<a href="javascript:void(0)" onclick="return mtSignOutOnClick()"><__trans phrase="sign out" escape="js"></a>)';
+    } else if (u && u.is_banned) {
+        content = '<__trans phrase="You do not have permission to sign in to this blog." escape="js">';
+    } else {
+    //    content = '<a href="javascript:void(0)" onclick="return mtSignInOnClick(\'<$mt:var name="user-auth"$>\')"><__trans phrase="Sign In" escape="js"></a>';
+        doit = 0;
+    }
+    if (doit) {
+        el.innerHTML = content;
+    }
+}
+
+<mt:Ignore>
+/***
+ * Retrieves an object of the currently logged in user's state.
+ * If no user is logged in or cookied, this will return null.
+ */
+</mt:Ignore>
+function mtGetUser() {
+    if (!user) {
+        var cookie = mtGetCookie(mtCookieName);
+        if (!cookie) return;
+        user = mtUnbakeUserCookie(cookie);
+        if (! user) {
+            user = {};
+            user.is_anonymous = true;
+            user.can_post = false;
+            user.is_author = false;
+            user.is_banned = false;
+            user.is_trusted = false;
+        }
+    }
+    return user;
+}
+
+<mt:Ignore>
+/***
+ * Assigns a user object as the actively logged in user; also saves the
+ * user information in a browser cookie.
+ */
+</mt:Ignore>
+function mtSetUser(u) {
+    if (u) {
+        // persist this
+        user = u;
+        mtSaveUser();
+        // sync up user greeting
+        mtFireEvent('usersignin');
+    }
+}
+
+<mt:Ignore>
+/***
+ * Persists a copy of the current user cookie into the browser cookie stash.
+ */
+</mt:Ignore>
+function mtSaveUser(f) {
+    // We can't reliably store the user cookie during a preview.
+    if (is_preview) return;
+
+    var u = mtGetUser();
+
+    if (f && (!u || u.is_anonymous)) {
+        if ( !u ) {
+            u = {};
+            u.is_authenticated = false;
+            u.can_comment = true;
+            u.is_author = false;
+            u.is_banned = false;
+            u.is_anonymous = true;
+            u.is_trusted = false;
+        }
+        if (f.author != undefined) u.name = f.author.value;
+        if (f.email != undefined) u.email = f.email.value;
+        if (f.url != undefined) u.url = f.url.value;
+    }
+
+    if (!u) return;
+
+    var cache_period = mtCookieTimeout * 1000;
+
+    // cache anonymous user info for a long period if the
+    // user has requested to be remembered
+    if (u.is_anonymous && f && f.bakecookie && f.bakecookie.checked)
+        cache_period = 365 * 24 * 60 * 60 * 1000;
+
+    var now = new Date();
+    mtFixDate(now);
+    now.setTime(now.getTime() + cache_period);
+
+    var cmtcookie = mtBakeUserCookie(u);
+    mtSetCookie(mtCookieName, cmtcookie, now, mtCookiePath, mtCookieDomain,
+        location.protocol == 'https:');
+}
+
+<mt:Ignore>
+/***
+ * Handles the action of the "Sign in" link. First clears any existing
+ * user cookie, then directs to the MT comment script to sign the user in.
+ */
+</mt:Ignore>
+function mtSignIn() {
+    var doc_url = document.URL;
+    doc_url = doc_url.replace(/#.+/, '');
+    var url = '<$mt:SignInLink$>';
+    if (is_preview) {
+        if ( document['comments_form'] ) {
+            var entry_id = document['comments_form'].entry_id.value;
+            url += '&entry_id=' + entry_id;
+        } else {
+            url += '&return_url=<$mt:BlogURL encode_url="1"$>';
+        }
+    } else {
+        url += '&return_url=' + encodeURIComponent(doc_url);
+    }
+    mtClearUser();
+    location.href = url;
+}
+
+function mtSignInOnClick(sign_in_element) {
+    var el;
+    if (sign_in_element) {
+        // display throbber
+        el = document.getElementById(sign_in_element);
+        if (!el)  // legacy MT 4.x element id
+            el = document.getElementById('comment-form-external-auth');
+    }
+    if (el)
+        el.innerHTML = '<__trans phrase="Signing in..." escape="js"> <span class="status-indicator">&nbsp;</span>';
+
+    mtClearUser(); // clear any 'anonymous' user cookie to allow sign in
+    mtFetchUser('mtSetUserOrLogin');
+    return false;
+}
+
+function mtSetUserOrLogin(u) {
+    if (u && u.is_authenticated) {
+        mtSetUser(u);
+    } else {
+        // user really isn't logged in; so let's do this!
+        mtSignIn();
+    }
+}
+
+<mt:Ignore>
+/***
+ * Handles sign out from the web site.
+ * First clears any existing user cookie, then direts to the MT comment
+ * script to sign the user out.
+ */
+</mt:Ignore>
+function mtSignOut(entry_id) {
+    mtClearUser();
+    var doc_url = document.URL;
+    doc_url = doc_url.replace(/#.+/, '');
+    var url = '<$mt:SignOutLink$>';
+    if (is_preview) {
+        if ( document['comments_form'] ) {
+            var entry_id = document['comments_form'].entry_id.value;
+            url += '&entry_id=' + entry_id;
+        } else {
+            url += '&return_url=<$mt:BlogURL encode_url="1"$>';
+        }
+    } else {
+        url += '&return_url=' + encodeURIComponent(doc_url);
+    }
+    location.href = url;
+}
+
+<mt:Ignore>
+/***
+ * Handles the action of the "Sign out" link.
+ */
+</mt:Ignore>
+function mtSignOutOnClick() {
+    mtSignOut();
+    return false;
+}
+
+
+
+/* Cookie *****************************************************************/
+
+<mt:Ignore>
+/***
+ * Persists a copy of the current user cookie into the browser cookie stash.
+ */
+</mt:Ignore>
+function mtSaveUser(f) {
+    // We can't reliably store the user cookie during a preview.
+    if (is_preview) return;
+
+    var u = mtGetUser();
+
+    if (f && (!u || u.is_anonymous)) {
+        if ( !u ) {
+            u = {};
+            u.is_authenticated = false;
+            u.can_comment = true;
+            u.is_author = false;
+            u.is_banned = false;
+            u.is_anonymous = true;
+            u.is_trusted = false;
+        }
+        if (f.author != undefined) u.name = f.author.value;
+        if (f.email != undefined) u.email = f.email.value;
+        if (f.url != undefined) u.url = f.url.value;
+    }
+
+    if (!u) return;
+
+    var cache_period = mtCookieTimeout * 1000;
+
+    // cache anonymous user info for a long period if the
+    // user has requested to be remembered
+    if (u.is_anonymous && f && f.bakecookie && f.bakecookie.checked)
+        cache_period = 365 * 24 * 60 * 60 * 1000;
+
+    var now = new Date();
+    mtFixDate(now);
+    now.setTime(now.getTime() + cache_period);
+
+    var cmtcookie = mtBakeUserCookie(u);
+    mtSetCookie(mtCookieName, cmtcookie, now, mtCookiePath, mtCookieDomain,
+        location.protocol == 'https:');
+}
+
+<mt:Ignore>
+/***
+ * Clears the blog-side user cookie.
+ */
+</mt:Ignore>
+function mtClearUser() {
+    user = null;
+    mtDeleteCookie(mtCookieName, mtCookiePath, mtCookieDomain,
+        location.protocol == 'https:');
+}
+
+<mt:Ignore>
+/***
+ * Sets a browser cookie.
+ */
+</mt:Ignore>
+function mtSetCookie(name, value, expires, path, domain, secure) {
+    if (domain && domain.match(/^\.?localhost$/))
+        domain = null;
+    var curCookie = name + "=" + escape(value) +
+        (expires ? "; expires=" + expires.toGMTString() : "") +
+        (path ? "; path=" + path : "") +
+        (domain ? "; domain=" + domain : "") +
+        (secure ? "; secure" : "");
+    document.cookie = curCookie;
+}
+
+<mt:Ignore>
+/***
+ * Retrieves a browser cookie.
+ */
+</mt:Ignore>
+function mtGetCookie(name) {
+    var prefix = name + '=';
+    var c = document.cookie;
+    var cookieStartIndex = c.indexOf(prefix);
+    if (cookieStartIndex == -1)
+        return '';
+    var cookieEndIndex = c.indexOf(";", cookieStartIndex + prefix.length);
+    if (cookieEndIndex == -1)
+        cookieEndIndex = c.length;
+    return unescape(c.substring(cookieStartIndex + prefix.length, cookieEndIndex));
+}
+
+<mt:Ignore>
+/***
+ * Deletes a browser cookie.
+ */
+</mt:Ignore>
+function mtDeleteCookie(name, path, domain, secure) {
+    if (mtGetCookie(name)) {
+        if (domain && domain.match(/^\.?localhost$/))
+            domain = null;
+        document.cookie = name + "=" +
+            (path ? "; path=" + path : "") +
+            (domain ? "; domain=" + domain : "") +
+            (secure ? "; secure" : "") +
+            "; expires=Thu, 01-Jan-70 00:00:01 GMT";
+    }
+}
+
+<mt:Ignore>
+/***
+ * Serializes a user object into a string, suitable for storing as a cookie.
+ */
+</mt:Ignore>
+function mtBakeUserCookie(u) {
+    var str = "";
+    if (u.name) str += "name:'" + mtEscapeJS(u.name) + "';";
+    if (u.url) str += "url:'" + mtEscapeJS(u.url) + "';";
+    if (u.email) str += "email:'" + mtEscapeJS(u.email) + "';";
+    if (u.auth_type) str += "auth_type:'" + u.auth_type + "';";
+    if (u.is_authenticated) str += "is_authenticated:'1';";
+    if (u.profile) str += "profile:'" + mtEscapeJS(u.profile) + "';";
+    if (u.userpic) str += "userpic:'" + mtEscapeJS(u.userpic) + "';";
+    if (u.sid) str += "sid:'" + mtEscapeJS(u.sid) + "';";
+    str += "is_trusted:'" + (u.is_trusted ? "1" : "0") + "';";
+    str += "is_author:'" + (u.is_author ? "1" : "0") + "';";
+    str += "is_banned:'" + (u.is_banned ? "1" : "0") + "';";
+    str += "can_post:'" + (u.can_post ? "1" : "0") + "';";
+    str += "can_comment:'" + (u.can_comment ? "1" : "0") + "';";
+    str = str.replace(/;$/, '');
+    return str;
+}
+
+<mt:Ignore>
+/***
+ * Unserializes a user cookie and returns a user object with the restored
+ * state.
+ */
+</mt:Ignore>
+function mtUnbakeUserCookie(s) {
+    if (!s) return;
+
+    var u = {};
+    var m;
+    while (m = s.match(/^((name|url|email|auth_type|is_authenticated|profile|userpic|sid|is_trusted|is_author|is_banned|can_post|can_comment):'([^']+?)';?)/)) {
+        s = s.substring(m[1].length);
+        if (m[2].match(/^(is|can)_/)) // boolean fields
+            u[m[2]] = m[3] == '1' ? true : false;
+        else
+            u[m[2]] = mtUnescapeJS(m[3]);
+    }
+    if (u.is_authenticated) {
+        u.is_anonymous = false;
+    } else {
+        u.is_anonymous = true;
+        u.can_post = false;
+        u.is_author = false;
+        u.is_banned = false;
+        u.is_trusted = false;
+    }
+    return u;
+}
+
+/* Comment Messaging *****************************************************************/
+
+<mt:Ignore>
+/***
+ * Called when an entry archive page is loaded.
+ * This routine controls which elements of the comment form are shown
+ * or hidden, depending on commenter type and blog configuration.
+ */
+</mt:Ignore>
+<mt:IfBlog>
+function mtEntryOnLoad() {
+    <mt:Unless tag="IfPingsAccepted">mtHide('trackbacks-info');</mt:Unless>
+    <mt:Unless tag="IfCommentsAccepted">mtHide('comments-open');</mt:Unless>
+    mtFireEvent('usersignin');
+}
+
+function mtEntryOnUnload() {
+    if (mtRequestSubmitted) {
+        var cf = document['comments_form'];
+        if (cf) {
+            if (cf.post && cf.post.disabled)
+                cf.post.disabled = false;
+            if (cf.preview_button && cf.preview_button.disabled)
+                cf.preview_button.disabled = false;
+        }
+        mtRequestSubmitted = false;
+    }
+    return true;
+}
+
+mtAttachEvent('usersignin', mtUserOnLoad);
+</mt:IfBlog>
+
+<mt:Ignore>
+/***
+ * Handles the display of the greeting message, depending on what kind of
+ * user is logged in and blog comment policy.
+ */
+</mt:Ignore>
+<mt:IfBlog>
+function mtShowGreeting() {
+<mt:IfRegistrationAllowed>
+    var reg_reqd = <mt:IfRegistrationRequired>true<mt:Else>false</mt:IfRegistrationRequired>;
+
+    var cf = document['comments_form'];
+    if (!cf) return;
+
+    var el = document.getElementById('comment-greeting');
+    if (!el)  // legacy MT 4.x element id
+        el = document.getElementById('comment-form-external-auth');
+    if (!el) return;
+
+    var eid = cf.entry_id;
+    var entry_id;
+    if (eid) entry_id = eid.value;
+
+    var phrase;
+    var u = mtGetUser();
+
+    if ( u && u.is_authenticated ) {
+        if ( u.is_banned ) {
+            phrase = '<__trans phrase="You do not have permission to comment on this blog. ([_1]sign out[_2])" params="<a href="javascript:void(0);" onclick="return mtSignOutOnClick();">%%</a>" escape="js">';
+        } else {
+            var user_link;
+            if ( u.is_author ) {
+                user_link = '<a href="<$mt:CGIPath$><$mt:CommentScript$>?__mode=edit_profile&return_url=' + encodeURIComponent( location.href );
+                user_link += '">' + u.name + '</a>';
+            } else {
+                // registered user, but not a user with posting rights
+                if (u.url)
+                    user_link = '<a href="' + u.url + '">' + u.name + '</a>';
+                else
+                    user_link = u.name;
+            }
+            // TBD: supplement phrase with userpic if one is available.
+            phrase = '<__trans phrase="Thanks for signing in, __NAME__. ([_1]sign out[_2])" params="<a href="javascript:void(0)" onclick="return mtSignOutOnClick();">%%</a>" escape="js">';
+            phrase = phrase.replace(/__NAME__/, user_link);
+        }
+    } else {
+        if (reg_reqd) {
+            phrase = '<__trans phrase="[_1]Sign in[_2] to comment." params="<a href="javascript:void(0)" onclick="return mtSignInOnClick('comment-greeting')">%%</a>" escape="js">';
+        } else {
+            phrase = '<__trans phrase="[_1]Sign in[_2] to comment, or comment anonymously." params="<a href="javascript:void(0)" onclick="return mtSignInOnClick('comment-greeting')">%%</a>" escape="js">';
+        }
+    }
+    el.innerHTML = phrase;
+<mt:Else>
+    mtShowCaptcha();
+</mt:IfRegistrationAllowed>
+}
+</mt:IfBlog>
+
+<mt:Ignore>
+/***
+ * Function to hide/show/prepopulate fields based upon type of user that has authenticated
+ */
+</mt:Ignore>
+<mt:IfBlog>
+function mtUserOnLoad() {
+    var u = mtGetUser();
+
+    // if the user is authenticated, hide the 'anonymous' fields
+    // and any captcha input if already shown
+    if ( document.getElementById('comments-form')) {
+        if ( u && u.is_authenticated ) {
+            mtShow('comments-form');
+            mtHide('comments-open-data');
+            if (mtCaptchaVisible)
+                mtHide('comments-open-captcha');
+        } else {
+<mt:IfRegistrationRequired>
+            mtHide('comments-form');
+</mt:IfRegistrationRequired>
+        }
+        if ( u && u.is_banned )
+            mtHide('comments-form');
+
+        // if we're previewing a comment, make sure the captcha
+        // field is visible
+        if (is_preview)
+            mtShowCaptcha();
+        else
+            mtShowGreeting();
+
+        // populate anonymous comment fields if user is cookied as anonymous
+        var cf = document['comments_form'];
+        if (cf) {
+            if (u && u.is_anonymous) {
+                if (u.email) cf.email.value = u.email;
+                if (u.name) cf.author.value = u.name;
+                if (u.url) cf.url.value = u.url;
+                if (cf.bakecookie)
+                    cf.bakecookie.checked = u.name || u.email;
+            } else {
+                if (u && u.sid && cf.sid)
+                    cf.sid.value = u.sid;
+            }
+            if (cf.post.disabled)
+                cf.post.disabled = false;
+            if (cf.preview_button.disabled)
+                cf.preview_button.disabled = false;
+            mtRequestSubmitted = false;
+        }
+    }
+}
+</mt:IfBlog>
+
+
+/* Comment Remember Me *****************************************************************/
+
+<mt:Ignore>
+/***
+ * Called when the 'Remember me' checkbox is changed. If the checkbox
+ * is cleared, the cached user cookie is immediately cleared.
+ */
+</mt:Ignore>
+function mtRememberMeOnClick(b) {
+    if (!b.checked)
+        mtClearUser(b.form);
+    return true;
+}
+
+/* Comment Parent *****************************************************************/
+
+<mt:Ignore>
+/***
+ * Handles the action of the 'Reply' links.
+ */
+</mt:Ignore>
+function mtReplyCommentOnClick(parent_id, author) {
+    mtShow('comment-form-reply');
+
+    var checkbox = document.getElementById('comment-reply');
+    var label = document.getElementById('comment-reply-label');
+    var text = document.getElementById('comment-text');
+
+    // Populate label with new values
+    var reply_text = '<__trans phrase="Replying to <a href="[_1]" onclick="[_2]">comment from [_3]</a>" params="#comment-__PARENT__%%location.href=this.href; return false%%__AUTHOR__" escape="js">';
+    reply_text = reply_text.replace(/__PARENT__/, parent_id);
+    reply_text = reply_text.replace(/__AUTHOR__/, author);
+    label.innerHTML = reply_text;
+
+    checkbox.value = parent_id; 
+    checkbox.checked = true;
+    try {
+        // text field may be hidden
+        text.focus();
+    } catch(e) {
+    }
+
+    mtSetCommentParentID();
+}
+
+<mt:Ignore>
+/***
+ * Sets the parent comment ID when replying to a comment.
+ */
+</mt:Ignore>
+function mtSetCommentParentID() {
+    var checkbox = document.getElementById('comment-reply');
+    var parent_id_field = document.getElementById('comment-parent-id');
+    if (!checkbox || !parent_id_field) return;
+
+    var pid = 0;
+    if (checkbox.checked == true)
+        pid = checkbox.value;
+    parent_id_field.value = pid;
+}
+
+/* CAPTCHA *****************************************************************/
+
+<mt:Ignore>
+/***
+ * Called when an input field on the comment form receives focus.
+ */
+</mt:Ignore>
+function mtCommentFormOnFocus() {
+    // if CAPTCHA is enabled, this causes the captcha image to be
+    // displayed if it hasn't been already.
+    mtShowCaptcha();
+}
+
+<mt:Ignore>
+/***
+ * Displays a captcha field for anonymous commenters.
+ */
+</mt:Ignore>
+var mtCaptchaVisible = false;
+function mtShowCaptcha() {
+    var u = mtGetUser();
+    if ( u && u.is_authenticated ) return;
+    if (mtCaptchaVisible) return;
+    var div = document.getElementById('comments-open-captcha');
+    if (div) {
+        div.innerHTML = '<$mt:CaptchaFields$>';
+        mtCaptchaVisible = true;
+    }
+}
+
+/* Comment Submit *****************************************************************/
+
+<mt:Ignore>
+/***
+ * Called when comment form is sent.
+ * Required parameter: Form DOM object of comment form.
+ * If form has a 'bakecookie' member, it will be used to signal
+ * storing the anonymous commenter information to a cookie.
+ * If form has a 'armor' member, it will be used to store
+ * a token that is checked by the comment script.
+ */
+</mt:Ignore>
+<mt:IfBlog>
+var mtRequestSubmitted = false;
+function mtCommentOnSubmit(f) {
+    if (!mtRequestSubmitted) {
+        mtRequestSubmitted = true;
+
+        if (f.armor)
+            f.armor.value = '<$mt:BlogSitePath encode_sha1="1"$>';
+        if (f.bakecookie && f.bakecookie.checked)
+            mtSaveUser(f);
+
+        // disable submit buttons
+        if (f.preview_button) f.preview_button.disabled = true;
+        if (f.post) f.post.disabled = true;
+
+        var u = mtGetUser();
+        if ( !is_preview && ( u && u.is_authenticated ) ) {
+            // validate session; then submit
+            mtFetchedUser = false;
+            mtFetchUser('mtCommentSessionVerify');
+            return false;
+        }
+
+        return true;
+    }
+    return false;
+}
+
+function mtCommentSessionVerify(app_user) {
+    var u = mtGetUser();
+    var f = document['comments_form'];
+    if ( u && app_user && app_user.sid && ( u.sid == app_user.sid ) ) {
+        f.submit();
+    } else {
+        alert('<__trans phrase="Your session has expired. Please sign in again to comment." escape="js">');
+        mtClearUser();
+        mtFireEvent('usersignin');
+<mt:IfRegistrationRequired>
+        mtShow('comments-form');
+        mtHide('comments-open-footer');
+</mt:IfRegistrationRequired>
+    }
+}
+</mt:IfBlog>
+
+/* Utility Functions *****************************************************************/
+
+<mt:Ignore>
+/***
+ * Simple routine for showing a DOM element (applying a CSS display
+ * attribute of 'none').
+ */
+</mt:Ignore>
+function mtHide(id) {
+    var el = (typeof id == "string") ? document.getElementById(id) : id;
+    if (el) el.style.display = 'none';
+}
+
+<mt:Ignore>
+/***
+ * Simple routine for showing a DOM element (applying a CSS display
+ * attribute of 'block').
+ */
+</mt:Ignore>
+function mtShow(id) {
+    var el = (typeof id == "string") ? document.getElementById(id) : id;
+    if (el) el.style.display = 'block';
+}
+
+<mt:Ignore>
+/***
+ * Calls the event named, if there are handlers for it.
+ */
+</mt:Ignore>
+function mtFireEvent(eventName,param) {
+    var fn = window['on' + eventName];
+    if (typeof fn == 'function') return fn(param);
+    return;
+}
+
+function mtFixDate(date) {
+    var skew = (new Date(0)).getTime();
+    if (skew > 0)
+        date.setTime(date.getTime() - skew);
+}
+
+<mt:Ignore>
+/***
+ * Simple function that escapes single quote characters for storing
+ * in a cookie.
+ */
+</mt:Ignore>
+function mtEscapeJS(s) {
+    s = s.replace(/'/g, "&apos;");
+    return s;
+}
+
+<mt:Ignore>
+/***
+ * Simple function that unescapes single quote characters that were
+ * stored in a cookie.
+ */
+</mt:Ignore>
+function mtUnescapeJS(s) {
+    s = s.replace(/&apos;/g, "'");
+    return s;
+}
+
+<mt:Ignore>
+/***
+ * A utility function for assigning/adding handlers to window events.
+ */
+</mt:Ignore>
+function mtAttachEvent(eventName,func) {
+    var onEventName = 'on' + eventName;
+    var old = window[onEventName];
+    if( typeof old != 'function' )
+        window[onEventName] = func;
+    else {
+        window[onEventName] = function( evt ) {
+            old( evt );
+            return func( evt );
+        };
+    }
+}
+
+/* Ajax Requests *****************************************************************/
+
+<mt:Ignore>
+/***
+ * Returns a XMLHttpRequest object (for Ajax operations).
+ */
+</mt:Ignore>
+function mtGetXmlHttp() {
+    if ( !window.XMLHttpRequest ) {
+        window.XMLHttpRequest = function() {
+            var types = [
+                "Microsoft.XMLHTTP",
+                "MSXML2.XMLHTTP.5.0",
+                "MSXML2.XMLHTTP.4.0",
+                "MSXML2.XMLHTTP.3.0",
+                "MSXML2.XMLHTTP"
+            ];
+
+            for ( var i = 0; i < types.length; i++ ) {
+                try {
+                    return new ActiveXObject( types[ i ] );
+                } catch( e ) {}
+            }
+
+            return undefined;
+        };
+    }
+    if ( window.XMLHttpRequest )
+        return new XMLHttpRequest();
+}
+
+/* Section *****************************************************************/
+
+<mt:Ignore>
+/***
+ * Initialize
+ */
+</mt:Ignore>
+// BEGIN: fast browser onload init
+// Modifications by David Davis, DWD
+// Dean Edwards/Matthias Miller/John Resig
+// http://dean.edwards.name/weblog/2006/06/again/?full#comment5338
+
+function mtInit() {
+    // quit if this function has already been called
+    if (arguments.callee.done) return;
+
+    // flag this function so we don't do the same thing twice
+    arguments.callee.done = true;
+
+    // kill the timer
+    // DWD - check against window
+    if ( window._timer ) clearInterval(window._timer);
+
+    // DWD - fire the window onload now, and replace it
+    if ( window.onload && ( window.onload !== window.mtInit ) ) {
+        window.onload();
+        window.onload = function() {};
+    }
+}
+
+/* for Mozilla/Opera9 */
+if (document.addEventListener) {
+    document.addEventListener("DOMContentLoaded", mtInit, false);
+}
+
+/* for Internet Explorer */
+/*@cc_on @*/
+/*@if (@_win32)
+document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>");
+var script = document.getElementById("__ie_onload");
+script.onreadystatechange = function() {
+    if (this.readyState == "complete") {
+        mtInit(); // call the onload handler
+    }
+};
+/*@end @*/
+
+/* for Safari */
+if (/WebKit/i.test(navigator.userAgent)) { // sniff
+    _timer = setInterval(function() {
+        if (/loaded|complete/.test(document.readyState)) {
+            mtInit(); // call the onload handler
+        }
+    }, 10);
+}
+
+/* for other browsers */
+window.onload = mtInit;
+
+// END: fast browser onload init
+
+<mt:IfBlog>
+<mt:IfRegistrationAllowed>
+/***
+ * If request contains a '#_login' or '#_logout' hash, use this to
+ * also delete the blog-side user cookie, since we're coming back from
+ * a login, logout or edit profile operation.
+ */
+var clearCookie = ( window.location.hash && window.location.hash.match( /^#_log(in|out)/ ) ) ? true : false;
+if (clearCookie) {
+    // clear any logged in state
+    mtClearUser();
+    if (RegExp.$1 == 'in')
+        mtFetchUser();
+} else {
+    <mt:Ignore>
+    /***
+     * Uncondition this call to fetch the current user state (if available)
+     * from MT upon page load if no user cookie is already present.
+     * This is okay if you have a private install, such as an Intranet;
+     * not recommended for public web sites!
+     */
+    </mt:Ignore>
+    if ( is_preview && !user )
+        mtFetchUser();
+}
+</mt:IfRegistrationAllowed>
+</mt:IfBlog>
+
+
+/* Section *****************************************************************/
Index: trunk/SimpleTemplateSets/templates/vanilla/home.mtml
===================================================================
--- trunk/SimpleTemplateSets/templates/vanilla/home.mtml (revision 891)
+++ trunk/SimpleTemplateSets/templates/vanilla/home.mtml (revision 891)
@@ -0,0 +1,14 @@
+<mt:IncludeBlock module="wrapper">
+
+    <mt:Entries lastn="10">
+        <h2><a href="<$mt:EntryPermalink$>"><$mt:EntryTitle$></a></h2>
+        <p><__trans phrase="By [_1] on [_2]" params="<$mt:EntryAuthorLink$>%%<$mt:EntryDate format="%x %X"$>"></p>
+        <mt:If tag="EntryBody">
+            <$mt:EntryBody$>
+        </mt:If>
+        <mt:If tag="EntryMore" convert_breaks="0">
+            <em><__trans phrase="Continue reading <a href="[_1]">[_2]</a>." params="<$mt:EntryPermalink$>%%<$mt:EntryTitle$>"></em>
+        </mt:If>
+    </mt:Entries>
+
+</mt:IncludeBlock>
Index: trunk/SimpleTemplateSets/templates/vanilla/wrapper.mtml
===================================================================
--- trunk/SimpleTemplateSets/templates/vanilla/wrapper.mtml (revision 891)
+++ trunk/SimpleTemplateSets/templates/vanilla/wrapper.mtml (revision 891)
@@ -0,0 +1,23 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" id="sixapart-standard">
+<head>
+    <title><$mt:BlogName encode_html="1"$></title>
+    <meta http-equiv="Content-Type" content="text/html; charset=<$mt:PublishCharset$>" />
+</head>
+<body>
+
+    <h1><a href="<$mt:BlogURL$>"><$mt:BlogName encode_html="1"$></a> + <__trans phrase="Homepage + Entry Archives"></h1>
+
+<!-- end header --><hr />
+
+
+    <$mt:Var name="contents"$>
+
+
+<!-- start footer --><hr />
+
+    <p><__trans phrase="_POWERED_BY"> and the Vanilla template set</p>
+
+</body>
+</html>
Index: trunk/SimpleTemplateSets/templates/vanilla/entry.mtml
===================================================================
--- trunk/SimpleTemplateSets/templates/vanilla/entry.mtml (revision 891)
+++ trunk/SimpleTemplateSets/templates/vanilla/entry.mtml (revision 891)
@@ -0,0 +1,12 @@
+<mt:IncludeBlock module="wrapper">
+
+    <h1><$mt:EntryTitle$></h1>
+    <p><__trans phrase="By [_1] on [_2]" params="<$mt:EntryAuthorLink$>%%<$mt:EntryDate format="%x %X"$>"></p>
+    <mt:If tag="EntryBody">
+        <$mt:EntryBody$>
+    </mt:If>
+    <mt:If tag="EntryMore" convert_breaks="0">
+        <$mt:EntryMore$>
+    </mt:If>
+
+</mt:IncludeBlock>
Index: trunk/SimpleTemplateSets/templates/vanilla+archives/home.mtml
===================================================================
--- trunk/SimpleTemplateSets/templates/vanilla+archives/home.mtml (revision 891)
+++ trunk/SimpleTemplateSets/templates/vanilla+archives/home.mtml (revision 891)
@@ -0,0 +1,14 @@
+<mt:IncludeBlock module="wrapper">
+
+    <mt:Entries lastn="10">
+        <h2><a href="<$mt:EntryPermalink$>"><$mt:EntryTitle$></a></h2>
+        <p><__trans phrase="By [_1] on [_2]" params="<$mt:EntryAuthorLink$>%%<$mt:EntryDate format="%x %X"$>"></p>
+        <mt:If tag="EntryBody">
+            <$mt:EntryBody$>
+        </mt:If>
+        <mt:If tag="EntryMore" convert_breaks="0">
+            <em><__trans phrase="Continue reading <a href="[_1]">[_2]</a>." params="<$mt:EntryPermalink$>%%<$mt:EntryTitle$>"></em>
+        </mt:If>
+    </mt:Entries>
+
+</mt:IncludeBlock>
Index: trunk/SimpleTemplateSets/templates/vanilla+archives/entry_listing.mtml
===================================================================
--- trunk/SimpleTemplateSets/templates/vanilla+archives/entry_listing.mtml (revision 891)
+++ trunk/SimpleTemplateSets/templates/vanilla+archives/entry_listing.mtml (revision 891)
@@ -0,0 +1,32 @@
+<mt:IncludeBlock module="wrapper">
+
+    <h1><__trans phrase="[_1] Archives" params="<$mt:ArchiveTitle$>"></h1>
+    
+    <p>archive_template: <mt:if name="archive_template">true</mt:if></p>
+
+    <mt:Entries>
+        <h2><a href="<$mt:EntryPermalink$>"><$mt:EntryTitle$></a></h2>
+        <p><__trans phrase="By [_1] on [_2]" params="<$mt:EntryAuthorLink$>%%<$mt:EntryDate format="%x %X"$>"></p>
+        <mt:If tag="EntryBody">
+            <$mt:EntryBody$>
+        </mt:If>
+        <mt:If tag="EntryMore" convert_breaks="0">
+            <em><__trans phrase="Continue reading <a href="[_1]">[_2]</a>." params="<$mt:EntryPermalink$>%%<$mt:EntryTitle$>"></em>
+        </mt:If>
+    </mt:Entries>
+    
+    <mt:If name="category_archive">
+        <mt:setvarblock name="foobar">
+            <h3><__trans phrase="[_1] Category-Monthly Archives" params="<$mt:ArchiveTitle$>"></h3>
+            <ul>
+            <mt:if name="category_monthly_archive">
+                <li><strong><a href="<$mt:CategoryArchiveLink$>"><__trans phrase='main "[_1]" category archive' params="<$mt:CategoryLabel$>"></a></strong></li>
+            </mt:if>
+            <mt:ArchiveList archive_type="Category-Monthly">
+                <li><a href="<$mt:ArchiveLink$>"><$mt:ArchiveTitle$></a></li>
+            </mt:ArchiveList>
+            </ul>
+        </mt:setvarblock>
+    </mt:If>
+
+</mt:IncludeBlock>
Index: trunk/SimpleTemplateSets/templates/vanilla+archives/wrapper.mtml
===================================================================
--- trunk/SimpleTemplateSets/templates/vanilla+archives/wrapper.mtml (revision 891)
+++ trunk/SimpleTemplateSets/templates/vanilla+archives/wrapper.mtml (revision 891)
@@ -0,0 +1,30 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" id="sixapart-standard">
+<head>
+    <title><$mt:BlogName encode_html="1"$></title>
+    <meta http-equiv="Content-Type" content="text/html; charset=<$mt:PublishCharset$>" />
+    <meta name="generator" content="<$mt:ProductName version="1"$>" />
+</head>
+<body>
+
+    <h1><a href="<$mt:BlogURL$>"><$mt:BlogName encode_html="1"$></a> + <__trans phrase="Monthly, Category, and Author Archives"></h1>
+    
+    <h3><__trans phrase="Navigation"></h3>
+    <ul>
+        <li><a href="<$mt:Link template="home"$>"><__trans phrase="Home"></a></li>
+        <li><a href="<$mt:Link template="archives"$>"><__trans phrase="Archives"></a></li>
+    </ul>
+
+<!-- end header --><hr />
+
+
+    <$mt:Var name="contents"$>
+
+
+<!-- start footer --><hr />
+
+    <p><__trans phrase="_POWERED_BY"> and the Vanilla template set</p>
+
+</body>
+</html>
Index: trunk/SimpleTemplateSets/templates/vanilla+archives/entry.mtml
===================================================================
--- trunk/SimpleTemplateSets/templates/vanilla+archives/entry.mtml (revision 891)
+++ trunk/SimpleTemplateSets/templates/vanilla+archives/entry.mtml (revision 891)
@@ -0,0 +1,12 @@
+<mt:IncludeBlock module="wrapper">
+
+    <h1><$mt:EntryTitle$></h1>
+    <p><__trans phrase="By [_1] on [_2]" params="<$mt:EntryAuthorLink$>%%<$mt:EntryDate format="%x %X"$>"></p>
+    <mt:If tag="EntryBody">
+        <$mt:EntryBody$>
+    </mt:If>
+    <mt:If tag="EntryMore" convert_breaks="0">
+        <$mt:EntryMore$>
+    </mt:If>
+
+</mt:IncludeBlock>
Index: trunk/SimpleTemplateSets/templates/vanilla+archives/archives.mtml
===================================================================
--- trunk/SimpleTemplateSets/templates/vanilla+archives/archives.mtml (revision 891)
+++ trunk/SimpleTemplateSets/templates/vanilla+archives/archives.mtml (revision 891)
@@ -0,0 +1,55 @@
+<mt:IncludeBlock module="wrapper">
+
+    <h1><__trans phrase="Archives"></h1>
+
+<!--
+    Available Archive Types
+    
+    * Daily
+    * Weekly
+    * Monthly           shown below
+    * Yearly
+    * Category          shown below
+    * Category-Daily
+    * Category-Weekly
+    * Category-Monthly
+    * Category-Yearly
+    * Author            shown below
+    * Author-Daily
+    * Author-Weekly
+    * Author-Monthly
+    * Author-Yearly
+
+-->
+
+    <h2><__trans phrase="Category Archives"></h2>
+    <ul>
+    <mt:ArchiveList archive_type="Category">
+        <li><a href="<$mt:ArchiveLink$>"><$mt:ArchiveTitle$></a></li>
+    </mt:ArchiveList>
+    </ul>
+
+<!--
+    <h2><__trans phrase="Category-Monthly Archives"></h2>
+    <ul>
+    <mt:ArchiveList archive_type="Category-Monthly">
+        <li><a href="<$mt:ArchiveLink$>"><$mt:ArchiveTitle$></a></li>
+    </mt:ArchiveList>
+    </ul>
+-->
+
+    <h2><__trans phrase="Monthly Archives"></h2>
+    <ul>
+    <mt:ArchiveList archive_type="Monthly">
+        <li><a href="<$mt:ArchiveLink$>"><$mt:ArchiveTitle$></a></li>
+    </mt:ArchiveList>
+    </ul>
+
+    <h2><__trans phrase="Author Archives"></h2>
+    <ul>
+    <mt:ArchiveList archive_type="Author">
+        <li><a href="<$mt:ArchiveLink$>"><$mt:ArchiveTitle$></a></li>
+    </mt:ArchiveList>
+    </ul>
+
+</mt:IncludeBlock>
Index: trunk/SimpleTemplateSets/MTDefaultTemplatesSet.pl
===================================================================
--- trunk/SimpleTemplateSets/MTDefaultTemplatesSet.pl (revision 600)
+++  (revision )
@@ -1,100 +1,0 @@
-package MT::Plugin::MTSuperBasicTemplateSets;
-
-use strict;
-use base qw( MT::Plugin );
-our $VERSION = '0.2'; 
-my $plugin = MT::Plugin::MTSuperBasicTemplateSets->new({
-   id          => 'MTSuperBasicTemplateSest',
-   key         => 'super-basic-template-sets',
-   name        => 'Super Basic Template Sets',
-   description => "Super Basic Template Sets for learning Movable Type.",
-   version     => $VERSION,
-   author_name => "Beau Smith",
-   author_link => "http://www.beausmith.com",
-   plugin_link => "http://plugins.movabletype.org",
-});
-MT->add_plugin($plugin);
-
-sub init_registry {
-    my $plugin = shift;
-    $plugin->registry({
-        callbacks => {
-            'blog_template_set_change' => \&on_template_set_change,
-        },
-        template_sets => {
-            basic1 => {
-                label => "SuperBasic - w/o Comments",
-                base_path => 'templates/basic1',
-                order => 600,
-                templates => {
-                    index => {
-                        'index' => {
-                            label => 'Index',
-                            outfile => 'index.html',
-                            rebuild_me => '1',
-                        },
-                        'archives' => {
-                            label => 'Archives',
-                            outfile => 'archives.html',
-                            rebuild_me => '1',
-                        },
-                        'styles' => {
-                            label => 'Styles',
-                            outfile => 'styles.css',
-                            rebuild_me => '1',
-                        },
-                    },
-                    archive => {
-                        'monthly_entry_listing' => {
-                            label => 'Monthly Archive',
-                            mappings => {
-                                monthly => {
-                                    archive_type => 'Monthly',
-                                },
-                            },
-                        },
-                        'category_entry_listing' => {
-                            label => 'Category Archive',
-                            mappings => {
-                                category => {
-                                    archive_type => 'Category',
-                                },
-                            },
-                        },
-                    },
-                    individual => {
-                        'entry' => {
-                            label => 'Entry',
-                            mappings => {
-                                entry_archive => {
-                                    archive_type => 'Individual',
-                                },
-                            },
-                        },
-                        'page' => {
-                            label => 'Page',
-                            mappings => {
-                                page_archive => {
-                                    archive_type => 'Page',
-                                },
-                            },
-                        },
-                    },
-                    module => {
-                        'header' => {
-                            label => 'Header',
-                        },
-                        'footer' => {
-                            label => 'Footer',
-                        },
-                        'sidebar' => {
-                            label => 'Sidebar',
-                        },
-                    },
-                },
-            },
-        },
-    });
-}
-
-1;
