/**
 * 
 */
function signDoc(type, origin, json){
	var poll;
    var tryToExecute = 100;
    PF('fullblockWV').block();

    var uuid = (new Date).getTime() + Math.random();
    
	listenTo.push(uuid);	
	
	var version = "20170523.01";
	webSocketConnect  = function () {
		setTimeout(function() {
			tryToExecute--;
			if (tryToExecute > 0) {
				try {
					var websocket;
					var path;
					var url = window.location.href
					var arr = url.split(":/");
					var ports = ['8025', '8026', '8027','8028'];
					var protocol = 'ws';
					var hosts = ['localhost', '127.0.0.1'];
					if (arr[0] == ("https")){
						ports = ['9025', '9026', '9027','9028'];
						protocol = 'wss';
						hosts = ['localhost'];
					}					
					for (var i in hosts) {
						for(var p in ports){
							path = protocol + '://'+hosts[i]+':'+ ports[p] +'/websockets/xisconnectclient';
						    try {
						    	websocket = new WebSocket( path );
						        break;
						    } catch ( e ) {
						    	console.log(e);
						    }
						}
					}
										
					websocket.onopen = function(response) {
						try {
							websocket.send("sign," + origin + "," + uuid + "," + version + "," + json);
						} catch (e) {
							alertMessage('error', 'cc.msg.summary','cc.msg.detail.fail.to.load');
							setPreferencesAndSubmit('error', origin, '');
						}
					};
					
					websocket.onmessage = function(response) {
						try{
							//var decodedData = base64.decode(response.data);
							var decodedData = XBase64.decode(response.data);
							var escapedDecodedData = escape(decodedData);
							var decodedURIEscapedDecodedData = decodeURIComponent(escapedDecodedData);
							var message = JSON.parse(decodedURIEscapedDecodedData);
							if (message.command == 'alertMessage') {
								alertMessage(message.data.split(",")[0].replace(/^\s+|\s+$/g, ''), message.data.split(",")[1]
										.replace(/^\s+|\s+$/g, ''), message.data.split(",")[2].replace(/^\s+|\s+$/g, ''));
								if (type != "sign") {
									setPreferencesAndSubmit('error', origin, '');
								} else {
									PF('fullblockWV').unblock();
								}
								tryToExecute = 0;
							}
							
							if (message.command == 'setPreferencesAndSubmit') {
								setPreferencesAndSubmit(message.data.split(",")[0].replace(/^\s+|\s+$/g, ''), message.data
										.split(",")[1].replace(/^\s+|\s+$/g, ''),message.data.substr(message.data.indexOf("{"),message.data.indexOf("}")));
								tryToExecute = 0;
							}

							if (message.command == 'signedDoc') {
								setPreferencesAndSubmit('sign',	message.origin, message.data.replace(/^\s+|\s+$/g, ''));
								tryToExecute = 0;
							}
							
							if (message.command == 'versionNotSuported') {
								alertMessage('error', 'cc.msg.summary','cc.msg.detail.no.connector.install');
								xisConnectClientRedirect();
								tryToExecute = 0;
							}
							
						}catch (e) {
							console.log(e);
							PF('fullblockWV').unblock();
						} 
					};
				} catch (e) {
					alertMessage('error','cc.msg.summary','cc.msg.detail.fail.to.load');
					tryToExecute = 0;
					PF('fullblockWV').unblock();
				}

				websocket.onclose = function(response) {
					websocket.close();
					PF('fullblockWV').unblock();
				};
				
				websocket.onerror = function(error) {
					console.log(error);
					alertMessage('error', 'cc.msg.summary','cc.msg.detail.no.connector.install');
					xisConnectClientRedirect();
					if(type != 'login'){
						setPreferencesAndSubmit('error', origin , '');
					}
					tryToExecute = 0;
					PF('fullblockWV').unblock();
				};
			} else {
				alertMessage('error','cc.msg.summary','cc.msg.detail.fail.to.load');
			}
		}, 10);
	};
	
	try{
		webSocketConnect();
	}catch(e){
		alertMessage('error', 'cc.msg.summary','cc.msg.detail.fail.to.load');
		setPreferencesAndSubmit('error', origin, '');
		PF('fullblockWV').unblock();
	}

}


function getCCardInfo(type, origin){
	var poll;
    var tryToExecute = 100;
    PF('fullblockWV').block();
    
    var uuid = (new Date).getTime() + Math.random();
    
	listenTo.push(uuid);	
	
	var version = "20170523.01";
	webSocketConnect  = function () {
		setTimeout(function() {
			tryToExecute--;
			if (tryToExecute > 0) {
				try {
					var websocket;
					var path;
					var url = window.location.href
					var arr = url.split(":/");
					var ports = ['8025', '8026', '8027','8028'];
					var protocol = 'ws';
					var hosts = ['localhost', '127.0.0.1'];
					if (arr[0] == ("https")){
						ports = ['9025', '9026', '9027','9028'];
						protocol = 'wss';
						hosts = ['localhost'];
					}					
					for (var i in hosts) {
						for(var p in ports){
							path = protocol + '://'+hosts[i]+':'+ ports[p] +'/websockets/xisconnectclient';
						    try {
						    	websocket = new WebSocket( path );
						        break;
						    } catch ( e ) {
						    	console.log(e);
						    }
						}
					}
										
					websocket.onopen = function(response) {
						try {
							websocket.send("getCard-" + type + "," + origin + "," + uuid + ","+version);
						} catch (e) {
							alertMessage('error', 'cc.msg.summary','cc.msg.detail.fail.to.load');
							setPreferencesAndSubmit('error', origin, '');
						}
					};
					
					websocket.onmessage = function(response) {
						
						try{
							var message = JSON.parse(decodeURIComponent(escape(base64.decode((response.data)))));
							
							if (message.command == 'alertMessage') {
								alertMessage(message.data.split(",")[0].replace(/^\s+|\s+$/g, ''), message.data.split(",")[1]
										.replace(/^\s+|\s+$/g, ''), message.data.split(",")[2].replace(/^\s+|\s+$/g, ''));
								if (type != "login") {
									setPreferencesAndSubmit('error', origin, '');
								} else {
									PF('fullblockWV').unblock();
								}
								tryToExecute = 0;
							}
							
							if (message.command == 'setPreferencesAndSubmit') {
								setPreferencesAndSubmit(message.data.split(",")[0].replace(/^\s+|\s+$/g, ''), message.data
										.split(",")[1].replace(/^\s+|\s+$/g, ''),message.data.substr(message.data.indexOf("{"),message.data.indexOf("}")));
								tryToExecute = 0;
							}
							
							if (message.command == 'prepareCardLoginForm') {
								setPreferencesAndSubmit('prepareCardLoginForm',	message.origin, message.data.replace(/^\s+|\s+$/g, ''));
								tryToExecute = 0;
							}
							
							if (message.command == 'versionNotSuported') {
								alertMessage('error', 'cc.msg.summary','cc.msg.detail.no.connector.install');
								xisConnectClientRedirect();
								tryToExecute = 0;
							}
							
						}catch (e) {
							console.log(e);
							PF('fullblockWV').unblock();
						} 
					};
				} catch (e) {
					alertMessage('error','cc.msg.summary','cc.msg.detail.fail.to.load');
					tryToExecute = 0;
					PF('fullblockWV').unblock();
				}

				websocket.onclose = function(response) {
					websocket.close();
					PF('fullblockWV').unblock();
				};
				
				websocket.onerror = function(error) {
					console.log(error);
					alertMessage('error', 'cc.msg.summary','cc.msg.detail.no.connector.install');
					xisConnectClientRedirect();
					if(type != 'login'){
						setPreferencesAndSubmit('error', origin , '');
					}
					tryToExecute = 0;
					PF('fullblockWV').unblock();
				};
			} else {
				alertMessage('error','cc.msg.summary','cc.msg.detail.fail.to.load');
			}
		}, 10);
	};
	
	try{
		webSocketConnect();
	}catch(e){
		alertMessage('error', 'cc.msg.summary','cc.msg.detail.fail.to.load');
		setPreferencesAndSubmit('error', origin, '');
		PF('fullblockWV').unblock();
	}

//	PF('fullblockWV').unblock();
}

function alertMessage(msgtype, msgsum, msg) {
	showMsg(msgtype, msgsum, msg);
}

function setPreferencesAndSubmit(type, origin, data) {
	if (type != 'error') {
		var returnValue;
		returnValue = data;
		processAppletReply([ {
			name : 'origin',
			value : origin
		}, {
			name : 'value',
			value : returnValue
		} ]);
	} else {
		processAppletReply([ {
			name : 'origin',
			value : origin
		}, {
			name : 'value',
			value : type
		} ]);
	}

	PF('fullblockWV').unblock();
}

function xisConnectClientRedirect(){
	downloadClient();
}