// JavaScript library for comments

// GLOBAL VARIABLES /////////////////////////////////////
forums_base_url = 'http://forums.thefoat.com/'; /////////
base_url		= 'http://www.thefoat.com/';    /////////
/////////////////////////////////////////////////////////

// CREATE A YAHOO NAMESPACE FOR THE FORUMS
YAHOO.namespace("sgForums");


// FUNCTION TO MAKE A THREAD STICKY VIA AJAX                                                               
function sgForumsSticky(thread_id){
	
	// BUILD THE HTML IDS FROM THE THREAD ID
	var icon_container_id	= "sticky-icon-" + thread_id;
	var btn_container_id	= "sticky-btn-" + thread_id;
	
	// IF THE HTML ELEMENTS DON'T EXIST, JUST RETURN FALSE
	var iconContainer	= getID(icon_container_id);
	var btnContainer	= getID(btn_container_id);
	if(!iconContainer || !btnContainer){
		return false;	
	}
	
	
	// BEGIN URL TO FETCH COMMENT
	var poststr = 'sg=forums.ajax_sticky&th='+ thread_id;
	
	
	// CALLBACK FUNCTION
	var callback = {
		success: function(o) {
			if(o.responseText == ''){
				alert('Sticky Failed!');
				waitingPanel.hide();
			}else{
				// MUST BE JSON RESPONSE
				try {
					var resp = YAHOO.lang.JSON.parse(o.responseText);  
				}
				catch(e) {				
					waitingPanel.hide();
					alert('Invalid Response from Server');
					return false;
				}
				// If server said failure
				if(resp.success == 0){
					waitingPanel.hide();
					alert(resp.message);
					return false;
					
				}
				// SUCCESS
				else{				
					waitingPanel.hide();
					
					// insert unsticky button
					btnContainer.innerHTML	= '<button class="forum-btn"  onclick="sgForumsUnsticky('+ thread_id +');">UN-STICKY</button>';
					
					// insert sticky icon
					iconContainer.innerHTML	= '<img title="Thread is sticky" src="/images/forums/pin.png" >';

				}
			}
			
		},
		
		failure: function(o) {
			alert('Sticky failed');
			waitingPanel.hide();
		}
		
	};
	// initiate a new waiting panel (use "window.xxx" so we can hide it from outside of this function);
	window.waitingPanel = new panelLoading('Making thread sticky.  Please wait...<br />[<a href="javascript:void(0);" onClick="stopIt();waitingPanel.hide()">Stop</a>]');
	// Show the Panel
	waitingPanel.show();
	// start ajax request
	YAHOO.util.Connect.asyncRequest('POST', forums_base_url+'index.php', callback, poststr );
	
}


// FUNCTION TO MAKE A THREAD UN-STICKY VIA AJAX                                                               
function sgForumsUnsticky(thread_id){
	
	// BUILD THE HTML IDS FROM THE THREAD ID
	var icon_container_id	= "sticky-icon-" + thread_id;
	var btn_container_id	= "sticky-btn-" + thread_id;
	
	// IF THE HTML ELEMENTS DON'T EXIST, JUST RETURN FALSE
	var iconContainer	= getID(icon_container_id);
	var btnContainer	= getID(btn_container_id);
	if(!iconContainer || !btnContainer){
		return false;	
	}
	
	
	// BEGIN URL TO FETCH COMMENT
	var poststr = 'sg=forums.ajax_unsticky&th='+ thread_id;
	
	
	// CALLBACK FUNCTION
	var callback = {
		success: function(o) {
			if(o.responseText == ''){
				alert('Sticky Failed!');
				waitingPanel.hide();
			}else{
				// MUST BE JSON RESPONSE
				try {
					var resp = YAHOO.lang.JSON.parse(o.responseText);  
				}
				catch(e) {				
					waitingPanel.hide();
					alert('Invalid Response from Server');
					return false;
				}
				// If server said failure
				if(resp.success == 0){
					waitingPanel.hide();
					alert(resp.message);
					return false;
					
				}
				// SUCCESS
				else{				
					waitingPanel.hide();
					
					// insert unsticky button
					btnContainer.innerHTML	= '<button class="forum-btn"  onclick="sgForumsSticky('+ thread_id +');">STICKY</button>';
					
					// insert sticky icon
					iconContainer.innerHTML	= '';

				}
			}
			
		},
		
		failure: function(o) {
			alert('Sticky failed');
			waitingPanel.hide();
		}
		
	};
	// initiate a new waiting panel (use "window.xxx" so we can hide it from outside of this function);
	window.waitingPanel = new panelLoading('Making thread Un-Sticky.  Please wait...<br />[<a href="javascript:void(0);" onClick="stopIt();waitingPanel.hide()">Stop</a>]');
	// Show the Panel
	waitingPanel.show();
	// start ajax request
	YAHOO.util.Connect.asyncRequest('POST', forums_base_url+'index.php', callback, poststr );
	
}



// FUNCTION TO LOCK A THREAD VIA AJAX                                                               
function sgForumsLock(thread_id){
	
	// BUILD THE HTML IDS FROM THE THREAD ID
	var icon_container_id		= "lock-icon-" + thread_id;
	var btn_container_id		= "lock-btn-" + thread_id;
	var btn_quote_container_id	= "quote-btn-" + thread_id;	
	var btn_reply_container_id	= "reply-btn-" + thread_id;
	
	// IF THE HTML ELEMENTS DON'T EXIST, JUST RETURN FALSE
	var iconContainer			= getID(icon_container_id);
	var btnContainer			= getID(btn_container_id);
	var btnQuoteContainer		= getID(btn_quote_container_id);	
	var btnReplyContainer		= getID(btn_reply_container_id);
	if(!iconContainer || !btnContainer || !btnQuoteContainer || !btnQuoteContainer){
		return false;	
	}
	
	
	// VARIABLES TO SEND
	var poststr = 'sg=forums.ajax_lock&th='+ thread_id;
	
	
	// CALLBACK FUNCTION
	var callback = {
		success: function(o) {
			if(o.responseText == ''){
				alert('Lock Failed!');
				waitingPanel.hide();
			}else{
				// MUST BE JSON RESPONSE
				try {
					var resp = YAHOO.lang.JSON.parse(o.responseText);  
				}
				catch(e) {				
					waitingPanel.hide();
					alert('Invalid Response from Server');
					return false;
				}
				// If server said failure
				if(resp.success == 0){
					waitingPanel.hide();
					alert(resp.message);
					return false;
					
				}
				// SUCCESS
				else{				
					waitingPanel.hide();
					
					// insert unlock button
					btnContainer.innerHTML	= '<button class="forum-btn"  onclick="sgForumsUnlock('+ thread_id +');">UNLOCK THREAD</button>';
					
					// insert locked icon
					iconContainer.innerHTML	= '<img title="Thread is locked" src="/images/forums/icon_lock.png" >';
					
					// hide quote button
					//btnQuoteContainer.innerHTML = '';
					Dom.addClass(btnQuoteContainer, 'hidden');
					
					// hide reply button
					//btnReplyContainer.innerHTML = '';					
					Dom.addClass(btnReplyContainer, 'hidden');

				}
			}
			
		},
		
		failure: function(o) {
			alert('Sticky failed');
			waitingPanel.hide();
		}
		
	};
	// initiate a new waiting panel (use "window.xxx" so we can hide it from outside of this function);
	window.waitingPanel = new panelLoading('Locking thread.  Please wait...<br />[<a href="javascript:void(0);" onClick="stopIt();waitingPanel.hide()">Stop</a>]');
	// Show the Panel
	waitingPanel.show();
	// start ajax request
	YAHOO.util.Connect.asyncRequest('POST', forums_base_url+'index.php', callback, poststr );
	
}


// FUNCTION TO UN-LOCK A THREAD VIA AJAX                                                                           
function sgForumsUnlock(thread_id){
	
	// BUILD THE HTML IDS FROM THE THREAD ID
	var icon_container_id		= "lock-icon-" + thread_id;
	var btn_container_id		= "lock-btn-" + thread_id;
	var btn_quote_container_id	= "quote-btn-" + thread_id;
	var btn_reply_container_id	= "reply-btn-" + thread_id;
	
	// IF THE HTML ELEMENTS DON'T EXIST, JUST RETURN FALSE
	var iconContainer			= getID(icon_container_id);
	var btnContainer			= getID(btn_container_id);
	var btnQuoteContainer		= getID(btn_quote_container_id);
	var btnReplyContainer		= getID(btn_reply_container_id);
	if(!iconContainer || !btnContainer || !btnQuoteContainer || !btnQuoteContainer){
		return false;	
	}
	
	
	// BEGIN URL TO FETCH COMMENT
	var poststr = 'sg=forums.ajax_unlock&th='+ thread_id;
	
	
	// CALLBACK FUNCTION
	var callback = {
		success: function(o) {
			if(o.responseText == ''){
				alert('Unlock Failed!');
				waitingPanel.hide();
			}else{
				// MUST BE JSON RESPONSE
				try {
					var resp = YAHOO.lang.JSON.parse(o.responseText);  
				}
				catch(e) {				
					waitingPanel.hide();
					alert('Invalid Response from Server');
					return false;
				}
				// If server said failure
				if(resp.success == 0){
					waitingPanel.hide();
					alert(resp.message);
					return false;
					
				}
				// SUCCESS
				else{				
					waitingPanel.hide();
					
					// insert unsticky button
					btnContainer.innerHTML		= '<button class="forum-btn"  onclick="sgForumsLock('+ thread_id +');">LOCK THREAD</button>';
					//btnQuoteContainer.innerHTML	= '<button class="forum-btn"  onclick="sgThread('+ thread_id +');">QUOTE</button>';
					//btnQuoteContainer.innerHTML	= '<button class="forum-btn"  onclick="sgThread('+ thread_id +');">Reply</button>';
					
					
					Dom.removeClass(btnQuoteContainer, 'hidden');					
					Dom.removeClass(btnReplyContainer, 'hidden');
					
					// remove sticky icon
					iconContainer.innerHTML	= '';

				}
			}
			
		},
		
		failure: function(o) {
			alert('Unlock failed');
			waitingPanel.hide();
		}
		
	};
	// initiate a new waiting panel (use "window.xxx" so we can hide it from outside of this function);
	window.waitingPanel = new panelLoading('Unlocking Thread.  Please wait...<br />[<a href="javascript:void(0);" onClick="stopIt();waitingPanel.hide()">Stop</a>]');
	// Show the Panel
	waitingPanel.show();
	// start ajax request
	YAHOO.util.Connect.asyncRequest('POST', forums_base_url+'index.php', callback, poststr );
	
}


// GET NEW THREAD AND INSERT IT
YAHOO.sgForums.getNewerThread = function(){
	Dom = YAHOO.util.Dom;
	
	// INITIALIZATION OF VALUES                                                                          
	this.setVars = function(topic_id, newer_than, polling_interval, table_id){
		this.topic_id			= intVal(topic_id);
		this.newer_than 		= newer_than;
		this.polling_interval	= polling_interval;
		if(YAHOO.lang.isUndefined(this.interval_original)){
			this.interval_original 	= polling_interval;
		}
		this.table_id			= table_id;
		this.poststr 			= "sg=forums.ajax_get_newer_thread&t=" + this.topic_id + "&newer_than=" + encodeURI(this.newer_than);
		
		// ARRAY TO CARRY VARS THROUGH TO THE CALLBACK FUNCTION
		this.carry_vars = new Array;
		this.carry_vars['table_id'] = this.table_id;
		this.carry_vars['topic_id'] = this.topic_id;
	};
	
	// ajax request callback function                                                                    
	this.callback = {
		scope: this,
		success: function(o) {
			if(o.responseText == ''){
				//alert('Get New Failed!');
			}else{
				// MUST BE JSON RESPONSE
				try {
					var resp = YAHOO.lang.JSON.parse(o.responseText);  
				}
				catch(e) {			
					alert('Invalid Response from Server');
					//alert(o.responseText);
				}
				// If server said failure
				if(resp.success == 0){
					// SLOW BACK DOWN THE POLLING INTERVAL
					this.setVars(this.topic_id, this.newer_than, this.interval_original, this.table_id);
						this.cancel();
						this.start();
				}else{		
					// create shorcut to returned custom object
					var tr = resp.customObj;
					
					// RESET THE NEWER_THAN VARIABLE
					this.newer_than = tr.when_made;
					
					//alertVar(tr.cells, true);
					
					// NOTE: UNFORTUNATELY, WE CAN'T JUST CREATE A <TR> AND THEN DO AN INNERHTML BECAUSE IE SAYS <TR>.INNERHTML IS READ-ONLY
					
					// CREATE DIV TO IN WHICH INSERT NEW TOPIC CATEGORY	
					var el = document.createElement('tr');
					el.id = tr.id;			
					//alert('topic-table-' + this.topic_id);
					
					// GET A HANDLE ON THE TABLE IN WHICH TO INSERT
					var table = Dom.get('topic-table-' + this.topic_id);
					
					
					
					// GET A HANDLE ON THE TABLE BODY SINCE THE DOM NEEDS TO USE THIS INSTEAD OF THE TABLE ITSELF
					var tBody = table.getElementsByTagName('tbody')[0];

					
					// GET A HANDLE ON THE FIRST ROW IN THE TABLE
					var row1 = Dom.getFirstChild(tBody);
					
					// INSERT NEW ROW AFTER THE TITLE-BAR ROW
					if(row1){				
						Dom.insertAfter(el, row1);
					}else{
						tBody.appendChild(el);
					}
							
					Dom.addClass(el, tr["class"]);
					Dom.setStyle(el, 'height', 0);
					Dom.setStyle(el, 'overflow', 'hidden');
					
					//alertVar(tr.cells.thread_title, true);
					
					// INSERT FIRST BLANK CELL
					var td1 = document.createElement('td');
					el.appendChild(td1);
					Dom.addClass(td1, 'num');
					
					// INSERT 2ND CELL
					var td2 = document.createElement('td');		
					el.appendChild(td2);	
					Dom.addClass(td2, tr.cells.thread_title["class"]);
					
					// INSERT 3RD cell		
					var td3 = document.createElement('td');		
					el.appendChild(td3);			
					Dom.addClass(td3, tr.cells.latest_post["class"]);
					
					// INSERT 4th cell		
					var td4 = document.createElement('td');			
					el.appendChild(td4);		
					Dom.addClass(td4, tr.cells.num_replies["class"]);
					
					// INSERT 5th cell		
					var td5 = document.createElement('td');	;
					el.appendChild(td5);				
					Dom.addClass(td5, tr.cells.num_views["class"]);
					
					
					// SET THE NEXT DATETIME TO THIS THREAD'S CREATION DATE AND EITHER SPEED UP OR SLOW DOWN THE POLLING INTERVAL
					if(tr.num_left > 0){
						this.setVars(this.topic_id, tr.cells.when_made, 1000, this.table_id);
						this.cancel();
						this.start();
					}else{
						this.setVars(this.topic_id, tr.cells.when_made, this.interval_original, this.table_id);
						this.cancel();
						this.start();
					}
					
					var finish = function(){
						
						td1.innerHTML = '<img src="/images/forums/icon_new.png">';		
						td2.innerHTML = tr.cells.thread_title.innerHTML;
						td3.innerHTML = tr.cells.latest_post.innerHTML;
						td4.innerHTML = tr.cells.num_replies.innerHTML;
						td5.innerHTML = tr.cells.num_views.innerHTML;
						Dom.setStyle(el, 'overflow', 'visible');
						Dom.setStyle(el, 'height', 'auto');
					}
					
					var attributes = {   
						height: { from: 0, to: 55 } 
					}; 
					var anim = new YAHOO.util.Anim(el, attributes, 1.5, YAHOO.util.Easing.easeOut);
					anim.onComplete.subscribe(finish);
					
					anim.animate(); 
					//setTimeout(animate_me, 2000);
					
					

				}
			}
			
		},
		
		failure: function(o) {
			//alert('Get New failed');
		},
		
		timeout: 3000
		
	};
	
	// SEND AN AJAX REQUEST                                                                                 
	this.sendRequest = function(){
		// IF A REQUEST IS NOT ALREADY IN PROGRESS
		if( !YAHOO.lang.isObject(this.transaction) ||  (YAHOO.lang.isObject(this.transaction) && !YAHOO.util.Connect.isCallInProgress(this.transaction))   ){
			// start ajax request
			this.transaction = YAHOO.util.Connect.asyncRequest('POST', 'index.php', this.callback, this.poststr );
		}
			
	}
	
	
	// START POLLING                                                                                           
	this.start = function(){
		// usage: later ( when , o , fn , data , periodic )
		this.polling = YAHOO.lang.later ( this.polling_interval , this , this.sendRequest , this.carry_vars , true );
	};
	
	// STOP POLLING                                                                                            
	this.cancel = function() {
		// IF THERE IS AN AJAX CALL IN PROGRESS, STOP IT
		if(YAHOO.util.Connect.isCallInProgress(this.transaction)){
			YAHOO.util.Connect.abort(this.transaction);
		}
		this.polling.cancel();
		
	}
	
	// WHEN THE ESCAPE BUTTON IS CLICKED, CANCEL THE AJAX POLLING AND THE CURRENT REQUEST                          
	this.kl = new YAHOO.util.KeyListener(document, { keys:27 },  							
											  { fn:this.cancel,
												scope:this,
												correctScope:true } );


	
	
	
	//init(3, '2010-05-11 05:40:00', 5000);
	//test();
};

var rotateLatestPosts = function(arrPosts, table_id, interval_seconds){
	
	// MAKE SURE WE ARE PASSED AN OBJECT/ARRAY
	if(!YAHOO.lang.isObject(arrPosts)){
		return false;		
	}
	
	
	// MAKE SURE THE TABLE EXISTS
	this.table = YAHOO.util.Dom.get(table_id);
	
	if(!table){
		return false;	
	}
	
	// SET ITERATION VARIABLES
	this.j = 0;
	this.iMax = arrPosts.length - 1;
	//var debugDiv = Dom.get('debug1');
	//	if(debugDiv){
	//		debugDiv.innerHTML = this.iMax;	
	//	}
	
	// FUNCTION TO INSERT A POST
	this.insertNext = function(){
		//alert(this.i);
		if(this.j > this.iMax){
			this.j++;
			return false;	
		}
		
		var tr = arrPosts[this.j];
		
		//var debugDiv = Dom.get('debug1');
		//if(debugDiv){
		//	debugDiv.innerHTML = debugDiv.innerHTML + '<br />' + j;	
		//}
		
		// CREATE DIV TO IN WHICH INSERT NEW TOPIC CATEGORY	
		var el = document.createElement('div');
		el.id = tr.id;		
		
		Dom.addClass(el, tr["class"]);
		Dom.setStyle(el, 'height', 0);
		Dom.setStyle(el, 'overflow', 'hidden');
				
		// GET A HANDLE ON THE TABLE BODY SINCE THE DOM NEEDS TO USE THIS INSTEAD OF THE TABLE ITSELF
		//this.tBody = table.getElementsByTagName('tbody')[0];
		
		this.tBody = Dom.get(table_id+'-cell');



		
		// GET A HANDLE ON THE FIRST ROW IN THE TABLE
		var row1 = Dom.getFirstChild(tBody);
		
		// INSERT NEW ROW AFTER THE TITLE-BAR ROW
		if(row1){				
			Dom.insertBefore(el, row1);
		}else{
			this.tBody.appendChild(el);
		}
				
		
		//alertVar(tr.cells.thread_title, true);
		
		// INSERT FIRST BLANK CELL
		//var td1 = document.createElement('td');
		//el.appendChild(td1);
		//Dom.addClass(td1, 'num');
		
		// INSERT 2ND CELL
		var td2 = document.createElement('div');		
		el.appendChild(td2);	
		Dom.addClass(td2, tr.cells.thread_title["class"]);
		Dom.setStyle(td2, 'height', 0);
		Dom.setStyle(td2, 'overflow', 'hidden');
		
		// INSERT 3RD cell		
		//var td3 = document.createElement('td');		
		//el.appendChild(td3);			
		//Dom.addClass(td3, tr.cells.latest_post["class"]);
		
		// INSERT 4th cell		
		//var td4 = document.createElement('td');			
		//el.appendChild(td4);		
		//Dom.addClass(td4, tr.cells.num_replies["class"]);
		
		// INSERT 5th cell		
		//var td5 = document.createElement('td');	;
		//el.appendChild(td5);				
		//Dom.addClass(td5, tr.cells.num_views["class"]);
		
		
		
		
		var finish = function(){
			//td1.innerHTML = '<img src="/images/forums/icon_new.png">';
			Dom.setStyle(td2, 'overflow', 'hidden');
			//Dom.setStyle(el, 'min-height', '50px');		
			Dom.setStyle(td2, 'height', '66px');
					
			Dom.setStyle(td2, 'padding', '3px 5px 3px 5px');
			Dom.addClass(td2, 'post-row');
			td2.innerHTML = tr.cells.thread_title.innerHTML;
			
				
			
			// REMOVE LAST ROW
			var lastRow = Dom.getLastChild(this.tBody);
			lastRow.parentNode.removeChild(lastRow);
			
			
			//td3.innerHTML = tr.cells.latest_post.innerHTML;
			//td4.innerHTML = tr.cells.num_replies.innerHTML;
			//td5.innerHTML = tr.cells.num_views.innerHTML;
			//this.insertNext();
			// usage: later ( when , o , fn , data , periodic )
			
			var randomnumber=Math.floor(Math.random()*10);
			if(randomnumber < 2){
				while(randomnumber < 2){
					randomnumber=Math.floor(Math.random()*10);
				}
			}
			
			
			YAHOO.lang.later ( randomnumber*1000 , this , this.insertNext , this.tBody , false );
		}
		
		var attributes = {   
			height: { from: 0, to: 66 } 
		}; 
		this.anim = new YAHOO.util.Anim(el, attributes, 0.5, YAHOO.util.Easing.easeOut);
		this.anim.onComplete.subscribe( function(){finish();});
		this.anim.animate(); 
		this.j = intVal(this.j) + 1;
		
		
		
	}
	
	this.insertNext();
					
					
}


