/* $Id: webchat.js 818 2009-08-16 01:06:06Z mblaschke $ */

/* ------------------------------------------------------------------------- */

/**
 * Standard methods
 */
ssorg = {};

ssorg.page = {
	autoRefreshTimer: false,
	autoRefreshTime:  0,

	refresh: function() {
		var ajaxUrl = window.location+"";
		var nocacheDate = Math.round(new Date().getTime()/1000);

		// update nocache
		if( ajaxUrl.search(/nocache=[0-9]*/) != -1 ) {
			ajaxUrl = ajaxUrl.replace(/nocache=[0-9]*/, 'nocache='+nocacheDate);
		} else if( ajaxUrl.search(/\?/) != -1 ) {
			ajaxUrl = ajaxUrl + '&nocache='+nocacheDate;
		} else {
			ajaxUrl = ajaxUrl + '?nocache='+nocacheDate;
		}

		$.get(ajaxUrl, function(data) {
			$("#pageBody").html( data );
		});
	},

	setAutoRefresh: function(time) {
		// clear timeout
		try{
			window.clearTimeout(ssorg.page.autoRefreshTimer);
		} catch(e) {}

		ssorg.page.autoRefreshTime = time * 1000;
		this.autoRefreshTimer = window.setTimeout(function() {ssorg.page.autoRefresh();}, ssorg.page.autoRefreshTime);
	},

	autoRefresh: function() {
		// clear timeout
		try{
			window.clearTimeout(ssorg.page.autoRefreshTimer);
		} catch(e) {}

		ssorg.page.refresh();

		ssorg.page.autoRefreshTimer = window.setTimeout(function() {ssorg.page.autoRefresh();}, ssorg.page.autoRefreshTime);
	}

}
ssorg.page.message = {
	autoHideTimer: false,

	show: function(message, type, timeout) {
		var elementMessage = $("#pageMessage");
		var elementWrapper = $("#pageMessageWrapper");

		if(this.autoHideTimer) {
			 window.clearTimeout(this.autoHideTimeout);
			 elementWrapper.fadeOut('50');
		}

		elementMessage.html(message);
		elementWrapper.removeAttr("class");
		if(!type) {
			type = "info";
		}
		elementWrapper.addClass("ssorg-messagebox-"+type);

		elementWrapper.slideDown('200');

		if(!timeout) {
			timeout = 5000;
		}

		this.autoHide(timeout);
	},

	hide: function() {
		if(this.autoHideTimer) {
			 window.clearTimeout(this.autoHideTimeout);
		}

		$("#pageMessageWrapper").slideUp('200');
	},

	autoHide: function(time) {
		if(this.autoHideTimer) {
			 window.clearTimeout(this.autoHideTimer);
		}

		this.autoHideTimer = window.setTimeout( function() {ssorg.page.message.hide()}, time );
	}
}


ssorg.app = {};

ssorg.app.vote = {
	pro: function(id) {
		this._internalVote("vote", id);
		return false;
	},

	contra: function(id) {
		this._internalVote("bash", id);
		return false;
	},

	proCurrent: function(id) {
		this._internalVoteCurrent("vote", id);
		return false;
	},

	contraCurrent: function(id) {
		this._internalVoteCurrent("bash", id);
		return false;
	},

	_internalVote: function(type, id) {
		if( !ajaxControllerUrl ) {
			return false;
		}

		$.getJSON(ajaxControllerUrl, {method: "chartVote", action: type, id: id},
			function(data) {
				if( data ) {
					var status = parseInt(data[0]);
					var messageType = false;

					switch(status) {
						case 1:
							$("#ssorg-vote-button-"+id).fadeOut('200');
							break;

						case -3:
						case 0:
							// failed!?
							messageType = "warning";
							break;

						case -1:
							$("#ssorg-vote-button-"+id).fadeOut('200');
							messageType = "info";
							break;

						case -2:
							$(".ssorg-vote-buttons").fadeOut('200');
							messageType = "info";
							break;
					}

					var statusLimit = parseInt(data[1]);
					if(statusLimit) {
						$(".ssorg-vote-buttons").fadeOut('200');
					}

					if(data[2]) {
						ssorg.page.message.show(data[2], messageType, 10000);
					}
				}
			}
		);
	},

	_internalVoteCurrent: function(type, id) {
		if( !ajaxControllerUrl ) {
			return false;
		}

		$.getJSON(ajaxControllerUrl, {method: "chartVoteCurrent", action: type},
			function(data) {
				if( data ) {
					data = parseInt(data);
					switch(data) {
						case 1:
							$("#ssorg-vote-button-"+id).fadeOut('200');
							break;

						case -3:
						case 0:
							// failed!?
							break;


						case -1:
							$("#ssorg-vote-button-"+id).fadeOut('200');
							break;

						case -2:
							$(".ssorg-vote-buttons").fadeOut('200');
							break;
					}
				}
			}
		);

		return true;
	}
}


/******************************************************************************
* sxFramework
******************************************************************************/



function sxWindowOpen(url, title, width, height) {
	var sxWindow = window.open(url, title, "width="+width+",height="+height+",status=yes,scrollbars=yes,resizable=yes");
	sxWindow.focus();
}

function sxEventPropagationStop( event ) {
	if (!event) {
		var event = window.event;
	}

	event.cancelBubble = true;
	if (event.stopPropagation) {
		event.stopPropagation();
	}
}

function sxFormSubmitForm( formElementName ) {
	var formularElement;
	var result;

	if(typeof(formElementName) == "string") {
		// id of element
		formularElement = document.getElementById(formElementName);
	} else {
		// form object
		formularElement = formElementName;
	}

	if(formularElement) {
		if(formularElement.onsubmit) {
			// handle onsubmit

			try {
				// try to call the onsubmit-event manually
				result = formularElement.onsubmit();
			} catch(e) {
				// catched an error, maybe an empty onsubmit
				result = true;
			}

			if(result == true || typeof(result) == "undefined") {
				// onsubmit passed the submit, now fire submit()
				formularElement.submit();
			}
		} else {
			// simple submit
			formularElement.submit();
		}
	}
}

function sxFormElementSubmit( event, sender ) {
	if( event.keyCode == 13 || event.which == 13 ) {
		sxFormSubmitForm(sender.form);
		return false;
	}
	return true;
}

function ssorgTooltipInit(hoverElement, tooltipElement) {
	$(document).ready(function(){
        $("div#"+hoverElement).easyTooltip({
                useElement: tooltipElement
        });
	});
}

function ssorgElementToggle(elementId) {
	var element = document.getElementById(elementId);
	if(element) {
		if( element.style.display == "none") {
			element.style.display = "block";
		} else {
			element.style.display = "none";
		}
	}
}

function ssorgElementHide(elementId) {
	var element = document.getElementById(elementId);
	if(element) {
		element.style.display = "none";
	}
}

/* $Id: webchat.js 832 2009-09-02 21:59:44Z mblaschke $ */
var sxJavaChatAwayStatus	= false;
var sxJavaChatConnectStatus	= true;

/******************************************************************************
* COMMON
******************************************************************************/

function sxNicknameChange(sender) {
	var newNickname = sender.value;
	
	var tabWrapper = document.getElementById("ssorg-webchat-tab");
	if(tabWrapper) {
		var tabItems = tabWrapper.getElementsByTagName("li");
		var tabItemCount = tabItems.length;

		for(var i=0; i<tabItemCount; i++) {
			var tabItem = tabItems[i];
	
			if(tabItem) {
				var tabItemLinks = tabItem.getElementsByTagName("a");

				if( tabItemLinks && tabItemLinks[0] ) {
					var tabItemLinkItem = tabItemLinks[0];
					
					tabItemLinkItem.href = tabItemLinkItem.href.replace(/nickname=[^&#?]+/, 'nickname='+encodeURIComponent(newNickname));
				}
			}
		}
	}
}

function sxCommonChatSetJavascript(form) {
	//-------------------------------
	// set interface
	//-------------------------------
	try {
		form.interface.value = window.opera?(document.childNodes ?  "opera7" : "opera") : (navigator.product=="Gecko" ? "mozilla" : document.all?"ie":"nonjs");
	} catch (e) {
	}
	
	//-------------------------------
	// validate nickname
	//-------------------------------
	try {
		var nickname = form.Nickname.value
	
		// replace spaces
		nickname = nickname.replace(/ /g, "_");

		// replace not alloed chars (basic-irc and latin1)
		nickname = nickname.replace(/[^-_a-zA-Z0-9\[\\\]^\{|\}äöüÄÖÜß]/g, "");

		// try to make nick shorter if exceed max-char-limit
		if( nickname.length > 32 ) {
			nickname = nickname.replace(/__/g, "_");
		}
		
		form.Nickname.value = nickname
	} catch(e) {
	}
}

function sxCommonChatGetWindowSize() {
	var ret = '';
	var windowHeight	= 600;
	var windowWidth		= 800;


	if(sxPopupHeight && parseInt(sxPopupHeight) > 250 ) {
		windowHeight = parseInt(sxPopupHeight);
	}

	if(sxPopupWidth && parseInt(sxPopupWidth) > 250 ) {
		windowWidth = parseInt(sxPopupWidth);
	}

	if(window.screen) {
		var w = screen.availWidth < windowWidth ? screen.availWidth - 10 : windowWidth-20;
		var h = screen.availHeight < windowHeight ? screen.availHeight - 40 : windowHeight-40;
		ret =  ",width="+w+",height="+h+",top="+((screen.availHeight-h)/4)+',left='+((screen.availWidth-w)/2);
	}

	return ret;
}

/******************************************************************************
* JAVA CHAT
******************************************************************************/
function sxJavaChatOpen( form ) {
	// fetch variables
	var nickname = form.Nickname.value;
	var newWindow = form.newwindow.checked;

	// make some settings
	sxJavaChatSettings(form);

	// open chat
	if( newWindow ) {
		form.target = "sxJavaChatWindow";
		window.open( "about:blank", "sxJavaChatWindow", "resizable=yes,toolbars=no,status=no,directories=no,location=no,menubar=no,scrollbars=no" + sxCommonChatGetWindowSize());
	} else {
		form.target = "_self";
	}

	return true;
}

function sxJavaChatSettings(form) {
	sxCommonChatSetJavascript(form);
}

function sxJavaChatAppletSend(message) {
	var sxWebchatApplet	= document.getElementById("ssorg-chat-java-applet");
	if(sxWebchatApplet) {
		sxWebchatApplet.sendString(message);
	}
}

function sxJavaChatSelectCommand(element) {
	if(!element) {
		return false;
	}
	
	var selectedIndex		= element.selectedIndex;
	var selectedElement	= element.options[selectedIndex].value;

	switch(selectedElement) {
		//-------------------------------
		// COMMAND: ddcsend
		//-------------------------------
		case "dccsend":
			var nickname	= prompt('Welcher Person möchtest du eine Datei senden?');
			if (nickname != null) {
				sxJavaChatAppletSend('/dcc send '+ nickname +' *');
			}
			break;
			
		//-------------------------------
		// COMMAND: ddcchat
		//-------------------------------
		case "dccchat":
			var nickname	= prompt('Mit welcher Person soll ein direkter Chat aufgebaut werden?');
			if (nickname != null) {
				sxJavaChatAppletSend('/dcc chat '+ nickname +' *');
			}
			break;
			
		//-------------------------------
		// COMMAND: away
		//-------------------------------
		case "away":
			if(sxJavaChatAwayStatus) {
				// user want come back
				element.options[selectedIndex].text = "Abwesend melden";
				sxJavaChatAppletSend("/away");
				sxJavaChatAwayStatus=false;
			} else {
				// user want go away
				
				var awayMessage = prompt("Grund für Abwesenheit?");
				if(awayMessage) {
					sxJavaChatAppletSend("/away "+awayMessage);
					sxJavaChatAwayStatus = true;
					
					element.options[selectedIndex].text = "Abwesend zurücknehmen";
				}
			}
			break;
	
		//-------------------------------
		// COMMAND: connect
		//-------------------------------
		case "connect":
			if(sxJavaChatConnectStatus) {
				element.options[selectedIndex].text = "Verbinden";
				sxJavaChatAppletSend("/quit");
			} else {
				element.options[selectedIndex].text = "Verbindung trennen";
				sxJavaChatAppletSend("/connect");
			}
			
			sxJavaChatConnectStatus = !sxJavaChatConnectStatus;
			break;
	
	
		//-------------------------------
		// COMMAND: close
		//-------------------------------
		case "close":
			if(confirm("Chat wirklich beenden?")) {
				sxJavaChatAppletSend("/quit");
				window.close();
			}
			break;
			
		case "smileylist":
			sxWindowOpen( sxPathPrefix+'/'+sxCommunityKey+'/content/smilies.html', 'Smilies', 640, 480 );
			break;
			
		case "nickserv-register":
			sxWindowOpen( sxPathPrefix+'/'+sxCommunityKey+'/content/nickserv-register.html', 'TermsOfUse', 640, 480 );
			break;
			
		case "termsofuse":
			sxWindowOpen( sxPathPrefix+'/'+sxCommunityKey+'/content/termsofuse.html', 'TermsOfUse', 640, 480 );
			break;

		default:
			// do nothing, sorry guys
			break;
	}

	// reset element
	element.selectedIndex = 0;
}

function sxJavaChatSelectChannel(element) {
	if(!element) {
		return false;
	}
	
	var selectedIndex		= element.selectedIndex;
	var selectedElement	= element.options[selectedIndex].value;
	
	
	if(selectedElement != "") {
		sxJavaChatAppletSend("/join "+selectedElement);
	}
	
	// reset element
	element.selectedIndex = 0;
}


/******************************************************************************
* HTML CHAT
******************************************************************************/
function sxHtmlChatOpen( form ) {
	// fetch variables
	var nickname = form.Nickname.value;
	var newWindow = form.newwindow.checked;

	sxHtmlChatSettings(form);

	if( newWindow ) {
		form.target = "sxHtmlChatWindow";
		open( "", "sxHtmlChatWindow", "resizable=yes,toolbars=no,status=no,directories=no,location=no,menubar=no,scrollbars=no" + sxCommonChatGetWindowSize());
	} else {
		form.target = "_self";
	}

	return true;
}

function sxHtmlChatSettings(form) {
	sxCommonChatSetJavascript(form);
}


/******************************************************************************
* CONTENT
******************************************************************************/
function sxNickservRegister(password, email) {
	sxJavaChatAppletSend('/msg nickserv REGISTER '+password+' '+email);
}


