//var deepred = '#C11B17';
var deepred = '#F75D59';
var lightred = '#F75D59';
//var lightgreen = '#6AFB92';
var lightgreen = '#41A317';
var deepgreen = '#41A317';
var i=0;
var quoteiframe;
var clientId;
var k=1;
var isQuotesPresent;
var isQuotesActive;
var secs=0;
function onClientLoad(){
	if(quoteiframe && quote_init_param){
		handshake.init();
	}
}
var handshake={
	init : function(){
		var param={
				action:'HANDSHAKE',
				cache_wrkarnd:new Date().getMilliseconds()
		};
		quoteiframe.contentWindow.quoteapp.ajaxRequest('/quote-app/poll',param,'POST',handshake.success,handshake.failure);
	},
	success : function(response){
		try{
			var json = eval(response.responseText);
			clientId=json.clientId;
			message('Invoking Subscribe....');
			if(quote_init_param){
				for ( var item in quote_init_param) {
					if(item.itemNames !=''){
						var param=quote_init_param[item];
						param.cache_wrkarnd=new Date().getMilliseconds();
						subscribe.init(param);
					}
				}
				connect.init();
			}	
		}catch(err){
			message('Reconnect on handshake Failure....');
			setTimeout('handshake.init()',5000);
		}
	},
	failure : function(){
		window.parent.message('Something went wrong in handshake...Re');
		setTimeout('handshake.init()',3000);
	}
};

//TODO The failure case needs to be addressed properly. separate Call backs are required that needs to be passed from handshake.
var subscribe={
	init : function(param){
		param.clientId=clientId;
		quoteiframe.contentWindow.quoteapp.ajaxRequest('/quote-app/poll',param,'POST',subscribe.success,subscribe.failure);
	},
	success : function(resp){
		try{
			var json = eval(resp.responseText);
			message(json.subscribed);
		}catch(err){
			message('Reconnect on Subscribe Failure....');
			setTimeout('handshake.init()',5000);
		}
	},
	failure : function(){
		window.parent.message('Something went wrong...');
		setTimeout('handshake.init()',3000);
	}
};
var connect={
	init : function(){
		var param={
			action:'CONNECT',
			cache_wrkarnd:new Date().getMilliseconds(),
			clientId : clientId
		};
		quoteiframe.contentWindow.quoteapp.ajaxRequest('/quote-app/poll',param,'POST',connect.success,connect.failure);
	},
	success : function(resp){
		var raw=resp.responseText;
		try{
			message(raw);
			var json = eval(raw);
			grid.update(json);
			connect.init();
		}catch(err){
			if(raw == 'resubscribe'){
				handshake.success('({"clientId":"'+clientId+'"})');
			}else{
				window.parent.message('Reconnect on Connect Failure....'+err);
				setTimeout('connect.init()',5000);
			}
		}
	},
	failure : function(){
		message('Something went wrong...');
		setTimeout('connect.init()',3000);
	}
};

var grid={
	update:function(json){
		k=1;			
		for(var i =0; i< json.length;i++){
			var item=json[i];
			var tableName=item.table_name;
			if(tableName == 'home-mcx-quote'){
				grid.updateHomeMCXQuote(item);
			}else if(tableName == 'account-ew-quote'){
				grid.updateMyAccountEwQuote(item);
			}
			
		}
	},
	updateHomeMCXQuote:function(item){
		var alias=item.item_name;
		var itemName=alias.substring(0,alias.indexOf('.'));
		var data=item.content;
		for ( var prop in data) {
			var val = data[prop];
			var td = document.getElementById('td-' + itemName + '-' + prop);
			if (td) { 
				try{ 
				td.innerHTML = val;
//				message(td.id);
				}catch(err){
//					message(err);
				}
			}
		}
		document.getElementById('td-' + itemName + '-pct_change').style.color = getColor(data.pct_change);
	},
	updateMyAccountEwQuote:function(item){
		var alias=item.item_name;		
		var data=item.content;
		for ( var prop in data) {
			var val = data[prop];
			if(alias=="quotesActivated"){
				isQuotesActive=data[prop];							
			}
			if(alias=="checkQuotes"){
				isQuotesPresent=data[prop];
				if(document.getElementById("ewQuotes")!=null && document.getElementById("noStreaming")!=null){
					if(isQuotesActive=="false"){
						secs=0;						
						document.getElementById("ewQuotes").style.display="none";
						document.getElementById("noStreaming").style.display="block";
						document.getElementById("noStreaming").innerHTML="Edelweiss Quotes are currently deactivated";
					}else if(isQuotesActive=="true" && isQuotesPresent=="false"){
						secs++;						
						document.getElementById("ewQuotes").style.display="none";
						document.getElementById("noStreaming").style.display="block";
						document.getElementById("noStreaming").innerHTML="Edelweiss Quotes are currently unavailable";
					}else{
						secs=0;					
						document.getElementById("ewQuotes").style.display="block";
						document.getElementById("noStreaming").style.display="none";
					}
					if(document.getElementById("stoppedstreaming-counter")!=null){
						document.getElementById("stoppedstreaming-counter").innerHTML="Time elapsed since last update : <font color=red>"+secs+" seconds</font>";					
					}
				}
			}
			
			var td = document.getElementById('td-' + alias + '-' + prop);	
			if (td) {
				var prevTickprice = td.innerHTML;
				if(val > prevTickprice)
				{
					td.style.color = '#41A317'
				}else if(val < prevTickprice)
				{
					td.style.color = '#F75D59'
				}
				td.innerHTML = val;
			}else{				
				var tds = document.getElementsByTagName("td");							
				if(tds){
					for(var i=0;i<tds.length;i++){					
						if(tds[i].getAttribute("name") == 'td-' + alias + '-' + prop){						
							var cs = Number(document.getElementById('cs'+k).innerHTML);							
							var os = Number(document.getElementById('os'+k).innerHTML);							
							var inrChange = Number(document.getElementById('ic'+k).innerHTML);	
							var eq = Math.ceil(((Math.round((os-cs)*100)/100) * inrChange ) + Number(val));
							tds[i].innerHTML = eq;
							k++;
						}						
					}
				}
			}
		}
	}
};

function message(msg){
//	var div=document.getElementById('msg');
//	if(div){
//		div.innerHTML += msg+'<br/>';
//	}
}
function initQuoteSubscription__(quoteServerUrl,domain){ 
	 document.domain=domain;
	 quoteiframe=document.getElementById('quote-subscription-iframe');
	 if(quoteiframe){
		 quoteiframe.src=quoteServerUrl + getRandomParam();
	 }
}
function initQuoteSubscription(quoteServerUrl,domain){
	quoteiframe=document.getElementById('quote-subscription-iframe-poll');
	 if(quoteiframe){
		 quoteapp.url='/edelweiss/quote/poll';
		 quoteapp.timeout=1000;
		 quoteapp.poll();
	 }else if(document.getElementById('quote-subscription-iframe-dl')){
		 quoteapp.url='/edelweiss/quote/delayedPoll';
		 quoteapp.timeout=60000;
		 quoteapp.poll();
	 }
	 else{		 
		 quoteiframe=document.getElementById('quote-subscription-iframe-gz');
		 if(quoteiframe){
			 document.domain=domain;
			 quoteiframe.src=quoteServerUrl + getRandomParam();
		 }
	 }
}
function getRandomParam(){
	return '?'+'cache_wrkarnd='+new Date().getTime();
}
function getColor(pct_change){
	var color;
	if (pct_change < -1) {
		color = deepred;
	} else if ((pct_change < 0)) {
		color = lightred;
	} else if ((pct_change > 1)) {
		color = deepgreen;
	} else if ((pct_change > 0)) {
		color = lightgreen;
	}
	return color;
}
var quoteapp = {
	url:'',	
	timeout:1000,
	poll : function() {
		var param = {
			action : 'CONNECT'
		};
		var millis=new Date().getMilliseconds();
		quoteapp.ajaxRequest(quoteapp.url+'?'+millis+'='+millis,
				param, 'GET', quoteapp.success, quoteapp.failure);
	},
	success : function(resp) {
		try {
			var json = resp; 
//			message(json);
			grid.update(json);
			setTimeout('quoteapp.poll()',quoteapp.timeout );
		} catch (err) {
			setTimeout('quoteapp.poll()', quoteapp.timeout);
		}
	},
	failure : function() {
		message('Something went wrong...');
		setTimeout('quoteapp.poll()', quoteapp.timeout);
	},
	ajaxRequest : function(url, param, method, success, failure) {
		dojo.xhrPost(
			{
				url: url,
				load: success,
				error: failure,
				handleAs: "json",
				preventCache: true,
				content: param
			} 
		);
	}
};
/*String.prototype.trim = function()
{
  return this.replace(/^\s+/,'').replace(/\s+$/,'');
}*/
