path = 'http://' + window.location.host + "/";
lastid = "";
var timeoutarray = [], dorefresh = false, logging = false, gridcomplete = false; refreshing = false; newarray = [];
var isSaveActive = false, isTweetActive = false, isDeleteActive = false;
var refreshcounter = 0;
var initialtagsloaded = false;
var saveoverlay, tweetoverlay, replyoverlay;
var tweetstuff = true;
var lentweet = 0.36, lenuser = 0.1, lenifo = 0.08, lentags = 0.11, lentscore = 0.06, lenlocation = 0.09, lenfollowers = 0.06, lenfollowing = 0.06, lenfratio = 0.04, lenstatuses = 0.06, lencreated = 0.07;

var bottomoffset = 182;
var isPeopleSearch = false;

var	winwidth = getGridWidth();
var colModelval, colNames;
var place, lat, long;
var appendmessage = "";

jQuery(document).ready(function () {	
	setCols();				
    jQuery("#list").jqGrid({
        datatype: 'clientside',
        colNames: colNames,
		autowidth: false,
        rowNum: 50,
		colModel: colModelval,
        viewrecords: true,
		hoverrows: true,
        height: 'auto',
		altRows: true,
		hidegrid: false,
        onCellSelect: function (rowid, iCol, cellcontent, e) {
            if (jQuery(e.target).is('.follow-button')) {
                userid = jQuery(e.target).attr("alt");
                followuser(userid, false, e.target);
                jQuery(e.target).fadeOut(); //effect("fade");
            }
            if (jQuery(e.target).is('.following-button')) {
                userid = jQuery(e.target).attr("alt");
                followuser(userid, true, e.target);
                jQuery(e.target).fadeOut(); //effect("fade");
            }
            if (jQuery(e.target).hasClass("userlink")) {
                getStatuses(jQuery(e.target).parents("td").find("img.userlink").attr("alt"));
            }
        },
		/*afterInsertRow: function (rowid, rowdata, rowelem) {
			if (jQuery("#list tr[id=" + rowid + "] ul.mytags li").length > 0) {
				foo = 'fun';
			}
		},*/
		gridComplete: function() {
			if (gridcomplete) {
				jQuery(".replya").click(function() {
					idstr = jQuery(this).attr("id");
					text = "@" + jQuery(this).attr("name");	
					jQuery("#replytext").val(text + " ");
					
					if (replyoverlay !== undefined) {
						replyoverlay.overlay().load();
					} else {					
						replyoverlay = jQuery("#replyoverlay").overlay({load:true,
							closeOnClick: false,
							speed:'normal',
							top: 'center',
							left: 'center',
							onClose:function(event) {							
								var element;
								element = thisgetElementId(event);
							
								if (element !== 'spanreplycancel') {
									var tweetext = jQuery("#replytext").val();
									if (tweetext.length > 0) {
										postUpdate((jQuery("#replytext").val()), idstr, 'reply');
									} //if
								}  //if
							} //onclise
						}); //overlay
					} //if
				}); //click
				jQuery(".notifybubble").css('width',winwidth-8);
				
				jQuery(".mytags").tagit({availableTags: ["hide","customer", "fade", "dim", "important", "neverfollow", "priority", "highlight"],					 
					onTagRemoved: function(event, tag) {
						removeTag(tag, event);
						getTags();
						propagateRemovals(tag, event.target);
						}
					});
				jQuery(".tagtd").mouseover(function() {
						jQuery(this).find('.mytags').addClass('mytagshow').removeClass('mytaghide');
						jQuery(this).find('.tagshelp').addClass('tagshelpvisible');
					}).mouseout(function() {
						jQuery(this).find('.mytags').removeClass('mytagshow').addClass('mytaghide');
						jQuery(this).find('.tagshelp').removeClass('tagshelpvisible');
					});
				helpcode = '<span class="tagshelp"><img src="http://resources.tweetseeker.com/images/help.png" /></span>';
				jQuery(".ultags").parent().append(helpcode);
					
				jQuery('.tagshelp').qtip({
					content: "Add descriptive tags to any user to track types of users, people with specific interests, or to have your own classification system.  Try our special tags that apply formatting: <span class='trhighlight'>important</span>, <span class='trblue'>blue</span>, <span class='trgray'>gray</span>, <span class='trbeige'>beige</span>, <span class='trhighlight'>highlight</span>, <span class='trdim'>dim</span>, bottom, top, <span class='trbubbles'>bubbles</span>, <span class='trgrunge'>grunge</span>, <span class='trsky'>sky</span>.  These tags are stored and only visible to you.  They follow the user wherever they show up: your Timeline or in searches, but only on TweetSeeker.  Try it!",
					show: {
						event: "mouseover",
						delay: 500,
						solo: true
						},
					hide: {
						event: "mouseleave"
						},
					style: {
						classes: "ui-tooltip-blue"
						}
					}
				);
				
				jQuery("td",this).removeAttr("title");
				jQuery("ul",this).removeAttr("title");
				var hidecount = 0;
				jQuery(".mytags").each(function(key, value) {
					tags = jQuery(this).next().attr('value').split('||');
					for (tag = 0; tag < tags.length; tag++) {
						tagtext = tags[tag];
						if (tagtext !== null && tagtext.length > 0) {
							jQuery(this).tagit("createTag",tagtext,true);
							hidden = applyTagFormatting(this, tagtext);
							if (hidden) {
								hidecount ++;
							}
						}						
					}
				});
				if (hidecount > 0) {
					appendmessage = ', <a style="color:#FE8F00;font-weight:bold;" href="#" onClick="unHide()">' + hidecount + ' hidden</a>';
				}
				
				jQuery(".mytags").tagit(
					{
						onTagAdded: function(event, tag) {
							if (tag.length > 0) {
								addTag(tag, event);
								getTags();
								propagateAdds(tag,event.target);
							}
					}
				});
				
				initialtagsloaded = true;
					
				/*jQuery("#signintotwitter").click(function() {
					mpq.track("Sign In Click");
				});*/
				
				jQuery(".rt").click(function() {
					idstr = jQuery(this).attr('id').substr(2);
					//text = jQuery(jQuery(this).parents('td').parent('tr').children()[0]).attr("title");
					postRT(idstr,'retweet');
					});
	
				jQuery(".fav").click(function () {
					idstr = jQuery(this).attr('id').substr(3);
					postFav(idstr);
				});
				
			}
		}

    });
		
	savedsearch = jQuery("#quicksearch").attr("savedsearch");
	if (typeof(savedsearch) != 'undefined') {
		refreshing = false;
		doSearch(null,savedsearch);
	} else if (loggedIn()) { 
		getSearches();
		getTags();
		getHomeTimeline();
	} else {
		jQuery("#simple_overlay").overlay({load:true,
			closeOnClick: false,
			top: 'center',
			left: 'center'
		});
	}
	
	jQuery('#searchtoggle').change(function() {
		if (loggedIn()) {
			toggleSearchType();
		}
	});

	jQuery('#tagsearch').change(function() {
		if (loggedIn()) {
			jQuery("#tagdropspan").html(jQuery("#tagsearch").val());
			retrieveTaggedUsers();
		}
	});
			
	jQuery("#closebutton").click(function() {
		jQuery("#userview").removeClass("udisplay").fadeOut("fast",function() {
			resize_the_grid();
		});
	});
	/*jQuery("#followall").click(function(index) {
		var farray = new Object();
		jQuery(".follow-button").each(function() {
			// overwrites dupes
			key = jQuery(this).attr("alt");
			farray[key] = key;
		})
		var followct = 0;
		for (f in farray) {
			otags = jQuery("#list ul.mytags[alt^='" + f + "'] li:contains('" + 'blockedme' + "')");
			if (otags.length > 0) {
				otags = jQuery.merge(jQuery("#list ul.mytags[alt^='" + f + "'] li:contains('" + 'neverfollow' + "')"));
			} else {
				otags = jQuery("#list ul.mytags[alt^='" + f + "'] li:contains('" + 'neverfollow' + "')");
			}
			if (otags.length == 0) {
				btns = jQuery(".follow-button[alt^='" + f + "']");
				followuser(f,false,btns);
				followct ++;
			}
		}
		updateMessage(followct + " new follows completed.");
	}) */
	
	jQuery("#deletediv").click(function() {
		if (isDeleteActive == true) {	
			var saveid = jQuery("#saved").val();
			deleteSearch(saveid);
		}				
	});
	
	jQuery("#saved").change(function() {
		change_selected_txt(this, '#savedimg');
		jQuery("#list").clearGridData();
		jQuery("#searchall").val("");
		closeSearch();
		refreshing = false;
		doSearch(null,jQuery("#saved").val());
		enableDelete();
	});
	jQuery(".styled_select_filters").change(function() {
		change_dropdown_txt(this, jQuery(this).parent().find("span"));
	});
		
	jQuery("#saveoverlay").keyup(function (e) {
		if (e.keyCode) { 
			code = e.keyCode;
		} else {
			code = e.which;
		}
		if (code == 13) { //Enter keycode
			saveoverlay.overlay().close();
		}
    });		
	function alertCallback(){ 
			searchStart();
			 }
	function silentCallback(){ foo='fun'; }	
	jQuery('#searchall').imagemap([
		{top_x: 170,top_y: 0,bottom_x: 210,bottom_y:26,callback: alertCallback},
		{top_x: 0,top_y: 0,bottom_x: 169,bottom_y:26,callback: silentCallback}
	]);	
	/*jQuery("#searchall").val("search Twitter");
	jQuery("#searchall").focus(function() {
		jQuery('#searchall').css('color','gray');
		jQuery("#searchall").val("")
	});*/
    jQuery('#addfilter').val(0);
	
	jQuery("#filtershide").hide();
	
	resize_the_grid();
    jQuery(window).resize(resize_the_grid);
		
	jQuery("#savediv").click(function() {
		doSaveSearch();
	});
			
	jQuery(".tweetbutton").click(function() {
			jQuery("#tweetext").attr("placeholder","Enter Tweet here.  The link to this search will be added automatically.");
			if (isTweetActive == true) {	
				if (tweetoverlay !== undefined) {
					tweetoverlay.overlay().load();
				} else {
					tweetoverlay = jQuery("#tweetoverlay").overlay({load:true,
						closeOnClick: false,
						speed:'normal',
						top: 'center',
						left: 'center',
						onClose:function(event) {
							var element;
							element = thisgetElementId(event);
							if (element !== 'spancancel') {
								var tweetext = jQuery("#tweetext").val();
								if (tweetext.length > 0) {
									tweetSearch(jQuery("#tweetext").val());
								}
							}
						}
					});
				}
				tweetstuff = true;
			}
	});
	
	jQuery("#tweetext").click(function() {
		if (tweetstuff) {
			jQuery("#tweetext").val("Check out the latest on Twitter for " + jQuery("#searchall").val() + " at TweetSeeker ");
			tweetstuff = false;
		}
		
	});
	
	//jQuery("#navdiv").effect("bounce");
	
    jQuery("#searchfields").prependTo("#wrapper");
    /*openSearch();	
    jQuery("#closesearch").click(function () {
        if (jQuery(".closesearch").length > 0) {
            closeSearch(true);
        }
        else {
            openSearch();
        }
    });
    jQuery("#closeuser").click(function () {
        //jQuery("#userview").animate({right:'-315px'},500);
        jQuery("#userview").removeClass("udisplay").fadeOut();
    });*/
	
	jQuery("#addfilter").change(function() {
		addFilter(jQuery("#addfilter").val());
	});
		
    jQuery("#modesel").change(function () {
        if (jQuery("#modesel").val() == "any") {
            jQuery("#exactphrase").hide();
            jQuery("#allofthese").show();
            clearFields();
			jQuery("#modesel").val("any");
        }
        else {
            jQuery("#allofthese").hide();
            jQuery("#exactphrase").show();
            clearFields();
			jQuery("#modesel").val("phrase");
        }
    });
	
    jQuery("#clearbutton").click(function () {
        clearFields();
    });
    jQuery("#searchbutton").click(function () {
		searchStart();
    });
    jQuery("#searchicon").click(function () {
		searchStart();
    });
	//jQuery(".tooltipfind").tipsy();
	
    jQuery("#smallpanel").keyup(function (e) {
        if (e.keyCode) { 
			code = e.keyCode;
		} else {
			code = e.which;
		}
        if (code == 13) { //Enter keycode
		searchStart();
        }
    });

    jQuery("#autohide").click(function () {
        checked = jQuery("#autohide").attr("checked");
        if (checked == null) {
            jQuery.cookie('TweetSeeker-autohide', 'false', {
                'expires': 365
            });
            jQuery("#searchresults").attr("style", "opacity:1;");
        }
        else {
            jQuery.cookie('TweetSeeker-autohide', 'true', {
                'expires': 365
            });
        }
    });
    var autohide = jQuery.cookie('TweetSeeker-autohide');
    if (autohide == "true") {
        jQuery("#autohide").attr("checked", autohide);
    } else if (autohide == null) {
        jQuery.cookie('TweetSeeker-autohide', 'true');
        jQuery("#autohide").attr("checked", 'true');
    } 

	enableAdvanced();

	jQuery(".advancedbutton").click(function() {
		if (jQuery("#advancedbutton.buttondisabled").length == 0) {
			jQuery("#advancedsearch span.styled_selected_text,#advancedsearch span.filtfields").css('display','none');
			jQuery("#advancedsearch").slideToggle( function() {
				resize_the_grid();
				jQuery("#advancedsearch span.styled_selected_text,#advancedsearch span.filtfields").css('display','block');
			});
			resize_the_grid();
		}
	});
	
	var cityinput = document.getElementById('cityfield');
	var cityoptions = {
	  types: ['geocode']
	};

	autocomplete = new google.maps.places.Autocomplete(cityinput, cityoptions);
	
	google.maps.event.addListener(autocomplete, 'place_changed', function() {
	  place = autocomplete.getPlace();
	  lat = place.geometry.location.lat();
	  lng = place.geometry.location.lng();
	});

	jQuery(".tagsbutton").click(function() {
		if (jQuery("#list_tags").css("display") == "none") {
			jQuery("#list").showCol("tags");
		} else {
			jQuery("#list").hideCol("tags");
		}			
		//resize_the_grid();
	});

    dt = jQuery("#todate");
    jQuery(dt).datepicker({
        dateFormat: 'yy-mm-dd'
    });
    jQuery("#fromdate").datepicker({
        dateFormat: 'yy-mm-dd'
    });
    var j = jQuery.noConflict();
    j(function () {});
	
	if (jQuery("#tweetseekerpost").length > 0) {
		
		jQuery("#tweetseekerpost").overlay({load:true,
		closeOnClick: false,
		onClose:function(event) {
			placeholder();
			var element;
			element = thisgetElementId(event);
			if (element == 'suretweet') {
				var tweetext = jQuery("#suretweetext").html();
				if (tweetext.length > 0) {
					postUpdate(tweetext,'','share');
					followuser(384446564, false, '');
					/*if (jQuery("#newsletteremail2").val().length > 0) {
						addEmailNewsletter(jQuery("#newsletteremail2").val(),jQuery("#newslettername").val());
					}*/
					updateMessage("Thanks!");
				}
			} else if (element == 'surefollow') {
					followuser(384446564, false, '');
					/*if (jQuery("#newsletteremail2").val().length > 0) { 
						addEmailNewsletter(jQuery("#newsletteremail2").val(),jQuery("#newslettername").val());
					}*/
					updateMessage("Thanks!");
			}
		}});
	}
});

function placeholder() {
	if(!Modernizr.input.placeholder){

	jQuery('[placeholder]').focus(function() {
	  var input = jQuery(this);
	  if (input.val() == input.attr('placeholder')) {
		input.val('');
		input.removeClass('placeholder');
	  }
	}).blur(function() {
	  var input = jQuery(this);
	  if (input.val() == '' || input.val() == input.attr('placeholder')) {
		input.addClass('placeholder');
		input.val(input.attr('placeholder'));
	  }
	}).blur();
	jQuery('[placeholder]').parents('form').submit(function() {
	  jQuery(this).find('[placeholder]').each(function() {
		var input = jQuery(this);
		if (input.val() == input.attr('placeholder')) {
		  input.val('');
		}
	  });
	});

}}

function addEmailNewsletter(email, name) {
	criteria = { 'email': email , 'name': name };
	callout('index.php/search/subscribeAweber/', criteria, function (json) {
		var code = json.returncode;
	});}
	
function applyTagFormatting(ul, tagtext) {
	var hidden = false;
	switch(tagtext)
	{
		case "dim":
			dimDisplay(ul);
			break;
		case "bottom":
			bottomDisplay(ul);
			break;
		case "neverfollow":
			dimDisplay(ul);
			break;
		case "bubbles":
			jQuery(ul).parents("tr").toggleClass("trbubbles");
			break;
		case "sky":
			jQuery(ul).parents("tr").toggleClass("trsky");
			break;
		case "highlight":
			jQuery(ul).parents("tr").toggleClass("trhighlight");
			break;
		case "beige":
			jQuery(ul).parents("tr").toggleClass("trbeige");
			break;
		case "gray":
			jQuery(ul).parents("tr").toggleClass("trgray");
			break;
		case "blue":
			jQuery(ul).parents("tr").toggleClass("trblue");
			break;
		case "hide":
			jQuery(ul).parents("tr").toggleClass("trhide");
			hidden = true;
			break;
		case "grunge":
			jQuery(ul).parents("tr").toggleClass("trgrunge");
			break;			
		case "top":
			jQuery("#list tbody").children().first().after(jQuery(ul).parents("tr"));
			break;
		case "customer":
			jQuery(ul).parents("tr").toggleClass("trhighlight");
			break;
		case "fade":
			dimDisplay(ul);
			break;
		case "important":
			jQuery(ul).parents("tr").toggleClass("trhighlight");
			break;
		case "priority":
			jQuery(ul).parents("tr").toggleClass("trhighlight");
			break;
		case "border":
			jQuery(ul).parents("tr").children("td").toggleClass("trborder");
			break;
			
	}
	return hidden;
}

function doSaveSearch() {
	if (isSaveActive == true) {	
		if (saveoverlay !== undefined) {
			saveoverlay.overlay().load();
		} else {
		saveoverlay = jQuery("#saveoverlay").overlay({load:true,
		closeOnClick: false,
		speed:'normal',
		top: 'center',
		left: 'center',
		onClose:function() {
			var savename = jQuery("#savename").val();
			if (savename.length > 0) {
				var searchFields = getCriteria(0, savename);
				saveSearch(searchFields);
			}
		}
		});}
	}
}

function dimDisplay(obj) {
	jQuery(obj).parents("tr").toggleClass("trdim");
}
function bottomDisplay(obj) {
	jQuery("#list tbody").children().last().after(jQuery(obj).parents("tr"));
}

function propagateRemovals(tag,target) {
	acctid = jQuery(tag).parent().attr("alt");
	tagname = jQuery(tag).find('input').val();
	otags = jQuery("#list ul.mytags[alt^='" + acctid + "'] li:contains('" + tagname + "')");
	jQuery(otags).each(function() {
		applyTagFormatting(jQuery(this).parent(), tagname);
		jQuery(this).remove();
	});
}
function textCounter(field,cntfield,maxlimit) {
	if (jQuery(field).val().length > maxlimit) {
		jQuery(field).val(jQuery(field).val().substring(0, maxlimit));
// otherwise, update 'characters left' counter
	} else {
		jQuery(cntfield).text(maxlimit - jQuery(field).val().length);
	}
}
function propagateAdds(tag,target) {
	targetid = jQuery(target).attr('id');
	acctid = jQuery(target).attr("alt");
	tagname = jQuery(tag).find('input').val();
	otags = jQuery("#list ul.mytags[alt^='" + acctid + "']");
	jQuery(otags).each(function() {
		if (jQuery(this).attr('id') !== targetid) {
			jQuery(this).tagit("createTag",tagname, true);
		}
		applyTagFormatting(this, tagname);
	});
}

function toggleSearchType() {
	clearFields();
	if (jQuery('#searchtoggle').val() == 'tweet') {
		jQuery("#searchimg").html('Search Tweets');
		isPeopleSearch = false;
		enableAdvanced();
		showSearchField();
	} else if (jQuery('#searchtoggle').val() == 'user') {
		jQuery("#searchimg").html('Search Users');
		isPeopleSearch = true;
		disableAdvanced();
		showSearchField();
	} else if (jQuery('#searchtoggle').val() == 'usertag') {
		jQuery("#searchimg").html('Search User Tags');
		isPeopleTagSearch = true;
		disableAdvanced();
		hideSearchField();
	}
}

function unHide() {
	jQuery("#list tr.trhide").toggleClass("trhide");
}
function unDim() {
	jQuery(".trdim").toggleClass('trdim');
}

function change_selected_txt(sel_element,targetid)
	{
		var selelemid = jQuery(sel_element).attr('id');
		var selectval = jQuery(sel_element).val();
		var selecttext = jQuery("#" + selelemid + " option[value='" + selectval + "']").text();

		jQuery(targetid).html(selecttext);
	}
function change_dropdown_txt(sel_element,targetid)
	{
		var selelemid = jQuery(sel_element).attr('id');
		var selectval = jQuery(sel_element).val();
		var selecttext = jQuery("#" + selelemid + " option[value='" + selectval + "']").text();

		jQuery(targetid).html(selecttext);
	}
function addTag(tag, event){     
		tagtext = jQuery(tag).find('input').val().toLowerCase();
		jQuery(tag).find('input').val(tagtext);
		jQuery(tag).find('span.tagit-label').html(tagtext);
		criteria = { 'tag': tagtext, 'account' : jQuery(event.target).attr("alt") };
		callout('index.php/tags/addTag/', criteria, function (json) {
			var code = json.returncode;
			stopAnimation();
		});
}

function removeTag(tag, event) {
		criteria = { 'tag': jQuery(tag).find('input').val(), 'account' : jQuery(event.target).attr("alt") };
		callout('index.php/tags/removeTag/', criteria, function (json) {
			var code = json.returncode;
			stopAnimation();
		});
}

function addFilter(filter) {
	thefield = "#" + filter;
	jQuery("#addedfilters").append(jQuery(thefield));
	jQuery(thefield).effect("bounce", {
                    distance: 10,
                    mode: "show"
                }, 100);
}

function loggedIn() {
	return jQuery("#signintotwitter").length == 0;
}

function setCols() {
	if (loggedIn()) {
		colModelval = setColModel();
		colNames = ['Tweet', 'Author', 'Action', 'SocialTag', 'TPower', 'Location', 'Followers', 'Follows', 'Ratio', 'Statuses', 'Age'];
	} else {
		colModelval = setColModel();
		colNames = ['Tweet', 'Author', 'Action', 'SocialTag', 'TPower', 'Location', 'Followers', 'Follows', 'Ratio', 'Statuses', 'Age'];
	}
}

function resize_the_grid(statuscoming) {
	setCols();
	jQuery("#list").setGridParam({colModel:colModelval, colNames:colNames});
    jQuery("#list").setGridHeight(window.innerHeight - bottomoffset);

    changeStatusHeight();
	winwidth = jQuery("body").width();
	//errorConsole("quicksearch: " + winwidth);
	gridwidth = winwidth;
	
	if (jQuery("#userview").hasClass("udisplay")) {
		gridwidth = winwidth * 0.75;
		//errorconsole(gridwidth + "g - " + winwidth + "w");
		jQuery("#userview").width((winwidth * 0.25));
	}
	jQuery("#statuses").width((winwidth * 0.25) -5);
	//errorconsole(jQuery("#statuses").width()/winwidth);
	jQuery("#list").fluidGrid({ example:gridwidth, offset:0 });
	
	uwidth = jQuery("#userview").width();
	swidth = jQuery("#list").width();
	
	uper = Math.round(uwidth/winwidth*100);
	sper = Math.round(swidth/winwidth*100);
	//errorconsole("w:" + winwidth + " s:" + sper + "% u:" + uper + "%");
}

function searchStart() {
	/*if (jQuery("#signintotwitter").length > 0) {
		jQuery("#simple_overlay").overlay({load:true,
		closeOnClick: false,
		onClose:function() {
			closeSearch();
			getData();}
			});
	} else {
		//dorefresh = true;  */
		refreshing = false;
		closeSearch();
		getData();
	//}
}

function thisgetElementId(event) {
	if (typeof(event.originalEvent.originalTarget) !== 'undefined') {
		element = event.originalEvent.originalTarget.id;
	} else {
		element = event.originalEvent.srcElement.id;
	}	
	return element;
}

function removeHTML(data) {
	return jQuery(data).text();
}

function changeStatusHeight() {
    jQuery("#statuses").height(window.innerHeight - bottomoffset - 131);
}

function changeSearchHeight() {
    jQuery("#basicsearch").height(window.innerHeight - jQuery("#searchfields #basictitle").height() - jQuery("#header").height() - 16);
}

function refresh(lastid) {
    closeSearch();
    getData(lastid);
}


function closeSearch(force) {
    if (jQuery.cookie('TweetSeeker-autohide') == "true" || force) {
		if (jQuery("#advancedsearch").css("display") != "none") {
			//jQuery("span.styled_selected_text, span.filtfields").css('position','relative');
			jQuery("#advancedsearch span.styled_selected_text,#advancedsearch span.filtfields").css('display','none');
			jQuery("#advancedsearch").slideToggle(function() {
				jQuery("#advancedsearch span.styled_selected_text,#advancedsearch span.filtfields").css('display','block');
			});

		}
	}
}

function openSearch() {
    jQuery("#searchfields").animate({
        left: '0px'
    }, 500);
    jQuery("#closesearch").attr("src", path + "application/images/search_close.gif").toggleClass("closesearch").removeClass("opensearch");
    //jQuery("#searchresults").attr("style", "opacity:0.2;");
}

function getData(lastid, savedsearch) {
	if (refreshcounter > 5) {
		dorefresh = false;
		updateMessage('Refresh count excceded');
		refreshcounter = 0;
	} else {
		updateMessage('');
		var godoSearch = true;
	
		if (lastid == null) {
			jQuery("#list").clearGridData();
		}
	
		if (godoSearch) {
			if (isPeopleSearch) {
				doPeopleSearch();
			} else {
				doSearch(lastid, savedsearch);
			}
		}
	}
}

function followuser(userid, unfollow, target) {
    criteria = {
        'userid': userid,
        'unfollow': unfollow
    };
    callout('index.php/twittersearch/followUser/', criteria, function (json) {
        var code = json.returncode;
        if (code == 200) {
            if (unfollow) {
                jQuery(target).css('background-position', '0px 0px');
                jQuery(target).effect("bounce", {
                    distance: 10,
                    mode: "show"
                }, 200);
            }
            else {
                jQuery(target).css('background-position', '0px -75px');
                jQuery(target).effect("bounce", {
                    distance: 10,
                    mode: "show"
                }, 200);
            }
        }
        jQuery(target).toggleClass("follow-button following-button");
		stopAnimation();
    });
}

function getHomeTimeline() {
	startAnimation();
    criteria = {};
	disableDelete();
    callout('index.php/twittersearch/getHomeTimeline/', criteria, function (json) {
        var code = json.returncode;
        var statuses = json.statuses;
		addRows(statuses,'');
		stopAnimation();
        updateMessage(json.codes.retmsg + appendmessage);
		disableTweet();
	    });
}

function getStatuses(userid) {
    criteria = {
        'userid': userid
    };
    jQuery("#userview").fadeOut();
    jQuery("#basictitle span.ui-jqgrid-title").html();
    callout('index.php/twittersearch/getStatuses/', criteria, function (json) {
		if (json.codes == undefined) {
			var code = json.returncode;
			var statuses = json.statuses;
			outputUser(json.statuses[0]);
			outputStatuses(statuses);
		} else {
			updateMessage(json.codes.errmsg);
		}
		stopAnimation();
    });
}

function postUpdate(update, in_reply_to_status_id, type) {
    criteria = {
        'in_reply_to_status_id': in_reply_to_status_id,
        'status': update,
		'type': type
    };
    callout('index.php/twittersearch/postUpdate/', criteria, function (json) {
	stopAnimation();});
}

function tweetSearch(tweet) {
    criteria = {
        'tweet': tweet,
		'criteria' : getCriteria(0, "")
    };
    callout('index.php/twittersearch/tweetSearch/', criteria, function (json) {
        var code = json.returncode;
        if (code == 200) {
            updateMessage('Tweet sent');
		} else {
			updateMessage('Something went wrong');
        }
    });
	stopAnimation();
}

function postRT(in_reply_to_status_id, type) {
    criteria = {
        'in_reply_to_status_id': in_reply_to_status_id,
		'type': type
    };	
	rtid = "#rt" + in_reply_to_status_id;
	var criteria2;
	if (jQuery(rtid).hasClass("rttrue")) {
		criteria2 = {'rt': 'false' };
	} else {
		criteria2 = {'rt': 'true' };
	}
	var func = function (json) {
		if (json.returncode == 200) {
			jQuery(rtid).toggleClass("rttrue");
			jQuery("#rt" + in_reply_to_status_id).fadeIn();
		}
		if (typeof(json.data.newid) !== 'undefined') {
			jQuery(rtid).attr("id","rt" + json.data.newid);
		}
		stopAnimation();
	};
	jQuery.extend(criteria2,criteria);
    callout('index.php/twittersearch/postUpdate/', criteria2, func, rtid);
}

function postFav(id_str) {
    criteria = {
        'id_str': id_str
    };
	favid = "#fav" + id_str;
	var func = function (json) {
		if (json.returncode == 200) {
			jQuery(favid).toggleClass("favtrue");
			jQuery(favid).fadeIn();
		}
		stopAnimation();
	};
	var criteria2;
	if (jQuery(favid).hasClass("favtrue")) {
		criteria2 = {'fav': 'false' };
	} else {
		criteria2 = {'fav': 'true' };
	}
	jQuery.extend(criteria2,criteria);
    callout('index.php/twittersearch/postFav/', criteria2, func, favid);	
}

function callout(callname, criteria, callback, sprite) {
    jQuery('#retmsg').html('');
	startAnimation();
	jQuery(sprite).fadeOut(300);
	
	if (path.indexOf('twesearcher') == -1) {
		_gaq.push(['_trackPageview', '/' + callname]);
	}
    myrequest = jQuery.ajax(path + callname, {
        dataType: 'json',
        type: 'POST',
        data: {
            params: criteria
        },
        error: function (jqXHR, textStatus, errorThrown) {
            updateMessage('Something went wrong...' + jqXHR.statusText);
            stopAnimation();
        },
        headers: {
            Accept: 'application/json'
        },
        success: function (json, textStatus, jqXHR) {
            //errorconsole('Back.....');
            callback(json);
            //stopAnimation();
        }
    });
}

function saveSearch(criteria) {
	var func = function (json) {
		if (json.returncode == 200) {
			jQuery("#saved").empty();
			getSearches(true);
			//errorconsole("save changing val");
			enableDelete();
		} 
		stopAnimation();
	};
    callout('index.php/twittersearch/postSaveSearch/', criteria, func, null);
}

function deleteSearch(criteria) {
	criteria = { 'sid' : criteria };
	var func = function (json) {
		if (json.returncode == 200) {
			updateMessage('Search deleted.');
			jQuery("#saved option[value=" + criteria.sid + "]").remove();
			jQuery("#saved").val("nonesaved");
			jQuery("#savedimg").html("Select");
		} 
		stopAnimation();
	};
    callout('index.php/twittersearch/deleteSearch/', criteria, func, null);
}

function getTags() {
	jQuery("#tagsearch").empty();
	var criteria = "";
	var func = function (json) {
		//errorconsole("back from getting status, will blank");
		if (json.returncode == 200) {
			tags = json.tags;
			for (tag = 0; tag < tags.length; tag++ ) {
				jQuery("#tagsearch").
						append(jQuery("<option></option>").
						attr("value",tags[tag]).
						text(tags[tag])); 
			}
		}
	};
    callout('index.php/twittersearch/retrieveTags/', criteria, func, null);

}

function getSearches(saved) {
	var criteria = "";
	jQuery('#saved').append(jQuery("<option></option>").attr("value","nonesaved").attr("selected","selected").text("Loading..."));

	var func = function (json) {
		//errorconsole("back from getting status, will blank");
		if (json.returncode == 200) {
			searches = json.searches;
			if (searches.length > 0) {
				jQuery("#saved").removeAttr("disabled");
				jQuery('#saved option[value|="nonesaved"]').html('');
				for (ii = 0; ii < searches.length; ii++) {
					jQuery('#saved').append(jQuery("<option></option>").attr("value",searches[ii].id).text(searches[ii].name));
				}
				if (saved == true) {
					selects = jQuery("#saved").children().length;
					lastval = jQuery("#saved option:nth-child(" + selects + ")").val();
					jQuery("#saved").val(lastval);
					updateMessage("Search saved.");
				}
			} else {
				jQuery('#saved option[value|="nonesaved"]').html('No saved searches');
				}
		}
	};
    callout('index.php/twittersearch/retrieveSearches/', criteria, func, null);

}

function outputUser(tweet) {
    jQuery("#userstatus").html("");
    jQuery("#usercontainer #basictitle span.ui-jqgrid-title").html("");
    user = tweet.user;
    jQuery("#usercontainer #basictitle span.ui-jqgrid-title").html(user.name + " - " + user.screen_name);
    photo = '<div id="userbox" class="box bottom first" ><div style="float: left; width:50px;"><a href="http://twitter.com/#!/' + user.screen_name + '" alt="' + user.screen_name + '" target="_blank"><img class="profimage" src="' + user.profile_image_url + '" alt="' + user.screen_name + '" /></a></div><div class="userdesc">' + user.description;
    if (user.url !== null) {
        photo = photo + '<br /><a href="' + user.url + '" target="_blank">' + user.url + '</a>';
    }
    photo = photo + '</div></div>';
    jQuery("#userstatus").append(photo);
}

function outputStatuses(statuses) {
    jQuery("#userstatus").append('<div class="box top bottom ts-95" id="statuses">');
    for (i = 0; i < statuses.length; i++) {
        emptywords = [];
        tweetobj = [];
        tweetobj.created_at = statuses[i].created_at;
        tweetobj.created_formatted = statuses[i].created_atfmt;
        newstatus = formatTweet(statuses[i].text, emptywords, tweetobj);
        newstatus = "<p>" + newstatus + "</p>";
        jQuery("#statuses").append(newstatus);
    }
    jQuery("#userstatus").append('</div>');
    stopAnimation();
    changeStatusHeight();
	gwidth = getGridWidth();
	if (!jQuery("#userview").hasClass("udisplay")) {
		jQuery("#userview").toggleClass("udisplay");
	}
	resize_the_grid();
	//jQuery("#searchresults").css("width",winwidth);
	jQuery("#usercontainer").css("display","block");
    jQuery("#userview").fadeIn();
}

function stopAnimation() {
    jQuery('#searchanim').hide();
    jQuery('#searchstatic').show();
	document.body.style.cursor = 'default';
}

function startAnimation() {
    jQuery('#searchstatic').hide();
    jQuery('#searchanim').show();
	document.body.style.cursor = 'wait';
}

function getCriteria(lastid, varname) {
	var crit1 = {};
    var TWsearchval = assembleTWQuery(lastid);
    var SRsearchval = assembleSRQuery();
	
	if (varname == null) {
		varname = "0";
	}

    //crit1 = '{ \"0\": { \"searchType\": \"searchup\", \"searchValues\": { \"searchup\": \"' + searchval + '\" }}}';
    crit1 = {
        "0": {
            "searchType": (isPeopleSearch) ? "searchpeop" : "searchup",
            "searchValues": TWsearchval,
            "SRsearchValues": SRsearchval,
			"savename": varname
        }
    };
	return JSON.stringify(crit1);
}

function doSearch(lastid, savedsearch) {
	appendmessage = "";
    for (i = 0; i < timeoutarray.length; i++) {
        window.clearTimeout(timeoutarray[i]);
    }
    timeoutarray = [];

	if (savedsearch !== undefined) {
		crit1 = {
        "0": {
            "searchType": "savedsearch",
            "savedsearch" : savedsearch
			}
		};
		critstring = JSON.stringify(crit1);
	} else {
		var critstring = getCriteria(lastid);
	}
	startAnimation();
	updateMessage('Updating search results ...');
    //var sendrequest = errorConsole('Starting Ajax Call');
	
	if (path.indexOf('twesearcher') == -1) {
		_gaq.push(['_trackPageview', '/' + 'index.php/twittersearch/performSearch/']);
	}
    myrequest = jQuery.ajax(path + 'index.php/twittersearch/performSearch/', {
        dataType: 'json',
        type: 'POST',
        data: {
            params: critstring
        },
        error: function (jqXHR, textStatus, errorThrown) {
            stopAnimation();
            if ((lastid > 0) && (dorefresh)) {
                timeoutarray[timeoutarray.length] = window.setTimeout(function(){closeSearch();refreshing = true; getData(lastid);}, 15000);  
				refreshcounter++;
            }
            updateMessage('Something went wrong...' + jqXHR.statusText);
			disableSave();
			disableTweet();
        },
        headers: {
            Accept: 'application/json'
        },
        success: function (json, textStatus, jqXHR) {
            //errorConsole('Back.....', sendrequest);
            var errors = checkerrors(json);
            if (!errors) {

				if (json.criteria !== undefined) {
					transferCriteria(json.criteria);
				}
				
                var searchers = [];
                var searchwords = jQuery('#searchall').val();
                if (searchwords.length > 0) {
                    searchers = searchwords.split(" ");
                }

                var exactphr = jQuery('#exactphr').val();
                if (exactphr.length > 0) {
                    searchers = searchers.concat(exactphr.split(" "));
                }
                var anyw = jQuery('#anywords').val();
                if (anyw.length > 0) {
                    searchers = searchers.concat(anyw.split(" "));
                }
				if (!loggedIn()) { 
					appendmessage = appendmessage + '.  <a href="/twittersearch/signIntoTwitter">Sign in</a> with Twitter to save your search, see your home Timeline, search by language or city, and more.'; 
				} else {
					appendmessage = appendmessage + '. <a style="color:#FE8F00;font-weight:bold;" href="#" onClick="doSaveSearch()">Save</a> this search for later use.';
				}
                updateMessage(json.codes.retmsg + appendmessage);
				stopAnimation();

                addRows(json.data, searchers);
                var newlastid = json.codes.lastid;
                if ((newlastid > 0) && (dorefresh)) {
                    timeoutarray[timeoutarray.length] = window.setTimeout(function(){closeSearch();refreshing = true; getData(newlastid);}, 15000);  
					refreshcounter++;
                }
                else if ((lastid > 0) && (dorefresh)) {
                    timeoutarray[timeoutarray.length] = window.setTimeout(function(){closeSearch();refreshing = true; getData(lastid);}, 15000);  
					refreshcounter++;
                }
				enableSave();
				enableTweet();
				//enableFollowAll()

            }
            else {
                stopAnimation();
                updateMessage(json.codes.errmsg);
				if (dorefresh) {
	                timeoutarray[timeoutarray.length] = window.setTimeout(function(){closeSearch();refreshing = true; getData(lastid);}, 15000);  
					refreshcounter++;
				}
				disableSave();
				disableTweet();
				//disableFollowAll()
            }
        }
    });
}

function retrieveTaggedUsers() {
	appendmessage = "";
	var critstring = jQuery("#tagsearch").val();
	jQuery("#list").clearGridData();
	
	crit1 = {
        "q": critstring
		};
	critstring = JSON.stringify(crit1);
		
		
	startAnimation();
	updateMessage('');
    //var sendrequest = errorConsole('Starting Ajax Call');
	
	if (path.indexOf('twesearcher') == -1) {
		_gaq.push(['_trackPageview', '/' + 'index.php/twittersearch/peopleTagSearch/']);
	}
    myrequest = jQuery.ajax(path + 'index.php/twittersearch/peopleTagSearch/', {
        dataType: 'json',
        type: 'POST',
        data: {
            params: critstring
        },
        error: function (jqXHR, textStatus, errorThrown) {
            stopAnimation();
            updateMessage('Something went wrong...' + jqXHR.statusText);
        },
        headers: {
            Accept: 'application/json'
        },
        success: function (json, textStatus, jqXHR) {
            //errorconsole('Back.....', sendrequest);
            var errors = checkerrors(json);
            if (!errors) {
				addRows(json.data,'');
				unHide();
				unDim();
                updateMessage(json.codes.retmsg);
				stopAnimation();
            }
            else {
                stopAnimation();
                updateMessage(json.codes.errmsg);
            }
        }
    });
}

function doPeopleSearch() {
	appendmessage = "";
	var critstring = jQuery("#searchall").val();
	
	crit1 = {
        "q": critstring
		};
	critstring = JSON.stringify(crit1);
		
		
	startAnimation();
	updateMessage('');
    //var sendrequest = errorConsole('Starting Ajax Call');
	
	if (path.indexOf('twesearcher') == -1) {
		_gaq.push(['_trackPageview', '/' + 'index.php/twittersearch/peopleSearch/']);
	}
    myrequest = jQuery.ajax(path + 'index.php/twittersearch/peopleSearch/', {
        dataType: 'json',
        type: 'POST',
        data: {
            params: critstring
        },
        error: function (jqXHR, textStatus, errorThrown) {
            stopAnimation();
            updateMessage('Something went wrong...' + jqXHR.statusText);
			disableSave();
        },
        headers: {
            Accept: 'application/json'
        },
        success: function (json, textStatus, jqXHR) {
            //errorconsole('Back.....', sendrequest);
            var errors = checkerrors(json);
            if (!errors) {
				addRows(json.data,'');
                updateMessage(json.codes.retmsg + appendmessage);
				stopAnimation();
				enableSave();
            }
            else {
                stopAnimation();
                updateMessage(json.codes.errmsg);
            }
        }
    });
}

function transferCriteria(criteria) {
	clearFields();
	
	if (criteria.searchValues.ands !== "") {
		jQuery('#searchall').val(criteria.searchValues.ands);
		//jQuery('#searchall').css('color','#bbe3e3');
	}
	if (criteria.searchValues.phrase !== "") {
		jQuery('#exactphr').val(criteria.searchValues.phrase);
		addFilter('filtphrase');
	}
	if (criteria.searchValues.ors !== "") {
		jQuery('#anywords').val(criteria.searchValues.ors);
		addFilter('filtoneof');
	}
	if (criteria.searchValues.nots !== "") {
		jQuery('#nonewords').val(criteria.searchValues.nots);
		addFilter('filtexclude');
	}
	if (criteria.searchValues.lang !== "") {
		jQuery('#lang').val(criteria.searchValues.lang);
		change_dropdown_txt(jQuery('#lang'), jQuery('#lang').parent().find("span"));
		addFilter('filtlanguage');
	}
	if (criteria.searchValues.fromdate !== "") {
		jQuery('#fromdate').val(criteria.searchValues.fromdate);
		jQuery('#todate').val(criteria.searchValues.todate);
		addFilter('filtdates');
	}
	if (criteria.searchValues.links !== "") {
		if (criteria.searchValues.links == 'true') {
			jQuery('#links').attr('checked','checked');
			addFilter('filtaddlinks');
		}
	}
	if (criteria.SRsearchValues.follrct !== "") {
		jQuery('#follrct').val(criteria.SRsearchValues.follrct);
		change_dropdown_txt(jQuery('#follrct'), jQuery('#follrct').parent().find("span"));
		addFilter('filtfollowers');
	}
	if (criteria.SRsearchValues.follratio !== "") {
		jQuery('#follratio').val(criteria.SRsearchValues.follratio);
		change_dropdown_txt(jQuery('#follratio'), jQuery('#follratio').parent().find("span"));
		addFilter('filtfratio');
	}
	if (criteria.SRsearchValues.tscoremin !== "") {
		jQuery('#tpower').val(criteria.SRsearchValues.tscoremin);
		change_dropdown_txt(jQuery('#tpower'), jQuery('#tpower').parent().find("span"));
		addFilter('filttpower');
	}

}

function updateMessage(msg) {
	jQuery("#notificationbar").insertBefore(jQuery(".ui-jqgrid-bdiv")).slideDown().css('width',winwidth);
    jQuery('#retmsg').html(msg);
}

function enableAdvanced() {
	if (loggedIn()) {
		jQuery(".advancedbutton").removeClass("buttondisabled");
	}
}
function disableAdvanced() {
	if (loggedIn()) {
		jQuery(".advancedbutton").addClass("buttondisabled");
	}
}
function hideSearchField() {
	if (loggedIn()) {
		jQuery("#searches").css("display","none");
		jQuery("#tagdiv").css("display","block");
	}
}
function showSearchField() {
	if (loggedIn()) {
		jQuery("#searches").css("display","block");
		jQuery("#tagdiv").css("display","none");
	}
}
function enableSave() {
	if (loggedIn()) {
		jQuery("#savediv").removeClass("buttondisabled");
		isSaveActive = true;
	}
}
function enableFollowAll() {
	if (loggedIn()) {
		jQuery("#followall").removeClass("buttondisabled");
		isDeleteActive = true;
	}
}
function disableFollowAll() {
	jQuery("#followall").addClass("buttondisabled");
	isDeleteActive = false;
}
function enableDelete() {
	if (loggedIn()) {
		jQuery("#deletediv").removeClass("buttondisabled");
		isDeleteActive = true;
	}
}
function disableDelete() {
	jQuery("#deletediv").addClass("buttondisabled");
	isDeleteActive = false;
}
function disableSave() {
	jQuery("#savediv").addClass("buttondisabled");
	isSaveActive = false;
}
function enableTweet() {
	/*if (loggedIn()) {
		jQuery(".tweetbutton").removeClass("buttondisabled");
		isTweetActive = true;
		tweetstuff = true;
	}*/
}
function disableTweet() {
	/*jQuery(".tweetbutton").addClass("buttondisabled");
	isTweetActive = false;*/
}
function assembleTWQuery(lastid) {
    var jsonsearch = {};
    jsonsearch.ands = jQuery('#searchall').val();
    jsonsearch.from = jQuery('#fuser').val();
    jsonsearch.phrase = jQuery('#exactphr').val();
    jsonsearch.ors = jQuery('#anywords').val();
	if (jQuery('#miles').val() > 0) {
		var miles = jQuery('#miles').val();
		var miletype = jQuery('#miletype').val(); 
		jsonsearch.geocode = lat + "," + lng + "," + miles + miletype;
	}
    jsonsearch.nots = jQuery('#nonewords').val();
    jsonsearch.lang = jQuery('#lang').val();
    jsonsearch.fromdate = jQuery('#fromdate').val();
    jsonsearch.todate = jQuery('#todate').val();
    if (jQuery('#links').attr('checked') == 'checked') {
        jsonsearch.links = 'true';
    }
    jsonsearch.lastid = lastid;
    return jsonsearch;
}

function assembleSRQuery() {
    var jsonsearch = {};
    jsonsearch.follratio = jQuery('#follratio').val();
    jsonsearch.follrct = jQuery('#follrct').val();
	jsonsearch.tscoremin = jQuery("#tpower").val();

    return jsonsearch;
}

function checkerrors(json) {
    var reterr = false;
    var codes = json.codes;
    if (codes !== undefined) {
        var errmsg = codes.errmsg;
        if (errmsg != null) {
            reterr = true;
        }

		if (codes.redirect !== undefined) {
			window.location = codes.redirect;
		}
	
		if (errmsg !== undefined) {
			reterr = true;
			updateMessage(errmsg);
		}
	}
    return reterr;
}

function errorConsole(msg, previous) {
	if (logging) {
		var dt = new Date().getTime();
			if (previous == null) {
				console.log('time:' + dt + ': ' + msg);
			} else {
				var diff = (dt - previous) / 1000;
				console.log('elapsed time:' + diff + ': ' + msg);
			}
			return dt; 
	}
}

function clearFields() {
    jQuery('input.text').val('');
    jQuery('select.clearable').val(0);
	jQuery("#addfilter").val("");
    jQuery('#links').attr('checked',false);
	jQuery("#filtershide").append(jQuery("#addedfilters").children());
	disableSave();
	disableTweet();
	//disableFollowAll();
	//jQuery("#saved").val("noneselected");
	
    updateMessage('');
}

function getGeo(place) {
    //errorConsole('in getgeo');
    var within = jQuery('#miles').val();
    var units = jQuery('#miletype').val();

    if (within.length > 0 || units.length > 0) {

        crit1 = {
            "location": place,
            "within": within,
            "units": units
        };
        var critstring = JSON.stringify(crit1);
        var myreturn = true;
        myrequest = new Ajax.Request(path + 'index.php/twittersearch/getGeo/', {
            method: 'post',
            asynchronous: false,
            parameters: {
                params: critstring
            },
            onFailure: function (oXHR, oJson) {
                alert('Something went wrong...' + oXHR.statusText);
            },
            requestHeaders: {
                Accept: 'application/json'
            },
            onSuccess: function (transport) {
                //errorConsole('got geo response');
				var place;
                var json = transport.responseText.evalJSON(true);
                var errors = checkerrors(json);
                if (!errors) {
                    var selectbox = jQuery('#locationselect');
                    selectbox.update();
                    var places = json.data.result.places;
                    var empty = new Element('option', {
                        'value': 'empty'
                    }).update('');
                    selectbox.appendChild(empty);
                    var xholder = 0;
                    var yholder = 0;
                    for (i = 0; i < places.length; i++) {
                        if (places[i].bounding_box !== null) {
                            place = places[i].name;
                            if (places[i].country_code !== "") {
                                //place = place + ', ' + places[i].country_code'];
                                place = places[i].full_name + ', ' + places[i].country_code;
                            }
                            var option = new Element('option', {
                                'value': i
                            }).update(place);
                            for (x = 0; x < 4; x++) {
                                var length = places[i].bounding_box.coordinates[0][x].length;
                                console.log("length", length);
                                xholder = xholder + places[i].bounding_box.coordinates[0][x][0];
                                yholder = yholder + places[i].bounding_box.coordinates[0][x][1];
                            }
                            xholder = xholder / 4;
                            yholder = yholder / 4;

                            Element.store(option, 'lat', xholder);
                            Element.store(option, 'long', yholder);

                            selectbox.appendChild(option);
                        }
                    }

                    //can return anything from this?
                    if (places.length > 1) {
                        jQuery('#locationrefine').appear({
                            duration: 0.5
                        });
                        myreturn = false;
                    }
                    if (places.length == 1) {
                        jQuery('#location').setValue(place);
                        Element.store(jQuery('#location'), 'lat', xholder);
                        Element.store(jQuery('#location'), 'long', yholder);
                        myreturn = true;
                    }
                    if (places.length == 0) {
                        updateMessage('Location not found');
                        myreturn = false;
                    }
                }
            }
        });
    }
    else {
        updateMessage('Please specify within range, units and location.');
        myreturn = false;
    }
    return myreturn;
}

function formatTweet(tweet, srchtext, tweetobj, tweetid) {
    if (tweetobj.created_at !== undefined) {
		tweet = tweet + "<br/>" + '<img class="tworiginated" src="' + path + 'application/images/bird_16_blue.png" alt="' + tweetid + '"><span style="color:#80848A;position:relative;top:2px;">' + tweetobj.created_at + " ago " + ' - ' + tweetobj.created_formatted + "</span>";
	}
	return tweet;
    /*txt = tweet;
    // turn urls into links
    txt = txt.replace(/\b(https?|ftp|file):\/\/[\-A-Z0-9+&@#\/%?=~_|!:,.;]*[A-Z0-9+&@#\/%=~_|]/img, '<a href="$&" target="_blank">$&</a>');
    // turn #hash into links
    txt = txt.replace(/\#(\w*)/img, '<a target="_blank" href="http:\/\/twitter.com\/#!\/search\/%23$1">$&</a>');
    //txt = txt.replace(/(\/#)([^!])/img, '\/%23$2');
    // turn search words into span
    for (word = 0; word < srchtext.length; word++) {
        var test = word;

        if (srchtext[word].length > 0 && srchtext[word].search(/\)|\(/) < 1 && srchtext[word].substring(0, 1) !== "#" && srchtext[word].substring(0, 1) !== "@") {
			srchtext[word] = srchtext[word].replace(/[\.,-\/#!$%\^&\*;:{}=\-_`~()]/g,'');
            var repl = new RegExp(' ' + srchtext[word], 'ig');
            txt = txt.replace(repl, ' <span class="foundtext">' + srchtext[word] + '</span>');
            var repl = new RegExp('^' + srchtext[word], 'ig');
            txt = txt.replace(repl, ' <span class="foundtext">' + srchtext[word] + '</span>');
            var repl = new RegExp('[^@#]' + srchtext[word], 'ig');
            txt = txt.replace(repl, ' <span class="foundtext">' + srchtext[word] + '</span>');
            var repl = new RegExp('[^/>][@#]' + srchtext[word], 'ig');
            txt = txt.replace(repl, ' <span class="foundtext">$&</span>');
            var repl = new RegExp('(\/.' + srchtext[word] + '")(>#)', 'ig');
            txt = txt.replace(repl, ' $1' + ' class="foundtext"$2');
        }
    }
    // turn @names into links */
    //txt = txt.replace(/\@\w*/img, '<a target="_blank" href="http:\/\/twitter.com\/$&">$&</a>');
    /* if (tweetobj['created_at'] !== "") {
        txt = txt + "<br/>" + '<img class="tworiginated" src="' + path + 'application/images/bird_16_blue.png" alt="' + tweetid + '"><span style="color:#80848A;position:relative;top:2px;">' + tweetobj['created_at'] + " ago " + ' - ' + tweetobj['created_formatted'] + "</span>"
    }
    return txt; */
}

function addRows(json, key) {
    var length;
    //errorConsole("Records: " + json.length);
    //alert(json);
    if ((typeof(json) !== 'undefined') && (json.length !== null)) {
        length = json.length;
    }
    else {
        length = 0;
    }
	gridcomplete = false;
    for (i = 0; i < json.length; i++) {
        //("i length:" + json.length + ", i is:" + i);
        var txt = formatTweet(json[i].text, key, json[i], json[i].id_str);
        var uname = json[i].from_user;
        var name = json[i].from_user_name;
        var user;
		if (loggedIn()) {
			user = '<span class="userlink" style="color:#006699;font-weight:bold;">' + uname + "</span> <br />" + "<span class='userlink' style=\"color:#7777777;\">" + name + '</span>';
		} else {
			user = '<a href="http://twitter.com/#!/' + uname + '" alt="' + uname + '" target="_blank"><span style="color:#006699;font-weight:bold;">' + uname + "</a></span> <br />" + "<span style=\"color:#7777777;\">" + name + '</span>';
		}
        var userid = json[i].user_id;

        var ifollow = "";
        if (json[i].followers_count !== undefined) {
            var fers = json[i].followers_count;
            var fing = json[i].following_count;
            var fratio = fers / fing;
			var afollows = json[i].follows;
			if (afollows == 'true') {
				afollows = '<div style="font-size:.7em; color:green;">follows you</div>';
			} else {
				afollows = '';
			}
            var afollowingbool = json[i].following;
            if (afollowingbool == 'true') {
                ifollow = afollows + '<div class="buttoncontainer"><img class="following-button" src="' + path + 'application/images/img_trans.gif" alt="' + userid + '" /></div>';
            }
            else {
                ifollow = afollows + '<div class="buttoncontainer"><img class="follow-button" src="' + path + 'application/images/img_trans.gif" alt="' + userid + '" /></div>';
            }
            afollowing = '<iframe allowtransparency="true" frameborder="0" scrolling="no" src="http://platform.twitter.com/widgets/follow_button.html?show_count=false&screen_name=' + uname + '" style="width:300px; height:20px;"></iframe>';
            var createdat = json[i].acct_created_at;
            var crarray = createdat.split(", ");
            var crholder = crarray[0];
            for (i2 = 1; i2 < crarray.length; i2++) {
                crholder = crholder + "<br/>" + crarray[i2];
            }
            /*var klout = "";
            if (typeof (json[i].klout) == 'number') {
                klout = Math.round(json[i].klout);
            } else if (json[i].klout == null) {
				klout = 0;
			} else {
                klout = json[i].klout;
            }*/
			tscore = '<div class="tscore_ball bottom blue"><div class="mathdiv">' + Math.round(json[i].tscore) + '</div></div>'; //<span>TPower is a score unique to TweetSeeker that is calculated from a variety of Twitter account factors.  The higher the score, the more potentially influential that user is.  See the help page for more information.</span>
			
        }
        else {
            afollowing = "";
            fers = "";
            fing = "";
            fratio = "";
            json[i].statuses_count = "";
            crholder = '';
        }
		var myfirstrow;
		if (loggedIn()) {
			var uhtml = afollowing;
			rtsect = '';
			if (!isPeopleSearch) {
				var rtsect = '<div class="rtdiv"><ul class="rtlist">  <li class="reply" title="reply"><a id="' + json[i].id_str + '" class="replya" name="' + json[i].from_user + '" href="#"></a></li>  <li id="fav' + json[i].id_str + '" class="fav" title="favorite"><a href="#"></a></li> <li id="rt' + json[i].id_str + '" class="rt" title="retweet"><a href="#"></a></li></ul></div>';
			}
			ifollow = ifollow + rtsect;
			tagstring = (json[i].tags!== false) ? json[i].tags : '';
			tags = '<ul id="uli-' + json[i].id_str + '" alt="' + userid + '" class="mytags mytaghide ultags"></ul><input type="hidden" name="stuff" value="' + tagstring + '" />';
			myfirstrow = {
				user: '<img class=\'pimg userlink\' src=\"' + json[i].profile_image_url + '\" alt="' + userid + '" /><br />' + user,
				afollowing: afollowing,
				//klout: "<p class=\"klout\">" + klout + "</p>",
				followers: fers,
				tags: tags,
				following: fing,
				ifollow: ifollow,
				fratio: fratio,
				tscore: tscore,
				location: json[i].location,
				statuses: json[i].statuses_count,
				created: crholder,
				tweet: txt,
				News:Math.round(json[i].tscore)
			};
		} else {
			/*var show = [];
			show[0] = 'Sign in to Follow';
			show[1] = 'Sign in to see if they Follow you';
			show[2] = 'Sign in to search Tweets in a City';
			show[3] = 'Sign in to tag this user';
			show[4] = 'Sign in to search the Tweets of one user';
			show[5] = 'Sign in to search Tweets only in your language';
			show[6] = 'Sign in to search Tweets in a date range';
			show[7] = 'Sign in to save your search to use later';
			show[8] = 'Sign in to be a happy user';			
			show[9] = 'Sign in to Tweet your search results';		
			whichshow = Math.floor(Math.random() * 10);
			errorConsole('what: ' + whichshow); */
			myfirstrow = {
				user: '<a href="http://twitter.com/#!/' + uname + '" alt="' + uname + '" target="_blank"><img class=\'pimg\' src=\"' + json[i].profile_image_url + '\" alt="' + userid + '" /></a><br />' + user,
				/*tags : '<a href="' + path + '/twittersearch/signIntoTwitter"><span style="color:#006699;font-weight:bold;">' + show[whichshow] + '</span></a>',*/
				tweet: txt };
		}
        //console.log("adding:" + i);
		if (json.length == (i+1)) {
			gridcomplete = true;
			////enable
		}
		if (refreshing) {
			newarray[i] = myfirstrow;
		} else {
			jQuery("#list").addRowData(i, myfirstrow, 'first');
		}
    }
	if (newarray.length > 0) { 
		oldnew = jQuery("#list").data('new');
		if (typeof(oldnew) != 'undefined') {
			newarray = newarray.concat(oldnew);
		}
		newarray = newarray.slice(0,50);
		jQuery("#list").data('new',newarray);
		updateMessage(jQuery("#list").data('new').length + ' new Tweets <a href="#" onClick="addNewTweets()">here</a>');
		newarray = [];
	}
}

function addNewTweets() {
	newdata = jQuery("#list").data('new');
	document.body.style.cursor = 'wait';
	jQuery("#list").clearGridData();
	for (ii = 0; ii < newdata.length; ii++) {
		jQuery("#list").addRowData(ii, newdata[ii], 'first');
	}
	document.body.style.cursor = 'default';
	jQuery("#list").removeData('new','');
	updateMessage('Tweet data updated');
}

function setColModel() {
	
		//errorConsole("tweetlen: " + (lentweet * winwidth));
        return [{
            name: 'tweet',
            index: 'tweet',
            width: lentweet * winwidth,
            resizable: true
        },  {
            name: 'user',
            index: 'user',
            width: lenuser * winwidth,
            resizable: true,
            classes: 'centeredcell'
        }, {
            name: 'ifollow',
            index: 'ifollow',
            width: lenifo * winwidth,
            resizable: false,
            classes: 'centeredcell'
        }, {
            name: 'tags',
            index: 'tags',
            width: lentags * winwidth,
            resizable: true,
			hidden: false,
            classes: 'centeredcell tagtd'
        }, {
            name: 'tscore',
            index: 'tscore',
            width: lentscore * winwidth,
            resizable: false,
			sorttype: function (cell) {
                 val = removeHTML(cell);
				 if (val.length == 1) {
					 val = "0" + val;
				 }
				 return val;
				},
            classes: 'centeredcell'
        }, {
            name: 'location',
            index: 'location',
            width: lenlocation * winwidth,
            resizable: true
        }, {
            name: 'followers',
            index: 'followers',
            width: lenfollowers * winwidth,
            resizable: true,
            sorttype: 'int',
            align: "right",
            formatter: 'number',
            formatoptions: {
                thousandsSeparator: ",",
                decimalPlaces: 0
            }
        }, {
            name: 'following',
            index: 'following',
            width: lenfollowing * winwidth,
            resizable: true,
            sorttype: 'int',
            align: "right",
            formatter: 'number',
            formatoptions: {
                thousandsSeparator: ",",
                decimalPlaces: 0
            }
        }, {
            name: 'fratio',
            index: 'fratio',
            width: lenfratio * winwidth,
            resizable: true,
            sorttype: 'float',
            align: 'right',
            formatter: 'number',
            formatoptions: {
                thousandsSeparator: ",",
                defaultValue: '',
                decimalPlaces: 1
            }
        }, {
            name: 'statuses',
            index: 'statuses',
            width: lenstatuses * winwidth,
            resizable: true,
            sorttype: 'int',
            align: "right",
            formatter: 'number',
            formatoptions: {
                thousandsSeparator: ",",
                decimalPlaces: 0
            }
        }, {
            name: 'created',
            index: 'created',
            width: lencreated * winwidth,
            resizable: true,
			align: "right",
            sorttype: 'date'
		}];
}

function basicColModel() {
	
		//errorConsole("tweetlen: " + (lentweet * winwidth));
        return [
		{
            name: 'tweet',
            index: 'tweet',
            width: 0.8 * winwidth,
            resizable: true
        },{
            name: 'user',
            index: 'user',
            width: 0.2 * winwidth,
            resizable: true
		}];
}

function getGridWidth() {
	return window.innerWidth;
}
