/* Copyright 2009 */
/* Wlasnosc wordomizer.pl. Wszelkie prawa zastrzezone. */

var busyCount = 0;
var freeCount = 0;
var colCount = 3;
var wordsArr = null;
var token = null;
var extString = "";
var totalGeneratedCount = 0;

function ResetRenderer() {
  busyCount = 0;
  freeCount = 0;

  document.getElementById("Busy0").innerHTML = "";
  document.getElementById("Busy1").innerHTML = "";
  document.getElementById("Busy2").innerHTML = "";
  document.getElementById("Free0").innerHTML = "";
  document.getElementById("Free1").innerHTML = "";
  document.getElementById("Free2").innerHTML = "";
  
  document.getElementById("busycnt").innerHTML = "(0)";
  document.getElementById("freecnt").innerHTML = "(0)";
}

function RenderBusy(name) {
  var splited = name.split(".");
  var domname = splited[0];
  var domext = splited[1];
  // for .com.pl
  if (splited.length > 2)
	domext += "." + splited[2];
  document.getElementById("Busy" + (busyCount++ % colCount)).innerHTML +=
    "<a href=\"http://" + name + "\" target=\"_blank\" class=\"domlink\">" + 
	"<span class='domname'>" + splited[0] + "</span></a>" +
	"<span class='domext'>." + splited[1] + "</span>" +
	"<br> ";
  document.getElementById("busycnt").innerHTML = "(" + busyCount + ")";
}

function RenderFree(name) {
  var splited = name.split(".");
  var domname = splited[0];
  var domext = splited[1];
  // for .com.pl
  if (splited.length > 2)
	domext += "." + splited[2];
  document.getElementById("Free" + (freeCount++ % colCount)).innerHTML +=
    "<a href=\"http://www.whois-search.com/whois/" + name + "\"" +
    " target=\"_blank\" class=\"domlink\">" +  
	"<span class='domname'>" + domname + "</span></a>" +
	"<span class='domext'>." + domext + "</span>" +
	"<br>";
  document.getElementById("freecnt").innerHTML = "(" + freeCount + ")";
}

function RenderStatus(status) {
  document.getElementById("State").innerHTML = status; 
}

function RenderError(error) {
  RenderStatus("WystÂ±piÅ‚ problem, operacja nie moÅ¼e byÄ‡ zakoÅ„czona :-(");
  document.getElementById("Error").innerHTML = error; 
}

function ResetToDefaults() {
  // reset generated words array
  wordsArr = Array();
  ResetRenderer();
}

function GetInputWords(input) {
  while (input.indexOf(",") != -1) {
    input = input.replace(",", " ");
  }
  while (input.indexOf(";") != -1) {
    input = input.replace(";", " ");
  }
  while (input.indexOf(":") != -1) {
    input = input.replace(":", " ");
  }
  while (input.indexOf("-") != -1) {
    input = input.replace("-", " ");
  }
  return input.split(" ");
}

function NewSearch() {
    
  var req = mint.Request(); req.OnSuccess = function() { ProcessResponseNewSearch(req); }
  
  // ext string
  extString = "";
  var extCount = 0;
  if (document.userinput.extpl.checked == true) {
    extString += "&ext" + extCount + "=" + document.userinput.extpl.value;
    extCount++;
  }
  if (document.userinput.extcompl.checked == true) {
    extString += "&ext" + extCount + "="  + document.userinput.extcompl.value;
    extCount++;
  }
  if (document.userinput.exteu.checked == true) {
    extString += "&ext" + extCount + "=" +  document.userinput.exteu.value;
  }
  
  var wordsString = "";
  var words = GetInputWords(RemovePolish(document.userinput.words.value));

  // Check if any word has been typed at all
  if (words.length > 0) {
    var count = 0;
    for (var i = 0; i < words.length; i++) {
      if (words[i] != "") {
        wordsString += "&word" + count + "=" + words[i];
        count++;
      }
    }
    
    if (wordsString != "") {
      // set request properties
      req.getJSON = true;
      reqString = "newrequest.php?" + wordsString;
      req.Send(reqString);
      // update status
      RenderStatus("Rozpoczeto wyszukiwanie!");
	  ShowResultsSpan();
    } else {
      RenderStatus("Podaj chociaÅ¼ jedno sÅ‚owo!");
	  ResetRenderer();
	  $('#dialog_window_empty_error').dialog('open');
    }
  } else {
    // no word typed
    RenderError("Nie podano zadnych slow!");
	ResetRenderer();
	$('#dialog_window_empty_error').dialog('open');
  }
  
  return false;
}

function ProcessName(token, name) {
  var req = mint.Request(); req.OnSuccess = function() { ProcessResponseGetDomain(req); }

  // set request properties
  req.getJSON = true;
  setTimeout(function(){req.Send("getdomain.php?token=" + token + "&name=" + name + extString)}, 50);
  
  RenderStatus("Pozostalo do sprawdzenia " + wordsArr.length + " domen.");
  
  var progressBar = document.getElementById("progressbar");
  if (progressBar != null)
  {
    var progress = Math.round((totalGeneratedCount - wordsArr.length) / totalGeneratedCount * 100);
	$("#progressbar").progressbar({ value: progress });
  }
}

function ProcessResponseNewSearch(req) {
  var processStart = false;
  for(var i = 0; i < req.responseJSON.length; ++i) {
  if (req.responseJSON[i].status == "OK") {
      if (i == 0) {
        token = req.responseJSON[i].token;
        ResetRenderer();
        // clear array
        wordsArr = Array();
      }
      wordsArr.push(req.responseJSON[i].name);
      processStart = true;
    } else if (req.responseJSON[i].status == "ERR") {
      // error while gnerating domains
      RenderError("Blad podczas przetwarzania zadania!");
    } else {
      // WTF? should not happen
      // TODO: handle by call to PHP scipt that will report an error
      RenderError("Nieznana odpowiedz serwera podczas tworzenia nowego wyszukiwania!");
    }
  }
  if (processStart == true) {
	totalGeneratedCount = wordsArr.length;
	leftToCheckCount = wordsArr.length;
    // process next domain
    if (wordsArr != null && wordsArr.length > 0 && token != null) {
      ProcessName(token, wordsArr.pop());
      RenderStatus("Trwa wyszukiwanie!");
    }
  }
}

function ProcessResponseGetDomain(req) {
  var processNext = false;
  for(var i = 0; i < req.responseJSON.length; ++i) {
    if (req.responseJSON[i].status == "FOUND") {
      // if token mismatch, means we are receiving responses for outdated requests
      if (req.responseJSON[i].token == token) {
        RenderBusy(req.responseJSON[i].name);
        processNext = true;
      }
    } else if (req.responseJSON[i].status == "NOTFOUND") {
      // if token mismatch, means we are receiving responses for outdated requests
      if (req.responseJSON[i].token == token) {
        RenderFree(req.responseJSON[i].name);
        processNext = true;
      }
    } else {
      // WTF? should not happen
      // TODO: handle by call to PHP script that will report an error
      RenderError("Nieznana odpowiedz podczas sprawdzania domeny!");
      error = true;
    }
  }
  if (processNext == true) {
    // process next domain
    if (wordsArr != null && wordsArr.length > 0 && token != null) {
      ProcessName(token, wordsArr.pop());
    } else if (wordsArr.length == 0) {
      RenderStatus("Wyszukiwanie zakonczone!");
    }
  }
}

function RemovePolish(str) {
    str = str.replace("Ã³","o");
    str = str.replace("Ã“","O");
    str = str.replace("Å‚","l");
    str = str.replace("Å?","L");
    str = str.replace("Å„","n");
    str = str.replace("Å?","N");
    str = str.replace("Å¼","z");
    str = str.replace("Å»","Z");
    str = str.replace("Åº","z");
    str = str.replace("Å¹","Z");
    str = str.replace("Ä†","C");
    str = str.replace("Ä‡","c");
    str = str.replace("Ä™","e");
    str = str.replace("Ä?","E");
    str = str.replace("Åš","S");
    str = str.replace("Å›","s");
    str = str.replace("Ä„","A");
    str = str.replace("Ä…","a");
    return str;
}


function ShowResultsSpan() {
  document.getElementById("ResultsSpan").style.display = "block";
}
