var xmlHttpA = createAJAX();
var xmlHttpA1 = createAJAX();
var xmlHttpA2 = createAJAX();
var mAccount = 0;
var mActiveTabs = 'games';

function ILogout() {
//  if (typeof setMessage2send === 'function') setMessage2send(mLogin+' logged out');
  document.location='/index/Logout';
}

function playIn(pLogin) {
  El = document.getElementById('games_list');
  game_id = El.options[El.selectedIndex].value;
  
  if (xmlHttpA) {
    xmlHttpA.open("GET", "/account/playgameajax/?g="+game_id+'&l='+pLogin, false);
    xmlHttpA.send(null);
  }
  if (xmlHttpA.responseText != '') document.location = xmlHttpA.responseText;
}

function showGame(pLogin) {
	  El = document.getElementById('games_hist');
	  game_id = El.options[El.selectedIndex].value;
	  
	  document.location = '/chess/?g='+game_id;
	}

function DisplayAccount() {
	document.getElementById('my_account').style.display= 'block';
}

function removeGame(game_id, user_id) {
	if (confirm(transtext('Do you really want to remove this game ?', mLang)) && xmlHttpA2) {
		  xmlHttpA2.open("GET", "/account/removegameajax/?g="+game_id+"&u="+user_id, true);
		  xmlHttpA2.onreadystatechange=function() {
		    if(xmlHttpA2.readyState == 4 && xmlHttpA2.status == 200) {
		      if (xmlHttpA2.responseText == 'removed') document.location = '/';
		      else alert(transtext('Error during server contact.', mLang));
		    }
		  }
		  xmlHttpA2.send(null);
	}
}

function showMyAccount() {
  var bground = document.createElement("div");
  bground.id = "body_bground";
  document.body.appendChild(bground);
  
  if (xmlHttpA1) {
    var params = getUrlParams()+'&t=get';
    xmlHttpA1.open("GET", "/account/getaccountdataajax/?"+params, true);
    xmlHttpA1.send(null);
	  xmlHttpA1.onreadystatechange=function() {
      if(xmlHttpA1.readyState == 4 && xmlHttpA1.status == 200) {
			  eval("var json_object = ("+xmlHttpA1.responseText+")");
			  if (json_object.error == '') {

			    document.getElementById('account_login').value = json_object.user_data.login;
			    document.getElementById('account_fname').value = json_object.user_data.first_name;
			    document.getElementById('account_lname').value = json_object.user_data.last_name;
			    document.getElementById('account_city').value = json_object.user_data.city;
			    document.getElementById('account_country').value = json_object.user_data.country;
			    document.getElementById('account_email').value = json_object.user_data.email;
			    document.getElementById('allow_mb').checked = (json_object.user_data.allow_move_back == 1 ? true : false);
			    document.getElementById('is_sound').checked = (json_object.user_data.is_sound == 1 ? true : false);
			    
			    game_listEl = document.getElementById('games_list');
			    
			    inner = '<option value=0>- - -'+transtext('select', mLang)+'- - -</option>';
			    waiting = false;
			    for (opp_not_logged in json_object.games.current) 
			    {
			    	if (opp_not_logged > 0 && !waiting) {
			    		waiting = true;
			    		inner += '<optgroup label="'+transtext('waiting for second player', mLang)+'">';
			    	}
				    for (i in json_object.games.current[opp_not_logged])
				    { 
					      my_player = (json_object.games.current[opp_not_logged][i].substr(0, mLogin.length) == mLogin ? 1 : 2);
					      if (json_object.games.current[opp_not_logged][i].indexOf(' +') > 0 || my_player == opp_not_logged) clas = 'class="red"';
					      else clas = '';
					      inner += '<option '+clas+' value="'+i+'">'+json_object.games.current[opp_not_logged][i]+'</option>';
					}
				    if (opp_not_logged > 0 && !waiting) inner += '</optgroup>';
			    }

			    $('#games_list').html(inner);
//			    select_innerHTML(game_listEl,inner);
			    
			    hist_listEl = document.getElementById('games_hist');
			    inner = '<option value="">- - -'+transtext('select', mLang)+'- - -</option>';
			    for (key in json_object.games.old){ 
			    	inner += '<optgroup label="'+transtext(key, mLang)+'">';
			    	for (i in json_object.games.old[key]) {
			    		inner += '<option value="'+i+'">'+json_object.games.old[key][i]+'</option>';
			    	}
			    	inner += '</optgroup>';
			    }
//			    select_innerHTML(hist_listEl,inner);
			    $('#games_hist').html(inner);
			  }
			}
	  }
  }
  
  $("#my_account").show('slide');
  mAccount = 1;
  document.getElementById('my_account').style.display= 'block';
}

function hideMyAccount() {
  $("#my_account").hide('slide');
  var background_to_remove = document.getElementById('body_bground');
  if (background_to_remove) background_to_remove.parentNode.removeChild(background_to_remove);
  mAccount = 0;
  document.getElementById('my_account').style.display = 'none';
}

function showDetails(pGameId, pKind) {
  if (xmlHttpA2) {
	  xmlHttpA2.open("GET", "/account/getdetailsajax/?g="+pGameId, true);
	  xmlHttpA2.onreadystatechange=function() {
	    if(xmlHttpA2.readyState == 4 && xmlHttpA2.status == 200) {
	      eval("var json_object1 = ("+xmlHttpA2.responseText+")");
          infoEL = document.getElementById(pKind+'_info');
          
          // if nobody opponent show invite player button
          if (json_object1['player'+2] && pKind == 'current') {
        	  if (json_object1['player'+2].login == transtext('nobody', mLang)) buttonEl = document.getElementById('invite_button');
        	  else buttonEl = document.getElementById(pKind+'_button');
          }
          else buttonEl = document.getElementById(pKind+'_button');
          already_openEl = document.getElementById('already_open');
          
//          alert(buttonEl.value);
          if (pKind == 'current') document.getElementById('invite_button').style.display = 'none';
          document.getElementById(pKind+'_button').style.display = 'none';
          already_openEl.style.display = 'none';
          
          if (json_object1.error == '') {
            if (pKind == 'current') infoEL.innerHTML = showGameDetailsTable (json_object1);
		    else infoEL.innerHTML = showOldDetailsTable (json_object1);
            str = document.location.toString();
            pos = str.indexOf('?g=');
            game_id = (pos != -1 ? str.substring(str.indexOf('?g=')+3) : '');
            if (game_id != pGameId) buttonEl.style.display = 'block';
            else already_openEl.style.display = 'block';
       
	      }
	      else {
	        infoEL.innerHTML = ''+'\n'
	        buttonEl.style.display = 'none';
	      }
	    }
	  }
	  xmlHttpA2.send(null);
	}
}

function showGameDetailsTable (pObject) {
	
  var remind = '';
  var td_last_request1 = '    <td>'+pObject.player1.last_request+'</td>\n';
  var td_last_request2 = '    <td>'+pObject.player2.last_request+'</td>\n';
  
  remind = pObject.remind ? ' <input type="button" id="remind_button" value="'+transtext('Send reminder', mLang)+'" onClick="sendReminder('+"'"+pObject.game_id+"','"+(pObject.opp_not_logged > 0 ? 'invite' : 'move')+"'"+')" />' : '';
  if (pObject.opp_not_logged > 0) {
	  if (pObject.opp_not_logged == 1) {
  		if (pObject.player1.last_request) td_last_request1 = '    <td>'+transtext('invited', mLang)+(pObject.remind ? remind : '')+'</td>\n';
  		else td_last_request1 = '    <td> </td>\n';
	  }
	  else if (pObject.opp_not_logged == 2) {
  		if (pObject.player2.last_request) td_last_request2 = '    <td>'+transtext('invited', mLang)+(pObject.remind ? remind : '')+'</td>\n';
  		else td_last_request2 = '    <td> </td>\n';
	  }
	  remind = ''; // clear remind button
  }

  content = '<table width="400">\n'+
          '  <thead>\n'+
          '    <td class="field"> '+transtext('login', mLang)+'</td>\n'+
          '    <td class="last"> '+transtext('last visit date', mLang)+'</td>\n'+
          '  </thead>\n'+
          '  <tr>\n'+
          '    <td>'+pObject.player1.login+'</td>\n'+
          td_last_request1+
          '  </tr>\n'+
          '  <tr>\n'+
          '    <td>'+pObject.player2.login+'</td>\n'+
          td_last_request2+
          '  </tr>\n'+
          '  <tr "height="20">\n'+
          '    <td colspan="2"> </td>\n'+
          '  </tr>\n'+
          '  <tr>\n'+
          '    <td>'+transtext('now playing', mLang)+'</td>\n'+
          '    <td>'+pObject.current+remind+'</td>\n'+
          '  </tr>\n'+
          '  <tr>\n'+
          '    <td>'+transtext('last move date', mLang)+'</td>\n'+
          '    <td>'+pObject.last_move+'</td>\n'+
          '  </tr>\n'+
          '  <tr "height="8">\n'+
          '    <td colspan="2"> </td>\n'+
          '  </tr>\n'+
          '  <tr>\n'+
          '    <td>'+transtext('Game ID', mLang)+'</td>\n'+
          '    <td>'+pObject.game_id+'</td>\n'+
          '  </tr>\n'+
          '</table>\n';
  return content;
}


function showOldDetailsTable (pObject) {
  content = '<table width="400">\n'+
          '  <tr>\n'+
          '    <td>'+transtext('Begin date', mLang)+'</td>\n'+
          '    <td>'+pObject.date_begin+'</td>\n'+
          '  </tr>\n'+
          '  <tr>\n'+
          '    <td>'+transtext('End date', mLang)+'</td>\n'+
          '    <td>'+pObject.date_end+'</td>\n'+
          '  </tr>\n'+
          '  <tr>\n'+
          '    <td>'+transtext('Result', mLang)+'</td>\n'+
          '    <td>'+pObject.result+'</td>\n'+
          '  </tr>\n'+
          '  <tr "height="8">\n'+
          '    <td colspan="2"> </td>\n'+
          '  </tr>\n'+
          '  <tr>\n'+
          '    <td>'+transtext('Game ID', mLang)+'</td>\n'+
          '    <td>'+pObject.game_id+'</td>\n'+
          '  </tr>\n'+
          '</table>\n';
  return content;
}


function activateTabs(pTabs) {
  var activeTabs = document.getElementById('tabs_'+mActiveTabs);
  var currentTabs = document.getElementById('tabs_'+pTabs);
  var activeDiv = document.getElementById('div_'+mActiveTabs);
  var currentDiv = document.getElementById('div_'+pTabs);
  
  activeTabs.className = "tab-non-active";
  currentTabs.className = "tab-active";
  activeDiv.style.display = 'none';
  currentDiv.style.display = 'block';
  
  mActiveTabs = pTabs;
}

function SaveChanges() {

	if (xmlHttpA) {
		pass = '';
		var fname = document.getElementById('account_fname').value;
		var lname = document.getElementById('account_lname').value;
		var city = document.getElementById('account_city').value;
		var country = document.getElementById('account_country').value;
		var email = document.getElementById('account_email').value;
		var pass1 = document.getElementById('account_pass1').value;
		var pass2 = document.getElementById('account_pass2').value;
		var lang = document.getElementById('account_lang').value;
	    
		var allow_move_back = document.getElementById('allow_mb').checked;
	    var is_sound = document.getElementById('is_sound').checked;

	    passwd = true;
	    if (pass1 || pass2) {
	    	if (pass1==pass2) pass = hex_md5(pass1);
	    	else passwd = false;
	    }
	    if (passwd && validate('email', email) && validate('name', fname) && validate('name', lname)) {
		    xmlHttpA.open("GET", "/account/changedataajax/?p="+pass+'&fn='+fname+'&ln='+lname+'&c='+city+'&cr='+country+'&e='+email+'&l='+lang+'&mb='+allow_move_back+'&s='+is_sound, false);
		    xmlHttpA.send(null);
		    if (xmlHttpA.responseText == 'changed')  alert(transtext('Changes saved.',mLang));
		    else if (xmlHttpA.responseText == 'domain not exist')  alert(transtext('Invalid E-mail address.',mLang));
		    else if (xmlHttpA.responseText == 'email exist') alert(transtext('Email already exist.', mLang));

		    if (mLang != lang) document.location = document.location;
	    }
	    else if (!email || !fname || !lname) alert (transtext('Some mandatory fields are empty.', mLang));
	    else if (!passwd) alert(transtext('Password fields are not the same.', mLang));
	    else if (!validate('email', email)) alert(transtext('Invalid E-mail address.', mLang));
	    else if (!validate('name', fname)) alert(transtext('Used unauthorized chars in first name.', mLang));
    	else if (!validate('name', lname)) alert(transtext('Used unauthorized chars in last name.', mLang));
	}
}

function validate(pType, string) {
	   var reg;
	   if (pType == 'email') reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
	   else if (pType == 'login') reg = /^([A-Za-z0-9_])+$/;
	   else if (pType == 'name') reg = /^([A-Za-z \-ĄĆĘŁŃÓŚŻŹąćęłńóśżźùûüÿ'àâçéèêëïîôœ])+$/;
	   if(reg.test(string) == false) return false;
	   return true;
	}

function SaveRegister(pGame_id, pPlayer) {

	if (xmlHttpA) {
		pass = '';
	    var fname = document.getElementById('account_fname').value;
	    var lname = document.getElementById('account_lname').value;
	    var city = document.getElementById('account_city').value;
	    var country = document.getElementById('account_country').value;
	    var email = document.getElementById('account_email').value;
	    var login = document.getElementById('account_login').value;
	    var pass1 = document.getElementById('account_pass1').value;
	    var pass2 = document.getElementById('account_pass2').value;
	    var lang = document.getElementById('account_lang').value;
	    var allow_move_back = document.getElementById('allow_mb').checked;
	    var is_sound = document.getElementById('is_sound').checked;
	    var recaptchaR = document.getElementById('recaptcha_response_field').value;
	    var recaptchaC = document.getElementById('recaptcha_challenge_field').value;
	    var passwd = 0;
    	if (pass1==pass2 && pass1) passwd = hex_md5(pass1);

	    if (passwd && validate('email', email) && validate('login', login) && validate('name', fname) && validate('name', lname) && recaptchaR) {
		    xmlHttpA.open("GET", "/account/insertdataajax/?lg="+login+"&p="+passwd+'&fn='+fname+'&ln='+lname+'&c='+city+'&cr='+country+'&e='+email+'&l='+lang+'&mb='+allow_move_back+'&s='+is_sound+'&rc='+recaptchaC+'&rr='+recaptchaR, false);
		    xmlHttpA.send(null);
		    if (xmlHttpA.responseText == 'saved' && (!pGame_id || !pPlayer)) document.location = '/Account';
		    else if (xmlHttpA.responseText == 'saved' && pGame_id && pPlayer) document.location = '/chess/?g='+pGame_id+'&p='+pPlayer+'&l='+login;
		    else if (xmlHttpA.responseText == 'domain not exist')  alert(transtext('Invalid E-mail address.',mLang));
		    else if (xmlHttpA.responseText == 'record exist') alert(transtext('Login or email already exist.', mLang));
		    else if (xmlHttpA.responseText != '') alert(xmlHttpA.responseText);
	    }
	    else {
	    	if (!pass1 || !pass2 || !email || !login || !fname || !lname || !recaptchaR) alert (transtext('Some mandatory fields are empty.', mLang));
	    	else if (!validate('name', fname)) alert(transtext('Used unauthorized chars in first name.', mLang));
	    	else if (!validate('name', lname)) alert(transtext('Used unauthorized chars in last name.', mLang));
	    	else if (!passwd) alert(transtext('Password fields are not the same.', mLang));
	    	else if (!validate('login', login)) alert(transtext('Used unauthorized chars in login.', mLang));
	    	else if (!validate('email', email)) alert(transtext('Invalid E-mail address.', mLang));
	    }
	}
}

function changeLang(lang) {
	
	if (xmlHttpA1) {
	    xmlHttpA1.open("GET", "/account/changelangajax/?lang="+lang, false);
	    xmlHttpA1.send(null);
	    document.location = document.location;
	}
}

function sendReminder(pGameId, pMode) {
	
	if (xmlHttpA1) {
	    xmlHttpA1.open("GET", "/account/sendreminderajax/?g="+pGameId+'&m='+pMode, false);
	    xmlHttpA1.send(null);
	    if (xmlHttpA1.responseText == 'sent') {
	    	showDetails(pGameId, 'current')
	    	alert(transtext('The reminder was sent.', mLang));
	    }
	}
}


function select_innerHTML(objeto,innerHTML){
	/******
	* select_innerHTML - corrige o bug do InnerHTML em selects no IE
	* Veja o problema em: http://support.microsoft.com/default.aspx?scid=kb;en-us;276228
	* Versão: 2.1 - 04/09/2007
	* Autor: Micox - Náiron José C. Guimarães - micoxjcg@yahoo.com.br
	* @objeto(tipo HTMLobject): o select a ser alterado
	* @innerHTML(tipo string): o novo valor do innerHTML
	*******/
	    objeto.innerHTML = ""
	    var selTemp = document.createElement("micoxselect")
	    var opt;
	    selTemp.id="micoxselect1"
	    document.body.appendChild(selTemp)
	    selTemp = document.getElementById("micoxselect1")
	    selTemp.style.display="none"
	    if (innerHTML.toLowerCase().indexOf("optgroup") != -1) {
	    }
	    if(innerHTML.toLowerCase().indexOf("<option")<0){//se não é option eu converto
	    	alert(innerHTML);
	        innerHTML = "<option>" + innerHTML + "</option>"
	    }
	    innerHTML = innerHTML.toLowerCase().replace(/<option/g,"<span").replace(/<\/option/g,"</span")
	    innerHTML = innerHTML.toLowerCase().replace(/<optgroup/g,"<p").replace(/<\/optgroup/g,"</p")
	    selTemp.innerHTML = innerHTML
	      
	    for(var i=0;i<selTemp.childNodes.length;i++){
	  var spantemp = selTemp.childNodes[i];
        if(spantemp.tagName){     
            opt = document.createElement("OPTION")
	    
	   if(document.all){ //IE
	    objeto.add(opt)
	   }else{
	    objeto.appendChild(opt)
	   }       
	    
	   //getting attributes
	   for(var j=0; j<spantemp.attributes.length ; j++){
	    var attrName = spantemp.attributes[j].nodeName;
	    var attrVal = spantemp.attributes[j].nodeValue;
	    if(attrVal){
	     try{
	      opt.setAttribute(attrName,attrVal);
	      opt.setAttributeNode(spantemp.attributes[j].cloneNode(true));
	     }catch(e){}
	    }
	   }
	   //getting styles
	   if(spantemp.style){
	    for(var y in spantemp.style){
	     try{opt.style[y] = spantemp.style[y];}catch(e){}
	    }
	   }
	   //value and text
	   opt.value = spantemp.getAttribute("value")
	   opt.text = spantemp.innerHTML
	   
	   //IE
	   opt.selected = spantemp.getAttribute('selected');
	   opt.className = spantemp.className;
	  } 
	 }    
	 document.body.removeChild(selTemp)
	 selTemp = null
}


function writeContactMessage() {
	var obj_message = document.getElementById('contact_message');
	if (xmlHttpA2 && obj_message.value !='') {
		  xmlHttpA2.open("GET", "/account/storemessageajax/?m="+obj_message.value, true);
		  xmlHttpA2.onreadystatechange=function() {
		    if(xmlHttpA2.readyState == 4 && xmlHttpA2.status == 200) {
		      if (xmlHttpA2.responseText == 'OK') 
		    	  alert(transtext('Message was sent.', mLang));
		      	  obj_message.value = '';
		    }
		  }
		  xmlHttpA2.send(null);
		}
}

function forgotPasswd() {
	var login=document.getElementById('login').value;
	
	if (!login) alert(transtext('Please enter the login or email.',mLang));
	else if (validate('login', login) || validate('email', login)) {

		if (xmlHttpA) {
	      xmlHttpA.open("GET", "/Account/sendforgotpassajax/?l="+login, false);
		  xmlHttpA.send(null);
		  if (xmlHttpA.responseText == 'login not exist')  alert(transtext('Entered login or email not exist.',mLang));
		  else if (xmlHttpA.responseText == 'sent') {
		  	alert(transtext('New password was sent to your e-mail.',mLang));
		  }
		}
	}
}
