
	// global vars
	var d = document;
	var commentsAreas = new Array();
	
	
	function setNewsFeedTab(n)
	{
		var NewsFeedTab1 = d.getElementById("NewsFeedTab1");
		var NewsFeedTab2 = d.getElementById("NewsFeedTab2");
		var NewsFeedTab3 = d.getElementById("NewsFeedTab3");
		if(NewsFeedTab1) NewsFeedTab1.className = "";
		if(NewsFeedTab2) NewsFeedTab2.className = "";
		if(NewsFeedTab3) NewsFeedTab3.className = "";
		var NewsFeedTab = d.getElementById("NewsFeedTab" + n);
		if(NewsFeedTab) NewsFeedTab.className = "on";
		return false;
	}//setNewsFeedTab
	
	function NewsFeedLoading(a)
	{
		d.getElementById("news_feed_td").innerHTML = a ? "<p>Loading...</p>" : "";
		return false;
	}//NewsFeedLoading



	////////////////////////
	// Show News Feed
	//

	function showNewsFeed(uid, mode, id)
	{
		commentsAreas = new Array();
		NewsFeedLoading(1);
		sndReqNew("cmd=news_feed_ajax&user_id=" + uid + "&mode=" + mode + (id ? "&id=" + id : ""), "POST", "handleShowNewsFeedResponse", false, "NewsFeed");
	}

	function handleShowNewsFeedResponse(t,p)
	{
		NewsFeedLoading(0);
		document.getElementById("news_feed_td").innerHTML = t ? t : "<p>There are no records to display.</p>";
		if(t) 
		{
			var NFCommentsHiddenArr = d.getElementsByName("NFCommentsHiddenArr");
			for(var i = 0; i < NFCommentsHiddenArr.length; i++)
			{
				if(NFCommentsHiddenArr[i].value) showNFComments(NFCommentsHiddenArr[i].value);
			}
		}
	}


	//
	// /Show News Feed
	////////////////////////
	
	////////////////////////
	// News Feed Comments
	//
	
		
		function showNFComments(id)
		{
			if(!commentsAreas[id])
			{
				addCommentsArea(id);
				return false;
			}
			if(commentsAreas[id]["status"] == "on")
			{
				hideCommentsArea(id);
			}else
			{
				showCommentsArea(id);
			}
			return false;
		}
		
		function showNFCommentsForm(id)
		{
			if(commentsAreas[id]["form"])
			{
				commentsAreas[id]["form"] = false;
				if(is_logged_in) show(commentsAreas[id]["comments_area_form"]);
			}else
			{
				commentsAreas[id]["form"] = true;
				hide(commentsAreas[id]["comments_area_form"]);
			}
			return false;
		}
		
		function NFpostComment(frm, id)
		{
			if(frm.comment.value == "Leave Comment...") return false;
			var tmp = new Array();
			tmp["id"] = id;
			tmp["ok"] = "okok";
			sndReqNew("cmd=news_feed_comments_ajax&last_id=" + commentsAreas[id]["last_id"] + "&item_id=" + id + "&comment=" + frm.comment.value, "POST", "updateComments", tmp);
			frm.comment.value = "Leave Comment...";
			commentsAreaLoading(id);
			return false;
		}
		
		function addCommentsArea(id)
		{
			itemBox = d.getElementById(id);
			var tmp = new Array();
			tmp["id"] = id;
			itemBox.innerHTML += getHtml(tmp, "comments_area");
			commentsAreas[id] = new Array();
			commentsAreas[id]["comments_area"] = d.getElementById("comments_area-"+id);
			commentsAreas[id]["comments_area_items"] = d.getElementById("comments_area_items-"+id);
			commentsAreas[id]["comments_area_form"] = d.getElementById("comments_area_form-"+id);
			commentsAreas[id]["comments_area_form_outer"] = d.getElementById("comments_area_form_outer-"+id);
			hide(commentsAreas[id]["comments_area_form"]);
			commentsAreas[id]["comments_area_loading"] = d.getElementById("comments_area_loading-"+id);
			commentsAreas[id]["status"] = "off";
			commentsAreas[id]["loading"] = false;
			commentsAreas[id]["form"] = true;
			commentsAreas[id]["last_id"] = 0;
			showCommentsArea(id);
			tmp["ok"] = "ok";
			sndReqNew("cmd=news_feed_comments_ajax&last_id=" + commentsAreas[id]["last_id"] + "&item_id=" + id, "GET", "updateComments", tmp);
			commentsAreaLoading(id);
			return false;
		}
		
		function updateComments(txt, params)
		{
			if(commentsAreas[params["id"]])
			{
				if(txt.substring(0,params["ok"].length) == params["ok"])
				{
					parseNFComment(txt.substring(params["ok"].length));
				}else
				{
					//alert(txt);
				}
				commentsAreaLoading(params["id"]);
			}
		}//updateComments
		
		function parseNFComment(comments)
		{
			comments = unserialize(comments);
			if(comments)
			{
				for(var i in comments)
				{
					addNFComment(comments[i]);
				}
			}
		}//parseNFComment
		
		function addNFComment(comment)
		{
			comment["user_photo"] = getHtml(comment, "user_photo_" + (comment["profile_image_path"] && comment["profile_image"] ? 1 : 0));
			comment["comment"] = stripslashes(comment["comment"]);
			commentsAreas[comment["item_id"]]["comments_area_items"].innerHTML += getHtml(comment, "NF_comment");
			commentsAreas[comment["item_id"]]["last_id"] = comment["id"];
		}//addNFComment
		
		function showCommentsArea(id)
		{
			commentsAreas[id]["status"] = "on";
			show(commentsAreas[id]["comments_area"]);
		}
		
		function hideCommentsArea(id)
		{
			commentsAreas[id]["status"] = "off";
			hide(commentsAreas[id]["comments_area"]);
		}
		
		function commentsAreaLoading(id)
		{
			if(commentsAreas[id]["loading"])
			{
				commentsAreas[id]["loading"] = false;
				hide(commentsAreas[id]["comments_area_loading"]);
				show(commentsAreas[id]["comments_area_form_outer"]);
			}else
			{
				commentsAreas[id]["loading"] = true;
				hide(commentsAreas[id]["comments_area_form_outer"]);
				show(commentsAreas[id]["comments_area_loading"]);
			}
		}
		
		function clearInput(obj)
		{
			if(obj.value == "Leave Comment...") obj.value = "";
			return true;
		}
		
		var NFhtml = new Array();
		NFhtml["comments_area"] = "";
		NFhtml["comments_area"] += "<div id=\"comments_area-%id%\" class=\"social_news_feed_comments\">";
		NFhtml["comments_area"] += "<div id=\"comments_area_items-%id%\"></div>";
		NFhtml["comments_area"] += "<div id=\"comments_area_form_outer-%id%\"><div class=\"social_news_feed_comments_form\" id=\"comments_area_form-%id%\"><div class=\"social_borders\">";
		NFhtml["comments_area"] += "<form id=\"social_news_feed_comments_form_%id%\" action=\"\" method=\"post\" onsubmit=\"return NFpostComment(this,'%id%');\">";
		NFhtml["comments_area"] += "<input onfocus=\"clearInput(this);\" type=\"text\" class=\"text\" name=\"comment\" value=\"Leave Comment...\">";
		NFhtml["comments_area"] += "<a href=\"#\" onclick=\"return NFpostComment(d.getElementById('social_news_feed_comments_form_%id%'),'%id%');\" style=\"float:right;\" class=\"social_button\"><div class=\"siteBGColor\">POST</div></a>";
		NFhtml["comments_area"] += "<input type=\"submit\" style=\"width:0px;height:0px;border:none;background:transparent;margin:0;padding:0;\">";
		NFhtml["comments_area"] += "</form>";
		NFhtml["comments_area"] += "</div></div></div>";
		NFhtml["comments_area"] += "<div id=\"comments_area_loading-%id%\" style=\"display:none;\">Loading...</div>";
		NFhtml["comments_area"] += "</div>";
		NFhtml["NF_comment"] = "";
		NFhtml["NF_comment"] += "<table width=\"100%\" cellpadding=\"2\" cellspacing=\"0\" class=\"social_news_feed_comment\"><tr>";
		NFhtml["NF_comment"] += "<td width=\"1\" align=\"center\" valign=\"top\">%user_photo%</td>";
		NFhtml["NF_comment"] += "<td align=\"left\" valign=\"top\"><a href=\"/u/%username%/\" class=\"social_site_color\">%band_name%</a> at %date%<br />%comment%</td>";
		NFhtml["NF_comment"] += "</tr></table>";
		NFhtml["user_photo_1"] = "<img class=\"profile_img_arrow_box_s\" src=\""+IMAGES_WEB_IMAGES+"/members%profile_image_path%/sq/%profile_image%\" alt=\"%band_name%\" title=\"%band_name%\" />";
		NFhtml["user_photo_0"] = "<img class=\"profile_img_arrow_box_s\" src=\""+IMAGES_WEB_IMG+"/social/MissingImage-120x120-glasses.jpg\" alt=\"No Photo\" title=\"No Photo\" />";
		
		function getHtml(a,k)
		{
			var tmp = NFhtml[k];
			for(var i in a)
			{
				tmp = tmp.replace(new RegExp("%" + i + "%","g"),a[i])
			}
			return tmp;
		}//getHtml
		
		
	//
	// /News Feed Comments
	////////////////////////
	
	var requestsArr = new Array();
	
	function createRequestObject()
	{
		var ro;
		if (window.XMLHttpRequest)
		{
			ro = new XMLHttpRequest();
		} else
		{
			ro = new ActiveXObject('Msxml2.XMLHTTP');
			if(!ro)
			{
				ro = new ActiveXObject('Microsoft.XMLHTTP');
			}
		}
		return ro;
	}

	function sndReqNew(parameters, method, handleResponse, additionalParameters, id)
	{
		if(!id)
		{
			var id = new Date();
			id = "_" + id.getTime() + Math.random();
		}
		parameters = encodeURI(parameters);
		var url = "/wf/index.php";
		requestsArr[id] = createRequestObject();
		requestsArr[id].onreadystatechange = function()
		{
			if(requestsArr[id].readyState == 4)// && requestsArr[id].status == 200)
			{
				eval("handleResponseNew('" + id + "','" + handleResponse + "',additionalParameters)");
			}
		}

		if (method == "GET")
		{
			requestsArr[id].open('GET', url + "?" + parameters, true);
			requestsArr[id].send(null);
		}
		else if(method == "POST")
		{
			requestsArr[id].open('POST', url, true);
			requestsArr[id].setRequestHeader("Content-type", "application/x-www-form-urlencoded");
			requestsArr[id].setRequestHeader("Content-length", parameters.length);
			requestsArr[id].setRequestHeader("Connection", "close");
			requestsArr[id].send(parameters);
		}
	}
	
	function handleResponseNew(id, func, additionalParameters)
	{
		var t = requestsArr[id].responseText;
		requestsArr[id] = false;
		eval(func +"(t,additionalParameters)");
	}
	
	function unserialize(data){
    // http://kevin.vanzonneveld.net
    // +     original by: Arpad Ray (mailto:arpad@php.net)
    // +     improved by: Pedro Tainha (http://www.pedrotainha.com)
    // +     bugfixed by: dptr1988
    // +      revised by: d3x
    // +     improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // %            note: We feel the main purpose of this function should be to ease the transport of data between php & js
    // %            note: Aiming for PHP-compatibility, we have to translate objects to arrays 
    
    
    var error = function (type, msg){/*alert(type + ": " + msg);*/};
    var read_until = function (data, offset, stopchr){
        var buf = [];
        var chr = data.slice(offset, offset + 1);
        var i = 2;
        while(chr != stopchr){
            if((i+offset) > data.length){
                error('Error', 'Invalid');
            }
            buf.push(chr);
            chr = data.slice(offset + (i - 1),offset + i);
            i += 1;
        }
        return [buf.length, buf.join('')];
    };
    var read_chrs = function (data, offset, length){
        buf = [];
        for(var i = 0;i < length;i++){
            var chr = data.slice(offset + (i - 1),offset + i);
            buf.push(chr);
        }
        return [buf.length, buf.join('')];
    };
    var _unserialize = function (data, offset){
        if(!offset) offset = 0;
        var buf = [];
        var dtype = (data.slice(offset, offset + 1)).toLowerCase();
        
        var dataoffset = offset + 2;
        var typeconvert = new Function('x', 'return x');
        var chrs = 0;
        var datalength = 0;
        
        switch(dtype){
            case "i":
                typeconvert = new Function('x', 'return parseInt(x)');
                var readData = read_until(data, dataoffset, ';');
                var chrs = readData[0];
                var readdata = readData[1];
                dataoffset += chrs + 1;
            break;
            case "b":
                typeconvert = new Function('x', 'return (parseInt(x) == 1)');
                var readData = read_until(data, dataoffset, ';');
                var chrs = readData[0];
                var readdata = readData[1];
                dataoffset += chrs + 1;
            break;
            case "d":
                typeconvert = new Function('x', 'return parseFloat(x)');
                var readData = read_until(data, dataoffset, ';');
                var chrs = readData[0];
                var readdata = readData[1];
                dataoffset += chrs + 1;
            break;
            case "n":
                readdata = null;
            break;
            case "s":
                var ccount = read_until(data, dataoffset, ':');
                var chrs = ccount[0];
                var stringlength = ccount[1];
                dataoffset += chrs + 2;
                
                var readData = read_chrs(data, dataoffset+1, parseInt(stringlength));
                var chrs = readData[0];
                var readdata = readData[1];
                dataoffset += chrs + 2;
                if(chrs != parseInt(stringlength) && chrs != readdata.length){
                    error('SyntaxError', 'String length mismatch');
                }
            break;
            case "a":
                var readdata = {};
                
                var keyandchrs = read_until(data, dataoffset, ':');
                var chrs = keyandchrs[0];
                var keys = keyandchrs[1];
                dataoffset += chrs + 2;
                
                for(var i = 0;i < parseInt(keys);i++){
                    var kprops = _unserialize(data, dataoffset);
                    var kchrs = kprops[1];
                    var key = kprops[2];
                    dataoffset += kchrs;
                    
                    var vprops = _unserialize(data, dataoffset);
                    var vchrs = vprops[1];
                    var value = vprops[2];
                    dataoffset += vchrs;
                    
                    readdata[key] = value;
                }
                
                dataoffset += 1;
            break;
            default:
                error('SyntaxError', 'Unknown / Unhandled data type(s): ' + dtype);
            break;
        }
        return [dtype, dataoffset - offset, typeconvert(readdata)];
    };
    return _unserialize(data, 0)[2];
}

		function stripslashes( str ) {
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Ates Goral (http://magnetiq.com)
    // +      fixed by: Mick@el
    // +   improved by: marrtins
    // +   bugfixed by: Onno Marsman
    // +   improved by: rezna
    // +   input by: Rick Waldron
    // +   reimplemented by: Brett Zamir (http://brett-zamir.me)
    // *     example 1: stripslashes('Kevin\'s code');
    // *     returns 1: "Kevin's code"
    // *     example 2: stripslashes('Kevin\\\'s code');
    // *     returns 2: "Kevin\'s code"
    return (str+'').replace(/\\(.?)/g, function (s, n1) {
        switch(n1) {
            case '\\':
                return '\\';
            case '0':
                return '\0';
            case '':
                return '';
            default:
                return n1;
        }
    });
}