').append( $("#nav-notifications-see-all").clone() ).html()); //outerHtml hack
+ var notifications_mark = unescape($('
').append( $("#nav-notifications-mark-all").clone() ).html()); //outerHtml hack
+ var notifications_empty = unescape($("#nav-notifications-menu").html());
+
+ /* nav update event */
+ $('nav').bind('nav-update', function(e,data){;
+ var invalid = $(data).find('invalid').text();
+ if(invalid == 1) { window.location.href=window.location.href }
+
+ var net = $(data).find('net').text();
+ if(net == 0) { net = ''; $('#net-update').removeClass('show') } else { $('#net-update').addClass('show') }
+ $('#net-update').html(net);
+
+ var home = $(data).find('home').text();
+ if(home == 0) { home = ''; $('#home-update').removeClass('show') } else { $('#home-update').addClass('show') }
+ $('#home-update').html(home);
+
+ var intro = $(data).find('intro').text();
+ if(intro == 0) { intro = ''; $('#intro-update').removeClass('show') } else { $('#intro-update').addClass('show') }
+ $('#intro-update').html(intro);
+
+ var mail = $(data).find('mail').text();
+ if(mail == 0) { mail = ''; $('#mail-update').removeClass('show') } else { $('#mail-update').addClass('show') }
+ $('#mail-update').html(mail);
+
+ var intro = $(data).find('intro').text();
+ if(intro == 0) { intro = ''; $('#intro-update-li').removeClass('show') } else { $('#intro-update-li').addClass('show') }
+ $('#intro-update-li').html(intro);
+
+ var mail = $(data).find('mail').text();
+ if(mail == 0) { mail = ''; $('#mail-update-li').removeClass('show') } else { $('#mail-update-li').addClass('show') }
+ $('#mail-update-li').html(mail);
+
+ var eNotif = $(data).find('notif')
+
+ if (eNotif.children("note").length==0){
+ $("#nav-notifications-menu").html(notifications_empty);
+ } else {
+ nnm = $("#nav-notifications-menu");
+ nnm.html(notifications_all + notifications_mark);
+ //nnm.attr('popup','true');
+ eNotif.children("note").each(function(){
+ e = $(this);
+ text = e.text().format("
"+e.attr('name')+"");
+ html = notifications_tpl.format(e.attr('href'),e.attr('photo'), text, e.attr('date'), e.attr('seen'));
+ nnm.append(html);
+ });
+ }
+ notif = eNotif.attr('count');
+ if (notif>0){
+ $("#nav-notifications-linkmenu").addClass("on");
+ } else {
+ $("#nav-notifications-linkmenu").removeClass("on");
+ }
+ if(notif == 0) { notif = ''; $('#notify-update').removeClass('show') } else { $('#notify-update').addClass('show') }
+ $('#notify-update').html(notif);
+
+ var eSysmsg = $(data).find('sysmsgs');
+ eSysmsg.children("notice").each(function(){
+ text = $(this).text();
+ $.jGrowl(text, { sticky: true, theme: 'notice' });
+ });
+ eSysmsg.children("info").each(function(){
+ text = $(this).text();
+ $.jGrowl(text, { sticky: false, theme: 'info', life: 1500 });
+ });
+
+ });
+
+
+ NavUpdate();
+ // Allow folks to stop the ajax page updates with the pause/break key
+ $(document).keydown(function(event) {
+ if(event.keyCode == '8') {
+ var target = event.target || event.srcElement;
+ if (!/input|textarea/i.test(target.nodeName)) {
+ return false;
+ }
+ }
+ if(event.keyCode == '19' || (event.ctrlKey && event.which == '32')) {
+ event.preventDefault();
+ if(stopped == false) {
+ stopped = true;
+ if (event.ctrlKey) {
+ totStopped = true;
+ }
+ $('#pause').html('
');
+ } else {
+ unpause();
+ }
+ } else {
+ if (!totStopped) {
+ unpause();
+ }
+ }
+ });
+
+
+ });
+
+ function NavUpdate() {
+
+ if(! stopped) {
+ var pingCmd = 'ping' + ((localUser != 0) ? '?f=&uid=' + localUser : '');
+ $.get(pingCmd,function(data) {
+ $(data).find('result').each(function() {
+ // send nav-update event
+ $('nav').trigger('nav-update', this);
+
+
+ // start live update
+
+
+
+ if($('#live-network').length) { src = 'network'; liveUpdate(); }
+ if($('#live-profile').length) { src = 'profile'; liveUpdate(); }
+ if($('#live-community').length) { src = 'community'; liveUpdate(); }
+ if($('#live-notes').length) { src = 'notes'; liveUpdate(); }
+ if($('#live-display').length) {
+ if(liking) {
+ liking = 0;
+ window.location.href=window.location.href
+ }
+ }
+ if($('#live-photos').length) {
+ if(liking) {
+ liking = 0;
+ window.location.href=window.location.href
+ }
+ }
+
+
+
+
+ });
+ }) ;
+ }
+ timer = setTimeout(NavUpdate,updateInterval);
+ }
+
+ function liveUpdate() {
+ if((src == null) || (stopped) || (! profile_uid)) { $('.like-rotator').hide(); return; }
+ if(($('.comment-edit-text-full').length) || (in_progress)) {
+ if(livetime) {
+ clearTimeout(livetime);
+ }
+ livetime = setTimeout(liveUpdate, 10000);
+ return;
+ }
+ if(livetime != null)
+ livetime = null;
+
+ prev = 'live-' + src;
+
+ in_progress = true;
+ var udargs = ((netargs.length) ? '/' + netargs : '');
+ var update_url = 'update_' + src + udargs + '&p=' + profile_uid + '&page=' + profile_page + '&msie=' + ((msie) ? 1 : 0);
+
+ $.get(update_url,function(data) {
+ in_progress = false;
+ // $('.collapsed-comments',data).each(function() {
+ // var ident = $(this).attr('id');
+ // var is_hidden = $('#' + ident).is(':hidden');
+ // if($('#' + ident).length) {
+ // $('#' + ident).replaceWith($(this));
+ // if(is_hidden)
+ // $('#' + ident).hide();
+ // }
+ //});
+
+ // add a new thread
+
+ $('.tread-wrapper',data).each(function() {
+ var ident = $(this).attr('id');
+
+ if($('#' + ident).length == 0 && profile_page == 1) {
+ $('img',this).each(function() {
+ $(this).attr('src',$(this).attr('dst'));
+ });
+ $('#' + prev).after($(this));
+ }
+ else {
+ $('img',this).each(function() {
+ $(this).attr('src',$(this).attr('dst'));
+ });
+ $('#' + ident).replaceWith($(this));
+ }
+ prev = ident;
+ });
+
+ // reset vars for inserting individual items
+
+ /*prev = 'live-' + src;
+
+ $('.wall-item-outside-wrapper',data).each(function() {
+ var ident = $(this).attr('id');
+
+ if($('#' + ident).length == 0 && prev != 'live-' + src) {
+ $('img',this).each(function() {
+ $(this).attr('src',$(this).attr('dst'));
+ });
+ $('#' + prev).after($(this));
+ }
+ else {
+ $('#' + ident + ' ' + '.wall-item-ago').replaceWith($(this).find('.wall-item-ago'));
+ if($('#' + ident + ' ' + '.comment-edit-text-empty').length)
+ $('#' + ident + ' ' + '.wall-item-comment-wrapper').replaceWith($(this).find('.wall-item-comment-wrapper'));
+ $('#' + ident + ' ' + '.hide-comments-total').replaceWith($(this).find('.hide-comments-total'));
+ $('#' + ident + ' ' + '.wall-item-like').replaceWith($(this).find('.wall-item-like'));
+ $('#' + ident + ' ' + '.wall-item-dislike').replaceWith($(this).find('.wall-item-dislike'));
+ $('#' + ident + ' ' + '.my-comment-photo').each(function() {
+ $(this).attr('src',$(this).attr('dst'));
+ });
+ }
+ prev = ident;
+ });*/
+
+ $('.like-rotator').hide();
+ if(commentBusy) {
+ commentBusy = false;
+ $('body').css('cursor', 'auto');
+ }
+ /* autocomplete @nicknames */
+ $(".comment-edit-form textarea").contact_autocomplete(baseurl+"/acl");
+ });
+ }
+
+ function imgbright(node) {
+ $(node).removeClass("drophide").addClass("drop");
+ }
+
+ function imgdull(node) {
+ $(node).removeClass("drop").addClass("drophide");
+ }
+
+ // Since our ajax calls are asynchronous, we will give a few
+ // seconds for the first ajax call (setting like/dislike), then
+ // run the updater to pick up any changes and display on the page.
+ // The updater will turn any rotators off when it's done.
+ // This function will have returned long before any of these
+ // events have completed and therefore there won't be any
+ // visible feedback that anything changed without all this
+ // trickery. This still could cause confusion if the "like" ajax call
+ // is delayed and NavUpdate runs before it completes.
+
+ function dolike(ident,verb) {
+ unpause();
+ $('#like-rotator-' + ident.toString()).show();
+ $.get('like/' + ident.toString() + '?verb=' + verb, NavUpdate );
+// if(timer) clearTimeout(timer);
+// timer = setTimeout(NavUpdate,3000);
+ liking = 1;
+ }
+
+ function dostar(ident) {
+ ident = ident.toString();
+// $('#like-rotator-' + ident).show();
+ $.get('starred/' + ident, function(data) {
+ if(data.match(/1/)) {
+ $('#starred-' + ident).addClass('starred');
+ $('#starred-' + ident).removeClass('unstarred');
+ $('#star-' + ident).addClass('hidden');
+ $('#unstar-' + ident).removeClass('hidden');
+ }
+ else {
+ $('#starred-' + ident).addClass('unstarred');
+ $('#starred-' + ident).removeClass('starred');
+ $('#star-' + ident).removeClass('hidden');
+ $('#unstar-' + ident).addClass('hidden');
+ }
+// $('#like-rotator-' + ident).hide();
+ });
+ }
+
+ function getPosition(e) {
+ var cursor = {x:0, y:0};
+ if ( e.pageX || e.pageY ) {
+ cursor.x = e.pageX;
+ cursor.y = e.pageY;
+ }
+ else {
+ if( e.clientX || e.clientY ) {
+ cursor.x = e.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft) - document.documentElement.clientLeft;
+ cursor.y = e.clientY + (document.documentElement.scrollTop || document.body.scrollTop) - document.documentElement.clientTop;
+ }
+ else {
+ if( e.x || e.y ) {
+ cursor.x = e.x;
+ cursor.y = e.y;
+ }
+ }
+ }
+ return cursor;
+ }
+
+ var lockvisible = false;
+
+ function lockview(event,id) {
+ event = event || window.event;
+ cursor = getPosition(event);
+ if(lockvisible) {
+ lockviewhide();
+ }
+ else {
+ lockvisible = true;
+ $.get('lockview/' + id, function(data) {
+ $('#panel').html(data);
+ $('#panel').css({ 'left': cursor.x + 5 , 'top': cursor.y + 5});
+ $('#panel').show();
+ });
+ }
+ }
+
+ function lockviewhide() {
+ lockvisible = false;
+ $('#panel').hide();
+ }
+
+ function post_comment(id) {
+ unpause();
+ commentBusy = true;
+ $('body').css('cursor', 'wait');
+ $("#comment-preview-inp-" + id).val("0");
+ $.post(
+ "item",
+ $("#comment-edit-form-" + id).serialize(),
+ function(data) {
+ if(data.success) {
+ $("#comment-edit-wrapper-" + id).hide();
+ $("#comment-edit-text-" + id).val('');
+ var tarea = document.getElementById("comment-edit-text-" + id);
+ if(tarea)
+ commentClose(tarea,id);
+ if(timer) clearTimeout(timer);
+ timer = setTimeout(NavUpdate,10);
+ }
+ if(data.reload) {
+ window.location.href=data.reload;
+ }
+ },
+ "json"
+ );
+ return false;
+ }
+
+
+ function preview_comment(id) {
+ $("#comment-preview-inp-" + id).val("1");
+ $("#comment-edit-preview-" + id).show();
+ $.post(
+ "item",
+ $("#comment-edit-form-" + id).serialize(),
+ function(data) {
+ if(data.preview) {
+
+ $("#comment-edit-preview-" + id).html(data.preview);
+ $("#comment-edit-preview-" + id + " a").click(function() { return false; });
+ }
+ },
+ "json"
+ );
+ return true;
+ }
+
+
+
+ function preview_post() {
+ $("#jot-preview").val("1");
+ $("#jot-preview-content").show();
+ tinyMCE.triggerSave();
+ $.post(
+ "item",
+ $("#profile-jot-form").serialize(),
+ function(data) {
+ if(data.preview) {
+ $("#jot-preview-content").html(data.preview);
+ $("#jot-preview-content" + " a").click(function() { return false; });
+ }
+ },
+ "json"
+ );
+ $("#jot-preview").val("0");
+ return true;
+ }
+
+
+ function unpause() {
+ // unpause auto reloads if they are currently stopped
+ totStopped = false;
+ stopped = false;
+ $('#pause').html('');
+ }
+
+
+ function bin2hex(s){
+ // Converts the binary representation of data to hex
+ //
+ // version: 812.316
+ // discuss at: http://phpjs.org/functions/bin2hex
+ // + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
+ // + bugfixed by: Onno Marsman
+ // + bugfixed by: Linuxworld
+ // * example 1: bin2hex('Kev');
+ // * returns 1: '4b6576'
+ // * example 2: bin2hex(String.fromCharCode(0x00));
+ // * returns 2: '00'
+ var v,i, f = 0, a = [];
+ s += '';
+ f = s.length;
+
+ for (i = 0; i
' + data.desc + '');
+ });
+
+}
diff --git a/view/theme/frost/js/theme.js b/view/theme/frost/js/theme.js
new file mode 100644
index 000000000..0d96cfa92
--- /dev/null
+++ b/view/theme/frost/js/theme.js
@@ -0,0 +1,184 @@
+$(document).ready(function() {
+
+ window.navMenuTimeout = {
+ '#network-menu-list-timeout': null,
+ '#contacts-menu-list-timeout': null,
+ '#system-menu-list-timeout': null,
+ '#network-menu-list-opening': false,
+ '#contacts-menu-list-opening': false,
+ '#system-menu-list-opening': false,
+ '#network-menu-list-closing': false,
+ '#contacts-menu-list-closing': false,
+ '#system-menu-list-closing': false
+ };
+
+ $.ajaxSetup({
+ cache: false
+ });
+
+
+ $('.nav-menu-link').hover(function() {
+ showNavMenu($(this).attr('rel'));
+ }, function() {
+ hideNavMenu($(this).attr('rel'));
+ });
+
+/* $('html').click(function() { $("#nav-notifications-menu" ).hide(); });*/
+
+ $('.group-edit-icon').hover(
+ function() {
+ $(this).addClass('icon'); $(this).removeClass('iconspacer');},
+ function() {
+ $(this).removeClass('icon'); $(this).addClass('iconspacer');}
+ );
+
+ $('.sidebar-group-element').hover(
+ function() {
+ id = $(this).attr('id');
+ $('#edit-' + id).addClass('icon'); $('#edit-' + id).removeClass('iconspacer');},
+
+ function() {
+ id = $(this).attr('id');
+ $('#edit-' + id).removeClass('icon');$('#edit-' + id).addClass('iconspacer');}
+ );
+
+
+ $('.savedsearchdrop').hover(
+ function() {
+ $(this).addClass('drop'); $(this).addClass('icon'); $(this).removeClass('iconspacer');},
+ function() {
+ $(this).removeClass('drop'); $(this).removeClass('icon'); $(this).addClass('iconspacer');}
+ );
+
+ $('.savedsearchterm').hover(
+ function() {
+ id = $(this).attr('id');
+ $('#drop-' + id).addClass('icon'); $('#drop-' + id).addClass('drophide'); $('#drop-' + id).removeClass('iconspacer');},
+
+ function() {
+ id = $(this).attr('id');
+ $('#drop-' + id).removeClass('icon');$('#drop-' + id).removeClass('drophide'); $('#drop-' + id).addClass('iconspacer');}
+ );
+
+/* $('.nav-load-page-link').click(function() {
+ getPageContent( $(this).attr('href') );
+ hideNavMenu( '#' + $(this).closest('ul').attr('id') );
+ return false;
+ });*/
+
+});
+
+
+function insertFormatting(comment,BBcode,id) {
+
+ var tmpStr = $("#comment-edit-text-" + id).val();
+ if(tmpStr == comment) {
+ tmpStr = "";
+ $("#comment-edit-text-" + id).addClass("comment-edit-text-full");
+ $("#comment-edit-text-" + id).removeClass("comment-edit-text-empty");
+ openMenu("comment-edit-submit-wrapper-" + id);
+ $("#comment-edit-text-" + id).val(tmpStr);
+ }
+
+ textarea = document.getElementById("comment-edit-text-" +id);
+ if (document.selection) {
+ textarea.focus();
+ selected = document.selection.createRange();
+ if (BBcode == "url"){
+ selected.text = "["+BBcode+"]" + "http://" + selected.text + "[/"+BBcode+"]";
+ } else
+ selected.text = "["+BBcode+"]" + selected.text + "[/"+BBcode+"]";
+ } else if (textarea.selectionStart || textarea.selectionStart == "0") {
+ var start = textarea.selectionStart;
+ var end = textarea.selectionEnd;
+ if (BBcode == "url"){
+ textarea.value = textarea.value.substring(0, start) + "["+BBcode+"]" + "http://" + textarea.value.substring(start, end) + "[/"+BBcode+"]" + textarea.value.substring(end, textarea.value.length);
+ } else
+ textarea.value = textarea.value.substring(0, start) + "["+BBcode+"]" + textarea.value.substring(start, end) + "[/"+BBcode+"]" + textarea.value.substring(end, textarea.value.length);
+ }
+ return true;
+}
+
+function cmtBbOpen(id) {
+ $(".comment-edit-bb-" + id).show();
+}
+function cmtBbClose(id) {
+ $(".comment-edit-bb-" + id).hide();
+}
+
+/*
+$(document).mouseup(function (clickPos) {
+
+ var sysMenu = $("#system-menu-list");
+ var sysMenuLink = $(".system-menu-link");
+ var contactsMenu = $("#contacts-menu-list");
+ var contactsMenuLink = $(".contacts-menu-link");
+ var networkMenu = $("#network-menu-list");
+ var networkMenuLink = $(".network-menu-link");
+
+ if( !sysMenu.is(clickPos.target) && !sysMenuLink.is(clickPos.target) && sysMenu.has(clickPos.target).length === 0) {
+ hideNavMenu("#system-menu-list");
+ }
+ if( !contactsMenu.is(clickPos.target) && !contactsMenuLink.is(clickPos.target) && contactsMenu.has(clickPos.target).length === 0) {
+ hideNavMenu("#contacts-menu-list");
+ }
+ if( !networkMenu.is(clickPos.target) && !networkMenuLink.is(clickPos.target) && networkMenu.has(clickPos.target).length === 0) {
+ hideNavMenu("#network-menu-list");
+ }
+});
+
+
+function getPageContent(url) {
+
+ var pos = $('.main-container').position();
+
+ $('.main-container').css('margin-left', pos.left);
+ $('.main-content-container').hide(0, function () {
+ $('.main-content-loading').show(0);
+ });
+
+ $.get(url, function(html) {
+ console.log($('.main-content-container').html());
+ $('.main-content-container').html( $('.main-content-container', html).html() );
+ console.log($('.main-content-container').html());
+ $('.main-content-loading').hide(function() {
+ $('.main-content-container').fadeIn(800,function() {
+ $('.main-container').css('margin-left', 'auto'); // This sucks -- if the CSS specification changes, this will be wrong
+ });
+ });
+ });
+}
+*/
+
+function showNavMenu(menuID) {
+
+ if(window.navMenuTimeout[menuID + '-closing']) {
+ window.navMenuTimeout[menuID + '-closing'] = false;
+ clearTimeout(window.navMenuTimeout[menuID + '-timeout']);
+ }
+ else {
+ window.navMenuTimeout[menuID + '-opening'] = true;
+
+ window.navMenuTimeout[menuID + '-timeout'] = setTimeout( function () {
+ $(menuID).slideDown('fast').show();
+ window.navMenuTimeout[menuID + '-opening'] = false;
+ }, 200);
+ }
+}
+
+function hideNavMenu(menuID) {
+
+ if(window.navMenuTimeout[menuID + '-opening']) {
+ window.navMenuTimeout[menuID + '-opening'] = false;
+ clearTimeout(window.navMenuTimeout[menuID + '-timeout']);
+ }
+ else {
+ window.navMenuTimeout[menuID + '-closing'] = true;
+
+ window.navMenuTimeout[menuID + '-timeout'] = setTimeout( function () {
+ $(menuID).slideUp('fast');
+ window.navMenuTimeout[menuID + '-closing'] = false;
+ }, 500);
+ }
+}
+
diff --git a/view/theme/frost/lang_selector.tpl b/view/theme/frost/lang_selector.tpl
new file mode 100644
index 000000000..e777a0a86
--- /dev/null
+++ b/view/theme/frost/lang_selector.tpl
@@ -0,0 +1,10 @@
+
diff --git a/view/theme/frost/lock.cur b/view/theme/frost/lock.cur
new file mode 100644
index 000000000..892c5e851
Binary files /dev/null and b/view/theme/frost/lock.cur differ
diff --git a/view/theme/frost/login-bg.gif b/view/theme/frost/login-bg.gif
new file mode 100644
index 000000000..cde836c89
Binary files /dev/null and b/view/theme/frost/login-bg.gif differ
diff --git a/view/theme/frost/login-style.css b/view/theme/frost/login-style.css
new file mode 100644
index 000000000..5b82c11d3
--- /dev/null
+++ b/view/theme/frost/login-style.css
@@ -0,0 +1,108 @@
+body {
+ font-family: helvetica,arial,freesans,clean,sans-serif;
+ font-size: 14px;
+ background-color: #ffffff;
+ color: #505050;/* ZP Change*/
+ margin: 0px;
+}
+
+a, a:visited, a:link { color: #3465a4; text-decoration: none; }
+a:hover {text-decoration: underline; }
+
+img { border :0px; }
+
+.login-button {
+ margin-top: 110px;
+}
+
+img.login-button-image {
+ max-width: 350px;
+}
+
+.section-wrapper {
+ position: relative;
+ width: 800px;
+ margin-left: auto;
+ margin-right: auto;
+ text-align: center;
+}
+
+.login-form {
+ margin-top: 200px;
+}
+
+.register-form {
+ margin-top: 15px;
+}
+
+.lostpass-form {
+ margin-top: 170px;
+}
+
+.field label {
+ position: absolute;
+ margin-left: 0px;
+ font-weight: 700;
+}
+
+.field input {
+/* margin-left: 225px;*/
+ width: 200px;
+}
+
+.openid input {
+ background: url(login-bg.gif) no-repeat;
+ background-position: 0 50%;
+ width: 182px;
+ padding-left: 18px;
+}
+
+#wrapper_username input, #wrapper_password input, #wrapper_openid_url input {
+ margin-left: 225px;
+}
+
+#register-openid-wrapper input, #register-name-wrapper input, #register-email-wrapper input, #register-nickname-wrapper input {
+ margin-left: 275px;
+}
+
+#login-name-wrapper input {
+ margin-left: 200px;
+}
+
+.login-extra-links, .agreement {
+ font-size: 12px;
+}
+
+#login-submit-button, #register-submit-button, #lostpass-submit-button {
+ font-size: 16px;
+}
+
+#register-link {
+ margin-right: 200px;
+}
+
+.error-message {
+ width: 475px;
+ color: #FF0000;
+ font-size: 1.1em;
+ text-align: left;
+ border: 1px solid #FF8888;
+ background-color: #FFEEEE;
+ padding: 10px;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+.register-explain-wrapper {
+ width: 400px;
+ font-size: 12px;
+ text-align: left;
+ margin-left: 200px;
+}
+
+#lostpass-desc {
+ width: 380px;
+ margin-left: 220px;
+ text-align: left;
+ font-size: 12px;
+}
diff --git a/view/theme/frost/login.tpl b/view/theme/frost/login.tpl
new file mode 100644
index 000000000..6f4c97cc5
--- /dev/null
+++ b/view/theme/frost/login.tpl
@@ -0,0 +1,42 @@
+
+
+
+
diff --git a/view/theme/frost/lostpass.tpl b/view/theme/frost/lostpass.tpl
new file mode 100644
index 000000000..f2a802494
--- /dev/null
+++ b/view/theme/frost/lostpass.tpl
@@ -0,0 +1,21 @@
+
diff --git a/view/theme/frost/moderated_comment.tpl b/view/theme/frost/moderated_comment.tpl
new file mode 100755
index 000000000..b0451c8c6
--- /dev/null
+++ b/view/theme/frost/moderated_comment.tpl
@@ -0,0 +1,61 @@
+
diff --git a/view/theme/frost/nav.tpl b/view/theme/frost/nav.tpl
new file mode 100644
index 000000000..e2ea06b90
--- /dev/null
+++ b/view/theme/frost/nav.tpl
@@ -0,0 +1,131 @@
+
diff --git a/view/theme/frost/oembed_video.tpl b/view/theme/frost/oembed_video.tpl
new file mode 100755
index 000000000..d3a9a9311
--- /dev/null
+++ b/view/theme/frost/oembed_video.tpl
@@ -0,0 +1,4 @@
+
diff --git a/view/theme/frost/photo-menu.jpg b/view/theme/frost/photo-menu.jpg
new file mode 100644
index 000000000..fde5eb535
Binary files /dev/null and b/view/theme/frost/photo-menu.jpg differ
diff --git a/view/theme/frost/photo_edit.tpl b/view/theme/frost/photo_edit.tpl
new file mode 100644
index 000000000..e558fdb0e
--- /dev/null
+++ b/view/theme/frost/photo_edit.tpl
@@ -0,0 +1,58 @@
+
+
+
+
diff --git a/view/theme/frost/photo_view.tpl b/view/theme/frost/photo_view.tpl
new file mode 100644
index 000000000..92e115487
--- /dev/null
+++ b/view/theme/frost/photo_view.tpl
@@ -0,0 +1,42 @@
+
+{{ endif }}
+
+$comments
+
+$paginate
+{{ endif }}
+
diff --git a/view/theme/frost/photos_upload.tpl b/view/theme/frost/photos_upload.tpl
new file mode 100644
index 000000000..28a8bb67f
--- /dev/null
+++ b/view/theme/frost/photos_upload.tpl
@@ -0,0 +1,55 @@
+