var gTwitLogin = false;
var gHolder		={};
var clickHandlers = {};
var keyupHandlers = {};
var keydownHandlers = {};
var focusinHandlers ={};
var focusoutHandlers = {};

var searchScope = new RegExp("(comment|group|room|list|friends|like):");
var searchOrder = [1,0];
var searchOptions = [["Search for %(term)s",{}],["Search everybody for %(term)s",{}]];

function d(){	
	if(typeof console != 'undefined' && console.log){
		for(i=0,l=arguments.length;i<l;i++){
			console.log(arguments[i]);
			
		}
	}else{
		for(i=0,l=arguments.length;i<l;i++){
			
		}	
	}
}
function isEmpty(ob){
	for(var i in ob){ if(ob.hasOwnProperty(i)){return false;}}
	return true;
};


function updateLengthCounter(A, C) {
    var B = A[0].value.length;
    if (B <= 0) {
        C.html("")
    } else {
        C.html("" + B)
    }
};


var showInfoMessage = function(A)
{
	
	var B = $('#sys_msg');	
	if(B.length == 0){
		B = $('<div id="sys_msg"><span class="success"></span></div>');
		$('#w_container').append(B);
	}
	B.find('span').html(A);		
	var C = function(){
         setTimeout(function(){B.slideUp()},3500);
    }
	B.slideDown("fast",C);
    
};



var favitCache = {
		cache: {},
		set: function(key, value) {
			this.cache[key] = value;
		},
		get: function(key) {
			if (this.cache[key]) {
				return this.cache[key];
			}
		},
		is: function(key) {
			return this.cache[key] || false;
		},
		remove: function(key) {
			if (this.cache[key]) {
				delete this.cache[key];
			}
		}
};



(function (A) {
    A.fn.bgIframe = A.fn.bgiframe = function (C) {
        if (A.browser.msie && /6.0/.test(navigator.userAgent)) {
            C = A.extend({
                top: "auto",
                left: "auto",
                width: "auto",
                height: "auto",
                opacity: true,
                src: "javascript:false;"
            }, C || {});
            var D = function (E) {
                return E && E.constructor == Number ? E + "px" : E
            },
                B = '<iframe class="bgiframe"frameborder="0"tabindex="-1"src="' + C.src + '"style="display:block;position:absolute;z-index:-1;' + (C.opacity !== false ? "filter:Alpha(Opacity='0');" : "") + "top:" + (C.top == "auto" ? "expression(((parseInt(this.parentNode.currentStyle.borderTopWidth)||0)*-1)+'px')" : D(C.top)) + ";left:" + (C.left == "auto" ? "expression(((parseInt(this.parentNode.currentStyle.borderLeftWidth)||0)*-1)+'px')" : D(C.left)) + ";width:" + (C.width == "auto" ? "expression(this.parentNode.offsetWidth+'px')" : D(C.width)) + ";height:" + (C.height == "auto" ? "expression(this.parentNode.offsetHeight+'px')" : D(C.height)) + ';"/>';
            return this.each(function () {
                if (A("> iframe.bgiframe", this).length == 0) {
                    this.insertBefore(document.createElement(B), this.firstChild)
                }
            })
        }
        return this
    }
})(jQuery);

var delegate  = function()
{
	// register click delegator
	$('body').live('change click focus blur keyup mouseover mouseout', function(event) {
		
		// loop up to the body for elements with l_
		var el = null;
		for(var node = event.target; node; node = node.parentNode) {		
			if (!node.className) {
				continue;
			}				
			// first found will be executed
			var el = node;											
			if (el && el.className != '' && el.className.match(/\s*l_([\w]+)\s*/i)) {
				
				var isInput	= /^.*(input|textarea|password).*$/i.test(el.tagName);
				var nonCapture = /noncapture/.test(el.className);				
				if(isInput && !nonCapture && !el.originalValue && el.value){
					el.originalValue = el.value;
				}				
				var fNses = el.className.match(/\bl_([\w]+)\b/ig);								
				if(fNses){						
					for (var _i = 0, _l = fNses.length; _i < _l; _i++) {
						var fN = fNses[_i].replace(/l_/, '');
						fN = $.trim(fN); // remove whitespaces
						var pS = el.getAttribute('params') || {};
						try{
							pS	= eval("("+pS+")");
						}catch(e){pS = {'json_error':true};}
						// original element
						var oE = event.srcElement || event.originalTarget;
						
						var eventHandler = event.type + 'Handlers';
						var prevent = false;
						
						if(window[eventHandler] && window[eventHandler][fN]){
						
							if (event.type == 'click' && event.button != 0) return false;
							if(event.type == 'click'){
								$('.bubble').fadeOut("fast");
							}
							prevent =  window[eventHandler][fN]($(el), pS, oE, event);
						}
					}
				}				
				if(isInput){
					switch(event.type){					
						case 'focusin':
							if(el.value == el.originalValue){									
								el.value = '';
							}								
							break;
						case 'focusout':								
							if(el.value == '' && el.originalValue){
								el.value = el.originalValue;
							}
							break;
					}					
					// OK WE DO NOT NEED TO BUBBLE HERE SO CUT!
					return true;
				}
				node = false; // exit loop
				if (!prevent) {
					return false; // prevent default click behaviour
				}				
			}
		}
		
		return true;
	});
};


(function (A) {
    A.fn.extend({
        autocomplete: function (B, C) {
    	
            var D = typeof B == "string";
            C = A.extend({}, A.Autocompleter.defaults, {
                url: D ? B : null,
                data: D ? null : B,
                delay: D ? A.Autocompleter.defaults.delay : 10,
                max: C && !C.scroll ? 10 : 150
            }, C);
            C.highlight = C.highlight ||
            function (E) {
                return E
            };
            
            return this.each(function () {
            	
 
                new A.Autocompleter(this, C)
            })
        },
        result: function (B) {
            return this.bind("result", B)
        },
        deletelast: function (B) {
            return this.bind("deletelast", B)
        },
        search: function (B) {
            return this.trigger("search", [B])
        },
        flushCache: function () {
            return this.trigger("flushCache")
        },
        setOptions: function (B) {
            return this.trigger("setOptions", [B])
        },
        unautocomplete: function () {
            return this.trigger("unautocomplete")
        }
    });
    A.Autocompleter = function (L, G) {
        var C = {
            UP: 38,
            DOWN: 40,
            DEL: 46,
            BACKSPACE: 8,
            TAB: 9,
            RETURN: 13,
            ESC: 27,
            COMMA: 188,
            PAGEUP: 33,
            PAGEDOWN: 34
        };
        var B = A(L).attr("autocomplete", "off").addClass(G.inputClass);
        var J;
        var P = "";
        var M = A.Autocompleter.Cache(G);
        var E = 0;
        var U;
        var W = {
            mouseDownOnSelect: false
        };
        var R = A.Autocompleter.Select(G, L, D, W);
        B.keydown(function (X) {
            E = 1;
            U = X.keyCode;
            switch (X.keyCode) {
            case C.UP:
                X.preventDefault();
                if (R.visible()) {
                    R.prev()
                } else {
                    T(0, true)
                }
                break;
            case C.DOWN:
                X.preventDefault();
                if (R.visible()) {
                    R.next()
                } else {
                    T(0, true)
                }
                break;
            case C.PAGEUP:
                X.preventDefault();
                if (R.visible()) {
                    R.pageUp()
                } else {
                    T(0, true)
                }
                break;
            case C.PAGEDOWN:
                X.preventDefault();
                if (R.visible()) {
                    R.pageDown()
                } else {
                    T(0, true)
                }
                break;
            case (G.multiple || G.fbMode) && A.trim(G.multipleSeparator) == "," && C.COMMA:
            case C.TAB:
                if (G.requireExplicit) {
                    X.preventDefault();
                    R.next();
                    break
                }
            case C.RETURN:
                if (D()) {
                    if (!G.multiple) {
                        B.blur()
                    }
                    X.preventDefault()
                }
                if (!G.requireExplicit) {
                    B.val("")
                }
                break;
            case C.ESC:
                R.hide();
                break;
            case C.BACKSPACE:
                if (G.fbMode && !B.val()) {
                    B.trigger("deletelast");
                    break
                }
            default:
                clearTimeout(J);
                J = setTimeout(T, G.delay);
                break
            }
        }).keypress(function () {
            clearTimeout(J);
            J = setTimeout(T, G.delay)
        }).focus(function () {
            E++
        }).blur(function () {
            if (!G.requireExplicit) {
                setTimeout(function () {
                    if (B.val()) {
                        B.val("")
                    }
                }, 10)
            }
            E = 0;
            if (!W.mouseDownOnSelect) {
                S()
            }
        }).click(function () {
            if (E++ > 1 && !R.visible()) {
                T(0, true)
            }
        }).bind("search", function () {
            var X = (arguments.length > 1) ? arguments[1] : null;

            function Y(c, b) {
                var Z;
                if (b && b.length) {
                    for (var a = 0; a < b.length; a++) {
                        if (b[a].result.toLowerCase() == c.toLowerCase()) {
                            Z = b[a];
                            break
                        }
                    }
                }
                if (typeof X == "function") {
                    X(Z)
                } else {
                    B.trigger("result", Z && [Z.data, Z.value])
                }
            }
            A.each(H(B.val()), function (Z, a) {
                F(a, Y, Y)
            })
        }).bind("flushCache", function () {
            M.flush()
        }).bind("setOptions", function () {
            A.extend(G, arguments[1]);
            if ("data" in arguments[1]) {
                M.populate()
            }
        }).bind("unautocomplete", function () {
            R.unbind();
            B.unbind()
        });

        function D() {
            var Y = R.selected();
            var X;
            if (!Y) {
                if (!G.fbMode) {
                    return false
                }
                var a = A.trim(B.val());
                if (a.indexOf("@") > 0) {
                    Y = {
                        value: a,
                        data: [a, null, true],
                        result: a
                    }
                } else {
                    return false
                }
            }
            X = Y.result;
            P = X;
            if (G.multiple) {
                var Z = H(B.val());
                if (Z.length > 1) {
                    X = Z.slice(0, Z.length - 1).join(G.multipleSeparator) + G.multipleSeparator + X
                }
                X += G.multipleSeparator
            }
            if (!G.requireExplicit) {}
            V();
            
            B.trigger("result", [Y.data, Y.value]);
            return true
        }

        function T(Z, Y) {
            if (U == C.DEL) {
                R.hide();
                return
            }
            var X = B.val();
            if (!Y && X == P) {
                return
            }
            P = X;
            X = I(X);
            if (X.length >= G.minChars) {
                B.addClass(G.loadingClass);
                if (!G.matchCase) {
                    X = X.toLowerCase()
                }
                F(X, K, V)
            } else {
                N();
                R.hide()
            }
        }

        function H(Y) {
            if (!Y) {
                return [""]
            }
            var Z = Y.split(A.trim(G.multipleSeparator));
            var X = [];
            A.each(Z, function (a, b) {
                if (A.trim(b)) {
                    X[a] = A.trim(b)
                }
            });
            return X
        }

        function I(X) {
            if (!G.multiple) {
                return X
            }
            var Y = H(X);
            return Y[Y.length - 1]
        }

        function Q(X, Y) {
            if (G.autoFill && (I(B.val()).toLowerCase() == X.toLowerCase()) && U != 8) {
                B.val(B.val() + Y.substring(I(P).length));
                A.Autocompleter.Selection(L, P.length, P.length + Y.length)
            }
        }

        function S() {
            clearTimeout(J);
            J = setTimeout(V, 200)
        }

        function V() {
            R.hide();
            clearTimeout(J);
            N();
            if (G.mustMatch) {
                B.search(function (X) {
                    if (!X) {
                        B.val("")
                    }
                })
            }
        }

        function K(Y, X) {
            if (X && X.length && E) {
                N();
                R.display(X, Y);
                Q(Y, X[0].value);
                R.show()
            } else {
                V()
            }
        }

        function F(Y, a, X) {
            if (!G.matchCase) {
                Y = Y.toLowerCase()
            }
            var Z = M.load(Y);
            if (Z && Z.length) {
                a(Y, Z)
            } else {
                if ((typeof G.url == "string") && (G.url.length > 0)) {
                    var b = {};
                    A.each(G.extraParams, function (c, d) {
                        b[c] = typeof d == "function" ? d() : d
                    });
                    A.ajax({
                        mode: "abort",
                        port: "autocomplete" + L.name,
                        dataType: G.dataType,
                        url: G.url,
                        data: A.extend({
                            q: I(Y),
                            limit: G.max
                        }, b),
                        success: function (d) {
                            var c = G.parse && G.parse(d) || O(d);
                            M.add(Y, c);
                            a(Y, c)
                        }
                    })
                } else {
                    X(Y)
                }
            }
        }

        function O(a) {
            var X = [];
            var Z = a.split("\n");
            for (var Y = 0; Y < Z.length; Y++) {
                var b = A.trim(Z[Y]);
                if (b) {
                    b = b.split("|");
                    X[X.length] = {
                        data: b,
                        value: b[0],
                        result: G.formatResult && G.formatResult(b, b[0]) || b[0]
                    }
                }
            }
            return X
        }

        function N() {
            B.removeClass(G.loadingClass)
        }
    };
    A.Autocompleter.defaults = {
        inputClass: "ac_input",
        resultsClass: "ac_results",
        loadingClass: "ac_loading",
        minChars: 1,
        delay: 400,
        matchCase: false,
        matchSubset: true,
        matchContains: false,
        cacheLength: 10,
        max: 100,
        mustMatch: false,
        extraParams: {},
        selectFirst: true,
        formatItem: function (B) {
            return B[0]
        },
        autoFill: false,
        width: 0,
        multiple: false,
        multipleSeparator: ", ",
        highlight: function (C, B) {
            return htmlEscape(C).replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + B.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi, "\\$1") + ")(?![^<>]*>)(?![^&;]+;)", "gi"), "<strong>$1</strong>")
        },
        scroll: true,
        scrollHeight: 180,
        attachTo: "body",
        requireExplicit: false,
        permaResults: function (B) {
            return []
        }
    };
    A.Autocompleter.Cache = function (C) {
        var F = {};
        var D = 0;

        function H(K, J) {
            if (!C.matchCase) {
                K = K.toLowerCase()
            }
            var I = K.indexOf(J);
            if (I == - 1) {
                return false
            }
            return I == 0 || (C.matchContains && (K[I - 1] == " " || K[I - 1] == "("))
        }

        function G(J, I) {
            if (D > C.cacheLength) {
                B()
            }
            if (!F[J]) {
                D++
            }
            F[J] = I
        }

        function E() {
            if (!C.data) {
                return false
            }
            var J = {},
                I = 0;
            if (!C.url) {
                C.cacheLength = 1
            }
            J[""] = [];
            for (var L = 0, K = C.data.length; L < K; L++) {
                var O = C.data[L];
                O = (typeof O == "string") ? [O] : O;
                var N = C.formatItem(O, L + 1, C.data.length);
                if (N === false) {
                    continue
                }
                var M = N.charAt(0).toLowerCase();
                if (!J[M]) {
                    J[M] = []
                }
                var P = {
                    value: N,
                    data: O,
                    result: C.formatResult && C.formatResult(O) || N
                };
                J[M].push(P);
                J[""].push(P)
            }
            A.each(J, function (Q, R) {
                C.cacheLength++;
                G(Q, R)
            })
        }
        setTimeout(E, 25);

        function B() {
            F = {};
            D = 0
        }
        return {
            flush: B,
            add: G,
            populate: E,
            load: function (M) {
                if (!C.cacheLength || !D) {
                    return null
                }
                var K = [];
                var I = C.permaResults(M);
                for (var J = 0; J < I.length; J++) {
                    var L = I[J];
                    K.push({
                        data: [L],
                        value: ""
                    })
                }
                if (!C.url && C.matchContains) {
                    var N = F[""];
                    A.each(N, function (P, O) {
                        if (H(O.value, M)) {
                            K.push(O)
                        }
                    });
                    return K
                } else {
                    if (F[M]) {
                        return F[M]
                    } else {
                        if (C.matchSubset) {
                            for (var J = M.length - 1; J >= C.minChars; J--) {
                                var N = F[M.substr(0, J)];
                                if (N) {
                                    var K = [];
                                    A.each(N, function (P, O) {
                                        if (H(O.value, M)) {
                                            K[K.length] = O
                                        }
                                    });
                                    return K
                                }
                            }
                        }
                    }
                }
                return null
            }
        }
    };
    A.Autocompleter.Select = function (E, J, L, P) {
        var I = {
            ACTIVE: "ac_over"
        };
        var K, F = -1,
            R, M = "",
            S = true,
            C, O;

        function N() {
            if (!S) {
                return
            }
            C = A("<div/>").hide().addClass(E.resultsClass).css("position", "absolute").appendTo(E.attachTo);
            O = A("<ul>").appendTo(C).mouseover(function (T) {
                if (Q(T).nodeName && Q(T).nodeName.toUpperCase() == "LI") {
                    F = A("li", O).removeClass(I.ACTIVE).index(Q(T));
                    A(Q(T)).addClass(I.ACTIVE)
                }
            }).click(function (T) {
                A(Q(T)).addClass(I.ACTIVE);
                
                L();
                J.focus();
                return false
            }).mousedown(function () {
                P.mouseDownOnSelect = true
            }).mouseup(function () {
                P.mouseDownOnSelect = false
            });
            if (E.width > 0) {
                C.css("width", E.width)
            }
            S = false
        }

        function Q(U) {
            var T = U.target;
            while (T && T.tagName != "LI") {
                T = T.parentNode
            }
            if (!T) {
                return []
            }
            return T
        }

        function H(T) {
            K.slice(F, F + 1).removeClass();
            G(T);
            var V = K.slice(F, F + 1).addClass(I.ACTIVE);
            if (E.scroll) {
                var U = 0;
                K.slice(0, F).each(function () {
                    U += this.offsetHeight
                });
                if ((U + V[0].offsetHeight - O.scrollTop()) > O[0].clientHeight) {
                    O.scrollTop(U + V[0].offsetHeight - O.innerHeight())
                } else {
                    if (U < O.scrollTop()) {
                        O.scrollTop(U)
                    }
                }
            }
        }

        function G(T) {
            F += T;
            if (F < 0) {
                F = K.size() - 1
            } else {
                if (F >= K.size()) {
                    F = 0
                }
            }
        }

        function B(T) {
            return E.max && E.max < T ? E.max : T
        }

        function D() {
            O.empty();
            var U = B(R.length);
            for (var V = 0; V < U; V++) {
                if (!R[V]) {
                    continue
                }
                var W = E.formatItem(R[V].data, V + 1, U, R[V].value, M);
                if (W === false) {
                    continue
                }
                var T = A("<li>").html(E.highlight(W, M, R[V].data)).addClass(V % 2 == 0 ? "ac_event" : "ac_odd").appendTo(O)[0];
                A.data(T, "ac_data", R[V])
            }
            K = O.find("li");
            if (E.selectFirst) {
                K.slice(0, 1).addClass(I.ACTIVE);
                F = 0
            }
            O.bgiframe()
        }
        return {
            display: function (U, T) {
                N();
                R = U;
                M = T;
                D()
            },
            next: function () {
                H(1)
            },
            prev: function () {
                H(-1)
            },
            pageUp: function () {
                if (F != 0 && F - 8 < 0) {
                    H(-F)
                } else {
                    H(-8)
                }
            },
            pageDown: function () {
                if (F != K.size() - 1 && F + 8 > K.size()) {
                    H(K.size() - 1 - F)
                } else {
                    H(8)
                }
            },
            hide: function () {
                C && C.hide();
                F = -1
            },
            visible: function () {
                return C && C.is(":visible")
            },
            current: function () {
                return this.visible() && (K.filter("." + I.ACTIVE)[0] || E.selectFirst && K[0])
            },
            show: function () {
                var V = A(J).offset();
                C.css({
                    width: typeof E.width == "string" || E.width > 0 ? E.width : A(J).width(),
                    top: V.top + J.offsetHeight,
                    left: V.left
                }).show();
                if (E.scroll) {
                    O.scrollTop(0);
                    O.css({
                        maxHeight: E.scrollHeight,
                        overflow: "auto"
                    });
                    if (A.browser.msie && typeof document.body.style.maxHeight === "undefined") {
                        var T = 0;
                        K.each(function () {
                            T += this.offsetHeight
                        });
                        var U = T > E.scrollHeight;
                        O.css("height", U ? E.scrollHeight : T);
                        if (!U) {
                            K.width(O.width() - parseInt(K.css("padding-left")) - parseInt(K.css("padding-right")))
                        }
                    }
                }
            },
            selected: function () {
                var T = K && K.filter("." + I.ACTIVE).removeClass(I.ACTIVE);
                return T && T.length && T.is(":visible") && A.data(T[0], "ac_data")
            },
            unbind: function () {
                C && C.remove()
            }
        }
    };
    A.Autocompleter.Selection = function (D, E, C) {
        if (D.createTextRange) {
            var B = D.createTextRange();
            B.collapse(true);
            B.moveStart("character", E);
            B.moveEnd("character", C);
            B.select()
        } else {
            if (D.setSelectionRange) {
                D.setSelectionRange(E, C)
            } else {
                if (D.selectionStart) {
                    D.selectionStart = E;
                    D.selectionEnd = C
                }
            }
        }
        D.focus()
    }
})(jQuery);


jQuery.fn.autoCompleteToBox = function (B) {
    var A = this;
    $(".l_toinput", A).autocomplete(B || [], {
        fbMode: true,
        matchContains: true,
        width: 220,
        scrollHeight: 100,
        highlight: function (F, E, G) {    
            var D =  G[2] + "";
            return '<img class="" src="' + D + '"/>' + $.Autocompleter.defaults.highlight(F, E)
        },
        formatItem: function (C) {
            return C[1] ? C[1] + " (" + C[0] + ")" : C[0]
        }
    }).result(function (G, I, F) {
    	
        if ($(".l_tocard[sid=" + I[0] + "]", A).length == 0) {
            var C = I.length > 2 && I[3] ? " private" : "public";
            var E = I.length > 1 && I[1] ? I[1] : I[0];
            var D = '<li class="l_tocard' + C + '" sid="' + I[0] + '"><span>' + htmlEscape(E) + '</span> <img class="l_toremove" src="http://friendfeed.com/static/images/to-delete.png?v=f1c8" title="' + 'Delete' + '"/></li>';
            var H = $(".addedit", A);
            if (H.length > 0) {
                H.before(D).val("");
                
                setCCTwitterHtml()
            } else {
                $(".l_toinput", A).before(D)
            }
        }
        window.setTimeout(function () {
            $(".l_toinput", A).focus()
        })
    }).deletelast(function () {
        $(".l_tocard:last", A).remove();
        setCCTwitterHtml();
        $(".l_toinput", A).focus()
    })
};


jQuery.fn.autoCompleteSearchBox = function (A) {
    this.autocomplete(A || [], {
        requireExplicit: true,
        selectFirst: true,
        matchContains: true,
        width: 231,
        delay: 50,
        permaResults: function (B) {
            if (B.match(searchScope)) {
                return [0]
            } else {
                return searchOrder
            }
        },
        highlight: function (D, C, E) {
            if (typeof(E[0]) == "number") {
                return D
            }
            var B = E[2];
            if (B == null) {
                B = "/static/images/nomugshot-small.png?v=ed40"
            }
            return '<img class="ac_picture picture small" src="' + B + '"/>' + $.Autocompleter.defaults.highlight(D, C)
        },
        formatItem: function (F, D, B, E, C) {
            if (typeof(F[0]) == "number") {
                return searchOptions[F[0]][0].replace("%(term)s", "<strong>" + htmlEscape(C) + "</strong>")
            }
            return (F[1] ? F[1] + " (" + F[0] + ")" : F[0])
        }
    }).result(function (C, E, D) {
    	
        if (E.length == 1) {
            for (var B in searchOptions[E][1]) {
                $("#searchform").append('<input type="hidden" name="' + B + '" value="' + searchOptions[E][1][B] + '"/>')
            }
            $("#searchform").submit()
            
        } else {
            $("#searchbox").val("");
            
            document.location.href =  E[4]
        }
    })
};

var htmlCharMap = {
	    "&": "&amp;",
	    "<": "&lt;",
	    ">": "&gt;",
	    '"': "&quot;"
	};

function htmlCharEsc(A) {
    return htmlCharMap[A]
}
	
function htmlEscape(A) {
    return String(A).replace(/[&<>\"]/g, htmlCharEsc)
}


clickHandlers.toremove = function (A) {
	
    var B = A.parents(".l_tolist");
    A.parents(".l_tocard").remove();
    setCCTwitterHtml();
    B.find(".l_toinput").focus()
};


function setCCTwitterHtml(A) {
	
	

}

clickHandlers.select_stream = function(A) {
	var B = $(A).parent().parent().parent();
	B.find('li').removeClass('active');	
	$(A).parent().addClass('active');
	$('#notify').css('left','-320px');
	$('#not_switcher').removeClass('active');
	return true;
};


var gHL = {}; // hash listener dispatcher

gHL._hashchange_last = '';
gHL._onhashchange=function(A){
  if(gHL._hashchange_last!=location.hash){	  
	 gHL._hashchange_last=location.hash;	  
	  route(location.hash).run(A);
  }
}


var populatePosts	= function(A,Z)
{
	if(!A.error){
		
		var B = $("#list_posts");
	
		if(A.start == 0){
			B.html('');
			$(window).scrollTop(0);
			gPdata = A.posts;			
		}else{
			
			for(i in A.posts){
				gPdata.push(A.posts[i]);
			}			
			
			
			d(gPdata.length);
					
		}
	
		if(A.request_uri)
		{
			grUrl = A.request_uri; 
		}
		if(A.start){
			gStart	= A.start || gStart;
		}
		
		
		gHolder.loading = !A.has_more;
		d(gHolder.loading);
		if(A.html){
			B.append(A.html);
			//gHolder.loading = false;
			return;
		}
		/*
		for(i in A.posts){	
			
			var D = A.posts[i];			
			if(!D.is_status_update){		
				var C = '<div id="p'+D.post_id+'" class="list l_post">';
				C += '<h2>'+D.title+'</h2>';
				C += '<div class="c">';
				if(D.thumb_src){
				C += '<img src="'+D.thumb_src+'">';
				}
				C += D.entity['display_name'];
				C += '<p>' + D.short_content + '</p>';
				C += '</div>';
				C += '<div class="shared">';
				C += '<div class="comm"><strong>' + D.count_comments + '</strong> comments</div>';
				C += '<a class="a" href=""><img class="ll" src="'+D.entity.avatar_url+'"></a>';
				C += '<div class="t"><a href="">'+D.entity.display_name+'</a></div>';
				C += '<div class="i">'+D.time+' ago </div>';
				C += '</div>';
				C += '<div class="o">';
              	C += '<a href="" class="l_ql" title="Like"></a>';
              	C += '<a href="" class="l_qs active" title="Share"></a>';
              	C += '<a href="" class="l_qlater" title="Read later"></a>';
              	C += '<a href="" class="l_qr" title="Reshare"></a>';
				C += '<a href="" class="l_qc" title="Reply"></a>';
              	C += 'Quick actions';
              	C += '</div>';
				C += '</div>';	
			}else{
				var C = '<div class="list l_post" id="p'+D.post_id+'">';
				C += '<h2 class="update"> '+D.message+'</h2>';
				C += '<div class="shared">';
				C += '<div class="comm"><strong>' + D.count_comments + '</strong> comments</div>';
				C += '<a class="a" href=""><img class="ll" style="display: block;" src="'+D.entity.avatar_url+'"></a>';
				C += '<div class="t"><a href="">'+D.entity.display_name+'</a></div>';
				C += '<div class="i">'+D.time+' ago </div>';
				C += '</div>';
				C += '<div class="o">';
              	C += '<a href="" class="l_ql" title="Like"></a>';
              	C += '<a href="" class="l_qs active" title="Share"></a>';
              	C += '<a href="" class="l_qlater" title="Read later"></a>';
              	C += '<a href="" class="l_qr" title="Reshare"></a>';
				C += '<a href="" class="l_qc" title="Reply"></a>';
              	C += 'Quick actions';
              	C += '</div>';
				C += '</div>';						
			}
			
			C = $(C);
			C.hide();
			if(Z == true){
				
				B.prepend(C);
				C.slideDown();				
			}else{				
				B.append(C);
				C.show();
			}
		}*/		
		//$(".ll").lazyload({ effect : "fadeIn"});
	}
	
	
}

var initFavit = function(){
	gLoaded		= true;
	route('stream/:user/:streamname/:ff').bind(function(A,X,Y,Z){		
		var B = window.location.hash;		
		B = B.substr(1);		
		$.get(B,{'ar':'true'},populatePosts,'json');
				
	});
	route('streams').bind(
			
	);
	
	route('feed/:feedurl').bind(function(A,B,C){
				
	});
		
	route('profile/:nick/:tab').bind(function(A,B,C){
		
	});
	
	route('twitter/:nick/:tab').bind(function(A,B,C){
		var B = window.location.hash;		
		B = B.substr(1);		
		$.get(B,{},populatePosts,'json');
		
				
	});
	
	route('facebook/:fbid/:tab').bind(function(A,B,C){
		var B = window.location.hash;		
		B = B.substr(1);		
		$.get(B,{},populatePosts,'json');

				
	});
	
	route('streameditor/:stream').bind(function(A){
				
	});	
	
	route('subscribe/:page').bind(function(A){
							
	});
	
	
	route('share').bind(function(A){
		
		
	});
	
	route('browse/:page/:ff').bind(function(A){
		
			
	});	
	
	
	route('search/:searchQuery').bind(function(A){
		
	});	
	
	$(':input').each(function(index){
		if(!$(this).hasClass('noncapture') && !this.originalValue && this.value){
			this.originalValue = this.value;
		}
	});			
	
	setInterval(function () {gHL._onhashchange();}, 100);
	delegate();	
	
	
		 	

	 $(".ll").lazyload({ effect : "fadeIn"});
	 	 	 
	 $('#s_container').scroll(scrollListener);
	 
	 //setupSearchBox();

}
function shareSetupToBox (A) {
    if (A.hasClass("sharedone")) {
        return
    }
    A.addClass("sharedone");
    $.post("/a/tocontacts", {}, function (B) {
    	A.find(".l_tolist").autoCompleteToBox(B.contacts)
    },'json');
}

function setupSearchBox() {
    if (window.gSetupSearch) {
        return
    }
    window.gSetupSearch = true;
    $("#searchTxt").unbind("focus keydown", setupSearchBox);
    $.post("/a/tocontacts", {}, function (A) {
        $("#searchTxt").autoCompleteSearchBox(A.contacts)
    },'json')
}

var scrollListener = function(){
	var A = $('#s_container').scrollTop();		
	var B = parseInt($("#header").height(),10)+105;	
	var C = document.body.scrollHeight;
		
	if(A > B){
		$('#bReminder').slideDown(150);
	}else{
		$('#bReminder').slideUp(150);
	}	
	
	if(typeof gStart != 'undefined'){
		if(A>0){		
			var B = $('#s_container').scrollTop();
			var C = $('#w_container').height() - $('#s_container').height();
			
			if  (B > C - 100			
				&& (typeof gHolder.loading == 'undefined' || gHolder.loading == false)){				
				gHolder.loading = true;			
				var P = parseInt(gStart)+ 36;
				var S = {start : P};
				$.get(grUrl,S,populatePosts,'json');
			}
	
		}
	}
	
	
	
};



/** Strewm chooser **/

clickHandlers.streamchoice = function (A) {
    A.toggleClass("selected");
    streamChooserUpdateNum()
};
clickHandlers.streamshowall = function (A) {
    A.addClass("selected");
    $(".l_streamshowselected").removeClass("selected");
    streamChooserUpdate()
};
clickHandlers.streamshowselected = function (A) {
    A.addClass("selected");
    $(".l_streamshowall").removeClass("selected");
    streamChooserUpdate()
};
clickHandlers.expandcluster = function (A) {
    var B = A.parents(".entry");
    $.postJSON("/a/expandcluster", {
        entry_ids: A.attr("eids")
    }, function (C) {
        A.remove();
        B.after(C.html)
    }, A)
};

function streamChooserUpdate() {
    var C = $(".streamchooser select");
    var B = null;
    if (C.length > 0) {
        B = C.get(0).value
    }
    var E = $(".l_streamshowselected").is(".selected");
    var D = $("#streamselectfilter").val();
    if (!D) {
        var F = E ? ".selected" : "";
        F += B ? ".sel-l-" + B : "";
        if (F) {
            $(".l_streamchoice").hide();
            $(".l_streamchoice" + F).show()
        } else {
            $(".l_streamchoice").show()
        }
    } else {
        var A = D.toLowerCase().split(" ");
        
        $(".l_streamchoice").hide();
        
        $(".l_streamchoice").each(function (I, L) {
            var L = $(L);            
            if (E && !L.is(".selected")) {            	
                return
            }
            if (B && !L.is(".sel-l-" + B)) {            	
                return
            }
            var K = L.find(".name").text().toLowerCase().split(" ");
            var G = true;
            for (var I = 0; I < A.length; I++) {
                if (!A[I]) {
                    continue
                }
                var J = false;
                for (var H = 0; H < K.length; H++) {
                    if (!K[H]) {
                        continue
                    }
                    if (K[H].startsWith(A[I])) {
                        J = true;
                        break
                    }
                }
                if (!J) {
                    G = false;
                    break
                }
            }
            if (G) {
                L.show()
            }
        })
    }
}

function streamChooserUpdateNum() {
    $(".l_streamshowselected").text('Selected (%(num)d)'.replace("%(num)d", $(".l_streamchoice.selected").length))
}

function streamChooserSubmit(B) {
    if (!B) {
        $.closeDialog()
    }
    var A = [];
    $(".l_streamchoice.selected").each(function (C, D) {
        A.push($(D).attr("sid"))
    });
    B(A, $("form#hidden").formToDict())
}

if (!String.prototype.startsWith) {
    String.prototype.startsWith = function (A) {
        return this.lastIndexOf(A, 0) != - 1
    }
}
if (!String.prototype.endsWith) {
    String.prototype.endsWith = function (A) {
        return this.indexOf(A, this.length - A.length) != - 1
    }
}

/** end stream chooser */


/** favit **/

clickHandlers.ll = function(A)
{
	window.location.hash	= A.attr('href');
}
clickHandlers.aa = function(A)
{
	A.parent().children().removeClass('active');
	A.addClass('active');
}

var hidePane = function()
{
	
	var B = $('#container');
	var C = $('.scroll_pane');
	
	if(B.hasClass('active')){
		B.removeClass('active');
		C.jScrollPaneRemove();
		
		$(".ll").lazyload({ effect : "fadeIn"});
	}	
	
	if(gHolder.st){		
		$(window).scrollTop(gHolder.st);
	}
}



var closePost	= function(A)
{
	$('#darken').remove();
	$('#read_pane').remove();
	
}

clickHandlers.cpost = closePost;




var nextClick	= function(A)
{
	
	if(typeof gHolder.post_id != 'undefined')
	{
		if(gPdata){
			for(i in gPdata){
				var P = gPdata[i];			
				if(P['post_id'] == gHolder.post_id){					
					if(i < gPdata.length - 1 ){
						var I  = parseInt(i) + 1;
						P = gPdata[I];
						postClick(P['post_id']);
						return
					}
				}
			}
		}		
	}
}

var prevClick	= function(A)
{	
	if(typeof gHolder.post_id != 'undefined')
	{
		if(gPdata){
			for(i in gPdata){
				var P = gPdata[i];			
				if(P['post_id'] == gHolder.post_id){					
					if(i > 0){
						var I  = parseInt(i) - 1;
						P = gPdata[I];
						postClick(P['post_id']);
						return
					}
				}
			}
		}		
	}
}


clickHandlers.next = nextClick;
clickHandlers.prev = prevClick;


var postClick	= function(A,X,Y)
{	
	
	if(typeof A == 'string'){
		var D = A;
		A = $('#p'+D)
	}else{
		A = $(A);		
		var D = A.attr('id');
		D = D.substr(1)	
	}
	var P = getPostData(D);
	
	if(!P){
		d(D);
		return false;
	}
	gHolder.post_id = P.post_id;
		
	if (Y && Y['tagName'] != undefined && Y.tagName == 'A') {
		return true
	}

	A.parent().find('.l_post').removeClass('active');
	A.addClass('active');
		
	var B = '';		
	B += '<div class="ctrls">';
	B += '<div class="but_wrapper">';
	B += '<a class="but like l_like" href=""></a>';
	B += '<a class="but share l_qshare" href=""></a>';
	B += '<a class="but later l_read_later" href=""></a>';
	B += '<a class="but reshare l_reshare" href=""></a></div>';
	B += '<div class="but_wrapper">';
	B += '<a class="but bundle" href=""></a>';
	B += '</div>';
	
	B += '<div class="item_ctrl">';
	B += '<div class="but_wrapper">';
	B += '<a class="but down l_prev" href=""></a>';
	B += '<a class="but up l_next" href=""></a>';
	B += '</div>';
	B += '<div class="but_wrapper">';
	B += '<a class="but close l_cpost" href=""></a>';
	B += '</div>';
	B += '</div>';
	B += '</div>';
			
	B += '<div class="sender"><u>From:</u> <a href="'+P.entity.profile_url+'" class="i">'+P.entity.display_name+'</a>';
		
	if(P.action_user){
		var AC 	= '';
		switch(P.action_type){
			case 2: AC = 'commented';break;
			case 3: AC = 'liked'; break;
			case 4: AC = 'reshared'; break;
			
		}
		B += '<div class="reason"><a href="'+P.action_user.profile_url+'">'+P.action_user.display_name+'</a><br>'+AC+'</div>';
	}
	B += '</div>';			
	B +='<div class="content">';
	if(P.is_status_update){
		B +='<div class="post_content"><h1 class="update">'+P.message+'</h1>';
		if(P.attachment){
			for(K in P.attachment){
				var V = P.attachment[K];
				if(V.type == 'video'){
					B += '<div class="is_video">'+V.player+'</div>';
				}
			}
		}
		B +='<table width="100%" cellspacing="0" cellpadding="0" class="u_info"><tr>';
		B +='<td width="60" valign="top" class="a"><img class="s" src="'+P.icon_url+'">';
		B +='<a href="'+P.entity.profile_url+'"><img src="'+P.entity.avatar_url+'"></a></td>';
		B +='<td valign="top">';
		B +='<h2><a href="'+P.entity.profile_url+'">'+P.entity.display_name+'</a></h2>';
		B +='<p>via <strong>'+P.service_name+'</strong> about <span onclick="" class="p_date">'+P.time+' ago</span></p>';
		B +='<a class="l_sourceLikes a_btn" href=""><em>'+P.count_likes+'</em> people liked it </a>';
		B +='<a class="a_btn" href=""><em>'+P.count_comments+'</em> comments</a></td>';
		B +='<td align="right">';
		B +='<a class="btn reply l_add_comment" href="" params="{\'post_id\':\''+P.post_id+'\',\'at\':\''+P.entity.nickname+'\',\'dn\':\''+P.entity.display_name+'\'}">Reply <u>(@'+P.entity.nickname+')</u></a>';
		B +='</td></tr></table></div>';			
	}else{		
		B +='<div class="post_content">';
		B +='<h1>'+P.title+'</h1>';		
		B +='<p class="p_source">';
		if(P.attachment){
			for(K in P.attachment){
				var V = P.attachment[K];
				if(V.type == 'video'){
					B += '<div class="is_video">'+V.player+'</div>';
				}
			}
		}
	
		
		B +='<span class="p_date">'+P.time+'</span>';
		B +='<img src="images/serv_favs/disqus.png"> Written by <strong>'+P.entity.display_name+'</strong> on <a href="' + P.url + '">' + P.source_domain + '</a>';
		B +='<a class="a_btn" href=""><em>'+P.count_likes+'</em> people liked it</a>';
		B +='<a class="a_btn" href=""><em>'+P.count_comments+'</em> comments</a>';
		B += '<p>'+P.content+'</p></div>';						
	}
	B += '<div class="profile_ctrl small"><div class="tabs"> <a href="">All comments</a><a href="" class="active">My network</a><a href="">From the source</a></div><div class="mod"><table width="100%" border="0" cellspacing="0" cellpadding="0"><tr><td><p class="t"><a href="">Join the discussion</a></p><p class="i">Your opinion counts - post a comment</p></td><td><a href="" class="btn subscribe l_add_comment"  params="{\'post_id\':\''+P.post_id+'\'}">Add comment</a></td></tr></table></div><div class="chevron"></div></div>';	
	
	for(i in P.comments){			
		var C = P.comments[i];			
		B+=renderComment(C);
	}						
	
  	B += '</div>';
  	
  	$('#right_pane .item_ctrl').show();
  	
	var C = $('#read_pane');
	
	
	if(C.length == 0){		
		C = $('<div id="read_pane"></div>');
		$("body").append('<div id="darken"/>');
		$("body").append(C);		
		
	}
	
  	C.html('');  	
  	C.show();
    C.append(B);
    
    
    $('#read_pane .like').removeClass('active');
    $('#read_pane .share').removeClass('active');
    if(P.is_liked){
    	$('#read_pane .like').addClass('active');
    }
    if(P.is_shared){
    	$('#read_pane .share').addClass('active');
    }
    if(P.is_read_later){
    	$('#read_pane .later').addClass('active');
    }
    
    $('body').unbind().bind('keydown',function(A){d(A)});

}

var renderComment	= function(C)
{	
	if(C == null || !C || typeof C == 'undefined' || typeof C.entity == 'undefined'){
		return ''
	}
	var D = 'comment';
		
	if(C.level){		
		D +=' r'+(C.level)
	}
	var B = '';
	B += '<div class="'+D+'" id="c'+C.comment_id+'">';
	B += '<table width="100%" cellspacing="0" cellpadding="0" border="0" class="comm_head">';
	B += ' <tr>';
	B += '      <td width="28">';
	if(C.icon_url){
		B += '<img class="s" src="'+C.icon_url+'">'
	}
	B += '<a class="a" href=""><img src="'+C.entity.avatar_url+'"></a></td>';
	B += '   <td><a href="">'+C.entity.display_name+'</a><em>'+C.time+'ago</em></td>';
	B += '   <td width="0"><div><a class="btn l_add_comment" href="" params="{\'post_id\':\''+C.post_id+'\',\'irt\':\''+C.comment_id+'\',\'at\':\''+C.entity.nickname+'\',\'dn\':\''+C.entity.display_name+'\'}">Reply <u>@'+C.entity.nickname+'</u></a></div></td>';
	B += '	</tr>';
	B += '</table>';
	B += '<div class="c">';
	B += '<p>'+C.comment+'</p>';
	B += '</div></div>';
	
	return B
}

clickHandlers.post	= postClick;


focusinHandlers.sharemsg = function(A)
{
	$('.sharebox').show();
	A.addClass('active');
	$('#header h1').hide();
	shareSetupToBox($('.sharebox'));
}

focusinHandlers.navigate = function(A)
{
	setupSearchBox()
}

focusoutHandlers.sharemsg = function(A)
{
	//$('.sharebox').hide();
	//$('#header h1').show();
}
clickHandlers.toaddedit = function(A)
{
	$('.l_tolist').addClass('active')
}

clickHandlers.close_spanel = function(A)
{
	A.parent().parent().remove()
}
clickHandlers.photo = function(A)
{
			
	var B = $('#picture_picker');
	
	if(B.length == 0){
	B = '<div class="media_select" id="picture_picker"><h3><a class="close l_close_spanel" href=""></a>Attach photos</h3>';
	B += '<div class="photo_preview">';
	B += '<div class="clear"></div>';
	B += '</div>';
	B += '<a class="btn" href="" id="upload_button">Browse for photos</a> or';
	B += '<input type="text" size="40">';
	B += '<a class="btn small" href="">Upload</a></div>';
	
	$('#share_tools').append(B);	
		var C = {
				
			flash_url : "/static/js/SWFUpload/swfupload.swf",
			upload_url: "/a/upload",
			post_params: {},
			file_size_limit : "10 MB",
			file_types : "*.jpg;*.png;*.gif",
			file_types_description : "Image Files",
			file_upload_limit : 10,
			file_queue_limit : 0,
			custom_settings : {},
			debug: false,
			button_image_url: "/static/images/upload_btn.png",
			button_width: "130",
			button_height: "25",
			button_placeholder_id: "upload_button",
			button_text: '',
		
			file_dialog_complete_handler : function(numFilesSelected, numFilesQueued) {
				if (numFilesSelected > 0) {
					this.startUpload();
				}
			},
			upload_start_handler : function(file) {
				// show loading message
			},
			upload_error_handler : function(file, errorCode, message) {
			},
			upload_success_handler : function(A, B) {				
									
				var C = '<div><span class="l_premvoe"></span><img src="'+B+'"></div>';								
				C += '<input type="hidden" name="image[]" value="'+B+'">';
				
				$('.photo_preview').prepend(C);
		},
		upload_complete_handler : function(file) {
			// hide loading message
		}
		
	};
		swfu = new SWFUpload(C);	
	}
	
}
function checkField(A){
	A	= $(A);
	var B = $.trim(A.val());
	
	if(A[0].originalValue && A[0].originalValue == B){
		//alert('fuck you');
		//B = '';
	}
	
	if(B.length == 0){
		A.focus();
	}
	return B.length > 0;
}

clickHandlers.video_preview = function(A)
{
	var B = $('#video_url');
	
	if(checkField(B)){
		
		var C = B.val();
		
		var D = {'url':C};
		$.get('/a/preview_video',D,function(E){
			if(E.error){
				alert('Invalid video url');
				return;
			}
			if(E.unsupported){
				alert('Sorry invalid video URL or  video provider is not supported');
				return;
			}			
						
			X += '<input type="hidden" name="video[]" value="'+C+'">';
			X += '<input type="hidden" name="title" 	value="'+E.title+'">';
			X += '<input type="hidden" name="url" 		value="'+C+'">';
			X += '<input type="hidden" name="descr" 	value="'+E.desc+'">';
			
			
			//B +='<div class="photo_preview is_other" id="">';
			var X = '<div><span></span><img src="'+E.preview_img+'"></div>';
			X +='<h2>'+E.title+'</h2>';
			X +='<p class="descr">'+E.desc+'</p>';
			X +='<p class="source"><strong>Source:</strong> <a href=""></a></p>';
			X +='<p class="clear"></p>';
						
			$('#video_prec').prepend(X);
			B.val('');
			
		},'json');
	}
}
clickHandlers.video = function(A)
{
	
	
	var B = $('#video_picker');
	
	if(B.length == 0){
		B = '<div class="media_select" id="video_picker">';		
		B +='<h3 class="is_video"><a class="close l_close_spanel" href=""></a>Attach a video</h3>';
		B +='<div class="photo_preview is_other" id="video_prec">';		
		B +='<div class="clear"></div>';
		B +='</div>';
		B +='<input type="text" size="65" class="l_video_url" id="video_url">';
		B +='<a class="btn small l_video_preview" href="">Attach</a>';
		B +='</div>';				
		$('#share_tools').append(B);					
	};
}

clickHandlers.link_preview = function(A)
{
	var B = $('#link_url');
	
	if(checkField(B)){
		
		var C = B.val();			
		var D = {'url':C};
		$.get('/a/preview_link',D,function(E){
			if(E.error){
				alert('Invalid url');
				return;
			}						
			var X = $('#flpreview');
			X.remove();			
			X = '<div class="photo_preview is_other" id="flpreview">';
			if(E.preview_img){
				X += '<div><img src="'+E.preview_img.src+'"></div>';
			}
			X += '<input type="hidden" name="image[]" value="'+E.preview_img.src+'">';
			X += '<input type="hidden" name="title" 	value="'+E.title+'">';
			X += '<input type="hidden" name="url" 		value="'+C+'">';
			// description can be HTML so it should be escaped
			//X += '<input type="hidden" name="descr" 	value="'+E.description+'">';
			
		
			X += '<h2>'+E.title+'</h2>';
			X += '<p class="descr">'+E.description+'</p>';
			X += '<p class="source"><strong>Source:</strong> <a href="' + E.link +'">'+ E.sourceName + '</a></p>';
			X += '<div class="clear"></div>';				
			X += '</div>';		
			
			$('#link_picker').prepend(X);
			
		},'json');
	}

}


clickHandlers.fullarticle = function()
{
    
	var A = $('#shareArea');
	
	A.removeClass('share_area');
	A.attr('cols',15);
	A.attr('rows',10);
	A.css('width','600px');
	A.css('height','600px');
	
    	A.tinymce({
			script_url : '/static/js/tiny_mce/tiny_mce.js',
			theme : "advanced",
			theme_advanced_layout_manager : "SimpleLayout",
			plugins : "pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template,advlist",

			theme_advanced_buttons1 : "bold,italic,strikethrough,|,justify,formatpicker,fontpicker,bullist,|,outdent,indent,blockquote,link,unlink,cleanup,|,forecolor,backcolor,|,media,image, code",
			//theme_advanced_buttons2 : "",
			//theme_advanced_buttons3 : "",
			//theme_advanced_buttons4 : "insertlayer,moveforward,movebackward,absolute,|,styleprops,|,cite,abbr,acronym,del,ins,attribs,|,visualchars,nonbreaking,template,pagebreak",
			theme_advanced_toolbar_location : "external",
			theme_advanced_toolbar_align : "left",

			relative_urls: 0, // DO NOT USE RELATIVE PATHS!
			convert_urls: 0, // DO NOT CLEAN UP URLS!
			template_external_list_url : "lists/template_list.js",
			external_link_list_url : "lists/link_list.js",
			external_image_list_url : "lists/image_list.js",
			media_external_list_url : "lists/media_list.js"
		});
}

clickHandlers.share	= function()
{
		
	/**
	 * collect all data and send it to the server
	 */	
	var A = $('#shareArea');
	var message = A.val();
	
	if(A.length && A[0].originalValue){		
		if(message == A[0].originalValue){
			message	= '';
			A.focus();
			return;
		}
	}	
	
	var B = $('#header');
	
    var sharewith = [];
    B.find(".l_tocard").each(function (E, F) {
        var G = $(F).attr("sid");
        if (G) {
        	sharewith.push(G)
        }
    });    
    
    if (sharewith.length == 0) {
        B.find(".l_toinput").select().focus();
        return false
    }
    
    B = $("input[name='url']");
    
		
	var url = B.val();
						
	var E = $("input[name='title']");	
	var title = E.val();	
					
	var content = $("input[name='descr']").val() || $('#content').html();	
	var medias = [];
	
	$("input[name='image[]']").each(function(i, el) {
		medias[i] = $(el).val();
	});					
	
			
	var A = [];			
	$('input[name=es[]]').each(
			function(C){
				var B = $(this);
				if(B.attr('checked')){
					A.push(B.attr('value'));
				}
			}
	);					
	
	var B = $('#tiny_mce_editor').val();	
	var streams = [];
	
	var params	= {
		'url':url,
		'content':content,
		'title':title,
		'message':message,
		'medias':medias,				
		'sharewith':sharewith,
		'streams': streams,
		'es':A,				
		'article':B				
	};			
	
	$.post('/a/share',params,function(X){
		if(!X){
			return;
		}				
		populatePosts(X,true);
		$('#header .sharebox').hide();
		$('#header h1').show();
		$('#shareArea').val('');
		
	},'json');
	
}

clickHandlers.link = function(A)
{
	var B = $('#link_picker');
	
	if(B.length == 0){
		B = '<div class="media_select" id="link_picker">';
		B +='<h3 class="is_link"><a class="close l_close_spanel" href=""></a>Attach a link</h3>';
		B +='<div class="photo_preview is_other" id="link_preview">';
		B +='<div class="clear"></div>';
		B +='</div>';
		B +='<input type="text" size="65" class="l_image_url" id="link_url">';
		B +='<a class="btn small l_link_preview" href="">Attach</a> </div>';				
		
		$('#share_tools').append(B);					
	};
}
clickHandlers.premvoe = function(A)
{
	A.parent().remove();
}
clickHandlers.location = function(A)
{
	
	if (navigator.geolocation) {		
		var S = function(B){			
			C = new google.maps.Geocoder();
			  var E = new google.maps.LatLng(B.coords.latitude, B.coords.longitude);
			  var D = {
			    zoom: 15,
			    center: E,
			    mapTypeControl: false,
			    navigationControlOptions: {style: google.maps.NavigationControlStyle.SMALL},
			    mapTypeId: google.maps.MapTypeId.ROADMAP
			  };
			  var map = new google.maps.Map(document.getElementById('geo_map'), D);
			  C.geocode({'latLng': E}, function(results, status) {
					map.setCenter(results[0].geometry.location);
			          var marker = new google.maps.Marker({
			              map: map, 
			              position: results[0].geometry.location
			          });					
					$('#address strong').html(results[0].formatted_address);
					$('#address').show();
					$('#geo_address').html(results[0].formatted_address);
					
				});
			
		}
	  	navigator.geolocation.getCurrentPosition(S);	  	
		$('#geoStrater').addClass('active');
		$('#address').show();
		$('#geo_address').html('Getting you location...');
	} else {
	  	alert('This feature is not supported by your browser');
	}

}

var streamCreatorSwitch = function(A)
{
	
	A = $(A);
	
	if(A.is('.active')){
		return;
	}
	var B = A.parent();
	B.children().removeClass('active');	
	A.addClass('active');
	
	var D = $('#new_stream_custom_entities');
	
	var C = A.attr('id');
	switch(C){
	
		case 'sharing_stream':
			D.hide();		
		case 'list_stream':
			
		case 'filter_stream':
		
			if(C == 'sharing_stream'){
				D.hide();
			}else{
				D.show();
			}				
			$('div.stream_type').hide();
			$('#d'+C).show();
			break;
		case 'personal_stream':
		case 'shared_stream':
			
			$('div.stream_privacy').hide();
			$('#d'+C).show();
			break;
			
		case 'filter_all':
			D.hide();
			break;
		case 'filter_my_network':
			D.hide();
			break;
		case 'custom':
			D.show();
			break;
		
	}
}

clickHandlers.tswitch	=  streamCreatorSwitch;



var toggleCustomEntity = function(el) {
	var data = favitCache.get('get_my_network'); 
	if (data[el.id].selected == true) {
		data[el.id].selected = false;
		favitUI.streamAutocompleteSelectedCounter--;
	} else {
		data[el.id].selected = true;
		favitUI.streamAutocompleteSelectedCounter++;
	}
	
	$(el).toggleClass('active');
	$('#network_selected').html(favitUI.streamAutocompleteSelectedCounter);
};

clickHandlers.toggle_custom_entity = toggleCustomEntity;



var customEntitiesSwitcher = function(A) {
	var value = $('#custom_entities_filter').val();
	A = $(A);
	A.parent().children().removeClass('active');
	A.addClass('active');
	favitUI.streamAutocomplete({switcher:A.attr('id'), filter:value});
};

clickHandlers.custom_entities_switcher = customEntitiesSwitcher;

clickHandlers.stream_edit = function(A)
{
	
	var A	  = $('#new_stream_name');			
	var title = A.val();
	if(title.length  == 0 || A[0].originalValue == title || A.css('color') == 'red'){			
		A.focus();
		return;
	}
	
	var add_filters = $('#filter_stream').hasClass('active');
	
	
	var filters = [];
	if (add_filters) {
		A = $('#filter_area').val();
		filters = A.split(',');		
	}
	
	if(add_filters && filters.length==0){
		// $('#add_filtering').attr('checked',true);
		$('.textboxlist-bit-editable-input').focus();
		return;				
	}
	
	
	var filter_area = $('#filter_area').val();
	
	
	var selected = [];
	
	$('.l_streamchoice').each(function(i,B){
		B = $(B);
		if(B.is('.selected')){
			selected.push(B.attr('sid'));
		}
	});			
	
	if(selected.length == 0 && (!add_filters || (add_filters && $('#filter_custom').hasClass('active') ))){
		alert('Please select at least one user or feed from your network');
		return;
	}
	
	var share_stream = $('#shared_stream').is('.active') ? 1 : 0;
	
	var B			= $('#new_stream_nickname');
	var nickname =  $.trim(B.val());
	
	if (share_stream) {
		
		if(nickname.length == 0 || B.css('color') == 'red'){
			$('#new_stream_nickname').focus();
			return;
		}
		var stream_desc = $('#stream_desc').val();				
		var categories = [];
		
		var stream_categories = $('.cat_list input').each(function(i, el) {
			 A = $(el);
			 if(A.is(':checked')){
				 	categories[i] = el.value;	 
			 }			
		});				
		
		var stream_access = $('input[name="stream_access"]:checked').val() || 'moderated';
	}
	
	var stream_order = $('input[name="stream_order"]:checked').val() || '';
	
	// share on twitter and facebook
	var share_twitter = $('#ext_acc_twitter2').is(':checked');
	var share_facebook = $('#ext_acc_facebook2').is(':checked');
	
	
	
	var B	= {
		'title': title,							
		'entities': selected ,
		'is_filtered': add_filters,
		'filters': filters || [],
		'filter_area': filter_area,
		'is_shared': share_stream,
		'nickname': nickname || '',
		'descr': stream_desc || '',
		'categories': categories || [],				
		'access': stream_access || 'moderated',
		'order': stream_order,
		'notify': {twitter:share_twitter, facebook:share_facebook}
	};
	var C = $('#stream_id');
	if(C.length>0){ // edit mode
		B.stream_id = C.val();	
	}		
	$('#stream_loading').show();
	$.post('/a/stream_editor', B, function(D) {
		try{				
		if(!D.error){
			var G 	= D.edit_mode;
			
			window.location.href = 'stream/'+D.title;
		}
		}catch(e){
			//d(e);
		}				
		$('#stream_loading').hide();
	},'json');
}

clickHandlers.fseo	= function(A)
{
	
	if(!A.is('.expl')){
		A = A.parents('.expl') 
	}
	
	$('.expl').addClass('gray');	
	A.removeClass('gray');
	
	A.find('input').attr('checked',true);
}


var getPostData				= function(A)
{
	
	if(gPdata){
		for(i in gPdata){
			var P = gPdata[i];			
			if(P['post_id'] == A){
				return P;

			}
		}
	}
	return null;
	
}

var setPostData				= function(A,B)
{
	if(gPdata){
		for(i in gPdata){
			var P = gPdata[i];			
			if(P['post_id'] == A){
				gPdata[i] = B;
				return true

			}
		}
	}	
	return false
}

var isset = function(A)
{
	return typeof A != 'undefined';
}
var addComment				= function(A,C)
{
	
	if(!Favit.user){return}
	var X = $('#comment_frm');
	X.remove();

	if(C.post_id){
		
		var G = getPostData(C.post_id);
		C.view_id = G.view_id;
		C.vt 	= G.view_type;	
		var CL = 'comment'
		if(C.irt){
			CL = 'comment r'
		}		
		var B = '<div class="'+CL+'" id="comment_frm">';
		B +='<table width="100%" border="0" cellspacing="0" cellpadding="0" class="comm_head">';
		B +='<tbody><tr>';
		B +='<td width="28"><a href="'+Favit.u_avatar+'" class="a"><img src="'+Favit.u_avatar+'"></a></td>';
		if(C.at && C.dn){
			B +='<td><h2 class="lets">Replying to '+C.dn+'</h2></td>'
		}else{
			B +='<td><h2 class="lets">Add comment</h2></td>'	
		}		
		B +='<td><div>';
		if(isset(Favit.facebook) && G.spread_facebook){
			B +='<div class="ext"><img src="/static/images/serv_favs/facebook.png"> <input name="es[]" type="checkbox" value="9" checked="checked"></div>'
		}
		if(isset(Favit.twitter)  && G.spread_twitter){
			B +='<div class="ext"><img src="/static/images/serv_favs/twitter.png"> <input name="es[]" type="checkbox" value="6" checked="checked"></div>'
		}
		B +='</div>';
		B +='<div class="b"><span id="c_count">0</span> chars</div></td>';
		B +='</tr>';
		B +='</table>';
		B +='<div class="c">';
		B +='<textarea name="comment_msg" class="l_char_count" rows="5"  id="comment_msg" style="margin-bottom:10px;width:95%"></textarea>';
		B +='<p><a href="" class="btn submit l_publish_comment" >PUBLISH</a> <a href="" class="btn l_cancel_comment">Cancel</a></p>';
		B +='</div>';
		B +='</div>';
		
		B = $(B);
		
		B.data('params',C);
		B.hide();
		
		var G = $("#read_pane .content");
		
		if(C.irt){			
			G = $('#c'+C.irt);			
			while(G.next().is('.r')){
				G = G.next()
			}		
			G.after(B)
		}else{	
			G.append(B)
		}
		B.fadeIn("fast")						
	}
	
}

var publishComment	= function(A)
{
	var C = $('#comment_msg');
	
	
	var B = $('#comment_frm').data('params');
	
	if(checkField(C)){
						
		if(A.hasClass('done')){
			return ;
		}
		A.addClass('done');
						
		var X = []; 
		$('#comment_frm input[name=es[]]').each(function(I){
			var A = $(this);
			if(A.is(':checked')){
				X.push(A.val());
			}										
		});										
		Y = B.irt || ''; 				
		var P = {'post_id':B.post_id,'comment':C.val(),'view_id':B.view_id,'vt':B.vt,'es[]':X,'irt':Y};				
		
		var D = function(F){
			
			cancelComment();				
			var M = renderComment(F);						
			M = $(M);

			var G = $("#read_pane .content");			
			
			if(G.length == 0){				
			}			
			if(F.in_reply_to){
				G = $('#c'+F.in_reply_to);				
				while(G.next().is('.r')){
					G = G.next();
				}	
				G.after(M);
			}else{	
				G.append(M);
			}
			M.fadeIn("fast");
			
			var P = getPostData(F.post_id);
			if(typeof P.comments == 'undefined' || !P.comments){
				P.comments = [];
			}
									
			P.comments.push(F);
			
			setPostData(F.post_id,P);
			
		}
		$.post('/a/post_comment',P,D,'json');
		
	}
}

var likePost		= function(A)
{
	if(Favit.user){
		$(A).toggleClass("active");		
		var P = gHolder.post_id;		
		var C = $(A).hasClass('active');		
		var B = {};
		B['post_id'] = P;
		B['like'] = C;
		
		var G = getPostData(gHolder.post_id);
		B.view_id = G.view_id;
		B.vt 	= G.view_type;
		
		$.post('/a/like',B,function(D){
			var I = getPostData(D.post_id);
			I.is_liked = C;
			setPostData(D.post_id, I);
							
		},'json');		
		// update likes counter (bottom right) FIX LATER FOR CONCURENT LIKES				
	}else{
		loginPopup();
	}
};

var quickSharePost	= function(A)
{
	
	if(Favit.user){
		$(A).toggleClass("active");
		
		var C = $(A).hasClass('active');
		var B = {};
		
		B['qickshare'] 	= C;
		B['post_id'] 	= gHolder.post_id;
		var G = getPostData(gHolder.post_id);
		B.view_id = G.view_id;
		B.vt 	= G.view_type;
		
		$.post('/a/quickshare',B,function(D){				
			var I = getPostData(D.post_id);
			I.is_shared = C;
			setPostData(D.post_id, I);
		},'json');		
		
		// update likes counter (bottom right) FIX LATER FOR CONCURENT LIKES		
		
	}else{
		loginPopup();
	}
	
}
var resharePost	= function(A)
{
	alert('edit to');
}

var read_later = function (A){
	if(Favit.user){
		$(A).toggleClass("active");	
		var C = $(A).hasClass('active');
		
		var B = {};
		B['readlater'] = C;
		B['post_id'] 	= gHolder.post_id;
		var G = getPostData(gHolder.post_id);
		B.view_id = G.view_id;
		B.vt 	= G.view_type;
		
		$.post('/a/readlater',B,function(D){
			var I = getPostData(D.post_id);
			I.is_read_later = C;
			setPostData(D.post_id, I);
			
			var J = $('#notify li[rel=read_later] em');
			var K = parseInt(J.html());
			if(C) K++; else K--;
			J.addClass("active", 100, function(){J.delay(250).removeClass("active", 100);});
			J.html(K);				
		},'json');		
	}else{
		loginPopup();
	}
}

clickHandlers.reshare		= resharePost;	
clickHandlers.qshare		= quickSharePost;
clickHandlers.like			= likePost;
clickHandlers.read_later	= read_later;

var cancelComment = function()
{
	$('#comment_frm').fadeOut("fast",function(){$(this).remove()});

}
clickHandlers.add_comment	= addComment;
clickHandlers.cancel_comment= cancelComment;
clickHandlers.publish_comment= publishComment;





clickHandlers.add_service  = function(A)
{
	
	var B = A.attr('rel');
	
	if(B){
		var C = {'sid':B,'mode':A.attr('mode')};
		fPopup.show({view:'service_editor',params:C});
	}
	
};
clickHandlers.acc_service = function(A)
{
	var R = ['service_value'];
	var P = {};
	var V = true;
	$('#frm_addservice :input').each(function(I){
		var A = $(this);																	
		var B = A.attr('name');				
		if(R.indexOf(B) != -1){
			V = V & checkField(A);
		}
		P[B] = A.val();				
	});	
	
	B = $(A).attr('rel');
	if(B){
		P[B] = true;
	}
	var S = A;
	if(V){
		$('#adsloading').show();
		$.post('/a/service_editor',P,function(A){
			
			$('#adsloading').hide();
			
			if(A.error && A.exists){
				alert('The profile you entered is already in your account');
				return;
			}
			if(A.service_id){	
				var B = $('a[rel='+A.service_id+']');
				if(A.del){
					B.attr('mode','add');
					B.html('<strong>Link account</strong>');
				}else if (!A.stream){
					B.attr('mode','edit');
					B.html('<strong>Edit/Unlink account</strong>');
				}else{
					var G = $('.added_services');
					var H = $('<div><a href="" title="Remove source" class="l_service_delete_feed" rel="'+A.feed_id+'"></a><img src="/static/images/serv_favs/'+A.icon+'" width="16" height="16" /> '+A.service_name+' </div>');
					H.hide();
					G.append(H);
					H.fadeIn();
					
				}
				fPopup.close();
			}else{
				alert('Invalid nickname or url');
				$(S).focus();
			}					
		},'json');
	}
};

clickHandlers.service_delete_feed  = function(A)
{
	A = $(A);
	var B = A.attr('rel');
	var C = A;
	if(B){
		var P = {'delete':true,'feed_id':B};
		$.post('/a/service_editor',P,function(A){
			C.parent().fadeOut();					
		},'json');
	}
	
};

keyupHandlers.detect_link = function(A){
	var pattern = '(http://[A-Za-z0-9-_]+\\.[A-Za-z0-9-_%&\?\/.=]+)';

	var s = ($(A).val());
	if (s.startsWith("(") && s.endsWith(")"))
	{
	    s = s.Substring(1, s.Length - 2);
	}
	url = s.match( pattern );
	if (url) {
		clickHandlers.link();
		$('#link_url').val(url[0]);
		clickHandlers.link_preview();
	}
};


var fPopup = {
		
		show: function(params){			
			if(params.view == undefined){				
				return;
			}
			var self = this;
			var shadow = $('#darken');	
			
			if(shadow.length > 0){				
				self.close();
			}
			
			this.onClose = function() {};
			
			if(params.params == undefined){
				params.params = {};
			}

			// $('body').append('<div id="darken"></div>');
			
			if(params.nokeys == undefined){
				$(window).keyup(self.keyListener);
			}
			
			$("body").append($('<table id="overlay"><td></td></table>'));
			$.getJSON('/a/render/'+params.view,params.params,this.responce);
			
			
		},
		responce 	: function(json){
			
			$("body").append($('<div></div>').attr({'id':'darken' }));
			$('#overlay td:eq(0)').html(json.html);
		},
		
		keyListener : function(e){	

			if(e.keyCode == 27){				
				fPopup.close();				
			}
		},
		
		close : function(){
			
			var self = this;
			self.onClose();			
			$(window).unbind("keyup",self.keyListener);			
			$('#overlay').remove();
			$('#darken').remove();
			
			
		},
		
		onClose : function(){}
		
};