var baseAppUrl= "";
var publicUrl=""
var amount;
var maxamountbuy;
var bought;
var amount_owned;
var sliderValue;
var sliderStepping;
var sliderMin;
var sliderMax;
var value;
var action;
var cash;
var ask;
var bid;
var isFacebook;
var isLoggedIn;
var lastPrice;
var max_scroll=5;
var dropDown=false;

(function() {
  var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
  po.src = 'https://apis.google.com/js/plusone.js';
  var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
})();

function resetPasswordStepOne(){
	var userEmail=$("#email").val();
	$.ajax({
		type : 'GET', 
		url: baseAppUrl + '/common/resetpassword?&userEmail=' + userEmail,
		dataType: 'json',
		success: function(response){
			if(response.success){
				$("#email").val("");
				$("html").click();
				showInfoMessage(response.message);			
			}else{
				showErrorMessage(response.error);
			}
		}
	});	
}

function setIsFacebook(value){
	if (value==true){
		baseAppUrl+='/fb';
	}else{
		baseAppUrl= "";
	}
	isFacebook=value;
}

function getIsFacebook(){
	return isFacebook;
}

// Google Analytics
var _gaq=[["_setAccount","UA-18044318-1"],["_trackPageview"]]; 
(function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];g.async=1;
g.src=("https:"==location.protocol?"//ssl":"//")+"google-analytics.com/ga.js";
s.parentNode.insertBefore(g,s)}(document,"script"));

function loadTopHeader(){
	$.ajax({
		type : 'GET', 
		url: baseAppUrl + '/common/loadHeader',
		dataType: 'json',
		success: function(data){
			$("#cash-balance").html('$'+$.format.number(data.balance, '###,###'));
			$("#notifications-count").html(data.feed_count?data.feed_count:0);
			if (data.feed_count>0){
				$("#notifications-box").addClass('active');
			}
		}
	});		
}

function loadFBTopHeader(){
	$.ajax({
		type : 'GET', 
		url: baseAppUrl + '/common/loadHeader',
		dataType: 'json',
		success: function(data){
			$("#cash-balance").html('$'+$.format.number(data.balance, '###,###'));
			$("#notifications-count").html(data.feed_count?data.feed_count:0);
			$("#today_gain").html($.format.number(data.today_gain, '###.00') + '%');
			if(data.today_gain<0){
				$("#today_gain").removeClass('positive');
				$("#today_gain").addClass('negative');
			}
			if (data.feed_count>0){
				$("#notifications-box").removeClass('hidden');
			}
		}
	});
}

function loadRssNews(){
	$.ajax({
		type : 'GET', 
		url: baseAppUrl + '/common/rssnews',
		dataType: 'html',
		success: function(data){
			$("#news-top-bar").html(data);	
			$("#news_rss").newsticker(5000);
		}
	});	
}


function initCommunityWall(){
	$('.highlightIndicator').tipsy({gravity:'s'});
	$("div.wholikes img.user-pic").tipsy({gravity:'s'});
	$("#new_post_content").autoGrow();
	
    $(window).scroll(function() {
        if ($('body').height() <= ($(window).height() + $(window).scrollTop())) {
	        if (max_scroll>0){
				$("#load-more-wallposts").click();
		        max_scroll--;
	        }
        }
    });
}
function loadTrendingBar(){
	$.ajax({
		type : 'GET', 
		url: baseAppUrl + '/common/trendingBar',
		dataType: 'html',
		success: function(data){
			$("#contentbody").html(data);	
			$("#trends-ticker").newsticker(5000);
		}
	});	
}

function initTradebox() {
	if( $('#value-ask').val() == 1 ){
		if(action=="BUY"){
			value = 0;
		}else{
			value = amount;
			$('#amount').val(amount);
		}
	}else{
		if(action=="SHORT"){
			value=0;
		}else{
			value = amount;
			$('#amount').val(amount);
		}
	}
	
	$('#limit_price_row').hide();
	$('#days_valid_row').hide();

	$('#Limit').click(function() {
		$('#optionBUY').show();
		$('#optionSHORT').show();
		$('#askorbid').hide(); 
		$('#limit_price_row').show();
		$('#days_valid_row').show();
		$('#amount').val(0);
		$('#total').val(0);
		$('#price').val(lastPrice);
		$("#slider").slider("option", "value", 0);
		$('#askorbid').val(lastPrice);
		$("#askorbidtext").html("Limit Price");
	});
	
	$('#STOPMARKET').click(function() {
		var action = $('.trade-actions').val();
		if(action=="BUY"){
			$('.trade-actions').val('SELL');
				setAskOrBid();
				updatePrice();
		}else{
			if(action=="SHORT"){
				$('.trade-actions').val('COVER');
				setAskOrBid();
				updatePrice();
			}
		}
		$('#optionBUY').hide();
		$('#optionSHORT').hide();
		$('#askorbid').hide(); 
		$('#limit_price_row').show();
		$('#days_valid_row').hide();
		$('#amount').val(amount);
		updatePrice();
		setLimitPrice();
		$('#total').val(0);
		if(action=="SELL"){			
			$('#price').val(bid);
			$('#askorbid').val(bid);
		}else if(action=="COVER"){
			$('#price').val(ask);
			$('#askorbid').val(ask);
		}
		$("#slider").slider("option", "value", amount);
		$("#askorbidtext").html("Stop Price");
	});

	$('#Market').click(function() {
		$('#optionBUY').show();
		$('#optionSHORT').show();
		$('#askorbid').show(); 
		$('#limit_price_row').hide();
		$('#days_valid_row').hide();
		$('#amount').val(0);
		$('#total').val(0);
		$("#slider").slider("option", "value", 0);
		setAskOrBid();
	});
	
	$("#slider").slider({
		step : sliderStepping,
		value : value,
		min : sliderMin,
		max : sliderMax,
		start : [ sliderValue ],
		slide : function(e, ui) {
			$('#amount').val(ui.value);
			updatePrice();
			updateGain(bought);
			removeInvalid();
		}
	});

	if ($('#value-ask').val() == 1) {
		$('#value_ask_bid').html($('#ask').val());
	} else {
		$('#value_ask_bid').html($('#bid').val());
	}

	if (getUserSetting('POST_FACEBOOK')) {
		$("#postTradeOnFacebook").attr("checked", "checked");
	} else {
		$("#postTradeOnFacebook").removeAttr("checked");
	}

	$('.primary').click(function() {
		$('#tradeBoxContainer').fadeOut();
		$('#tradeBoxContainer').overlay().close();
	});

	$('#closeTradeBox').click(function() {
		$('#tradeBoxContainer').fadeOut();
		$('#tradeBoxContainer').overlay().close();
	});
	$('#tradeShare img').tipsy({gravity:'s'});
	
	$('#amount').keyup(function () { 
		var reg = /[^\d^]/g;
		checkField($('#amount'),reg);
	});

	$('#total').keyup(function () { 
		var reg = /[^\d^\.]/g;
		checkField($('#total'),reg);
	});

	$('#limit_days').keyup(function () { 
		var reg = /[^\d^]/g;
		checkField($('#limit_days'),reg);
	});

	$('#price').keyup(function () { 
		var reg = /[^\d^\.]/g;
		checkField($('#price'),reg);
		if ($('#STOPMARKET').is(':checked')){
			validateStop();
		}
		updatePrice();
		setLimitPrice();
	});
}

function setAskOrBid(){
	var action = $('.trade-actions').val();
	if($('#Limit').is(':checked') || $('#STOPMARKET').is(':checked')){
		var price = $('#price').val();
		$('#askorbid').val(price);
		$("#askorbidtext").html("Limit Price");
		if(action=="BUY" || action=="COVER"){
			if(action=="COVER"){
				$('#STOPMARKET').attr("disabled", false); 
			} else{
				$('#STOPMARKET').attr("disabled", true); 
			}
			$('#value-ask').val('1');
			$('#value-bid').val('0');
		}else{
			if(action=="SHORT"){
				$('#STOPMARKET').attr("disabled", true); 
			} else{
				$('#STOPMARKET').attr("disabled", false); 
			}
			$('#value-ask').val('0');
			$('#value-bid').val('1');
		}
	}else{
		if(action=="BUY" || action=="COVER"){
			
			if(action=="COVER"){
				$('#STOPMARKET').attr("disabled", false); 
			} else{
				$('#STOPMARKET').attr("disabled", true); 
			}
				
			$('#askorbid').val(ask);
			$("#askorbidtext").html("Ask");
			$('#value-ask').val('1');
			$('#value-bid').val('0');
		}else{
			if(action=="SHORT"){
				$('#STOPMARKET').attr("disabled", true); 
			} else{
				$('#STOPMARKET').attr("disabled", false); 
			}
			if (bid!=null){
				$('#askorbid').val(bid);
			}else{
				$('#askorbid').val('No price');
			}
			$("#askorbidtext").html("Bid");
			$('#value-ask').val('0');
			$('#value-bid').val('1');
		}
	}
	amount = getAmount(cash,amount_owned);
	$( "#slider" ).slider( "option", "max", (amount<=maxamountbuy?amount:maxamountbuy));
	$( "#slider" ).slider( "option", "value", 0 );
}

function setLimitPrice(){
	amount = getAmount(cash,amount_owned);
	$( "#slider" ).slider( "option", "max", amount);

	var price = $('#price').val();
	$('#askorbid').val(price);
}

function isValid(){
	var amount = validNumber($('#amount'));
	var total = validNumber($('#total'));
	if ($('#Limit').is(':checked')){
		var limit_days = validNumber($('#limit_days'));
		var price = validNumber($('#price'));
		var limitValid=validateLimit();
		return (limitValid && amount && total && limit_days && price);
	}else if ($('#STOPMARKET').is(':checked')){
		var price = validNumber($('#price'));
		var stopValid = validateStop();
		return (amount && total && price && stopValid);
	}else{
		return (amount && total);
	}
}

function validateStop(){
	var action = $('.trade-actions').val();
	var val = parseFloat($("#price").val());
	if(action=="SELL"){
		if(val>bid){
			$("#price").addClass('invalid');
			return false;
		}
	}else if(action=="COVER"){
		if(val<ask){
			$("#price").addClass('invalid');
			return false;
		}
	}
	return true;
}

function validateLimit(){
	return true;
}



function validNumber(element){
	valid=false;
	var num = Number(element.val().replace(/,/g,''));
	if (num>0){
		valid=true;
		element.removeClass('invalid');
	}else{
		element.addClass('invalid');
	}
	return valid;
}

$('#amount').click(function() {
	removeInvalid();
});

$('#total').click(function() {
	removeInvalid();
});

function removeInvalid(){
	$('#total').removeClass('invalid');
	$('#amount').removeClass('invalid');
}

function testForm(){	
	$("#tradebtn").click('').attr('onclick','');
	$('#tradebtn').removeClass('success');
	$('#tradebtn').addClass('disabled');
	if (isValid()){
		$.ajax({
			type:'POST', 
			data:$("#tradeForm").serialize(), 
			url: baseAppUrl + '/portfolio/doTrade',
			beforeSend: function(){
				if(!beforeTradeActions())
					return false;// invalid form data
			}, 
			error:function(data, textStatus, errorThrown){
				showErrorMessage("<p><strong>Error!</strong> " + message("operations.postTrade.error") + "</p>");
			},
			success:function(data,textStatus){
				$('#portfolioContainer').html(data);
				showSuccessMessage("<p><strong> " + message("operations.postTrade.success") + "</strong></p>");
				afterTradeActions();
			},
			complete:function(){
				$('#tradeBoxContainer').overlay().close();
			}
		});	
	}else{
		$("#tradebtn").click('').attr('onclick','testForm()');
		$('#tradebtn').removeClass('disabled');
		$('#tradebtn').addClass('success');
	}
}



function checkField(element,reg){
	element.val(element.val().replace(reg,''));
    if (element.val()==''){
    	element.addClass('invalid');
	}else{
		element.removeClass('invalid');
	}
}

function beforeTradeActions(){
	return ($("#amount").val()>0);
	
}

function isLogged(){
	return isLoggedIn;
}


function setIsLogged(value){
	isLoggedIn = value;
}

$(document).ready(function(){
	setTooltip();	
});

function initHeader(){
	$("#user-active a").click(function(){
		if($("ul.menu-dropdown").css('display') == 'block'){
			$("ul.menu-dropdown").slideUp(500,function(){
				dropDown=false;
			});
		}else{
			$("ul.menu-dropdown").slideDown(500,function(){
				dropDown=true;
			});
		}
	});
	
	$(".btn_find").click(function (e) {
		findSymbol();
	});
	loadTrendingBar();
	if (!isFacebook){
		loadRssNews();
	}
}

$(function(){
	var top = isFacebook?350:'50%';
	$('#tradeBoxContainer').overlay({
		onBeforeLoad: function() {
	          this.getOverlay().appendTo('body');
	    },
		mask: {			
			color: '#000000'								
		},
		fixed: false,
		closeOnClick: false,
		load: false,
		left:'50%',
		top:top
	});
});

function calculateTop(){
	if (isFacebook){
		FB.Canvas.getPageInfo(
			function(info) {
				var height = info.clientHeight;
				var scroll = info.scrollTop;
				setTop(height,scroll);
			}
		);
	}else{
		var height = $(window).height();
		var scroll = $(window).scrollTop();
		setTop(height,scroll);
	}
}

function setTop(height,scroll){
	var top;
	var tradeboxheight = $('#tradeBoxContainer').height();
	var min_top= (tradeboxheight/2)+100;
	top = (height/2) + scroll -(isFacebook?150:0);
	top = (top<min_top)?min_top:top;
	$('#tradeBoxContainer').animate({
	    top: top
	}, 300);
}


$('.tooltip_content').css('-webkit-border-radius', '10px');	
if (self !=  parent){
	$("a.symbol").bind({
		mousemove : changeTooltipPosition	
	});
}

function openresetModalDialog(title, message){
	$.ajax({
		type : 'POST', 
		url: baseAppUrl + '/common/renderresetModalDialog',
		data: 'title=' + title + "&message=" + message,
		dataType: 'html',
		success: function(data){
			$("body").append("<div class='modalMessage'>" + data + "</div>");	
		}
	});		
}

function relativizeDates(){
	$('.relativize-date').relativeDate();
	$('.relativize-date').removeClass("relativize-date");
}

function stocksPile(message){
	return "<div>" + message.replace(/[^\s\r\n]?\$(\.?([a-zA-Z])+(\.[a-zA-Z])?)/g, function(group1, group2){         	
    	return ("<div><img class='small_icon' src='http://static.tradefields.com/symbols/icon/" + group2.toUpperCase() + ".ico' align='absmiddle' alt=''/>" +
		"<a class='symbol' onMouseOver='loadingGraphic(\"" + group2.toUpperCase() + "\")' href='" + baseAppUrl + "/quotes/" + group2.toUpperCase() + "'>" + group2.toUpperCase() + "</a><img src='http://www.google.com/finance/chart?cht=s&q=" + group2.toUpperCase() + "&tlf=12h&p=1${type}'alt='' /></div>");
    }) + "</div>";	
}

function taggify(message, dollar, hash, at, link){
	if(link){
		message = linkify(message);
	}
	if(dollar){
        message = message.replace(/(^|\s|<br>)\$(\.?([a-zA-Z])+(\.[a-zA-Z])?)/g, function(s, group1, group2, group3){         	
        	return group1 + "<span class=\"symbol\"" + "onMouseOver='loadingGraphic(\"" + group2.toUpperCase() + "\");'" + "><a href='" + baseAppUrl + "/quotes/" + group2.toUpperCase() + "\'><img src='http://static.tradefields.com/symbols/icon/" + group2.toUpperCase() + ".ico' alt=''/></a>"+
        	"<a href='" + baseAppUrl + "/quotes/" + group2.toUpperCase() + "'>" + group2.toUpperCase() + "</a></span>"
        });		  
	}
	 if(hash){
		 message = message.replace(/(^|\s)#(\w+)/g, "$1#<a href=baseAppUrl + '/topic/$2'>$2</a>");
	 }
	 if(at){
		 message = message.replace(/(^|\s)@(\w+)/g, "$1@<a href=baseAppUrl + '/user/$2'>$2</a>");
	 }
	return message;
}

 function linkify(text){
    if (text) {
        text = text.replace(
            /(((https?:\/\/)|(www.))([\w\d\-]+)\.[\w\d.\-?#&$!=\/]+)/gi,
            function(url){
                var full_url = url;
                if (!full_url.match('^https?:\/\/')) {
                    full_url = 'http://' + full_url;
                }
                return '<a target="_blank" href="' + full_url + '">' + url + '</a>';
            }
        );
    }
    return text;
}
 
function getUserSetting(settingName){
	var userSettings=getUserSettings();
	for(var a=0;a<userSettings.length;a++){
		if(userSettings[a].setting_name==settingName){
			return (userSettings[a].value=='true');
		}
	}
	return false;
}

function getUserSettings(){
	var settings = null;
	$.ajax({
		type : 'POST', 
		url: baseAppUrl + '/profile/getUserSettings',
		dataType: 'json',
		async: false,
		success: function(data){
			settings = data.settings;	
		}
	});	
	return settings;
}

function loadingPopover(){
	$("#popoverLoading").fadeIn();
}

function loadingGraphic(symbol){
	loadingPopover();
	$.ajax({
		type:'POST',
		data:'symbol=' + symbol, 
		url: baseAppUrl + '/common/stockPopover',
		success:function(data,textStatus){
			$('#popoverContent').html(data);
			$("#popoverLoading").fadeOut();
		}
	});		 			 	
}	 	

function loadingModal(div){
	$('#'+div).empty().html('<img style="margin-top:5px; padding-left:45%" alt="" align="center" src=' + publicUrl + '"/img/indicator.gif"/>');
}

function loading(div){
	$('#'+div).empty().html('<img style="margin-top:5px; padding-left:45%" alt="" align="center" src="' + publicUrl+ '/img/indicator.gif"/>');
}

function renderModalMessage(title, message){
	$.ajax({
		type:'POST',
		data:'title='+title + '&message='+message, 
		url: baseAppUrl + '/common/renderModalDialog',
		success:function(data){			
			$("#messagesBox").append(data);
		}
	});
}

function showAndHide(element,effect){
	if(isFacebook){		
		$(element).show(effect).delay(8000).hide(effect);
	}else{
		$(element).fadeIn(1000).delay(8000).fadeOut(1000);
	}
}

function showSuccessMessage(message){	
	if(message==$("#messageSuccessContent").html()){
		if($("#messageSuccess").css('display')=='none'){
			$("#messageSuccessContent").html(message);
			showAndHide("#messageSuccess","blind");
		}
	}else{
		$("#messageSuccessContent").html(message);
		showAndHide("#messageSuccess","blind");
	}
	
}

function showErrorMessage(message){
	if(message==$("#messageErrorContent").html()){
		if($("#messageError").css('display')=='none'){
			$("#messageErrorContent").html(message);
			showAndHide("#messageError","blind");
		}
	}else{
		$("#messageErrorContent").html(message);
		showAndHide("#messageError","blind");
	}
}

function showInfoMessage(message){
	if(message==$("#messageInfoContent").html()){
		if($("#messageInfo").css('display')=='none'){
			$("#messageInfoContent").html(message);
			showAndHide("#messageInfo","blind");
		}
	}else{
		$("#messageInfoContent").html(message);
		showAndHide("#messageInfo","blind");
	}
}

function setTooltip(){
	$(".symbol").tooltip({
		offset:[10,80],		
		tip:'#tooltip',
		predelay: 500,
		effect: 'slide',
	}).dynamic({ 
		classNames: 'above right below left',
		top: { 
			direction: 'up', 
			bounce: true 
		},			
		left: { 
			direction: 'down', 
			offset:[100,0], 
			bounce: true 
		}, 
		bottom: { 
			direction: 'down',
			bounce: true 
		} 
	});	
	$(".symbol").removeClass('symbol');
}

function setTooltip2(){
	$(".symbol").popover({placement:'above', fallback:'Popover Title'});
}

function changeTooltipPosition(event) {	
	var tooltipX = event.pageX ;	
	if (tooltipX +  parseInt($('#tooltip').css('width')) > $(window).width())	
		tooltipX = $(window).width() - parseInt($('#tooltip').css('width'));
	$('#tooltip').css({left: tooltipX});	
};

function findSymbol(){
	var symbol = $('#searchbox').val();
	if(symbol!=""){
		$.ajax({
	    	type:'POST',
	    	data:'symbol='+symbol,
	    	url:baseAppUrl +'/stock/exists',
	    	dataType:'json',
	    	success:function(data, textStatus){
		    	if(data.exists){		    		
					location.href = baseAppUrl+ "/quotes/" + symbol;
			    }else{
			    	$("#searchbox").addClass("invalid");
				} 	
		    }
		});
	}
}

function renderTradeBox(symbol,type){
	$.ajax({
		type:'POST',
		data:'symbol='+symbol + '&type='+type, 
		url: baseAppUrl + '/portfolio/renderTradeBox',
		success:function(data,textStatus){
			$('#tradeBoxContainer').html(data);
			$("#tradeBoxContainer").overlay().load();
			$('#tradebtn').removeClass('disabled');
			$('#tradebtn').addClass('success');
			$("#tradebtn").click('').attr('onclick','testForm()');
			calculateTop(data);
		}
	});
}

function showTradeBox(symbol,type){	
	$.ajax({
	   	type:'POST',
	   	data:'symbol='+symbol,
	   	url:'/stock/exists',
	   	dataType:'json',
	   	success:function(data, textStatus){
	    	if(data.exists){
			 	if(type){
			 		renderTradeBox(symbol,type);
				}else{
					renderTradeBox(symbol,'BUY');
				}
		    }else{
		    	$("#searchbox").addClass("invalid");
			} 	
	    }
	});	
}

function showGain(column, type){
	if (column==1){
		$('#percentColumn').hide();
		$('#dollarColumn').show();
		$("#" + type + '-positions' + ' .percent').hide();
		$("#" + type + '-positions' + ' .dollar').show();
	}else if(column==2){
		$('#dollarColumn').hide();
		$('#percentColumn').show();
		$("#" + type + '-positions' + ' .dollar').hide();
		$("#" + type + '-positions' + ' .percent').show();
	}
}

$('#close').click(
	function(){
		$('#error').effect('blind');
		$('#error').overlay().close();
	}
);

function shortenize(){
	$('.stream-text').each(function(){
		var height = $(this).height();
		if (height>54){
			$(this).height(54);
			$(this).parent().children('.showmore').html("<a class='pointer' onclick='showMore($(this))'>Show more</a>");
		}
	});
}

function shortenizeNotif(){
	$('.stream-text').each(function(){
		var height = $(this).height();
		if (height>54){
			$(this).parent().height(54);			
		}
	});
}

function seachUsers(){
	var text = $('#search_user').val();
	if (text!=""){
		$.ajax({
	    	type:'GET',
	    	data:'text='+text,
	    	url:baseAppUrl + '/common/searchUser',
	    	success:function(data){
		    	$('#searchBox').html(data);
		    	showUsers();
		    }
	    });		  
	}
}

function showUsers(){
	var height = $("#search_user").offset().top;
	$('#searchModalDialog').overlay({		
		mask: {			
			color: '#000000'								
		},
		fixed: true,
		closeOnClick: false,
		load: false,
		left: '50%',
		top: (isFacebook?height:'50%')
	});
	$('#searchModalDialog').overlay().load();
}

$('#search_user').keyup(function(event) {
    if (event.keyCode == '13') {            
    	seachUsers();
    }
});
function showMore(element){
	element.parent().parent().children(".stream-text").height("");
	element.parent().html('');
}

function resetAccount(){
	$.ajax({
    	type:'GET',
    	url:baseAppUrl + '/portfolio/resetAccount',
    	complete:function(data){
    		completeResetAccount();
	    }
    });		  
}

function completeResetAccount(){
	$('#resetModalDialog').overlay().close();
	location.reload(true);
}

function showModal(){
	var height = $("#account_table").offset().top+350;
	$('#resetModalDialog').overlay({		
		mask: {			
			color: '#000000'								
		},
		fixed: true,
		closeOnClick: false,
		load: false,
		left: '50%',
		top: (isFacebook?height:'50%')
	});
	$('#resetModalDialog').overlay().load();
}

function stopPropagation(element){
	$(element).bind('click',function(e){
		e.stopPropagation();
	});
}

function changeRss(){
	var item=$('#rsslist option:selected').val();
	loading('newstable');
	$.ajax({
		type:'GET',
		data:'item='+item,
		url:baseAppUrl + '/common/tablenews',
		dataType: "text/html",
		complete:function(data){
			$('#newstable').html(data.responseText);
			fadeIningItems($("#newstable td"));
	    }
	});		  
}

function fadeIningItems(items){
	items.each(function(index) {
	    $(this).delay(400*index).fadeIn(300);
	});
}

function loadIndexWatchlistSidebar(){
	$.ajax({
		type:'GET',
		url:baseAppUrl + '/watch/watchlists',
		complete:function(data){
			$('#watchlistContainer').html(data.responseText);
	    }
	});		
}

function loadIndexInviteSidebar(){
	$.ajax({
		type:'GET',
		url:baseAppUrl + '/sidebar/inviteFriendsSidebar',
		complete:function(data){
			$('#inviteFriendsSidebar').html(data.responseText);
			$("#inviteFriendsSidebar img.user-pic").tipsy({gravity:'s'});
	    }
	});		
}

function loadPressSidebar(){
	$.ajax({
		type:'GET',
		url:baseAppUrl + '/sidebar/press',
		success:function(data){
			$('#sidebarContainer').html(data);
	    }
	});		
}

function initSettings(){
	$.ajax({
    	type:'GET',
    	url:baseAppUrl + '/sidebar/settingsSidebar',
    	dataType: 'html',
    	success:function(data){
	    	$('#sidebarContainer').html(data);
	    }
    });	
}


jQuery.fn.autoGrow = function(){
	return this.each(function(){
		// Variables
		var colsDefault = this.cols;
		var rowsDefault = this.rows;
		
		//Functions
		var grow = function() {
			growByRef(this);
		}
		
		var growByRef = function(obj) {
			var linesCount = 0;
			var lines = obj.value.split('\n');
			
			for (var i=lines.length-1; i>=0; --i)
			{
				linesCount += Math.floor((lines[i].length / colsDefault) + 1);
			}

			if (linesCount >= rowsDefault)
				obj.rows = linesCount + 1;
			else
				obj.rows = rowsDefault;
		}
		
		var characterWidth = function (obj){
			var characterWidth = 0;
			var temp1 = 0;
			var temp2 = 0;
			var tempCols = obj.cols;
			
			obj.cols = 1;
			temp1 = obj.offsetWidth;
			obj.cols = 2;
			temp2 = obj.offsetWidth;
			characterWidth = temp2 - temp1;
			obj.cols = tempCols;
			
			return characterWidth;
		}
		
		// Manipulations
		this.style.width = "auto";
		this.style.height = "auto";
		this.style.overflow = "auto";
		this.style.width = ((characterWidth(this) * this.cols) + 6) + "px";
		this.onkeyup = grow;
		this.onfocus = grow;
		this.onblur = grow;
		growByRef(this);
	});
};

var debounce=function(func, threshold, execAsap) {
    var timeout;
    return function debounced () {
        var obj = this, args = arguments;
        function delayed () {
            if (!execAsap)
                func.apply(obj, args);
            timeout = null; 
        };
        if (timeout)
            clearTimeout(timeout);
        else if (execAsap)
            func.apply(obj, args);
        timeout = setTimeout(delayed, threshold || 100); 
    }; 
};


function createCookie(name,value,days) {
    if (days) {
        var date = new Date();
        date.setTime(date.getTime()+(days*24*60*60*1000));
        var expires = "; expires="+date.toGMTString();
    }
    else var expires = "";
    document.cookie = name+"="+value+expires+"; path=/";
}


function readCookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1,c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
    }
    return null;
}

function eraseCookie(name) {
    createCookie(name,"",-1);
}


function checkSwitchUser(actualUserId,appName){
	var lastUserId = readCookie('lastUserId');
	if (actualUserId!=lastUserId){
		window.top.location.href='http://apps.facebook.com/'+appName;
		createCookie('lastUserId',actualUserId,1);
	}
}

function changePassword(){
	var password=$("#currentPassword").val();
	var newPassword=$("#newPassword").val();
	$.ajax({
    	type:'POST',
    	data:'password='+password + '&new_password='+newPassword,
    	url:baseAppUrl +'/common/changePassword',
    	dataType:'html',
    	success:function(data){	   
    		showSuccessMessage("Your password has been changed successfully");
    		$("#currentPassword").val("");
    		$("#newPassword").val("");
	    },
	    error:function(data){
	    	if(data.status=400){	    		
	    		showErrorMessage("<p><strong>Error!</strong> " + "Invalid password" + "</p>");
	    	}else{
	    		showErrorMessage("<p><strong>Error!</strong> " + "There was a problem changing your password. Please try again later" + "</p>");
	    	}
	    }
	});
}

$.ajaxSetup({
	statusCode: {
	    403: function(data) {
	    	var res = jQuery.parseJSON(data.responseText);
    		window.top.location.href=res.url;
	    }
	  }
});

function showDialog(data){
	var modal = $(data);
	$(modal).overlay({
		mask: {			
			color: '#000000'								
		},
		fixed: false,
		closeOnClick: false,
		load: false,
		left:'50%',
		top:0
	});
	$(modal).overlay().load();
	calculateModalTop(modal);
}

function calculateModalTop(modal){
	if (isFacebook){
		FB.Canvas.getPageInfo(
			function(info) {
				var height = info.clientHeight;
				var scroll = info.scrollTop;
				setModalTop(height,scroll,modal);
			}
		);
	}else{
		var height = $(window).height();
		var scroll = $(window).scrollTop();
		setModalTop(height,scroll,modal);
	}
}

function setModalTop(height,scroll,modal){
	var top;
	var tradeboxheight = $(modal).height();
	var min_top= (tradeboxheight/2)+100;
	top = (height/2) + scroll -(isFacebook?150:0);
	top = (top<min_top)?min_top:top;
	modal.css('top',top);
	$('body').append(modal);
}

function addAlert(modal){
	var symbol = modal.find('#symbol').text();
	var threshold = modal.find('#threshold').val();
	var type=modal.find('#type option:selected').text();//REVISARRRR
	var comparer=modal.find('#comparer option:selected').val();
	if (threshold && IsNumeric(threshold)){
		$.ajax({
			type : 'POST',
			data: 'symbol='+symbol+'&threshold='+threshold+'&type='+type+'&comparer='+comparer,
			url: baseAppUrl + '/common/addAlert',
			success: function(data){
				showSuccessMessage("<p><strong> " + 'Alert added successfully' + "</strong></p>");
				modal.remove();
			},error:function(data){
				showErrorMessage("<p><strong>Error!</strong> " + "We could not add the alert" + "</p>");
			}
		});	
	}else{
		showErrorMessage("<p><strong>Error!</strong> " + "This field must be a number" + "</p>");
	}
}


function showResetPasswordTemplate(){
	$.ajax({
		type:'GET',
		url:baseAppUrl + '/portfolio/resetAccountTemplate',
		success:function(data){
			showDialog(data);
	    }
	});		
}

function showAddAlertTemplate(symbol){
	$.ajax({
		type:'GET',
		data:'symbol='+symbol,
		url:baseAppUrl + '/common/addAlertTemplate',
		success:function(data){
			showDialog(data);
	    }
	});		
}

function IsNumeric(input) {
    return /^-?(0|[1-9]\d*|(?=\.))(\.\d+)?$/.test(input);
}

function loadHelpSidebar(){
	$.ajax({
		type:'GET',
		url:baseAppUrl + '/sidebar/helpSidebar',
		success:function(data){
			$('#sidebarContainer').html(data);
	    }
	});		
}

function loadMediaSidebar(){
	$.ajax({
		type:'GET',
		url:baseAppUrl + '/sidebar/mediaSidebar',
		success:function(data){
			$('#sidebarContainer').html(data);
	    }
	});		
}

function loadAboutSidebar(){
	$.ajax({
		type:'GET',
		url:baseAppUrl + '/sidebar/guestSidebar',
		success:function(data){
			$('#sidebarContainer').html(data);
	    }
	});		
}

