
//to store the retrieved lists
var userids;
var usernames;
var friends;// = Array("1070");

var myid=0;
var myname="";
var filtertext="";//store the filter for rendering user list

var openChats=Array();//to track windows open
var msgs;
var sound = 1;//default to the first
var nn = 0;
var currids;
var chats = 0;
var blocks = [];
var sounded = false;
var z = 1;
var userdiv = "userlist";
var serverurl = "";
var menuCheckInterval = 5000;//how often to check if the menu should be open
var checkInterval = 8000;//how often to check for new messages when on a non-chat page
var msgInterval = 5200;//how often to check for new messages when on the Chat page
var userInterval = 43000;//how often to refresh the list of active users
var debug = false;
var chatMsgIds = new Array();
var gettingMessages = false;
var lastMessageFetch = 0;
var menuOpen = 0;
var chatconvs = "";//from the cookie
var winwidth=220;
var mychatstatus;

//tracking variables
var browserSupportsChat;
var loggedIn;
var userWantsChatOpen;
var unsupportedBrowserMsg = "Chatarama runs on modern browsers:\n\nIE7, IE8\nFirefox 3+\nSafari\nGoogle Chrome\n\nPlease upgrade your browser to chat."
var notLoggedInMsg = "You can chat as soon as you login!  Click *Login*";

//interval ids
var i_sync_windows;
var i_get_users;
var i_get_msgs;

var sounds1 = new Array("[off]","hey","hello","yahoo!","notify","bloop","boing","chime","gasp","fanfare","yes","kiss","voices");//,"wahoobie!");
//var sounds2 = new Array("","yahoo.wav","notify.wav","bloop.wav","boing.wav","chime_up.wav","gasp.wav","fanfare.wav","yes.wav","kiss.wav","voices.wav");//,"wahoobie.mp3");
var sounds2 = new Array("","hey.mp3","hello.mp3","yahoo.mp3","notify.mp3","bloop.mp3","boing.mp3","chime_up.mp3","gasp.mp3","fanfare.mp3","yes.mp3","kiss.mp3","voices.mp3");//,"wahoobie.mp3");

function exitChatMain(){
	//alert("exiting");
	
	//set the cookie, so we remember:
	createCookie('CHAT','NO',300);
	
	//delete the menu
	deleteDiv("chatmenu");
	deleteDiv("chatmain");
	
	//delete any open chats
	closeAllChats();
	//stop all setIntervals();
	clearIntervals();
	
	//link at the top of the page...change to say "open chatarama"
	setPageLink("CLOSED");
}
function openChatMain(){
	if(!loggedIn){
		alert(notLoggedInMsg);
		return;
	}
	if(!browserSupportsChat){
		alert(unsupportedBrowserMsg);
		return;
	}

	//set the cookie so we remember
	createCookie('CHAT','YES',300);
	if(e("chatmain")){
		//do nothing
	}else{
		//create new div
		var newDiv = document.createElement("div");
		newDiv.id = "chatmain";
		var html = 	""+
			//"<div style=\"display:inline;padding:2px;color:white;float:right;width:220px;\">"+
			"<div style=\"display:inline;float:left\"><b><a style=\"color:white;padding:3px;\" href=\"\" onclick=\"toggleMenu();return false;\">Chatarama!</a></b></div>"+
			"<div id=\"mychatstatus\" style=\"display:inline;float:left;\"></div>"+
			"<div id=\"dots\" style=\"display:inline;float:left;\">.</div>"+
			"<div style=\"float:right;display:inline;\">"+
			"  <a style=\"color:white;\" href=\"\" onclick=\"exitChatMain();return false;\">[x]</a>"+
			//"</div>"+
			"</div>";
		newDiv.innerHTML = html;
		document.body.appendChild(newDiv);
	}
	setPageLink("OPENED");
	//start the polling functions
	setTimeout("syncWindows()",100);
	startIntervals();
}
function checkAllowChat(){
	//disable for certain browsers
	if(browserSupportsChat && loggedIn) return true;
	else return false;
}
function setPageLink(status){
	if(status=="OPENED"){
		e("chatnavlink").innerHTML = "<a onclick='exitChatMain();return false;' href=''>Close Chatarama</a>";
	}else{
		e("chatnavlink").innerHTML = "<a onclick='openChatMain();return false;' href=''>Open Chatarama</a>";
	}
}
function startPageChat(){
	//check to see if chatarama is open.  if not, open it
	//alert("chat? "+allowChat);
	if(checkAllowChat()){
		//alert("chat is allowed. userWantsChatOpen:"+userWantsChatOpen)
		if(userWantsChatOpen){
			openChatMain();
		}else{
			setPageLink("CLOSED");
		}
	}else{
		//alert(unsupportedBrowserMsg);
	}
}
function startIntervals(){
	//starts the updates
	i_sync_windows = setInterval("syncWindows()",menuCheckInterval)
	i_get_users = setInterval("getActiveUsers()",userInterval);
	i_get_msgs = setInterval("getNewMessages()",msgInterval);
}
function clearIntervals(){
	//alert("clearing intervals: "+i_sync_windows+","+i_get_users+","+i_get_msgs);
	clearInterval(i_sync_windows);
	clearInterval(i_get_users);
	clearInterval(i_get_msgs);
}
function closeMenu(){
	set("chatmenu","0");
	deleteDiv("chatmenu");
	eraseCookie("chatmenu");
}
function toggleMenu(){
	//alert("toggling menu");
	if(e("chatmenu")){
		//alert("menu is open, closing");
		closeMenu();
	}else{
		//alert("menu is closed.  opening");
		showMenu();
	}
}
function showMenu(){
	//alert("showing menu");
	if(e("chatmenu")==null){
		///var mloc = loc("nav_menu");
		//alert(mloc[0]+":"+mloc[1]);
		var newDiv = document.createElement("div");
		newDiv.id = "chatmenu";
		//newDiv.className = "chatDiv";
		//newDiv.style.position="absolute";
		//newDiv.style.bottom="30px";
		//var x = mloc[0];
		//var y = mloc[1];
		//newDiv.style.left=x+"px";
		newDiv.style.right="20px";
		//newDiv.style.height = "300px";
		//newDiv.style.width = winwidth+"px";
		//newDiv.style.backgroundColor="white";
		//newDiv.style.border="2px solid #3333AA";
		//newDiv.style.zIndex=2000;
		var s = "<div style='padding: 3px;background-color:#3333AA;color:white;font-weight:bold;'>" +
				"<div style='float:right;background-color:#3333AA;color:white;font-weight:bold;'>"+
				"<a href='' onclick='closeMenu();return false'><font color='white'>_</font></a>"+
				"</div>" +
				"Chatarama!</div>";
		s += '<div id="chatfilterform" style="display:none;">';
		s += '<span style="color:#AAAAAA;font-size:70%">search for...</span>';
		s += '<input id="filtertext" type="text" onkeyup="filter(this)">';
		s += '</div>';
		s += '<div id="userlist"></div>';
		s += '<div id="mmm" style="font-size:80%;"></div>';
		s += '</div>';
		//s += '<div id="historyDiv">';
		//s += '<div id="historyLink">';
		//s += getHistoryShowLink();
		//s += '<div id="historyBlock">';
		//s += '</div>';
		
		s += "<div style='background-color:#BBBBDD;padding:4px;border-top:1px solid #33AA33;'>";
		s += "<div style='float:right;'><a href='' onclick='toggleHistory();return false;'>History</a></div>";
		s += "<div id='mychatstatuschange' style='float:left;'></div>";
		s += "<div style='clear:both;'></div>";
		// += "<div>";
    	//s += "<a href='' onclick=\"createCookie('CHAT','NO',300);location.reload(true);\">Close Chatarama</a>";
    	//s += "</div>";
		
		s += "</div>";
		
		newDiv.innerHTML = s;
		//document.appendChild(newDiv);
		//var master = e("nav_menu_wrapper");
		//master.appendChild(newDiv);
		document.body.appendChild(newDiv);
		
		checkChatStatus();
		


	}//if div doesn't exist
	else{
		show("chatmenu");
	}
	set("chatmenu","1");
	getActiveUsers();
}
function syncWindows(){
	//check status
	checkChatStatus();
	
	log("checking menu");
	var m = get("chatmenu");//readCookie("chatmenu");
	if(m!=null && m=="1"){
		log("opening menu, cookie: "+m)
		if(menuOpen==0){
			showMenu();
			menuOpen = 1;
		}
	}else{
		log("closing menu, cookie: "+m)
		if(menuOpen==1){
			closeMenu();
			menuOpen = 0;
		}
	}
	var convos = readCookie("chatconvs");
	if(convos==null)convos="";
	//remove any old chats
	var newchats = getChatsFromCookie(convos);
	var oldchats = getChatsFromCookie(chatconvs);
	if(oldchats!=null && oldchats.length>0){
		for(var i=0;i<oldchats.length;i++){
			var chh = oldchats[i].split(":");
			if(chh[0]!=null && chh[0].length>0 && !contains(newchats,oldchats[i])){
				log("removing ["+i+"]:"+chh[0]);
				closeChatDiv(chh[0]);
			}//if old chat not in new list
		}//for each old chat
	}
	
	//show all the current chats
	//var mloc = loc("nav_menu");
	//var x = mloc[0];
	//var y = mloc[1];
	if(newchats!=null && newchats.length>0){
		chats = newchats.length;
		log(chats+" chat windows open");
		for(var i=0;i<newchats.length;i++){
			log("showing ["+i+"] "+newchats[i]);
			var chh = newchats[i].split(":");
			if(chh[0]!=null && chh[0].length>0){
				showConvoFromCookie(chh[0],unescape(chh[1]),(20+(i+1)*(winwidth+2)));
			}
		}
	}
	chatconvs = convos;
	arrangeChats();
}
function arrangeChats(){
	var convos = readCookie("chatconvs");
	if(convos==null)convos="";
	log("CONVOS:"+convos);
	if(convos.length>0){
		var newchats = getChatsFromCookie(convos);
		if(newchats!=null && newchats.length>0){
			//var chats = newchats.length;
			//alert("arranging "+newchats.length+" chats")
			for(var i=0;i<newchats.length;i++){
				//alert("showing "+mm[i]);
				var chh = newchats[i].split(":");
				if(chh[0]!=null && chh[0].length>0){
					var chatdiv = getChatDiv(chh[0]);
					if(chatdiv) {
						var right = (20+(i+1)*(winwidth+2));
						chatdiv.style.right = right+"px";
						log(right+"px from right");
					}//if chatdiv exists
				}//if id in the string
			}//for each chat
		}//if there's chats
	}//if there's chat cookie
}//arrangeChats
function closeAllChats(){
	var convos = readCookie("chatconvs");
	if(convos==null)convos="";
	log("CONVOS:"+convos);
	if(convos.length>0){
		var newchats = getChatsFromCookie(convos);
		if(newchats!=null && newchats.length>0){
			//var chats = newchats.length;
			for(var i=0;i<newchats.length;i++){
				//alert("showing "+mm[i]);
				var chh = newchats[i].split(":");
				if(chh[0]!=null && chh[0].length>0){
					closeChatDiv(chh[0]);
				}//if id in the string
			}//for each chat
		}//if there's chats
	}//if there's chat cookie
}//closeAllChats
function checkChatStatus(){
	var status=get("chatstatus");//readCookie("chatstatus");
	if(status==null) {
		status="ONLINE";
		//createCookie("chatstatus","ONLINE",7);
		set("chatstatus","ONLINE");
	}
	var html = "";var html2="";
	if(status=='OFFLINE') {
		if(e("userlist")) {
			e("userlist").innerHTML="";
		}
		//&#9746;
		//html = "<a href='' onclick='setChatStatus(\"ONLINE\");return false;'><img src='img/site/green_dot.gif' align=top border=0> go Online</a>";
		html2 = "&#9746; Offline";
		html = "<img src='img/site/green_dot.gif' align=top border=0> <a href='' onclick='setChatStatus(\"ONLINE\");return false;'>go Online</a>";
		//html2 = "<img src='img/site/dot_empty.jpg' align=top border=0>Offline";
	}else{
		//html = "<a href='' onclick='setChatStatus(\"OFFLINE\");return false;'><img src='img/site/dot_empty.jpg' align=top border=0> go Offline</a>";
		//html2 = "<img src='img/site/green_dot.gif' align=top border=0>Online";
		html = "&#9746; <a href='' onclick='setChatStatus(\"OFFLINE\");return false;'>go Offline</a>";
		html2 = "<img src='img/site/green_dot.gif' align=top border=0>Online";
	}
	if(!status==mychatstatus){
		if(status=='ONLINE'){
			getActiveUsers();
		}
	}
	e("mychatstatus").innerHTML = html2;
	if(e("mychatstatuschange")){
		e("mychatstatuschange").innerHTML = html;
	}
	mychatstatus=status;
	
}
function setChatStatus(status){
	set("chatstatus",status);
	//createCookie("chatstatus",status,7);
	checkChatStatus();
	if(status=="ONLINE"){
		getActiveUsers();
		startIntervals();
	}
	if(status=="OFFLINE"){
		e("userlist").innerHTML = "";//clear the list
		clearIntervals();
	}
}
function refreshStatuses(){
	log("refreshing statuses");
	if(userids!=null && userids.length>1){
		if(openChats){
			log(openChats.length+" open chats");
			for(var i=0;i<openChats.length;i++){
				
				var id = openChats[i];//this might not work
				log("checking id:"+id);
				if(contains(userids,id)){
					e("chatstatus"+id).innerHTML = "";
				}else{
					e("chatstatus"+id).innerHTML = "<div style='font-size:80%;padding:4px;background-color:black;color:white;'>User is offline. Messages you send will be delivered when user comes online.</div>";
				}
			}
		}else{
			log(openChats +" open chats");
		}
	}//if more than one person online
}
function isChataramaOpen(){
	return true;//for now always assume to not play the sound
	/*
	var chatarama = window.open("", "chatarama");
	if(!chatarama || chatarama.closed){
		return false;
	}else{
		return true;
	}
	*/
}
function setupPage(){
	log("setting up page");
	
	var html = '<div id="userblock">';
	html += '<div id="dots">.</div>';
	html += "<b>Who's Online</b><br>";
	html += '<div id="filterform">';
	html += '<span style="color:#AAAAAA;font-size:70%">search for...</span>';
	html += '<input id="filtertext" type="text" onkeyup="filter(this)">';
	html += '</div>';
	html += '<div id="userlist"></div>';
	html += '</div>';
	html += '<div id="historyDiv">';
	html += '<div id="historyLink">';
	html += getHistoryShowLink();
	html += '<div id="historyBlock">';
	html += '</div>';
	html += '</div>';
	e("container").innerHTML = html;
	
}
function getHistoryShowLink(){
	return '<a href="#" onclick="loadHistory();return false;">show recent conversations</a></div>';
}
function getHistoryHideLink(){
	return '<a href="#" onclick="hideHistory();return false;">hide recent conversations</a></div>';
}
function loadHistory(n){
	var hh = e("historyBlock");
	if(!hh){
		var newDiv = document.createElement("div");
		newDiv.id = "historyBlock";
		e("chatmenu").appendChild(newDiv);
		hh = newDiv;
	}
	hh.innerHTML = "Loading...";
	
	log("loading recent conversations");
	//checks to see if there's new messages waiting
	var url = "chatter.jsp?a=FETCHCONVOS&n="+n+"&ms="+new Date().getTime();
	
	new Ajax.Request(url, { method:'post',
	  onSuccess: function(transport){
		var pageResponse = transport.responseText;
		pageResponse = trim(pageResponse);
		eval(pageResponse);
		log(convos.length+" history chats");
		renderHistoryList(convos);
	  }//function(transport)
	});//Ajax.Request
}//check
function clearMsgs(id){
	eraseCookie("convo"+id);
}
function check(){
	//checks to see if there's new messages waiting
	var url = "chatter.jsp?a=CHECK&ms="+new Date().getTime();
	
	new Ajax.Request(url, { method:'post',
	  onSuccess: function(transport){
		var pageResponse = transport.responseText;
		pageResponse = trim(pageResponse);
		//alert(pageResponse);
		var checkdiv = e("chatcheck");
		if(pageResponse.length < 3 && pageResponse > 0){
			var hhh = "<div style=\"margin: 20px; width: 90%;color: black;background-color: #FFCCCC; padding: 10px;text-align: center;border: 1px dashed red;font-size:150%;font-weight:bold;\">";
			/*
			if(!isChataramaOpen()){
				hhh += "<embed src='scripts/yahoo.wav' hidden=true autostart=true loop=false>";
			}
			*/
			hhh += "someone's chatting with you! <a href=\"chat.jsp\" target=\"_new\">see &raquo;</a>";
			hhh += "&nbsp;&nbsp;&nbsp;<span style='font-size:60%;'>[<a href=\"index.jsp?CHAT=NO\">turn this off</a>]</span>";
			hhh += "</div>";
			checkdiv.innerHTML = hhh;
			playSWFSound("hello.mp3");
		}else{
			checkdiv.innerHTML = "&nbsp;";
		}
		window.status="";
	  }//function(transport)
	});//Ajax.Request
}//check

function actionFriend(id,action){
	var url = "chatter.jsp?a=BOOKMARK&aa="+action+"&id="+id+"&ms="+new Date().getTime();
	
	new Ajax.Request(url, { method:'post',
	  onSuccess: function(transport){
	    var response = transport.responseText;
		response = trim(response);
		//log(response);
		try{			
			response = response.trim();
			if(response.length>=3){
				var cstate = response.substring(0,3);
				if(cstate=="200"){
					getActiveUsers();
					if(action=="ADD")alert("added as friend!");
					else if(action=="REMOVE")alert("friend removed");
					else alert("unknown action:"+action);
				}else{
					alert("ERROR:"+response);
				}
			}
		}catch(e){}//try
	  }//function(transport)
	});//Ajax.Request
	
}
function hideHistory(){
	deleteDiv("historyBlock");
	//e("historyBlock").style.display="none";
	//e("historyLink").innerHTML = getHistoryShowLink();
}
function toggleHistory(){
	if(e("historyBlock")){
		hideHistory();
	}else{
		loadHistory(30);
	}
}
function renderHistoryList(convos){
	
	var html = "";//"<div id='historyLink'>"+getHistoryHideLink()+"</div>";
	if(convos.length==0){
		html = "no recent history";
	}
	for(var i=0;i<convos.length;i++){
		var t = dateDiffDays(parseDate(convos[i][4]),new Date());
		var ts = t +" days ago";
		if(t==0) ts = "Today";
		if(t==1) ts = "Yesterday";
		var s = "<div><a href='#' onclick='openHistory(\""+convos[i][0]+"\",\""+convos[i][1]+"\");return false;'>"+convos[i][2]+"</a> ["+convos[i][3]+"] <span class='times'>"+ts+"</span></div>";
		html += s;
	}
	var newDiv = e("historyBlock");
	if(convos.length>10){
		newDiv.style.height="150px";
		newDiv.style.overflow = "auto";
	}
	newDiv.innerHTML = html;
}
function openHistory(conversation_id, to_id){
	log("opening history:"+conversation_id);
	var url = "chatter.jsp?a=FETCHCONVO&cid="+conversation_id+"&ms="+new Date().getTime();
	
	new Ajax.Request(url, { method:'post',
	  onSuccess: function(transport){
	    var response = transport.responseText;
		response = trim(response);
		eval(response);//this sets up the arrays from the request
		renderHistory(to_id, msgs);
	  }//function(transport)
	});//Ajax.Request
}
function renderHistory(to_id, msgs){
	log("rendering history:"+msgs.length+" msgs");
	var html = "";var from_name="";
	for(var i=0;i<msgs.length;i++){
		var message = msgs[i][4];
		var from_id = msgs[i][2];
		
		if(from_id==to_id){
			html += "<div class='them'>"+message+"</div>";
			from_name = msgs[i][3];
		}else{
			html += "<div class='me'>"+message+"</div>";
		}
	}
	//open chat
	var chatdiv = getChatDiv(to_id);
	if(chatdiv==null) chatdiv = addChatDiv(to_id, from_name);
	var text = "<div class='them'>"+message+"</div>";
	var msgsdiv = e('chatmsgs'+to_id);
	msgsdiv.innerHTML = html;
	chatdiv.style.display = "block";//show it, if it was hidden
	//chatdiv.className = "chatDivHigh";
	storeConvoToCookie(to_id);
	log("adding ["+to_id+"] "+from_name);
	addChatToCookie(to_id,from_name);
	arrangeChats();
	scrollChatBottom(to_id);
}

function getActiveUsers(){
	if(mychatstatus=="OFFLINE") {
		if(e("userlist")) {
			e("userlist").innerHTML="";
		}
		log("offline, not getting users");
		return;
	}
	log("getting users");
	var url = "chatter.jsp?a=FETCHUSERS&ms="+new Date().getTime();
	
	new Ajax.Request(url, { method:'post',
	  onSuccess: function(transport){
	    var response = transport.responseText;
		response = trim(response);
		//log(response);
		try{			
			response = response.trim();
			//alert(response);
			if(response.length>3){
				var cstate = response.substring(0,3);
				if(cstate=="600"){
					e('status').innerHTML = "<div style='text-align:center;font-weight: bold;padding: 5px;border:	2px solid #DAA520;color:	#DAA520;background-color:#FFD788;'>Chatarama is currently deactivated</div>";
				}
			}
			//log(response);
			eval(response);//this sets up the arrays from the request
			//log("eval success");
			userids = ids;
			usernames = names;
			friends = f;
			//processActiveUsers(ids, names)
			//log(userids.length+" users to be loaded");
			renderUserList();
			log(userids.length+" active users loaded");
		}catch(e){}//try
	  }//function(transport)
	});//Ajax.Request
}
/*
function processActiveUsers(ids, names){
	if(chats==0){
		addWelcomeDiv();
	}
	//var usersdiv = e(userdiv);
	var usersdiv = e("userlist");
	usersdiv.innerHTML = "";//clear the list
	
	var filterdiv = document.createElement("div");
	filterdiv.innerHTML = "<input type='text'>";
	usersdiv.appendChild(filterdiv);
	
	
	//ids (array)  e.g. var ids = Array ("1000","1001","1002","1003","1004","1005");
	//names (array)  e.g. var names = Array("brittany","heather","bradley","bryan","brandon","adam");
	
	for(var i=0;i<ids.length;i++){
		//only create new one if doesn't exist.
		var newdiv = e("user"+ids[i]);
		if(newdiv==null){
			var newdiv = document.createElement("div");
			newdiv.id = "user"+ids[i];
			newdiv.style.padding = "2px";
			var name = names[i];
			name = scrub(name);
			//if(name.length==0) name = "?????";
			if(ids[i]==myid){//this is me
				var ss = "<a style='background-color: #CCFFCC; border: 1px solid green;color:green;' href=\"sellerprofile.jsp?accountID="+ids[i]+"\" title='view profile' alt='view profile' target='_new'><b>O</b></a> <b>"+names[i]+"</b>";
				newdiv.innerHTML = ss;
				var master = e("userlist");
				master.appendChild(newdiv);
			}else{
				var ss = "<a style='background-color: #FFFFCC; border: 1px solid orange;color:orange;' href=\"sellerprofile.jsp?accountID="+ids[i]+"\" title='view profile' alt='view profile' target='_new'><b>O</b></a> <a href=\"javascript:openMsgForm('"+ids[i]+"','"+name+"');\" title='send message' alt='send message'>"+names[i]+"</a>";
				newdiv.innerHTML = ss;
				var master = e("userlist");
				master.appendChild(newdiv);
			}
		}//if doesn't exist
	}//for each ids
	currids = ids;
}//processActiveUsers
*/
function filter(thing){
	//log("filtering");	//log("filter:"+thing.value);
	filtertext = thing.value;
	renderUserList();
}
function renderUserList(){
	//log("rendering user list");
			
	var usersdiv = e("userlist");
	usersdiv.innerHTML = "";//clear the list
	
	var mediv = document.createElement("div");
		mediv.className = "userMe";
	var frienddiv = document.createElement("div");
		frienddiv.className = "userFriends";
	var othersdiv = document.createElement("div");
		othersdiv.className = "userOthers";
	
	//var filterdiv = document.createElement("div");
	//filterdiv.innerHTML = "<input type='text' >asdfasdf";
	
	usersdiv.appendChild(mediv);
	usersdiv.appendChild(frienddiv);
	usersdiv.appendChild(othersdiv);
	
	
	//ids (array)  e.g. var ids = Array ("1000","1001","1002","1003","1004","1005");
	//names (array)  e.g. var names = Array("brittany","heather","bradley","bryan","brandon","adam");
	if(userids.length>15){
		e("chatfilterform").style.display="";
	}
	//alert(userids.length + " users");
	var friendcount=0;
	var othercount=0;
	var totalcount=0;
	var hm=20;//how many to show in list
	for(var i=0;i<userids.length;i++){
		//only create new one if doesn't exist.
		var newdiv = e("user"+userids[i]);
		if(newdiv==null){
			var newdiv = document.createElement("div");
			newdiv.id = "user"+userids[i];
			newdiv.style.padding = "2px";
			var name = usernames[i];
			name = escape(name);
			//name = scrub(name);
			//name = name.replace("'","");
			//name = name.replace("\"","");
			if(filtertext.length==0 || name.toLowerCase().indexOf(filtertext.toLowerCase()) >=0){
				totalcount++;
				if(userids[i]==myid){//this is me
					//me
					var ss = "<a style='background-color: #CCCCFF; border: 1px solid blue;color:blue;' href=\"sellerprofile.jsp?accountID="+userids[i]+"\" title='view profile' alt='view profile'><b>O</b></a> <b>"+usernames[i]+"</b>";
					newdiv.innerHTML = ss;
					mediv.appendChild(newdiv);
				}else if(contains(friends,userids[i])){
					//friend
					var ss = "<a style='background-color: #FFFFCC; border: 1px solid orange;color:orange;' href=\"sellerprofile.jsp?accountID="+userids[i]+"\" title='view profile' alt='view profile'><b>O</b></a> <a href=\"javascript:openMsgForm('"+userids[i]+"','"+name+"');\" title='send message' alt='send message'>"+usernames[i]+"</a>";
					newdiv.innerHTML = ss;
					frienddiv.appendChild(newdiv);
					friendcount++;
				}else{
					//not yet a friend
					if(totalcount<hm){//max 20 in the list
						var ss = "<a style='background-color: #CCFFCC; border: 1px solid green;color:green;' href=\"sellerprofile.jsp?accountID="+userids[i]+"\" title='view profile' alt='view profile'><b>O</b></a> <a href=\"javascript:openMsgForm('"+userids[i]+"','"+name+"');\" title='send message' alt='send message'>"+usernames[i]+"</a>";
						newdiv.innerHTML = ss;
						othersdiv.appendChild(newdiv);
						othercount++;
					}else if(totalcount==hm){
						newdiv.id="moreusers";
						newdiv.innerHTML="More...";
						othersdiv.appendChild(newdiv);
					}else{
						//do nothing
					}
						
				}
			}//if meets filter criteria
		}//if doesn't exist
	}//for each ids
	refreshStatuses();
}//renderUserList

function getNewMessages(){
	if(mychatstatus=="OFFLINE") return;
	addDot();
	log("getting messages");
	//only do if we're not already getting messages
	//or it's been a while (system hanging?)
	var interval = 60000;//60 sec
	if(!gettingMessages || (new Date().getTime() - lastMessageFetch > interval)){
		gettingMessages = true;
		var url = "chatter.jsp?a=FETCHMESSAGES&ms="+new Date().getTime();
		//log(url);
		new Ajax.Request(url, { method:'post',
		  onSuccess: function(transport){
		    //log("got response");
		    gettingMessages = false;//reset the flag
			var response = transport.responseText;
			//log(response);
			response = trim(response);
			try{
				eval(response);//this sets up the msgs array from the request
				log("about to process msgs");
				if(msgs) processMessages(msgs);//display the new messages
				log(msgs.length+" messages loaded");
			}catch(e){
				log("getNewMessages():"+e+":"+response);
			}//try
			
		  }//function(transport)
		});//Ajax.Request
	}//if not already doing it
	else{
		log("skipping message fetch---may be already running");
	}
}//getNewMessages

function processMessages(msgs){
	try{
		sounded = false;
		//get the new messages, add to the div of 
		//if(msgs.length > 0) alert("processing "+msgs.length+" messages");
		for(var i=0;i<msgs.length;i++){
			var chatId = msgs[i][6];
			if(contains(chatMsgIds,chatId)){
				//we've already displayed it?
				log("message already processed");
			}else{
				var fromId = msgs[i][2];
				var fromName = msgs[i][3];
				if(contains(blocks,fromId)){
					//alert("user blocked.  not showing message");
					log("blocking user: "+fromName);
				}else{
					log("valid msg "+i);
					var message = msgs[i][4];
					var chatdiv = getChatDiv(fromId);
					//log(fromId+":"+fromName);
					if(chatdiv==null) chatdiv = addChatDiv(fromId, fromName);
					log("chatdiv:"+chatdiv);
					var text = "<div class='them'>"+message+"</div>";
					//var msgsdiv = e('chatmsgs'+fromId);
					var msgsdiv = chatdiv.childNodes[1].childNodes[0];//e('chatmsgs'+fromId);
					log("msgsdiv:"+msgsdiv);
					msgsdiv.innerHTML += text;
					chatdiv.style.display = "block";
					chatdiv.className = "chatDivHigh";
					scrollChatBottom(fromId);
					if(!sounded){
						playSound();
						sounded = true;
					}
					//store for other windows
					storeConvoToCookie(fromId);
				}//if blocked
				//add this id to the list (we already processed it)
				chatMsgIds[chatMsgIds.length]=chatId;
			}
		}//for each item
		markMessagesRead(msgs);
	}catch(e){
		log(e);
	}
}//processMessages

function markMessagesRead(msgs){
	if(msgs && msgs.length > 0){
		log("marking messages read");
		var parms = "";
		for(var i=0;i<msgs.length;i++){
			var chatId = msgs[i][6];
			parms += "&id="+chatId;
		}
		log(parms);
		var url = "chatter.jsp?a=MARKREAD"+parms+"&ms="+new Date().getTime();
		
		new Ajax.Request(url, { method:'post',
		  onSuccess: function(transport){
		    response = transport.responseText;
			response = trim(response);
			log(response+" messages marked read");
		  }
		});
	}else{
		log("no messages to mark read");
	}//if messages
	
}








/**********************************************/





function blockUser(id){
	blocks[blocks.length]=id;
	alert("user blocked");
	closeChatDiv(id);
}
function nplus(){
	if(nn>1000) nn = 0;
	nn = nn+1;
}
function popSounds(){
	var s = "Change sound: ";
	for(var i=0;i<sounds1.length;i++){
		s += " &raquo; <a href='javascript:changeSound("+i+");'>"+sounds1[i]+"</a>"
	}
	e("soundopts").innerHTML=s;
}
function changeSound(n){
	sound = n;
	//log("no longer doing the embed thing");
	//e("sound").innerHTML=   "<embed src='scripts/"+sounds2[sound]+"' autostart=true width=0 height=0 id='soundwav' enablejavascript='true'>";
	//log(e("soundwav").src+" = new sound path");
	playSound(); 
	
}
function playSound(){
	if(sound > 0){
	//if(sound > 0 && !hasFocus){
		//log("playing swf sound: "+sounds2[sound]);
		playSWFSound(sounds2[sound]);
		//OLD
		//try{e("soundwav").Play();}catch(err){}
	}
}
/*
function refresh(arrayss){
	//alert(arrayss);
	var dots = e("dots");
	dots.innerHTML += ".";
	if(dots.innerHTML.length >= 10){
		dots.innerHTML=".";
	}
	try{
		//alert("evaling arrays");
		eval(arrayss);//this sets up the users and msgs arrays from the request
		//alert("done evaling arrays");
		//loop through each array, reload user list
		//loop through new messages, process appropriately
		processActiveUsers(ids,names); 
		processMessages(msgs);
	}catch(e){}
	
}
*/

function removeOldUsers(oldlist, newlist){
	if(oldlist==null) return;
	if(newlist==null) newlist = new Array();
	//alert("removing old users");
	//for each item in old list
	for(var i=0;i<oldlist.length;i++){
		var nid = oldlist[i];
		if(nid==null)nid = "???";
		if(!contains(newlist,nid)){
			//remove element
			removeUser(oldlist[i]);
		}//if doesn't exist in list
	}//for each item
}
function removeUser(id){
	var list = e("userlist");
	var user = e("user"+id);
	if(user!=null) {
		list.removeChild(user);
	}
	//alert("user "+id+" removed");
}

function raiseChat(id){
	var dd = e('chat'+id);
	dd.style.zIndex = z++;
	dd.className = "chatDiv";
}

function sendMessage(name){
	
	//alert("sending form");
	//var form = e(name);
	eval("var form = document."+name);
	var chatdiv = getChatDiv(form.toId.value);
	if(chatdiv==null) {
		alert("chatdiv is null.  creating one: chat"+form.toId.value);
		chatdiv = addChatDiv(form.toId.value, form.toName.value);
		alert(chatdiv);
	}
	//var master = e("container");
	//alert("sumitting msg1");
	var text = form.message.value;
	text = trim(text);
	if(text.length>0){
		//text = escape(text);
		//text = text.replace("'","`");
		//text = text.replace("\"","``");
		form.message.value="";//clear
		form.message.focus();
		//alert("sumitting msg2");
		var msgsdiv = e('chatmsgs'+form.toId.value);//e("msgs"+form.toId.value);
		//alert(msgsdiv);
		//alert("sumitting msg3");
		msgsdiv.innerHTML += "<div class='me'>"+text+"</div>";
		scrollChatBottom(form.toId.value);
				
		//alert("sumitting msg4: chatdiv");
		//alert(chatdiv);
		chatdiv.style.display = "block";
		//alert("sumitting msg5");
		
		chatdiv.className = "chatDiv";
		//alert("sumitting msg6");
		
		submitMessage(form.toId.value,form.toName.value,myid,myname,text);

		//store for other windows
		storeConvoToCookie(form.toId.value);

		//alert("sumitted msg all");
	}//if length of msg > 0
}
function storeConvoToCookie(id){
	var chatdiv = getChatDiv(id);
	if(chatdiv!=null){
		var s = e('chatmsgs'+id).innerHTML;
		if(s.length>2000){
			//cut off 1000 chars
			log("TOO LONG! "+s.length+" chars.")
			s = s.substring(s.length-1000);
		}
		log("Storing: "+s.length+" chars");
		createCookie("convo"+id,escape(s),1);
	}
}
function showConvoFromCookie(id,name,right){
	var chatdiv = getChatDiv(id);
	if(!chatdiv) chatdiv = addChatDiv(id,name);
	var s = readCookie("convo"+id);
	if(s==null)s="";
	e('chatmsgs'+id).innerHTML = unescape(s);
	//chatdiv.style.right = right+"px";
	scrollChatBottom(id);
	arrangeChats();
}
function getChatsFromCookie(ss){
	var s = ss.substring(1,ss.length-1);
	return s.split("][");
}
function addChatToCookie(id,name){
	//add to the cookie list
	var s = readCookie("chatconvs");
	if(s==null) s="";
	if(s.indexOf("["+id+":")>=0){
		//do nothing, already exists
	}else{
		s += "["+id+":"+escape(name)+"]";
		log("adding "+s);
	}
	createCookie("chatconvs",s,1);
	chats=getChatsFromCookie(get("chatconvs")).length;
	//alert("Old Conv:["+s+"] New Conv:["+ss+"]");
	
}
function removeChatFromCookie(id){
	log("removing "+id+" from cookie")
	//add to the cookie list
	var s = readCookie("chatconvs");
	if(s!=null){
		var loc1=s.indexOf("["+id+":");
		if(loc1>=0){
			var loc2 = s.indexOf("]",loc1);
			if(loc2>=0 && loc2>loc1){
				var ss = s.substring(0,loc1)+s.substring(loc2+1);
				createCookie("chatconvs",ss,1);
			}//if found start and end
		}//if found the id
	}//if the cookie ain't null
	chats=getChatsFromCookie(get("chatconvs")).length;
	//alert("Old Conv:["+s+"] New Conv:["+ss+"]");
}

function getChatDiv(id){
	//alert("fetching chat"+id);
	currentChat = e("chat"+id);
	//alert("chat"+id+":"+currentChat);
	return currentChat;
}

function addChatDiv(id, name){
	addChatToCookie(id,name);
	
	var newDiv = document.createElement("div");
	newDiv.id = "chat"+id;
	newDiv.className = "chatDiv";
	//newDiv.style.position="absolute";
	
	//var mloc = loc("nav_menu");
	//var x = mloc[0];
	//var y = mloc[1];
	//newDiv.style.left = (x+(chats+1)*(winwidth+2))+"px";
	newDiv.style.right = (20+(chats)*(winwidth+2))+"px";
	//newDiv.style.bottom = "30px";
	//newDiv.style.backgroundColor="white";
	//newDiv.style.zIndex=z;
	z++;
	newDiv.onmousedown=function(){raiseChat(id);}
	
	var newMinDiv = document.createElement("div");
	newMinDiv.id = "chathunk"+id;
	newMinDiv.className = "chatHunk";
	
	var newStatusDiv = document.createElement("div");
	newStatusDiv.id = "chatstatus"+id;
	
	var newTitle = document.createElement("div");
	newTitle.innerHTML = "<div style='padding: 2px;' id='chattitle"+id+"'><div style='float:left;'><b>"+name+"</b></div><div id='chatclose"+id+"' class='chatwinaction'><a style='color:white;' href=\"javascript:closeChatDiv('"+id+"');\">X</a></div><div id='chatmin"+id+"' class='chatwinaction'><a style='color:white;' href=\"javascript:minChatDiv('"+id+"');\">_</a></div><div style='display:none' id='chatmax"+id+"' class='chatwinaction'><a style='color:white;' href=\"javascript:maxChatDiv('"+id+"');\">[]</a></div><div style='clear:both;'></div></div>";
	newTitle.className = "chatTitle";
	
	var newForm = document.createElement("div");
	newForm.id = "chatform"+id;
	newForm.innerHTML = chatFormText(id,name);
	newForm.className = "chatForm";
	
	var newMsgs = document.createElement("div");
	newMsgs.id = "chatmsgs"+id;
	newMsgs.className = "chatMsgs";
	
	newMinDiv.appendChild(newMsgs);
	newMinDiv.appendChild(newForm);
	newMinDiv.appendChild(newStatusDiv);
	
	newDiv.appendChild(newTitle);
	newDiv.appendChild(newMinDiv);
	//var text = "<div class='chatDiv' id='chat'"+id+"'></div>";
	//var master = e("container");
	//master.appendChild(newDiv);
	document.body.appendChild(newDiv);
	
	//Drag.init(e("chattitle"+id), e("chat"+id));
	
	//chats++;
	openChats[openChats.length]=id;
	refreshStatuses();
	arrangeChats();
	return newDiv;
}

function closeChatDiv(id){
	//alert("closing "+id);
	var div = e("chat"+id);
	if(div==null) return;
	div.style.display = "none";
	//chats--;
	removeChatFromCookie(id);
	arrangeChats();
}
function minChatDiv(id){
	var div = e("chathunk"+id);
	if(div==null) return;
	log("found min div, closing")
	div.style.display = "none";
	e("chatmin"+id).style.display="none";
	e("chatmax"+id).style.display="";
}
function maxChatDiv(id){
	var div = e("chathunk"+id);
	if(div==null) return;
	div.style.display = "";
	e("chatmin"+id).style.display="";
	e("chatmax"+id).style.display="none";
}
function openMsgForm(id, name){
	if(!loggedIn){
		alert(notLoggedInMsg);
		return;
	}
	if(!browserSupportsChat){
		alert(unsupportedBrowserMsg);
		return;
	}
	openChatMain();//in case it's not opened
	//alert(name);
	var chatdiv = getChatDiv(id);
	if(chatdiv==null) {
		chatdiv = addChatDiv(id, name);
	}else{
		addChatToCookie(id,name);
	}
	chatdiv.style.display = "block";
	eval("document.usermsg"+id+".message.focus();");
}

function chatFormText(id, name){
	if(name==null)name="";
	name = name.replace("'","");
	var form = "<table>";
	form += "<tr>";
	form += "<td>";
	form += "<form style='padding:0px' name='usermsg"+id+"' action='#' onsubmit=\"sendMessage('usermsg"+id+"');return false;\">";
	//form += "<div style='font-size:80%;color:#9999FF;'>type message and hit 'enter'</div>";
	form += "<input type='hidden' name='toId' value='"+id+"'>";
	form += "<input type='hidden' name='toName' value='"+name+"'>";
	//form += "<textarea name='message' cols=30 rows=2></textarea><br>";
	form += "<input type='text' name='message' size=25><br>";
	form += "<a  style='color: #AAAAFF;font-size:80%' href='' onclick='showOpts("+id+");return false;'>options</a>";
	//form += "<input type='button' value='send' onclick=\"sendMessage('usermsg"+id+"');\">";
	//form += "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
	//form += "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
	var convid = myid+":"+id;
	if(id<myid) convid = id+":"+myid;
	//form += "<div style='float:right;padding:5px;text-align:right'><a style='color: #AAAAFF;font-size:80%' href=\"javascript:blockUser('"+id+"')\">block user</a></div>";
	form += "<div id='chatopts"+id+"' style='display:none;float:right;padding:5px;text-align:right'>";
	if(!contains(friends,id)){
		form += "+ <a style='color: #6666FF;font-size:80%' href=\"javascript:actionFriend('"+id+"','ADD')\">add as friend</a><br>";
	}else{
		form += "- <a style='color: #6666FF;font-size:80%' href=\"javascript:actionFriend('"+id+"','REMOVE')\">remove friend</a><br>";
	}
	form += "<a style='color: #AAAAFF;font-size:80%' href=\"javascript:openHistory('"+convid+"','"+id+"')\">show history</a>";
	form += "<br>";
	form += "<a style='color: #AAAAFF;font-size:80%' href=\"javascript:blockUser('"+id+"')\">block user</a>";
	//form += "<br>";
	//form += "<a style='color: #AAAAFF;font-size:80%' href=\"javascript:clearMsgs('"+id+"')\">clear</a>";
	form += "<br>";
	form += "<a  style='color: #AAAAFF;font-size:80%' href='' onclick='hideOpts("+id+");return false;'>hide options</a>";
	form += "</div>";
	form += "";
	form += "</td></form></tr>";
	form += "</table>";
	return form;
}

function createFormInput(type, name, value){
	//alert('createformelement:'+type+':'+name);
	var input = document.createElement("input");
	input.type = type;
	input.name = name;
	input.value = value;
	input.id = name;
	return input;
}

function submitMessage(toId,toName,fromId,fromName,message){
	log("sending message");
	var url = "chatter.jsp";
	var parms = "a=SEND"+
		"&toId="+toId+
		"&fromId="+fromId+
		"&fromName="+escape(fromName)+
		"&toName="+escape(toName)+
		"&message="+escape(message);
	//a=SEND&toId=1000&fromId=1000&fromName=Adam&toName=Austin&message=testmessage
	//log(parms);	
	new Ajax.Request(url, { 
	  method: 'post',
      parameters: parms,
	  onSuccess: function(transport){
	  	var pageResponse = xmlHttp2.responseText;
		pageResponse = trim(pageResponse);
		//alert("pageResponse:"+pageResponse);
		var cc = pageResponse.substring(0,3);
		var msg = pageResponse.substring(4);
		if(cc == "300"){//seller not online
			alert(msg);
		}
		//log(""+pageResponse);
	  
	  }//function(transport)
	});//Ajax.Request
	  
	  
}

function launchChat(id, name){
	myid = id;
	myname = name;
	var sss = "<div id=\"dots\">.</div>";
	sss += "<b>Who's Online</b><br>";
	sss += "<style>.me{color:black}.them{color:red;margin-left: 15px;}.ddd{padding: 5px;border:dashed 1px black;}.chatDiv{padding: 5px;width:200px;float:left;border:dashed 1px gray;}.chatDivHigh{padding: 5px;width:200px;float:left;border:solid 3px orange;background-color:white;}</style><div id=\"container\">";
	sss += "<div id=\"userlist\" style=\"float:left;width: 150px;\"></div></div>";
	sss += "<div style=\"clear: both;\"></div>";
	sss += "<br><br><br><br><br>";
	sss += "<div id=\"soundopts\"></div>";
	sss += "<div id=\"sound\"></div>";
	sss += "<br><br>";
	sss += "<div id=\"mmm\" style=\"font-size:80%;color:#DDDDDD;\"></div>";
	sss += "</div>";
	alert(sss);
	document.write(sss);
	popSounds();
	startRefresh();
	setInterval('startRefresh()',5000);

}
function scrollChatBottom(id){
	//scroll the div
	var tt = e('chatmsgs'+id);
	tt.scrollTop = tt.scrollHeight;
}
function showOpts(id){
	show("chatopts"+id);
}
function hideOpts(id){
	hide("chatopts"+id);
}
function set(key,val){
	//sets a value in the chat settings cookie
	var s = readCookie("chatsettings");
	if(s==null)s="";
	var s1 = "["+key+"]";
	var s2 = "[/"+key+"]";
	var l1 = s.indexOf(s1);
	var l2 = s.indexOf(s2);
	var snew = "";
	if(l1<0){//not in the settings
		snew = s+s1+val+s2;
	}else{
		snew = s.substring(0,l1)+s1+val+s2+s.substring(l2+s2.length);
	}
	createCookie("chatsettings",snew,15);
}
function get(key){
	//gets a value from the chat settings cookie
	var s = readCookie("chatsettings");
	if(s==null)return "";
	var s1 = "["+key+"]";
	var s2 = "[/"+key+"]";
	var l1 = s.indexOf(s1);
	if(l1<0) return "";
	var l2 = s.indexOf(s2);
	var val = s.substring(l1+s1.length, l2);
	return val;
}

/**** UTILITY functions *******************************/
/**** UTILITY functions *******************************/
/**** UTILITY functions *******************************/
function toggle(id){
	alert("toggling");
	var s = e(id);
	if(s){
		alert("toggling "+id+" from "+s.style.display);
		if(s.style.display=="none") s.style.display="";
		else s.style.display="none";
	}
}
function loc(eid){
	return Element.cumulativeOffset(document.getElementById(eid));
}

function show(id){
	document.getElementById(id).style.display="";
}
function hide(id){
	document.getElementById(id).style.display="none";
}
function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function eraseCookie(name) {
	createCookie(name,"",-1);
}

function e(id){
	return document.getElementById(id);
}
function closeDiv(id){
	//alert("closing "+id);
	deleteDiv(id);
}
function deleteDiv(id){
	//alert("closing "+id);
	var div = e(id);
	if(div!=null) div.parentNode.removeChild(div);
}
function trim(ss){
	return ss.replace(/^\s+|\s+$/g, '');
}
function log(msg){
	if(!debug) return;
	var logger = e("mmm");
	try{
		var cur = logger.innerHTML;
		if(debug){
			if(cur.length > 500) cur = cur.substring(0,500);
			logger.innerHTML = msg + "|"+cur;
		}else{
			logger.innerHTML = nn + ":"+msg;
		}
	}catch(ee){
		//alert(ee);
	}
}
function rand(min,max){
	return Math.floor(Math.random()*(max-min))+min;
}
String.prototype.trim = function() {
	return this.replace(/^\s+|\s+$/g,"");
}
String.prototype.ltrim = function() {
	return this.replace(/^\s+/,"");
}
String.prototype.rtrim = function() {
	return this.replace(/\s+$/,"");
}

//scrub the string to make it javascriptable
function scrub(s){
	s = s.replace(/\'/g,"");//remove: '
	s = s.replace(/\"/g,"");//remove: "
	return s;
}
function contains(array, value){
	if(array==null) return false;
	for(var i=0;i<array.length;i++){
		if(array[i]==value){
			//alert("user already in list");
			return true;
		}
	}
	//alert("user not in list");
	return false;
}
function addDot(){
	var dots = e("dots");
	if(!dots) return;
	dots.innerHTML += ".";
	if(dots.innerHTML.length >= 10){
		dots.innerHTML=".";
	}
}//addDot
function dateDiff(older,newer){
	var diff = older.getTime()-newer.getTime();
	diff = Math.abs(diff);
	diff = diff/1000;//s
	if(diff < 60) return Math.floor(diff)+" sec";
	diff = diff/60;//minutes
	if(diff < 60) return Math.floor(diff)+" min";
	diff = diff/60;//hours
	if(diff < 24) return Math.floor(diff)+" hours";
	diff = diff/24;//days
	return Math.floor(diff)+" days";
	
}
function dateDiffMinutes(older,newer){
	var diff = older.getTime()-newer.getTime();
	diff = Math.abs(diff);
	diff = diff/1000;//s
	diff = diff/60;//minutes
	return Math.floor(diff);
}
function dateDiffDays(older,newer){
	var diff = older.getTime()-newer.getTime();
	diff = Math.abs(diff);
	diff = diff/1000;//s
	diff = diff/60;//minutes
	diff = diff/60;//hours
	diff = diff/24;//days
	return Math.floor(diff);
}
function parseDate(sdate){
	var year = sdate.substring(0,4);
	var month = sdate.substring(5,7);
	var day = sdate.substring(8,10);
	var hour = sdate.substring(11,13);
	var min = sdate.substring(14,16);
	var sec = sdate.substring(17,19);
	var s = year+", "+ unpad(month)+", "+ unpad(day)+", "+ unpad(hour)+", "+ unpad(min)+", "+ unpad(sec);
	//alert(s);
	//alert(Date.UTC(s));

	var d = new Date();
	d.setYear(unpad(year));
	d.setMonth(unpad(month)-1);
	d.setDate(unpad(day));
	d.setHours(unpad(hour));
	d.setMinutes(unpad(min));
	d.setSeconds(unpad(sec));
	
	//TODO: be smarter than this:
	var offsethours = 2;
	d.setTime(d.getTime() + offsethours*60*60*1000);
	
	return d;
	
}
function unpad(s){
	if(s.indexOf("0")==0) return s.substring(1);
	return s;
}
