var EventUtil = new Object;

// Read a page's GET URL variables and return them as an associative array.
function getUrlVars()
{
	var vars = [], hash;
	var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');

	for(var i = 0; i < hashes.length; i++)
	{
		hash = hashes[i].split('=');
		vars.push(hash[0]);
		vars[hash[0]] = hash[1];
	}

	return vars;
}

// assign EventHandler
EventUtil.addEventHandler = function (oTarget, sEventType, fnHandler) {
  if (oTarget.addEventListener) {
    oTarget.addEventListener(sEventType, fnHandler, false);
  } else if (oTarget.attachEvent) {
    oTarget.attachEvent("on" + sEventType, fnHandler);
  } else {
    oTarget["on" + sEventType] = fnHandler;
  }
};

// remove EventHandler
EventUtil.removeEventHandler = function (oTarget, sEventType, fnHandler) {
  if (oTarget.removeEventListener) {
    oTarget.removeEventListener(sEventType, fnHandler, false);
  } else if (oTarget.detachEvent) {
    oTarget.detachEvent("on" + sEventType, fnHandler);
  } else {
    oTarget["on" + sEventType] = null;
  }
};

// create XMLHTTPRequest object
function createXHR() {
  if(typeof XMLHttpRequest != "undefined") {
    return new XMLHttpRequest();
  } 
  else if(window.ActiveXObject) {
    var aVersions = ["MSXML2.XMLHttp.6.0", "MSXML2.XMLHttp.3.0"];
    for(var i = 0; i < aVersions.length; i++) {
      try {
        var oXHR = new ActiveXObject(aVersions[i]);
        return oXHR;
      } catch (oError) {
        //Do nothing
      }
    }
  }
  throw new Error("XMLHttp object could not be created.");
}

function isPasswordCorrect(pw) {
  if(pw.length<6)
    return 1;
  else if(pw.length>15)
    return 2;
  else
    return 0;
}

function ValidateNickName() {
  var NNValue;
    
  NNValue = document.registrationForm.nickname.value;
  XHRCheck('nickname', NNValue);   
}

function ValidateEmail() {
  var EMValue;
    
  EMValue = document.registrationForm.email.value;
  XHRCheck('email', EMValue);   
}

function ValidatePassword() {
  var PWValue, PWCValue;
    
  PWValue = document.registrationForm.passw.value;
  PWCValue = document.registrationForm.confirm.value;
  
  if((PWCValue!='')&&(PWValue!=''))
  {
    var pwstatus = isPasswordCorrect(PWValue);
    var pwcstatus = isPasswordCorrect(PWCValue);
    
    ShowPasswErrMsg(pwstatus);
    
    if(PWValue != PWCValue)
      ShowConfPasswErrMsg(0);
    else
      ShowConfPasswErrMsg(1);
  }
  else
  if(PWValue!='')
  {
    if(isPasswordCorrect(PWValue)==0)
    {
      ShowPasswErrMsg(0);
    }
    else
    {
      ShowPasswErrMsg(1);
    }
  }
  
}

function ShowPasswErrMsg(state) {
  var ErrDiv = document.getElementById("pwError");
  var ErrSign = document.getElementById("pwSign");
  var ErrMsg;
  
  ErrDiv.innerHTML = '';
  
  switch(state)
  {
    case 1: ErrMsg = 'Heslo, ktoré ste zadali je príliš krátke. Minimálna dĺžka je 6 znakov.'; break;
    case 2: ErrMsg = 'Heslo, ktoré ste zadali je príliš dlhé. Maximálna dĺžka je 15 znakov.'; break;
    default: ErrMsg = 'OK';
  }
  
  if(state!=0)
  {
    ErrDiv.innerHTML = '<span style="color:#F33F3F">' + ErrMsg + '</span>';
    ErrSign.innerHTML = '<img src="/images/exclamation.png" />';
  }
  else
    ErrSign.innerHTML = '<img src="/images/ok_small.png" />';
}

function ShowConfPasswErrMsg(state) {
  var ErrDiv = document.getElementById("pwCError");
  var ErrSign = document.getElementById("pwCSign");
  
  ErrDiv.innerHTML = '';
  
  if(state==0)
  {
    ErrDiv.innerHTML = '<span style="color:#F33F3F">Heslá sa nezhodujú</span>';
    ErrSign.innerHTML = '<img src="/images/exclamation.png" />';
  }
  else
    ErrSign.innerHTML = '<img src="/images/ok_small.png" />';
}

function ShowNickNameErrMsg(infoArray) {
  var ErrDiv = document.getElementById("nameError");
  var ErrSign = document.getElementById("nameSign");
  
  ErrDiv.innerHTML = '';
  
  if(infoArray[0]!=0)
  {
    ErrDiv.innerHTML = '<span style="color:#F33F3F">' + infoArray[1] + '</span>';
    ErrSign.innerHTML = '<img src="/images/exclamation.png" />';
  }
  else
    ErrSign.innerHTML = '<img src="/images/ok_small.png" />';
}

function ShowEmailErrMsg(infoArray) {
  var ErrDiv = document.getElementById("emailError");
  var ErrSign = document.getElementById("emailSign");
  
  ErrDiv.innerHTML = '';
  
  if(infoArray[0]!=0)
  {
    ErrDiv.innerHTML = '<span style="color:#F33F3F">' + infoArray[1] + '</span>';
    ErrSign.innerHTML = '<img src="/images/exclamation.png" />';
  }
  else
    ErrSign.innerHTML = '<img src="/images/ok_small.png" />';
}

function ShowVoteControls(recipeid) {
  var VoteDiv = document.getElementById("Voting");
  var VoteSpan = document.getElementById("VoteShowHide");
  
  VoteDiv.style.height = '50px';
  VoteSpan.innerHTML = '<a href="#" onClick="HideVoteControls();">skryť</a>';
  
  VoteInstruction = document.createElement('div');
  VoteInstruction.id = 'VoteInstruction';
  VoteDiv.appendChild(VoteInstruction);

  VoteInstruction.setAttribute('class', 'left');
  VoteInstruction.style.marginTop = '10px';
  VoteInstruction.innerHTML = 'ohodnoť tento recept:';

  VoteStars = document.createElement('div');
  VoteStars.id = 'VoteStars';
  VoteDiv.appendChild(VoteStars);

  VoteStars.setAttribute('class', 'right');
  VoteStars.style.marginTop = '10px';
  
  var i;
  
  URLVars = getUrlVars();
    
  for(i=0; i<5; i++) {
	VoteStars.innerHTML += '<a href="#" onclick="VoteFor('+ recipeid +', '+ (i+1) +')"><img src="/images/star_gray.gif" id="star' + i + '" onmouseover="ColorStars('+ i +');" onmouseout="DeColorStars('+ i +');">';
  }
}

function HideVoteControls() {
  var VoteDiv = document.getElementById("Voting");
  var VoteInstruction = document.getElementById("VoteInstruction");
  var VoteStars = document.getElementById("VoteStars");
  var VoteSpan = document.getElementById("VoteShowHide");
  
  VoteDiv.removeChild(VoteInstruction);
  VoteDiv.removeChild(VoteStars);
  
  VoteDiv.style.height = '20px';
  VoteSpan.innerHTML = '<a href="#" onClick="ShowVoteControls();">ohodnoť!</a>';
}

function ColorStars(number) {
  var i;
  var VoteStar = [];
  
  for(i=0; i<5; i++) {
	VoteStar[i] = document.getElementById("star" + i);
  }
  
  for(i=0; i<=number; i++) {
	VoteStar[i].src = '/images/star_gold.gif';
  }
    
  for(i=number+1; i<5; i++) {
	VoteStar[i].src = '/images/star_gray.gif';
  }
}


function DeColorStars(number) {
  var VoteStar = [];
  
  for(i=0; i<5; i++) {
	VoteStar[i] = document.getElementById("star" + i);
	VoteStar[i].src = '/images/star_gray.gif';
  }
}

function UpdateRating(awg) {
  var RatingDiv = document.getElementById("Rating");
  var HTMLCode = '';
  
  for($i=1; $i<=5; $i++)
		if($i <= awg)
			HTMLCode += '<img src="/images/star_gold.gif"/>';
		else
			HTMLCode += '<img src="/images/star_gray.gif"/>';
			
  RatingDiv.innerHTML = HTMLCode;
}

function VoteFor(recipeid, stars) {
	var oXmlHttp = createXHR();
    var arrInfo;
    
    oXmlHttp.open("get", "/Vote.php?id=" + recipeid + "&stars=" + stars, true);
    oXmlHttp.onreadystatechange = function () {
        if (oXmlHttp.readyState == 4) {
            if (oXmlHttp.status == 200) {
                arrInfo = oXmlHttp.responseText;
                if(arrInfo != '-1')
				{
					HideVoteControls();
					UpdateRating(arrInfo);
				}
            }
            else {
                alert("Nastala chyba pri komunikácii so serverom.");
            }
        }
    };
        
    oXmlHttp.send(null);
}

function XHRCheck(fieldName, fieldValue) {
    var oXmlHttp = createXHR();
    var arrInfo;
    
    oXmlHttp.open("get", "/ValidateForm.php?what=" + fieldName + "&val=" + encodeURIComponent(fieldValue), true);
    oXmlHttp.onreadystatechange = function () {
        if (oXmlHttp.readyState == 4) {
            if (oXmlHttp.status == 200) {
                arrInfo = oXmlHttp.responseText.split("||");
                switch(fieldName)
                {
                  case 'nickname' : ShowNickNameErrMsg(arrInfo); break;
                  case 'email' : ShowEmailErrMsg(arrInfo); break;
                }
            }
            else {
                alert("Nastala chyba pri komunikácii so serverom.");
            }
        }
    };
        
    oXmlHttp.send(null);
};

window.onload = function() {  
  var oDiv = document.getElementById("nickTxt");
  EventUtil.addEventHandler(oDiv, "change", ValidateNickName);  
  
  var oDiv = document.getElementById("mailTxt");
  EventUtil.addEventHandler(oDiv, "change", ValidateEmail);  
  
  var oDiv = document.getElementById("passwTxt");
  EventUtil.addEventHandler(oDiv, "change", ValidatePassword);
  
  var oDiv = document.getElementById("passwConfTxt");
  EventUtil.addEventHandler(oDiv, "change", ValidatePassword);
};
