(function(){

/*
	Class: Masthead 
	The base class for a collection of navigation components 
*/
function Masthead()
{
	this.htmlObj = null;
}

Masthead.prototype.toString = function() { return "[SB.ui.Masthead]"; }

//Group: Basic Methods 
/*
	Function: setConfig
	Establishes the basic setup for the Masthead.
	
	inConfig - A configuration array (key/value)

	Configuration Array Options:
	id - the id of the div to use as a template (default:none)
*/
Masthead.prototype.setConfig = function( inConfig )
{
	if( inConfig.id )
	{
		this.htmlObj = YUIDom.get( inConfig.id );
/*
		var arr = YUIDom.getElementsByClassName( "sb_topbanner_boxtitle", "div", this.htmlObj );
		if( arr[0] ) this.titleNameObj = arr[0];
*/

		SButil.EventManager.addListener("BoxItemActivated", this.onBoxActivated, this);
		SButil.EventManager.addListener("BoxItemDeactivated", this.onBoxDeactivated, this);
		SButil.EventManager.addListener("BoxItemsLoaded", this.setTitleNameCallback, this);
		SButil.EventManager.addListener("BoxSharedListLoaded", this.setSharedListCallback, this);
		SButil.EventManager.addListener("SwitchViewMode", onViewSwitch, this);
		SButil.EventManager.addListener("SearchStarted", this.searchPerformed, this);
		
		YUIEvent.addListener( "sb_crate_title_top", "mouseover", this.showTitleLongName, this, false );
		YUIEvent.addListener( "sb_crate_title_top_full", "mouseout", this.showTitleShortName, this, false );
		YUIEvent.addListener( "sb_edit_box_description", "click", toggleBoxDescriptionEdit, this, true );

		if( YUIDom.get("sb_box_add_comment") )
		{
			YUIEvent.addListener( "sb_box_add_comment", "click", this.boxAddComment, this, true );
			YUIEvent.addListener( "sb_box_comment_input", "keypress", this.onKeyPress, this, true );
		}

		var masthead = this;

		if( YUIDom.get("sb_box_comment_list") )
		{
			this.boxCommentEmpty = YUIDom.get("sb_box_comment_list").innerHTML;

			if( YUIDom.get("sb_box_comment_input") )
			{
				this.boxCommentInputText= YUIDom.get("sb_box_comment_input").value;
			}
		}
	}
};

Masthead.prototype.onBoxDeactivated = function( inEvent, inArgs )
{
	YUIDom.get("sb_menutopic_options").style.display = "none";
	YUIDom.get("sb_menutopic_boxconversation").style.display = "none";
	YUIDom.get("sb_menutopic_sharing").style.display = "none";
};

Masthead.prototype.onBoxActivated = function( inEvent, inArgs )
{
	this.nocomments = true;
	var box = inArgs[0];
	this.changeViewType( box.view_type );
	this.setBoxDiscussionInfo( box );

	this.num_comments = 0;
	YUIDom.getElementsByClassName("sb_box_comment_num", "span", this.htmlObj, function(el) { el.innerHTML = "0"; } );


	YUIDom.getElementsByClassName( "sb_topbanner_boxtitle", "div", this.htmlObj, function(el) { el.innerHTML = box.box_obj.name.trunc(el.parentNode,false); } );


	var arr = YUIDom.getElementsByClassName( "sb_box_public_emb_url", "div", this.htmlObj ); 
	for( el in arr ) { arr[el].innerHTML = YUIDom.get("sb_box_public_emb_url_tmp").innerHTML.replace("BOXID",box.box_obj.id);}
	
	var arr = YUIDom.getElementsByClassName( "sb_box_public_emb_rss", "div", this.htmlObj ); 
	for( el in arr ) { arr[el].innerHTML = YUIDom.get("sb_box_public_emb_rss_tmp").innerHTML.replace("BOXID",box.box_obj.id);}

	var arr = YUIDom.getElementsByClassName( "sb_box_public_emb_atom", "div", this.htmlObj ); 
	for( el in arr ) { arr[el].innerHTML = YUIDom.get("sb_box_public_emb_atom_tmp").innerHTML.replace("BOXID",box.box_obj.id);}
};


Masthead.prototype.setPublic = function()
{
	var box = SButil.StateManager.currentBox.box_obj;

	var pub = (box.public == "1")?"0":"1";

	var url = "/box/setpublic/";
	var cb = { success:onSetPublicCallback, arguments:{ public:pub } };
	var pd = "id="+box.id+"&public="+pub;

	YUIRequest.asyncRequest( "POST", url, cb, pd );

	YUIDom.getElementsByClassName( "sb_box_public_links", "div", this.htmlObj, 
			function(elm) { 
				if( pub == "1" )
					elm.style.display="block"; 
				else
					elm.style.display="none"; 
			} );
};

function onSetPublicCallback( inReq )
{
	var result = YUIJSON.parse( inReq.responseText );

	var box = SButil.StateManager.currentBox.box_obj;
	box.public = this.arguments.public;
}

Masthead.prototype.setTwitter = function()
{
	var box = SButil.StateManager.currentBox.box_obj;

	var pub = (box.twitter == "1")?"0":"1";
	box.twitter = pub;


	var def = YUIDom.get( "sb_box_twitter_status_default" );
	var text = def.innerHTML;

	var elm = YUIDom.get( "sb_box_twitter_status" );
		 elm.value = text.replace("BOXNAME", box.name);

	var url = "/box/setservice/";
	var pd = "id="+box.id+"&service_id=1&activated="+pub+"&extra="+encodeURIComponent(text);

	YUIRequest.asyncRequest( "POST", url, null, pd );

	YUIDom.getElementsByClassName( "sb_box_public_twitter", "div", this.htmlObj, 
			function(elm) { 
				if( pub == "1" )
					elm.style.display="block"; 
				else
					elm.style.display="none"; 
			} );
};

Masthead.prototype.editTwitterStatus = function()
{
	var elm = YUIDom.get( "sb_box_twitter_status" );
		 elm.style.border="#000 1px solid"; 
		 elm.style.color="#000";
};

Masthead.prototype.commitTwitterStatus = function()
{
	var box = SButil.StateManager.currentBox.box_obj;

	var elm = YUIDom.get( "sb_box_twitter_status" );
	var text = elm.value;

	var url = "/box/setservice/";
	var pd = "id="+box.id+"&service_id=1&activated=1&extra="+encodeURIComponent(text);
	YUIRequest.asyncRequest( "POST", url, null, pd );

	var elm = YUIDom.get( "sb_box_twitter_status" );
		 elm.style.border="#999 1px solid"; 
		 elm.style.color="#999";
};

function onSetTwitterCallback( inReq )
{
}


Masthead.prototype.setBoxDiscussionInfo = function( inBox )
{
	var owner = YUIDom.get("sb_box_owner_title");
	var desc = YUIDom.get("sb_box_description_text");

	if( !desc ) return; //No description text

	desc.setAttribute("editing","0");


	owner.innerHTML = inBox.box_obj.owner_username;
	if( inBox.box_obj.desc.length )
		desc.innerHTML = inBox.box_obj.desc.replace(/\n/g,"<br />");
	else
		YUIDom.get("box_description_body").style.display="none";

	var boxCommentList = YUIDom.get("sb_box_comment_list");
	var arr = YUIDom.getChildren( boxCommentList );
	for( el in arr ) { boxCommentList.removeChild( arr[el] ); }

	var url = "/box/getcomments/?id="+inBox.box_obj.id;
	var cb = { success:getCommentsCallback, arguments:{ obj:this } };
	YUIRequest.asyncRequest( "GET", url, cb );

};

function getCommentsCallback( inReq )
{
	var commentList = YUIJSON.parse( inReq.responseText );

	var boxCommentList = YUIDom.get("sb_box_comment_list");
	var commentSep= YUIDom.get("sb_box_comment_seperator");

	if( commentList.length == 0 ) 
	{
		boxCommentList.innerHTML = this.arguments.obj.boxCommentEmpty;
	} else {
		this.arguments.obj.nocomments = false;
	}

	this.arguments.obj.num_comments = commentList.length;
	var num_comments = commentList.length;
	YUIDom.getElementsByClassName("sb_box_comment_num", "span", this.arguments.obj.htmlObj, function(el) { el.innerHTML = num_comments; } );


	for( var i = 0; i < commentList.length; i++ )
	{
		var comment = YUIDom.get("sb_box_comment").cloneNode(true);

		var d = new Date( (commentList[i].date_added * 1000) );

		YUIDom.getElementsByClassName( "sb_box_comment_name", "div", comment, function(el) { el.innerHTML = commentList[i].user.trunc( el, false); } );
		YUIDom.getElementsByClassName( "sb_box_comment_time", "div", comment, function(el) { el.innerHTML = d.toLocaleDateString() + " " + d.toLocaleTimeString(); } );
		YUIDom.getElementsByClassName( "sb_box_comment_text", "div", comment, function(el) { el.innerHTML = commentList[i].text; } );

		boxCommentList.appendChild( comment );	
		boxCommentList.appendChild( commentSep.cloneNode(true) );	
	}
}

Masthead.prototype.boxAddComment = function( inEvent )
{
	var commentInput = YUIDom.get("sb_box_comment_input");
	var commentText = commentInput.value;
	var url = "/box/addcomment";
	var pd = "id="+SButil.StateManager.currentBox.box_obj.id;
	    pd += "&comment="+encodeURIComponent(commentInput.value);
	var cb = { success:boxAddCommentCallback };

	YUIRequest.asyncRequest( "POST", url, null, pd );

	commentInput.value = this.boxCommentInputText;

	var boxCommentList = YUIDom.get("sb_box_comment_list");
	var commentSep= YUIDom.get("sb_box_comment_seperator");

	if( this.nocomments )
	{
		boxCommentList.innerHTML = "";
		this.nocomments = false;
	}

	var comment = YUIDom.get("sb_box_comment").cloneNode(true);

	var d = new Date(); 
	var user = SButil.StateManager.username;

	YUIDom.getElementsByClassName( "sb_box_comment_name", "div", comment, 
			function(el) { el.innerHTML = user.trunc( el, false); } );
	YUIDom.getElementsByClassName( "sb_box_comment_time", "div", comment, 
			function(el) { el.innerHTML = d.toLocaleDateString() + " " + d.toLocaleTimeString(); } );
	YUIDom.getElementsByClassName( "sb_box_comment_text", "div", comment, 
			function(el) { el.innerHTML = commentText  } );

	boxCommentList.appendChild( comment );	
	boxCommentList.appendChild( commentSep.cloneNode(true) );	
	var num_comments = (++this.num_comments);
	YUIDom.getElementsByClassName("sb_box_comment_num", "span", this.htmlObj, function(el) { el.innerHTML = num_comments; } );
}

function boxAddCommentCallback( inReq ) { }

function toggleBoxDescriptionEdit( inEvent )
{
	var desc = YUIDom.get("sb_box_description_text");
	var editbutton = YUIDom.get("sb_box_edit_desc_start");
	var actionbutton = YUIDom.get("sb_box_edit_desc_action");
	var save_button = YUIDom.get("sb_save_box_desc");
	if( desc.getAttribute("editing") == "0" )
	{
		var ta = document.createElement("textarea");
		ta.className = "sb_box_desc_enabled";
		this.origDesc = desc.innerHTML;
		desc.innerHTML = "";
		desc.appendChild( ta );
		desc.setAttribute("editing","1");
		ta.value = this.origDesc;
		editbutton.style.display = "none";
		actionbutton.style.display = "block";
	}
	else
	{
		var text = this.origDesc;

		if( YUIEvent.getTarget( inEvent ) == save_button )
		{
			text = desc.firstChild.value;
			var box = SButil.StateManager.currentBox;

			box.box_obj.desc = text;

			var url = "/box/update";
			var pd = "id="+box.box_obj.id;
			    pd += "&desc="+encodeURIComponent(text);
			YUIRequest.asyncRequest( "POST", url, null, pd );
		}

		desc.removeChild(desc.firstChild);
		desc.innerHTML = text;
		desc.setAttribute("editing","0");

		editbutton.style.display = "block";
		actionbutton.style.display = "none";
	}
}

Masthead.prototype.changeViewType = function( inView )
{
	var freechoice = YUIDom.get("sb_viewchoice_free");
	var gridchoice = YUIDom.get("sb_viewchoice_grid");
	var listchoice = YUIDom.get("sb_viewchoice_list");

	if( !freechoice ) return; //No view selection available

	freechoice.className = "sb_viewchoice";
	gridchoice.className = "sb_viewchoice";
	listchoice.className = "sb_viewchoice";

	switch( inView )
	{
		case   1: listchoice.className = "sb_viewchoice selected"; break;
		case   2: gridchoice.className = "sb_viewchoice selected"; break;
		case   3: freechoice.className = "sb_viewchoice selected"; break;
		default : listchoice.className = "sb_viewchoice selected"; break;
	}

};

Masthead.prototype.sendNewShareRequest = function( inBox )
{
	var input = YUIDom.get("invite_input").value;
	var subject= YUIDom.get("invite_subject").value;
	var name = YUIDom.get("invite_name").value;
	var message = YUIDom.get("invite_message").value;

	var box = SButil.StateManager.currentBox.box_obj.id;

	var url = "/box/share";
	var pd =  "id="+box+"&email_list="+encodeURIComponent(input);
	    pd += "&subject="+encodeURIComponent(subject);
	    pd += "&name="+encodeURIComponent(name);
	    pd += "&message="+encodeURIComponent(message);
	var cb = { success:newShareRequestCallback };
	YUIRequest.asyncRequest("POST", url, cb, pd ); 

	toggleMastheadPulldowns('sb_invite');
};

function newShareRequestCallback( inReq )
{
	var resp = YUIJSON.parse( inReq.responseText );
	var shareList = resp;

	var box = SButil.StateManager.currentBox;

	box.box_obj.num_shared = (shareList.sbusers.length + shareList.public_users.length );

	box.box_obj.share_list.removeAll();	

	var i = 0;
	for( ; i < shareList.sbusers.length; i++ )
		box.box_obj.share_list.append( { name:shareList.sbusers[i], sbuser:1} );

	for( i = 0 ; i < shareList.public_users.length; i++ )
		box.box_obj.share_list.append( { name:shareList.public_users[i], sbuser:0} );

	SButil.EventManager.fireEvent( "BoxSharedListLoaded", { box:box } );

}

Masthead.prototype.setSharedListCallback = function( inEvent, inArgs )
{
	var box = inArgs[0].box.box_obj; 
	this.updateSharingInformation( box );
};

Masthead.prototype.updateSharingInformation = function( box )
{
	YUIDom.getElementsByClassName( "sb_box_num_shared", "span", this.htmlObj, function(el) { el.innerHTML = box.num_shared } );

	var shareListObj = YUIDom.get("shared_people");
	var arr = YUIDom.getChildren( shareListObj );
	for( el in arr )
	{
		shareListObj.removeChild( arr[el] );
	}

	if( box.share_list.size() == 0 )
	{
		YUIDom.get("menucontent_notshared").style.display = "block";
		YUIDom.get("menucontent_shared").style.display = "none";
	}
	else
	{
		YUIDom.get("menucontent_shared").style.display = "block";
		YUIDom.get("menucontent_notshared").style.display = "none";

		for( var i = 0; i < box.share_list.size(); i++ )
		{
			var shareItem = YUIDom.get("sb_box_share_list_item").cloneNode( true );
			var shareUser = box.share_list.get(i);

			var arr = YUIDom.getElementsByClassName( "sb_box_share_email", "span", shareItem );
			if( arr[0] ) arr[0].innerHTML = shareUser.name;

			var arr = YUIDom.getElementsByClassName( "sb_itemrow_role", "div", shareItem );
			if( arr[0] ) arr[0].innerHTML = (shareUser.sbuser == 1)?"SimplyBox User":"Invited Guest";

			var arr = YUIDom.getElementsByClassName( "sb_box_share_remove", "a", shareItem );
			if( arr[0] ) 
			{
				YUIEvent.addListener( arr[0], "click", this.removeShareEntry, this, true );
				arr[0].id = shareUser.name;
			}

			shareListObj.appendChild( shareItem );
		}
	}
};

Masthead.prototype.removeShareEntry = function( inEvent )
{
	var el = YUIEvent.getTarget( inEvent );

	el.parentNode.parentNode.removeChild( el.parentNode );

	var url = "/box/removeshareduser/";
	var cb = { success:removeShareEntryCallback };
	var pd = "id="+SButil.StateManager.currentBox.box_obj.id;
	    pd += "&email="+encodeURIComponent(el.id);

	YUIRequest.asyncRequest( "POST", url, cb, pd );
};

function removeShareEntryCallback( inReq )
{
	var resp = YUIJSON.parse( inReq.responseText );
	var shareList = resp;

	var box = SButil.StateManager.currentBox;

	box.box_obj.num_shared = (shareList.sbusers.length + shareList.public_users.length );

	box.box_obj.share_list.removeAll();	

	var i = 0;
	for( ; i < shareList.sbusers.length; i++ )
		box.box_obj.share_list.append( { name:shareList.sbusers[i], sbuser:1} );

	for( i = 0 ; i < shareList.public_users.length; i++ )
		box.box_obj.share_list.append( { name:shareList.public_users[i], sbuser:0} );

	SButil.EventManager.fireEvent( "BoxSharedListLoaded", { box:box } );
}

Masthead.prototype.setTitleNameCallback = function( inEvent, inArgs )
{
	var box = inArgs[0].box; 
	if (box.box_obj.name  && YUIDom.get("sb_crate_title_top_full") ) {
		YUIDom.get("sb_crate_title_top_full").innerHTML = box.box_obj.name;
		this.setTitleName( box.box_obj.name );
	}
};


Masthead.prototype.searchPerformed = function( inEvent, inArgs )
{
	var query= inArgs[0].query; 
	YUIDom.get("sb_crate_title_top_full").innerHTML = query;
	this.setTitleName( query );
};
/*
	Function: setTitleName
	Sets the displayed tab name
*/
Masthead.prototype.setTitleName = function( boxName )
{	
    if ( boxName && this.titleNameObj ) { 
		var titleTranc = boxName.trunc("sb_crate_title_top");
		this.titleNameObj.innerHTML = titleTranc;
	}
};

Masthead.prototype.showTitleLongName = function( e, obj )
{
	var fullTitle = YUIDom.get("sb_crate_title_top_full");
	var shortTitle = YUIDom.get("sb_crate_title_top");

	if ( fullTitle.innerHTML.length <= shortTitle.innerHTML.length) {
		return;
	}
	fullTitle.style.display = "block";
	shortTitle.style.display = "none";
}

Masthead.prototype.showTitleShortName = function( e, obj )
{
	YUIDom.get("sb_crate_title_top_full").style.display = "none";
	YUIDom.get("sb_crate_title_top").style.display = "block";
}

Masthead.prototype.onKeyPress = function( e )
{
   var key;

   if(window.event)
          key = window.event.keyCode;     //IE
   else
          key = e.which;     //firefox

   if(key == 13)
   {
	   var el = YUIEvent.getTarget(e);
	   if( el.id == "sb_box_comment_input" )
		this.boxAddComment();	   

	   else if( el.id == "invite_input" )
		this.sendNewShareRequest();	   
   }
}

function onViewSwitch( inEvent, inArgs )
{
	this.changeViewType( inArgs[0] );
}

function toggleEditInvite( ev )
{
	var invite = YUIDom.get("sb_invite_message_form");
	if( invite.style.display == "none" )
		invite.style.display = "block";
	else
		invite.style.display = "none";
}

window['SB']['ui']['Masthead'] = new Masthead();

})();
