LibertyComment = {
	// constants
	'FORM_DIV_ID':'edit_comments',
	'FORM_ID':'editcomment-form',
	'REPLY_ID':null,
	
	// functions
	'attachForm': function(elm, reply_id, root_id){
		LibertyComment.REPLY_ID = reply_id;
		LibertyComment.cancelComment();
		var form_div = MochiKit.DOM.removeElement( LibertyComment.FORM_DIV_ID );
		MochiKit.DOM.insertSiblingNodesAfter( $(elm), form_div );

		var form = $(LibertyComment.FORM_ID);
		if (form.parent_id === undefined){
			var idInput = MochiKit.DOM.INPUT({'type':'hidden', 'name':'parent_id', 'value':root_id});
			form.appendChild( idInput );
		}
		form.parent_id.value = LibertyComment.ROOT_ID = root_id;
		form.post_comment_reply_id.value = reply_id;
		form.post_comment_id.value = "";
		
		form_div.style.display = "block";
		if ( LibertyComment.BROWSER != "ie" ){
			MochiKit.Visual.ScrollTo( form_div );
		}else{
			self.scrollTo( form_div.offsetLeft, form_div.offsetTop );
		}
	},
	'resetForm': function(){
		$(LibertyComment.FORM_ID).reset();
	},
	'detachForm': function(){
		var form_div = $(LibertyComment.FORM_DIV_ID);
		form_div.style.display = "none";
		document.body.appendChild( form_div );
	},
	"sendRequest": function(formdata, callback){
		var url = bitRootUrl+"liberty/ajax_comments.php";
		var params = queryString(formdata);		
		var req = getXMLHttpRequest();
		req.open('POST', url, true);
		req.setRequestHeader('Content-type','application/x-www-form-urlencoded');
		req.setRequestHeader('Content-Length',params.length);
		var post = sendXMLHttpRequest(req,params);
		post.addCallback(callback);
	},
	'previewComment': function(){
		var LC = LibertyComment;
		for( i in LC.prepRequestSrvc ){
			LC.prepRequestSrvc[i]( LC.FORM_ID );
		} 
		var f = MochiKit.DOM.formContents( $(LC.FORM_ID) );
		for (n in f[0]){
			if (f[0][n] == 'post_comment_submit' || f[0][n] == 'post_comment_cancel'){ f[1][n] = null; }
		}
		LC.sendRequest(f,LC.displayPreview);
	},
	'postComment': function(){
		var LC = LibertyComment;
		for( i in LC.prepRequestSrvc ){
			LC.prepRequestSrvc[i]( LC.FORM_ID );
		} 
		var f = MochiKit.DOM.formContents( $(LC.FORM_ID) );
		for (n in f[0]){
			if (f[0][n] == 'post_comment_preview' || f[0][n] == 'post_comment_cancel'){ f[1][n] = null; }
		}
		LC.sendRequest(f,LC.checkRslt);
	},
	'cancelComment': function(ani){
		LibertyComment.cancelPreview(true);
		if (ani == true){
			MochiKit.Visual.blindUp( LibertyComment.FORM_DIV_ID, {afterFinish: function(){
				LibertyComment.detachForm();
				LibertyComment.resetForm();
				
				var reply_div = $('comment_'+LibertyComment.REPLY_ID);
				if ( LibertyComment.BROWSER != "ie" ){
					MochiKit.Visual.ScrollTo( reply_div );
				}else{
					self.scrollTo( reply_div.offsetLeft, reply_div.offsetTop );
				}
			}});
		}else{
			LibertyComment.detachForm();
			LibertyComment.resetForm();
		}
	},
	'cancelPreview': function(ani){
		if ( $('comment_preview') != null){
			if (ani == true){
				MochiKit.Visual.blindUp( $('comment_preview'), {afterFinish: function(){
					MochiKit.DOM.removeElement( $('comment_preview') );
				}});
			}else{
				return	MochiKit.DOM.removeElement( $('comment_preview') );
			}
		}
	},
	'displayPreview': function(rslt){
		if ( $('comment_preview') == null){
			var preview = DIV({'id':'comment_preview'}, null);		
		}else{
			var preview = LibertyComment.cancelPreview();
		}
		preview.style.display = 'none';
		var xml = rslt.responseXML;
		preview.innerHTML = xml.documentElement.getElementsByTagName('content')[0].firstChild.nodeValue;
		preview.style.marginLeft = (LibertyComment.REPLY_ID != LibertyComment.ROOT_ID)?"20px":'0';				
		MochiKit.DOM.insertSiblingNodesBefore( $(LibertyComment.FORM_DIV_ID), preview);
		MochiKit.Visual.blindDown( preview, {afterFinish: function(){		
			if ( LibertyComment.BROWSER != "ie" ){
				MochiKit.Visual.ScrollTo( preview );
			}else{
				//self.scrollTo( preview.offsetLeft, preview.offsetTop );
			}
		}});
	},
	'checkRslt': function(rslt){
		var xml = rslt.responseXML;
		var status = xml.documentElement.getElementsByTagName('code')[0].firstChild.nodeValue;
		if (status == '200'){
			LibertyComment.displayComment(rslt);
		}else{
			//if status is 400, 401, or 405 still call preview - allowing someone to save their typed text.
			LibertyComment.displayPreview(rslt);
		}
	},
	'displayComment': function(rslt){
		var xml = rslt.responseXML;
		var comment =  DIV(null, null);
		comment.innerHTML = xml.documentElement.getElementsByTagName('content')[0].firstChild.nodeValue;
		comment.style.marginLeft = (LibertyComment.REPLY_ID != LibertyComment.ROOT_ID)?"20px":'0';
		comment.style.display = 'none';
		if (LibertyComment.SORT_MODE == "commentDate_asc"){
			MochiKit.DOM.insertSiblingNodesBefore( $('comment_'+LibertyComment.REPLY_ID+'_footer'), comment );
		}else{
			MochiKit.DOM.insertSiblingNodesAfter( $('comment_'+LibertyComment.REPLY_ID), comment );
		}

		LibertyComment.cancelPreview( true );
		MochiKit.Visual.blindUp( LibertyComment.FORM_DIV_ID, {afterFinish: function(){
			LibertyComment.detachForm();
			LibertyComment.resetForm();
			MochiKit.Visual.blindDown( comment, {afterFinish: function(){
				if ( LibertyComment.BROWSER != "ie" ){
					MochiKit.Visual.ScrollTo( comment );				
				}else{
					//self.scrollTo( comment.offsetLeft, comment.offsetTop );
				}
			}});
		}});
	},
	/* an array of functions that will be called before form is posted
	 * comment formid is passed to each function
	 * example: 
	 * func = function(formid){do something};
	 * LibertyComment.prepRequestSrvc.push(func);*/
	"prepRequestSrvc": new Array()
}
