/*
 * PDM CHATSYSTEM SPECIFIC FUNCTIONS
*/

function getAvailability(url, timeout, container_id, avail_id, unavail_id){
	$.getJSON(url, function(data){							
		if(data.available){			
			$(avail_id).show();
			$(unavail_id).hide();
		}else{
			$(avail_id).hide();
			$(unavail_id).show();
		}
		$(container_id).css({display: 'block'});
		setTimeout(function(){getAvailability(url, timeout, container_id, avail_id, unavail_id);}, timeout);
	});
}

function updateStatus(url, timeout){
	$.getJSON(url, function(data){
		if(data.active == false){
			window.location.reload(); 
		}
		var url = $(this)[0]['url'];
		setTimeout(function(){updateStatus(url, timeout);}, timeout);
	});
}

function displayUsers(url, timeout){
	$.getJSON(url, function(data){
		var url = $(this)[0]['url'];
		setTimeout(function(){displayUsers(url, timeout);}, timeout);
		updateDisplayUsers(data);
	});
}

function scrollToBottom(id){
	var h = $(id).attr("scrollHeight");
	$(id).attr({ scrollTop:  h});
};
	
function updateDisplayUsers(data){
	//console.log(users);	
	var html = "";
	for(var user_sid in data){
				
		user = data[user_sid];
		
		var pdmclass = '';
		
		if(user_active == '' || user_active == user_sid){
			pdmclass = ' class="active"';
			user_active = user_sid;
		}
		
		if(users_notify[user_sid]){
			pdmclass = ' class="attention"';	
		}
						
		//new user
		if(!users[user_sid]){
			active = user_active == user_sid ? true : false;
			addUser(user_sid, user, active);
			
			users[user_sid] = user;
		}
		
		html += '<li' + pdmclass + '><a href="#chat-' + user_sid + '" id="chat-' + user_sid + '">' + user['handle'] + '</a> <a href="#info-' + user_sid + '" name="' + user_sid + '" class="pdmChat-info">info</a></li>';		
		
	}
	$('#pdmChat-userpane ul').eq(0).html(html);
	
	enableTabControls();
	
	setSendChatText();
	
	setInfoClick();
	
	//remove any users not currently logged in
	var remove_users = [];
	for(var user_id in users){
		if(!data[user_id]){
			remove_users.push(user_id);
			delete users[user_id];
		}
	}
	
	if(remove_users.length > 0){
		
		for(id in remove_users){
			
			//remove tab area
			var tablink = $('dt[id^="pdmChat-tab-' + remove_users[id] + '"] a:first-child');
			
			if($(tablink).parent().hasClass('active')){
			
				var $nextchat = $(tablink).parent().nextAll('dt').eq(0);
				
				$nextchat.addClass('active');
				
				if($nextchat.hasClass('attention')){
					$nextchat.removeClass('attention');	
				}
				
			}
			
			$(tablink).parent().next().remove();
			
			$(tablink).parent().remove();
			
			//remove pane link
			$('#pdmChat-userpane a[id^="chat-' + remove_users[id] + '"]').parent().remove();
		}
		
		
	}
}

function newUser(url, sid, data, active){
	//console.log(url, sid, data, active);
	var pdmclass = '';
	var tabarea = '';
	
	if(active == true) pdmclass = ' class="active"';
	
	//chat tab 
	tabarea += '<dt id="pdmChat-tab-' + sid + '"' + pdmclass + '><a href="#' + sid + '">' + data.handle + '</a>  <a href="#close" class="pdmChat-close" title="logout user">close</a></dt>';
	//chat area
	tabarea += '<dd><dl id="pdmChat-chatArea-' + sid + '"></dl>';
	//chat input form
	tabarea += '<form method="post" action="' + url + '" id="pdmChat-chatForm-' + sid + ' "><input type="text" name="pdmChat-sendtext-' + sid + '" id="pdmChat-sendtext-' + sid + '"> <strong><input type="submit" value="Send"></strong><input type="hidden" name="action" value="chat"/></form></dd>';
	
	$('#pdmChat-chatbox>dl').append(tabarea);
}

function getUserInfo(sid){
	var user = users[sid];
	var html = "";
	
	html += '<dt>name:</dt><dd>' + user['name'] + '</dd>';
	if(user['email'] != ""){
		html += '<dt>email:</dt><dd><a href="mailto:' + user['email'] + '">' + user['email'] + '</a></dd>';
	}
	$('#pdmChat-userpane dl').eq(0).html(html);
}

function setInfoClick(){
	$("a[href*='#info-']").unbind('click').click(function(){	
		getUserInfo($(this).attr('name'));
		return false;
	});
}

function logout(){
	window.close();
}

function enableTabControls(){	
	
	//close user tab - admin area only
	$('#pdmChat-chatbox .pdmChat-close').unbind('click').click(function(){
																		
		
		var disconnect = confirm('Are you sure you want to disconnect this user');
		
		if(disconnect == false){
			return false;	
		}
		
		var sid = $(this).parent().attr('id').substr(12);
		
		delete users_notify[sid];
		
		var panelink = $('#pdmChat-userpane>ul>li>a[id^="chat-' + sid + '"]');
		
		if($(this).parent().hasClass('active')){
			
			user_active = '';
			
			var $nextchat = $(this).parent().nextAll('dt').eq(0);
			
			if($nextchat.length == 0) $nextchat = $(this).parent().prevAll('dt').eq(0);
			
			if($nextchat.length != 0){
			
				$nextchat.addClass('active');			
				
				if($nextchat.hasClass('attention')){
					$nextchat.removeClass('attention');	
				}
				
				var nextsid = $nextchat.parent().attr('id').substr(12);
				var nextpanelink = $('#pdmChat-userpane>ul>li>a[id^="chat-' + nextsid + '"]');
				
				$(nextpanelink).parent().addClass('active');
				
				if($(nextpanelink).parent().hasClass('attention')){
					$(nextpanelink).parent().removeClass('attention');	
				}
				
				user_active = nextsid;
			}
			
		}				
		
		$(this).parent().next().remove();
		
		$(this).parent().remove();
		
		$(panelink).parent().remove();
		
		//make call to disonnect user
		logoutUser(sid);
		
		return false;
		
	});
	//end of close user tab
	
	//swap between main chat tabs	
	$('#pdmChat-chatbox>dl>dt>a:first-child').unbind('click').click(function(){
															 
		var sid = 	$(this).parent().attr('id').substr(12);
		var panelink = $('#pdmChat-userpane>ul>li>a[id^="chat-' + sid + '"]');
		
		delete users_notify[sid];
	
		if($(this).parent().hasClass('active')){
			return false;	
		}		
		
		if($(this).parent().hasClass('attention')){
			$(this).parent().removeClass('attention');		
			$(panelink).parent().removeClass('attention');		
		}
		
		$('#pdmChat-chatbox>dl>dt.active').removeClass('active');
		$('#pdmChat-userpane>ul>li.active').removeClass('active');
		
		$(this).parent().addClass('active');
		$(panelink).parent().addClass('active');
		
		user_active = sid;
		
		return false;
	});	
	//end of swap chat tabs
	
	//swap chat tabs via user pane
	$('#pdmChat-userpane>ul>li>a:first-child').unbind('click').click(function(){
		
		var sid = $(this).attr('id').substr(5);
		
		delete users_notify[sid];
		
		var tablink = $('dt[id^="pdmChat-tab-' + sid + '"] a:first-child');
		
		//if pane link is active ignore
		if($(tablink).parent().hasClass('active')){
			return false;	
		}	
		
		//if pane is set to attention remove notification to tab and pane link
		if($(tablink).parent().hasClass('attention')){
			$(tablink).parent().removeClass('attention');	
			$(this).parent().removeClass('attention');
		}
		
		//remove active style from active tab and pane link
		$('#pdmChat-chatbox>dl>dt.active').removeClass('active');
		$('#pdmChat-userpane>ul>li.active').removeClass('active');
		
		//apply active style to tab link and pane link
		$(tablink).parent().addClass('active');
		$(this).parent().addClass('active');	
		
		user_active = sid;
		
		return false;
		
	});
}


/*
 * AFTER PAGE LOAD STUFF
*/

$(document).ready(function(){
						   
	/*
	 * PDMCHAT ADMIN 
	*/		
	
	//close any window that was opened by chatsys
	$('#pdmChat-close-window').click(logout);
	
	
	/*
	 * GENERIC
	*/
	
	
	//textarea simple autoexpand
	$('textarea.expandable').each(function(){
		$(this).css({overflow: 'hidden'});
		$(this).each(function(){
			if($(this)[0].scrollHeight > $(this).height())	$(this).css({height: $(this)[0].scrollHeight + 50});
		});
		$(this).keyup(expandTextarea);
	});
	function expandTextarea(){
		if($(this)[0].scrollHeight > $(this).height()){
			$(this).animate({height: $(this)[0].scrollHeight + 50}, {duration:200, queue:false});
		}
	}
	//end of autoexpand	
			
	
	//basic form vailidation
	$('form.validate').submit(function(){		
		var rtn = true;
		
		if($(this).find('[class*=required]').length > 0){
									   
			var required_items = $(this).find('[class*=required]');
			
			for(i=0; i<required_items.length; i++){
				var input = $(required_items).eq(i);
				var prev = $(input).prev('label');
				
				if($(input).hasClass('email')){
					if(input[0].value.search(/([^\/.]+)@([^\/.]+)\.([^\/.]+)/) == -1){
						$(prev).addClass('error');						
						if($(prev).find('span').length == 0){
							$(prev).append('<span>invalid email address</span>');
						}
						rtn = false;
					}
				}else if($(input).val() == ""){
					$(prev).addClass('error');
					if($(prev).find('span').length == 0){
						$(prev).append('<span>required</span>');
					}
					rtn = false;
				}
				
			}
			
			var emails = $(this).find('[class*=email]');
			if($(emails).length > 0){
				for(i=0; i<$(emails).length; i++){
					var prev = $(emails).eq(i).prev('label');
					if($(emails).eq(i).val() != ""){
						if($(emails).eq(i)[0].value.search(/([^\/.]+)@([^\/.]+)\.([^\/.]+)/) == -1){
							$(prev).addClass('error');
							if($(prev).find('span').length == 0){
								$(prev).append('<span>invalid email address</span>');
							}
							rtn = false;
						}
					}
				}				
			}
		
		}else{
			
			var emails = $(this).find('[class*=email]');
			if($(emails).length > 0){
				for(i=0; i<$(emails).length; i++){
					var prev = $(emails).eq(i).prev('label');
					if($(emails).eq(i).val() != ""){
						if($(emails).eq(i)[0].value.search(/([^\/.]+)@([^\/.]+)\.([^\/.]+)/) == -1){
							$(prev).addClass('error');
							if($(prev).find('span').length == 0){
								$(prev).append('<span>invalid email address</span>');
							}
							rtn = false;
						}
					}
				}				
			}
			
		}
		
		return rtn;
	});
	//end of validation
	
	
});
