// Your Mom CMS Javascript
// by jack anderson

var username='';
var captcha='';
var adminuser='';
var isAuthed=0;

$(document).ready(function () {

    // loop through the metadata sections adding the comment handling stuff
    // also add the human readable headers to the content blocks
    $('.metadata').parent().each(function(n,v){
         $.when(addCommentsArea(v)).done(function() {    
            makeItemPretty(v);
         });
    })
    // if we're in admin mode.. we can drag the section items around to set their order
    if(isAdmin)
    {
        $("#sectionContent").dragsort({ placeHolderTemplate: '<li class="sectionItem odd"> </li>', dragSelectorExclude: 'a[href],textarea,input,#commentTextarea' });
        
        $('#adminbox .head,#adminbox .block').hover(function(){
            $("#adminbox .slide-block").animate({top: '-130px'},{duration:'fast', queue: false});
        }, function(){
            $("#adminbox .slide-block").animate({top: '0px'},{duration:'fast', queue: false});
        });           
        username=adminUsername;  
    }
    setupAuthInfo();
    $('#captchaUsernameDialog').dialog({ 
           autoOpen: false,
           modal: true, 
           resizable: false,
           buttons: {
 				"Go": function() {
                                  
                    if($('#captchaUsernameDialog #name').val()=='')
                    {
                         return;
                    }
                    setCookie('captcha_response',$('#captchaUsernameDialog #captcha').val());
                    setCookie('captcha_current',getCookie('captcha'));                    
                    setCookie('username',$('#captchaUsernameDialog #name').val());                    
                    $.post('auth',{},function(data){
                      if(data=='success')
                      {
                          username=getCookie('username');
                          isAuthed=1;
                          setupAuthInfo();
                          $('#captchaUsernameDialog').dialog( "close" );
                         // $('#captchaUsernameDialog fieldset').html('<img src="authsuccess.png" />');
                      }  
                      else
                      {
                          isAuthed=0;
                          $('#captchaimg').attr('src',$('#captchaimg').attr('src')+'?x=x');     
                      }                      
                    });                    
				},
				Cancel: function() {
					$( this ).dialog( "close" );
				}          
           }
    });
}); 
function makeItemPretty(selector)
{
       $(selector).each(function (n,v) { 
               var meta=$(v).data();   
               var theid=$(selector).attr('id'); 
               var title='';
               if(meta['type']=='html') return;
               if(meta['title']) title+='<span id="titletext">'+meta['title']+'</span>';
               else if(meta['type']!='post') title+='<span id="titletext">'+meta['filename']+'</span>';               
               if(meta['timestamp_human']) title+='<span id="whenposted"> posted '+meta['timestamp_human']+ ' ago </span>';         
               $(v).prepend('<h2>'+title+'</h2>');
               $('#'+theid+' #sectionItemDirectLink a').text(' ');
               $('#'+theid+' #sectionItemDirectLink a').addClass('ui-icon').addClass('ui-icon-disk').attr('title','Direct Link').css('background-color','#111');
               if(isAdmin)
               {

                     $('#'+theid+' h2').after('<span id="sectionItemEdit"><a id="sectionItemEditIcon" href="#" onclick="editItem(\''+theid+'\')"></a></span>');             
                     $('#'+theid+' #sectionItemEditIcon').addClass('ui-icon').addClass('ui-icon-pencil').attr('title','Edit Metadata').css('background-color','#111');
                    
               }
               if(meta['type']=='image')
               {
                   $('#'+theid+ ' #sectionItemImageThumbnail img').hover(function() { 
                        var src=$(this).attr('src');
                        var pos=$(this).offset();
                        var srcHeight=this.height;
                        var question=src.indexOf('?');
                        if(question)
                        {
                            src=src.substr(0,question);
                        }
                        var spinnerElem = $('<div class="spinner" style="position: absolute;"></div>');
                        $(spinnerElem).css('top',pos.top).css('left',pos.left);
                        $('body').prepend(spinnerElem);                
                        var newElem = $(this).clone();
                        $(newElem).css('position','absolute').attr('src',src).addClass('zoomImage').css('z-index','999').css('display: none');
                        $(newElem).css('top',pos.top).css('left',pos.left);
                        $(newElem).hover(function(){},function(){ $('.zoomImage').animate({height: srcHeight},function(){$(this).remove();}) });
                        $(newElem).load(function(){     
                            var h=this.height;
                            var w=this.width;
                            if(h==0) h='640';
                            
                            $(this).css('border','1px solid black').css('height',srcHeight).css('display','block').animate({height: h});                            
                            $('.spinner').remove();                        
                            $('body').prepend(newElem); 
                        })
                    
                   },function() { 
                    
                   });
               
               }
               if(meta['description'])
               {
                    $('#'+theid+' #commentLink').before('<div id="sectionItemDescription">'+meta['description']+'</div>');
               
               }
              
        })     
}
function addCommentsArea(selector)
{
    $.when( $(selector).children('.metadata').each(function (n,v) {   
      // Load in the metadata
          $(v).children('li').each(function(mn,mv) { 
                var name=$(mv).find('span#name').first().text();    
                var value=$(mv).find('span#value').first().text();
                if(name) {
                     $.data(selector,name,value);                  
                }                
          })        
    })).done(function() {
    
      // add the comments section
        $(selector).each(function (n,v) { 
               var meta=$(v).data();   
               if(meta['type']=='html') return;               
               var theid=$(selector).attr('id');  
               var commentFunc="loadComments('"+theid+"'); return false;";
               var commentLink= '<div id="commentLink">'+(meta['num_comments']>0?'<a href="#" onclick="'+commentFunc+'">'+ meta['num_comments'] + ' Comments</a>':'<a href="#" onclick="'+commentFunc+'">Leave comment</a>') + '</div>';              
               $(v).append(commentLink);                            
        })     
    })    
}
function loadComments(theid)
{
    var meta=$('#'+theid).data();   
    var commentFunc="hideComments('"+theid+"'); return false;";
    var commentLink= '<a href="#" onclick="'+commentFunc+'">Hide Comments</a>';
      
    // make the comment form and load the comments under the content      
    $('#'+theid).children('#commentLink').html(commentLink);
    var commentForm='<div id="commentForm"><form><textarea id="commentTextarea" name="text"></textarea><span id=""</div></form></div>';    
    $('#'+theid).append('<div id="commentArea">'+commentForm+"</div>");
    $.get(currentSection+'/'+meta['filename'],{getComments: 1},function(data) { 
          var comments=eval('('+data+')');
          $.each(comments,function (n,v) {
          if(v['ts_human']=='') v['ts_human']='just now';
          else v['ts_human']+=' ago';
             $('#'+theid).children('#commentArea').prepend('<div id="aComment"><span id="username">'+v['author']+ '</span><span id="text">'+v['text']+'</span><span id="when">('+v['ts_human']+')</span></div>');   
          });                 
    })
    $('#commentArea #commentTextarea').ready(function () { 
               $('#commentArea #commentTextarea').autoGrow(); 
               $('#commentArea textarea').bind('keypress', function(e) {
                    if(e.keyCode==13){                          
                          postComment(theid);
                    }
               });
           
               
    });
 
    
}
function hideComments(theid)
{
   var meta=$('#'+theid).data();  
   var commentFunc="loadComments('"+theid+"'); return false;";
   var commentLink= ''+(meta['num_comments']>0?'<a href="#" onclick="'+commentFunc+'">'+ meta['num_comments'] + ' Comments</a>':'<a href="#" onclick="'+commentFunc+'">Leave comment</a>') + '';
   $('#'+theid).children('#commentLink').html(commentLink); 
   $('#'+theid).children('#commentArea').remove();
}
function postComment(theid)
{
        if(!isAuthed)  // we must autheticate!
        {
             $('#captchaUsernameDialog').dialog('open');
             return;             
        }
        var meta=$('#'+theid).data(); 
        var text=$('#'+theid+' #commentTextarea').val();
        text=$.trim(text);
        $('#'+theid+' #commentTextarea').val('');
        if(text=='') return false;      
        $('#'+theid+' #commentArea').html('<div id="spinner">SPIN!</div>');          
        $.post(currentSection+'/'+meta['filename'],{addComment: {author: username ,text: text}},function(data) { 
                   $.when(hideComments(theid)).done(function() {
                        loadComments(theid); 
                    });                   
            })
}
function more(theid,start,end)
{
   var meta=$('#'+theid).data();
   $('#'+theid+ ' #sectionItemText pre').load(currentSection+'/'+encodeURIComponent(meta['filename']));
   $('#'+theid+ ' #sectionItemText #more').remove();

}
function setCookie(name,value,days) {
    if (days) {
        var date = new Date();
        date.setTime(date.getTime()+(days*24*60*60*1000));
        var expires = "; expires="+date.toGMTString();
    }
    else var expires = "";
    document.cookie = name+"="+value+expires+"; path=/";
}

function getCookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1,c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
    }
    return null;
}
function showAuth()
{
   $('#captchaUsernameDialog #name').val(username);
   $('#captchaUsernameDialog').dialog('open');
}
function setupAuthInfo()
{
    if(isAdmin)
    {
        $('#authInfo').html('You are the admin'); 
    }
    else if(isAuthed)
    {
        $('#authInfo').html('<a title="authenticate" href="#" onclick="showAuth(); return false;"> Authenticated as '+username+'</a>');    
    }
    else
    {
        $('#authInfo').html('<a title="authenticate" href="#" onclick="showAuth(); return false;">You are not yet autheticated.</a>');    
    }
}
function deleteCookie(name) {
    setCookie(name,"",-1);
}

