var activeTab = 0;
var activeTld = "";
var adwordCountry = "";

var googHistory;
var detectedCode = "";
var activeWord = "";

var punyCodeMap = [];

var supportedLanguages = new Array();
supportedLanguages["en"] = 1;
supportedLanguages["pt-PT"] = 1;
supportedLanguages["ru"] = 1;
supportedLanguages["zh-CN"] = 1;
supportedLanguages["es"] = 1;

supportedLanguages["fr"] = 1;
supportedLanguages["de"] = 1;
supportedLanguages["it"] = 1;
supportedLanguages["ja"] = 1;
supportedLanguages["ko"] = 1;

var initialTokenSet = false;

function clickWordSplitButton()
{
    document.getElementById("wordSplitButton").click();
}

function showHideTranslations(element)
{
    if(element.checked)
        document.getElementById("translationInfo").style.display = "";
    else
        document.getElementById("translationInfo").style.display = "none";
}

function detectedCountry(code)
{
    $('#dialog_countries').dialog('close');

    var country = 'unknown';

    keywordCountry = code;

    document.getElementById("adwordCountry").innerHTML = code;
    adwordCountry = code;

    wordSplit("wordSplitWord", detectedCode);
}

function showMoreCountries()
{
    $('#dialog_countries').dialog('open');
}

function prepareGoog()
{
    googHistory = new goog.History();
    goog.events.listen(googHistory, goog.History.EventType.NAVIGATE, navCallback);
    googHistory.setEnabled(true);
}

function setToken(opt_val) 
{
    googHistory.setToken(opt_val || input.value);
    return false;
}   

function replaceToken() 
{
    googHistory.replaceToken(input.value);
}

function navCallback(e) 
{
    var token = (e.token == null) ? 'null' : e.token;
    if(token)
    {
	tokenParts = token.split("/");

	var functionParams = Array();
	var functionName = tokenParts[0];

	if(!goog.isFunction(window[functionName]))
	{
	    functionParams[0] = "'"+functionName+"'";
	    functionParams[1] = "'0'";
	    functionName = "wordSplit";
	}
	else
	{
	    for(var i = 1; i < tokenParts.length; i++)
   	    {
	        var param = tokenParts[i];
	        if(goog.isString(param)) param = "'"+param+"'";
	        functionParams.push(param);
	    }
    	}

	var functionCall = functionName+"("+functionParams+");";
	eval(functionCall);
    }
}

function clickedLanguage(checked, code)
{
    if(checked)
    {
	var string = document.getElementById("phrase").innerHTML;

 	googleTranslate(string, detectedCode, code);

	var cookieLanguages = getCookie("languages");
        var languagesArray = new Array();

	if(cookieLanguages)
	    languagesArray = cookieLanguages.split(",");

	var languagesArrayLength = languagesArray.length;
	languagesArray[languagesArrayLength] = code;

	var date = new Date();
	var year = date.getFullYear();
	setCookie("languages", languagesArray, year+1, '', '', '', 'name.com');
    }
    else
    {
	var cookieLanguages = getCookie("languages");
        var languagesArray = new Array();

	if(cookieLanguages)
	    languagesArray = cookieLanguages.split(",");

        var newLanguagesArray = new Array();
        var languagesArrayLength = languagesArray.length;

        var newIndex = 0;
        for(var i = 0; i < languagesArrayLength; i++)
        {
	    if(languagesArray[i] != code)
	    {
   	        newLanguagesArray[newIndex] = languagesArray[i];
		newIndex++;
	    }
        }

	languagesArray = newLanguagesArray;

	var date = new Date();
	var year = date.getFullYear();
	setCookie("languages", languagesArray, year+1, '', '', '', 'name.com');

	if(document.getElementById("translatedLanguageName"+code))
	    document.getElementById("translatedLanguageName"+code).parentNode.removeChild(document.getElementById("translatedLanguageName"+code));
	if(document.getElementById("translatedText"+code))
	    document.getElementById("translatedText"+code).parentNode.removeChild(document.getElementById("translatedText"+code));
    }
}

function showMoreLanguages(type)
{
    var innerHTML = "";

    if(type == "translations")
        innerHTML = "<br><br>What languages would you like displayed?<br><br>Translations that we can parse and make suggestions for will appear as a link in the results and are indicated with a <font color='red'>:)</font> emoticon below.<br><br>";
    else if(type == "detection")
        innerHTML = "<br><br>What is the correct language?<br><br>Sometimes auto detection doesn't work properly. You can manually set the language of the keywords you entered here.<br><br>";

    if(type == "detection")
	innerHTML += "<select id='selectedLanguage' onchange='detectedLanguage(this.value, 1);'>"

    var cookieLanguages = getCookie("languages");
    var languagesArray = new Array();
    var tmpLanguagesArray = new Array();

    if(cookieLanguages)
        languagesArray = cookieLanguages.split(",");

    var languagesArrayLength = languagesArray.length;

    for(var i = 0; i < languagesArrayLength; i++)
    {
	tmpLanguagesArray[languagesArray[i]] = 1;
    }

    for (l in google.language.Languages) 
    {
	var code = google.language.Languages[l];
	var language = l;
	var checked = "";

	if(!google.language.isTranslatable(code) || code == "")
	    continue;

	if(tmpLanguagesArray[code])
	    checked = "checked";

	if(type == "translations")
	{
            innerHTML += "<input type='checkbox' name='languageOptions' value='"+code+"' "+checked+" onclick='clickedLanguage(this.checked, \""+code+"\");'> "+language
	    if(supportedLanguages[code]) innerHTML += " <font color='red'>:)</font>";
	    innerHTML += "<br>";
	}
	else if(type == "detection")
            innerHTML += "<option value='"+code+"'> "+language+"\n";
    }

    if(type == "detection")
	innerHTML += "</select>"

    document.getElementById("dialog_languages_container").innerHTML = innerHTML;

    $('#dialog_languages').dialog('open');    
}

function googleLanguageDetection(string)
{
    google.language.detect(string, googleLanguageDetectionCallback);
}

function googleLanguageDetectionCallback(result)
{
    if(!result.error)
    {
	detectedLanguage(result.language, 0);
    }
}

function googleTranslate(string, from, to)
{
    var toLanguage;
    string = String(string.replaceAll("_", " "));

    if(!from) return;
    if(detectedCode == to) return;

    google.language.translate(string, from, to, 
	function (result)
	{
	    if(!result.error)
	    {
	        for (l in google.language.Languages) 
		{
	            if(google.language.Languages[l] == to) 
		    {
	                toLanguage = l;
	                break;
		    }
		}

		var onClick = "";

		if(supportedLanguages[to])
		{
		    onClick = "onmouseover=\"this.style.cursor = 'pointer'\" style='color:blue;text-decoration:underline' onClick = 'swapPhrase(\""+result.translation+"\", \""+to+"\");'";
		}

		var detectedSourceLanguage = result.detectedSourceLanguage;
		document.getElementById("translationContainer").style.display = "";

		toLanguage = toLanguage.replace(/[\_]/g, " ");
		var translation = result.translation.replace(/[\t\r\n\.\_\,\']/g, "");
	        document.getElementById("translationLanguage").innerHTML += "<div style='height: 17px; width:auto; float: left;' id='translatedLanguageName"+to+"'>"+toLanguage+":&nbsp;&nbsp;</div>\n";
	        document.getElementById("translationLanguage").innerHTML += "<div style='height: 17px;' id='translatedText"+to+"'><div "+onClick+">"+translation+"</div></div>\n";
	    }
	    else
	    {
	    }
	}
    );
}

function swapPhrase(phrase, to)
{
    document.getElementById("wordSplitWord").value = phrase;
    document.getElementById("wordSplitButton").focus();
    document.getElementById("wordSplitButton").click();
}

function detectedLanguage(code, doWordSplit)
{
        $('#dialog_languages').dialog('close');    

	var language = 'unknown';
	document.getElementById("languageDetectionContainer").style.display = "";

        for (l in google.language.Languages) 
	{
            if(google.language.Languages[l].substring(0,2) == code.substring(0,2)) 
	    {
                language = l;
                break;
	    }
	}

	detectedCode = code;

     	var container = document.getElementById("languageDetection");
 	var string = document.getElementById("phrase").innerHTML;
	container.innerHTML = language;

	document.getElementById("translationLanguage").innerHTML = "";

	var cookieLanguages = getCookie("languages");
        var languagesArray = new Array();

	if(cookieLanguages)
	{
	    languagesArray = cookieLanguages.split(",");
	}
	
	var languagesArrayLength = languagesArray.length;

	for(var i = 0; i < languagesArrayLength; i++)
	{
            googleTranslate(string, code, languagesArray[i]);
	}

	if(doWordSplit) wordSplit("wordSplitWord", detectedCode);
}

function nextExtended(type, currentFirst)
{
    getURL(encodeURI('/domain-suggestions/services/domain-suggestions.php?action=nextextended&currentfirst='+currentFirst+'&type='+type), nextExtendedHandler);
}

function previousExtended(type, currentFirst)
{
    getURL(encodeURI('/domain-suggestions/services/domain-suggestions.php?action=previousextended&currentfirst='+currentFirst+'&type='+type), nextExtendedHandler);
}

function lastExtended(type)
{
    getURL(encodeURI('/domain-suggestions/services/domain-suggestions.php?action=lastextended'+'&type='+type), nextExtendedHandler);
}

function firstExtended(type)
{
    getURL(encodeURI('/domain-suggestions/services/domain-suggestions.php?action=nextextended&currentfirst=0'+'&type='+type), nextExtendedHandler);
}

function nextExtendedHandler(status, content, contentType)
{
    if(status != 200 && status != 0)
    {
	resetLoadingDiv();
        return;
    }

    var results = eval('('+content+')');

    if(!results["status"])
    {
	resetLoadingDiv();
        return;
    }

    var type = results["type"];

    if(results[type+"Words"])
    {
        var innerHTML = "";
        document.getElementById(type).innerHTML = "";

        var realWords = results[type+"Words"];
        var realWordsLength = realWords.length;

	innerHTML = "<b>"+results[type+"SetFirst"]+"</b> - <b>"+results[type+"SetLast"]+"</b> out of <b>"+results[type+"WordsCount"]+"</b><br><br>";

        if(results[type+"WordsCount"] > results["extendedDisplayCount"])
        {
            var first = "";
            var last = "";

            if(results[type+"SetFirst"] > 1)
                first = "<span onmouseover=\"this.style.cursor = 'pointer'\" style='color:blue;text-decoration:underline' onclick='firstExtended(\""+type+"\");'>&lt;&lt; first</span> <span onmouseover=\"this.style.cursor = 'pointer'\" style='color:blue;text-decoration:underline' onclick='previousExtended(\""+type+"\", "+results[type+"SetFirst"]+");'>&lt; previous</span>";
            else
                first = "<span style='color:gray'>&lt;&lt; first &lt; previous</span>";

            if(results[type+"SetLast"] < results[type+"WordsCount"])
                last = "<span onmouseover=\"this.style.cursor = 'pointer'\" style='color:blue;text-decoration:underline' onclick='nextExtended(\""+type+"\", "+results[type+"SetFirst"]+");'>next &gt;</span> <span onmouseover=\"this.style.cursor = 'pointer'\" style='color:blue;text-decoration:underline' onclick='lastExtended(\""+type+"\");'>last &gt;&gt;</span></span>";
            else
                last = "<span style='color:gray'>next &gt; last &gt;&gt;</span>";

            innerHTML += ""+first+" | "+last+"<br><br>";
        }

        for(var i = 0; i < realWordsLength; i++)
        {
            var wordArray = realWords[i].split(":");
            var displayWord = wordArray[0];
            var language = wordArray[1];
	    innerHTML += "<div onclick=\"synonymToWord('"+displayWord+"');\" onmouseover=\"this.style.cursor = 'pointer'\" style='color:blue;text-decoration:underline;float:left;'>"+displayWord+"</div><div style='width:100%; text-align:right;'>"+language+"</div>\n";
        }
	document.getElementById(type).innerHTML = innerHTML;
    }
}

function nextSuggestion(currentFirst, tld)
{
    getURL(encodeURI('/domain-suggestions/services/domain-suggestions.php?action=nextsuggestion&currentfirst='+currentFirst+'&tld='+tld+'&tc='+adwordCountry), nextSuggestionHandler);
}

function previousSuggestion(currentFirst, tld)
{
    getURL(encodeURI('/domain-suggestions/services/domain-suggestions.php?action=previoussuggestion&currentfirst='+currentFirst+'&tld='+tld+'&tc='+adwordCountry), nextSuggestionHandler);
}

function lastSuggestion(tld)
{
    getURL(encodeURI('/domain-suggestions/services/domain-suggestions.php?action=lastsuggestion'+'&tld='+tld+'&tc='+adwordCountry), nextSuggestionHandler);
}

function firstSuggestion(tld)
{
    document.getElementById("subDomainList1").innerHTML = "Loading results...";
    document.getElementById("subDomainList2").innerHTML = "Loading results...";

    getURL(encodeURI('/domain-suggestions/services/domain-suggestions.php?action=nextsuggestion&currentfirst=0'+'&tld='+tld+'&tc='+adwordCountry), nextSuggestionHandler);
}

function nextSuggestionHandler(status, content, contentType)
{
    if(status != 200 && status != 0)
    {
        document.getElementById("subDomainList1").innerHTML = "No Results";
        document.getElementById("subDomainList2").innerHTML = "Please try refreshing the page.";
	resetLoadingDiv();
        return;
    }

    var results = eval('('+content+')');

    if(!results["status"])
    {
        document.getElementById("subDomainList1").innerHTML = "No Results";
        document.getElementById("subDomainList2").innerHTML = "Please try refreshing the page.";
	resetLoadingDiv();
        return;
    }

    var wrangledDomains1 = results["wrangledDomains"]["level1"];
    var totalWrangledCount = results["totalWrangledCount"];
    var wrangledSetFirst = results["wrangledSetFirst"];
    var wrangledSetLast = results["wrangledSetLast"];
    var suggestionDisplayCount = results["suggestionDisplayCount"];
    var suggestionsPerColumn = results["suggestionsPerColumn"];
    var tld = results["tld"];
    var adWordTld = results["adWordTld"];
    var tag = "wrangled-back";
    var targetCountries = results["targetCountries"];

    if(adWordTld) 
    {
	tld = "adWord";
	tag = "adword-back";
        document.getElementById("adWordInfo").style.display = "";
        document.getElementById("adwordCountry").innerHTML = targetCountries;
    }
    else
    {
        document.getElementById("adWordInfo").style.display = "none";
    }

    document.getElementById("suggestionCountInfo").innerHTML = "";
    document.getElementById("suggestionCountInfoB").innerHTML = "";

    if(totalWrangledCount > suggestionDisplayCount)
    {
	var first = "";
	var last = "";

	if(wrangledSetFirst > 1)
	    first = "<span onmouseover=\"this.style.cursor = 'pointer'\" style='color:blue;text-decoration:underline' onclick='firstSuggestion(\""+tld+"\");'>&lt;&lt; first</span> <span onmouseover=\"this.style.cursor = 'pointer'\" style='color:blue;text-decoration:underline' onclick='previousSuggestion("+wrangledSetFirst+", \""+tld+"\");'>&lt; previous</span>";
	else
	    first = "<span style='color:gray'>&lt;&lt; first &lt; previous</span>";

	if(wrangledSetLast < totalWrangledCount)
	    last = "<span onmouseover=\"this.style.cursor = 'pointer'\" style='color:blue;text-decoration:underline' onclick='nextSuggestion("+wrangledSetFirst+", \""+tld+"\");'>next &gt;</span> <span onmouseover=\"this.style.cursor = 'pointer'\" style='color:blue;text-decoration:underline' onclick='lastSuggestion(\""+tld+"\");'>last &gt;&gt;</span></span>";
	else
	    last = "<span style='color:gray'>next &gt; last &gt;&gt;</span>";

        document.getElementById("suggestionCountInfo").innerHTML += "<br>"+first+" | "+last+"";
        document.getElementById("suggestionCountInfoB").innerHTML += "<br>"+first+" | "+last+"";
    }

    document.getElementById("suggestionCountInfo").innerHTML += "<br><b>"+wrangledSetFirst+"</b> - <b>"+wrangledSetLast+"</b> out of <b>"+totalWrangledCount+"</b>";
    document.getElementById("suggestionCountInfoB").innerHTML += "<br><b>"+wrangledSetFirst+"</b> - <b>"+wrangledSetLast+"</b> out of <b>"+totalWrangledCount+"</b>";

    document.getElementById("subDomainList1").innerHTML = "";
    document.getElementById("subDomainList2").innerHTML = "";
    var listIdName = "subDomainList1";
    var listIdNameId = 1;
    if(wrangledDomains1)
    {
        innerHTML = "";
	var counter = 0;
	var oTag = tag;

        if(adWordTld) tld = adWordTld;

        for(var word in wrangledDomains1)
        {
	    var wordArray = wrangledDomains1[word].split(":");
	    var displayWord = wordArray[0];
	    var language = wordArray[1];
	    var isIdn = wordArray[2];
	    var targetedCount = wordArray[3];

	    var wordTld = wordArray[5];
	    var wordPrice = wordArray[6];
	    var wordProductType = wordArray[7];
	    var searching = "&nbsp;searching...";
	    var backgroundColor = "#FFFFFF";
	    var productType = "registration";
	    var checkboxDisabled = "disabled";
	    var displayTld = tld;

	    if(wordPrice) { wordPrice = ""; searching = ""; backgroundColor = "#D9F9D8"; checkboxDisabled = ""; } else wordPrice = "";
	    if(wordTld) displayTld = wordTld;
	    if(wordProductType) productType = wordProductType;
//	    if(targetedCount) language +=" / "+targetedCount;

	    if(productType == "expiring_internal") tag = "wrangled_expiring_internal"; else tag = oTag;
	    if(isIdn) isIdn = "(<a href='/idn' target='_new'>IDN</a>)";

	    punyCodeMap[word] = displayWord;
// owen
 	    innerHTML += "<div id='div_"+word+"' style='width:100%'><div id='div_domain_"+word+"."+displayTld+"' style='width:100%;background-color: "+backgroundColor+";'><input "+checkboxDisabled+" type='checkbox' id='check_"+word+"."+displayTld+"' value='"+word+"."+displayTld+"' onclick='wrangleProductCartSwap(this.checked, \""+word+"."+displayTld+"\", 1, \""+productType+"\", \""+tag+"\");'><label title='"+language+"'><a target='_new' href='/search.php?domain="+encodeURI(displayWord)+"'><span id='displayDomain_"+displayWord+"'>"+displayWord+"</span></a></label>&nbsp;&nbsp;<span style='font-size:10px;color:gray;' id='price_"+word+"'>"+wordPrice+"</span>&nbsp;&nbsp;<span style='font-size:10px;color:gray;'>"+language+" "+isIdn+"</span><span style='font-size:10px' id='avail_"+word+"."+displayTld+"'>"+searching+"</span></div></div>\n";
	    counter++;

	    if(counter % suggestionsPerColumn == 0)
	    {
                document.getElementById(listIdName).innerHTML = innerHTML;
		innerHTML = "";
		listIdNameId++;
		listIdName = "subDomainList"+listIdNameId;
	    }
        }

	if(innerHTML) document.getElementById(listIdName).innerHTML = innerHTML;

        var code = results["wrangledDomains"]["searchCode"];
        var domainCount = results["wrangledDomains"]["searchCount"];

        if(code && domainCount > 0)
            getURL(encodeURI('/domain-suggestions/services/availability.php?code='+code+'&domainCount='+domainCount), availabilityHandler);
    }
}

function wordSplit(elementId, detectedLanguage)
{
    if(!detectedLanguage || detectedLanguage == 'unknown') detectedLanguage = 0;

    if(document.getElementById(elementId))
    {
        var word = jQuery.trim(document.getElementById(elementId).value);

        var wordArray = word.split(":");
	word = wordArray[0];

        if(!word)
	    return;
    }
    else
    {
	word = elementId;
        var wordArray = word.split(":");
	word = wordArray[0];

        if(!word)
	    return;
    }

    initialTokenSet = true;

    $('#JqueryLoadingDiv').dialog('open');
    if(document.getElementById("translationLanguage")) document.getElementById("translationLanguage").innerHTML = "";

    var cookieLanguages = getCookie("languages");
    var languagesArray = new Array();
    var includeAdword = document.getElementById("includeAdword") ? document.getElementById("includeAdword").checked : "";
    var includeTranslations = document.getElementById("includeTranslations") ? document.getElementById("includeTranslations").checked : "";

    if(cookieLanguages != null)
    {
        languagesArray = cookieLanguages.split(",");
    }
    else
    {
        var counter = 0;
        for (l in supportedLanguages) 
        {      
  	    languagesArray[counter] = l;
	    counter++;
        }
    }

    var date = new Date();
    var year = date.getFullYear();
    var adWordKeywordsType = "Exact";
    if(document.getElementById("adWordKeywordsType")) adWordKeywordsType = document.getElementById("adWordKeywordsType").value;
    setCookie("languages", languagesArray, year+1, '', '', '', 'name.com');

    var url = '/domain-suggestions/services/domain-suggestions.php?action=wordsplit&includeAdword='+includeAdword+'&includeTranslations='+includeTranslations+'&name='+(word)+'&detectedLanguage='+detectedLanguage+'&languages='+languagesArray+'&tld='+activeTld+'&tc='+adwordCountry+"&kwt="+adWordKeywordsType;
    getURL(encodeURI(url), wordSplitHandler);
}

function wordSplitHandler(status, content, contentType)
{
    if(status != 200 && status != 0)
    {
	resetLoadingDiv();
        return;
    }

    var results = eval('('+content+')');

    if(!results["status"])
    {
	resetLoadingDiv();
        return;
    }

    if(!document.getElementById("includeAdword").checked)
        $('#tabsSuggestions').data('disabled.tabs', [1]);
    else
        $('#tabsSuggestions').data('disabled.tabs', []);

    $("#tabsSuggestions").tabs("select", activeTab);

    document.getElementById("intro").style.display = "none";
    document.getElementById("introLost").style.display = "none";
    document.getElementById("adWordInfo").style.display = "none";

    var phrase = jQuery.trim(results["word"]);
    var adWordKeywordsType = jQuery.trim(results["adWordKeywordsType"]);
    if(document.getElementById(adWordKeywordsType)) document.getElementById(adWordKeywordsType).selected = true;
    var innerHTML = "";

    if(!phrase)
	return;

    document.getElementById("parsed").style.display = "";
    document.getElementById("phraseContainer").style.display = "";
    document.getElementById("domains").style.display = "";
    document.getElementById("phrase").innerHTML = phrase;

    if(phrase.indexOf(activeWord) < 0)
    {
	activeWord = "";
        document.getElementById("extended").style.display = "none";
    }

    var tld = results["tld"];
    var realWords = results["realWords"];
    var wrangleElapsedTime = results["wrangleElapsedTime"];
    var preWrangleElapsedTime = results["preWrangleElapsedTime"];
    var realWordsLength = realWords.length;

    var allWords = results["allWords"];
    var allWordsLength = allWords.length;

    var autorenew = results["wrangledDomains"]["autorenew"];
    var wrangledDomains1 = results["wrangledDomains"]["level1"];
    var wrangledDomains2 = results["wrangledDomains"]["level2"];
    var wrangledDomains3 = results["wrangledDomains"]["level3"];

    var wrangleElapsedTime = results["wrangleElapsedTime"];
    var totalWrangledCount = results["totalWrangledCount"];
    var wrangledSetFirst = results["wrangledSetFirst"];
    var wrangledSetLast = results["wrangledSetLast"];
    var suggestionDisplayCount = results["suggestionDisplayCount"];
    var suggestionsPerColumn = results["suggestionsPerColumn"];
    var suggestionLevel = results["suggestionLevel"];
    var targetCountries = results["targetCountries"];
    var searchTerm = results["searchTerm"];
    var adWordTld = results["adWordTld"];

    if(searchTerm) 
    {
	document.getElementById("wordSplitWord").value = searchTerm;
    }

    document.getElementById("wrangleElapsedTime").innerHTML = (Math.round(wrangleElapsedTime*100)/100)+" second(s)";

    var tag = "wrangled-back";

    if(suggestionLevel == "adWord") 
    {
	tld = "adWord";
	tag = "adword-back";
        document.getElementById("adWordInfo").style.display = "";
        document.getElementById("adwordCountry").innerHTML = targetCountries;
    }
    else
    {
        document.getElementById("adWordInfo").style.display = "none";
    }

    document.getElementById("suggestionCountInfo").innerHTML = "";
    document.getElementById("suggestionCountInfoB").innerHTML = "";

    if(totalWrangledCount > suggestionDisplayCount)
    {
	var first = "";
	var last = "";

	if(wrangledSetFirst > 1)
	    first = "<span onmouseover=\"this.style.cursor = 'pointer'\" style='color:blue;text-decoration:underline' onclick='firstSuggestion(\""+tld+"\");'>&lt;&lt; first</span> <span onmouseover=\"this.style.cursor = 'pointer'\" style='color:blue;text-decoration:underline' onclick='previousSuggestion("+wrangledSetFirst+", \""+tld+"\");'>&lt; previous</span>";
	else
	    first = "<span style='color:gray'>&lt;&lt; first &lt; previous</span>";

	if(wrangledSetLast < totalWrangledCount)
	    last = "<span onmouseover=\"this.style.cursor = 'pointer'\" style='color:blue;text-decoration:underline' onclick='nextSuggestion("+wrangledSetFirst+", \""+tld+"\");'>next &gt;</span> <span onmouseover=\"this.style.cursor = 'pointer'\" style='color:blue;text-decoration:underline' onclick='lastSuggestion(\""+tld+"\");'>last &gt;&gt;</span></span>";
	else
	    last = "<span style='color:gray'>next &gt; last &gt;&gt;</span>";

        document.getElementById("suggestionCountInfo").innerHTML += "<br>"+first+" | "+last+"";
        document.getElementById("suggestionCountInfoB").innerHTML += "<br>"+first+" | "+last+"";
    }

    document.getElementById("suggestionCountInfo").innerHTML += "<br><b>"+wrangledSetFirst+"</b> - <b>"+wrangledSetLast+"</b> out of <b>"+totalWrangledCount+"</b>";
    document.getElementById("suggestionCountInfoB").innerHTML += "<br><b>"+wrangledSetFirst+"</b> - <b>"+wrangledSetLast+"</b> out of <b>"+totalWrangledCount+"</b>";

    document.getElementById("wordSplitWordCollection").innerHTML = "";
    var realWordString = "";
    innerHTML = "";
    for(var i = 0; i < realWordsLength; i++)
    {
	realWordString += realWords[i]+" ";
	innerHTML += "<div onmouseover=\"this.style.cursor = 'pointer'\" style='padding:5px;float:left;color:blue;text-decoration:underline' onclick='getSynonyms(\""+realWords[i]+"\", \""+realWords[i]+"\");'>"+realWords[i] + "</div>";
    }
    document.getElementById("wordSplitWordCollection").innerHTML = innerHTML;

    var detectedLanguage = results["detectedLanguage"];
    var originalTranslations = results["originalTranslations"];

    document.getElementById("languageDetectionContainer").style.display = "";
    document.getElementById("translationContainer").style.display = "";

    if(detectedLanguage)
    {
        var language = 'unknown';

        for (l in google.language.Languages)                                                                                          
        {
            if(google.language.Languages[l].substring(0,2) == detectedLanguage.substring(0,2))
            {
             	language = l;
                break;
            }
	}

        detectedCode = detectedLanguage;

     	var container = document.getElementById("languageDetection");
 	var string = document.getElementById("phrase").innerHTML;
	container.innerHTML = language;

   	var innerHTML = "";
	for(language in originalTranslations)
	{
	    var toLanguage = "";
	    var translation = originalTranslations[language];

	    language = language.replace(/[\']/g, "");

            for (l in google.language.Languages) 
   	    {
	        if(google.language.Languages[l] == language) 
	        {
	            toLanguage = l;
	            break;
	        }
	    }

	    toLanguage = toLanguage.replace(/[\_]/g, " ");
	    translation = translation.replace(/[\t\r\n\.\_\,\']/g, "");

	    var onClick = "";
	    if(supportedLanguages[language])
	    {
	        onClick = "onmouseover=\"this.style.cursor = 'pointer'\" style='color:blue;text-decoration:underline' onClick = 'swapPhrase(\""+translation+"\", \""+language+"\");'";
	    }

	    innerHTML += "<div style='height: 17px; width:auto; float: left;' id='translatedLanguageName"+language+"'>"+toLanguage+":&nbsp;&nbsp;</div>\n";
	    innerHTML += "<div style='height: 17px;' id='translatedText"+language+"'><div "+onClick+">"+translation+"</div></div>\n";
	}
	document.getElementById("translationLanguage").innerHTML = innerHTML;
    }
    else
    {
        googleLanguageDetection(realWordString);
    }

    document.getElementById("wordSplitWordCollectionMore").innerHTML = "";
    innerHTML = "";
    for(var i = 0; i < allWordsLength; i++)
    {
	innerHTML += "<div onmouseover=\"this.style.cursor = 'pointer'\" style='color:blue; text-decoration:underline;' onclick='getSynonyms(\""+allWords[i]+"\", \""+allWords[i]+"\");'>"+allWords[i] + "</div>";
    }
    document.getElementById("wordSplitWordCollectionMore").innerHTML = innerHTML;

    document.getElementById("subDomainList1").innerHTML = "";
    document.getElementById("subDomainList2").innerHTML = "";
    var listIdName = "subDomainList1";
    var listIdNameId = 1;

    if(adWordTld) tld = adWordTld;

    if(wrangledDomains1)
    {
        innerHTML = "";
	var counter = 0;
        var oTag = tag;

        for(var word in wrangledDomains1)
        {
	    var wordArray = wrangledDomains1[word].split(":");
	    var displayWord = wordArray[0];
	    var language = wordArray[1];
	    var isIdn = wordArray[2];
	    var targetedCount = wordArray[3];

	    var wordTld = wordArray[5];
	    var wordPrice = wordArray[6];
	    var wordProductType = wordArray[7];
	    var searching = "&nbsp;searching...";
	    var backgroundColor = "#FFFFFF";
	    var productType = "registration";
	    var checkboxDisabled = "disabled";
	    var displayTld = tld;

//	    if(targetedCount) language +=" / "+targetedCount;
	    if(wordPrice) { wordPrice = ""; searching = ""; backgroundColor = "#D9F9D8"; checkboxDisabled = ""; } else wordPrice = "";
	    if(wordTld) displayTld = wordTld;
	    if(wordProductType) productType = wordProductType;

	    if(productType == "expiring_internal") tag = "wrangled_expiring_internal"; else tag = oTag;
	    if(isIdn) isIdn = "(<a href='/idn' target='_new'>IDN</a>)";

	    punyCodeMap[word] = displayWord;
// owen
 	    innerHTML += "<div id='div_"+word+"' style='width:100%'><div id='div_domain_"+word+"."+displayTld+"' style='widthL100%;background-color: "+backgroundColor+";'><input "+checkboxDisabled+" type='checkbox' id='check_"+word+"."+displayTld+"' value='"+word+"."+displayTld+"' onclick='wrangleProductCartSwap(this.checked, \""+word+"."+displayTld+"\", 1, \""+productType+"\", \""+tag+"\");'><label title='"+language+"'><a target='_new' href='/search.php?domain="+encodeURI(displayWord)+"'><span id='displayDomain_"+displayWord+"'>"+displayWord+"</span></a></label>&nbsp;&nbsp;<span style='font-size:10px;color:gray;' id='price_"+word+"'>"+wordPrice+"</span>&nbsp;&nbsp;<span style='font-size:10px;color:gray;'>"+language+" "+isIdn+"</span><span style='font-size:10px' id='avail_"+word+"."+displayTld+"'>"+searching+"</span></div></div>\n";
	    counter++;

	    if(counter % suggestionsPerColumn == 0)
	    {
                document.getElementById(listIdName).innerHTML = innerHTML;
		innerHTML = "";
		listIdNameId++;
		listIdName = "subDomainList"+listIdNameId;
	    }
        }
	if(innerHTML) document.getElementById(listIdName).innerHTML = innerHTML;
    }
    
    var code = results["wrangledDomains"]["searchCode"];
    var domainCount = results["wrangledDomains"]["searchCount"];

    if(code && domainCount > 0)
    {
	var url = '/domain-suggestions/services/availability.php?code='+code+'&domainCount='+domainCount;
        getURL(encodeURI(url), availabilityHandler);
    }

    resetLoadingDiv();
}

function availabilityHandler(status, content, contentType)
{
    if(status != 200 && status != 0)
    {
	return;
    }

    var results = eval('('+content+')');

    var isInCart = results["isInCart"];
    var domains = results["domains"];
    var prices = results["prices"];
    var searchId = results["search_id"];
    var domainCount = results["domainCount"];
    var done = results["done"];
    var notAvailable = new Array();
    var counter = 0;
    var tag = "wrangled-back";

    for(var domain in domains)
    {
	var price = prices[domain];
        var displayDomain = domains[domain];
	var displayDomainParts = displayDomain.split(".");
	var domainParts = domain.split(".");
	var tld = domainParts[1];
	var sld = domainParts[0];
	var displaySld = punyCodeMap[sld];
        var available = domains[domain];
        var inCart = isInCart[domain];
	var tldReplacementArray = [];
        tldReplacementArray["net"] = "com";
        tldReplacementArray["org"] = "net";
        tldReplacementArray["info"] = "org";
        tldReplacementArray["biz"] = "info";
        tldReplacementArray["tv"] = "biz";
        tldReplacementArray["me"] = "tv";
        tldReplacementArray["im"] = "me";
        tldReplacementArray["in"] = "im";
        tldReplacementArray["tel"] = "in";
        var lastTld = "tel";

	if(tldReplacementArray[tld])
	{
	    var word = sld;
	    var oldTld = tldReplacementArray[tld];
	    var tmpDomain = sld+"."+oldTld;
	    var displayTmpDomain = displaySld+"."+oldTld;

	    if(document.getElementById("div_"+word)) 
	    {
 	        var innerHTML = document.getElementById("div_"+word).innerHTML;
		innerHTML = innerHTML.replaceAll(tmpDomain, domain);
		innerHTML = innerHTML.replaceAll(displayTmpDomain, displaySld+"."+tld);
		document.getElementById("div_"+word).innerHTML = innerHTML;
	    }
	}

	// if(document.getElementById("price_"+sld)) document.getElementById("price_"+sld).innerHTML = "";
	if(available == 1) 
	{
	    if(document.getElementById("check_"+domain)) 
	    {
		// if(document.getElementById("price_"+sld)) document.getElementById("price_"+sld).innerHTML = "$"+price;
		document.getElementById("check_"+domain).disabled = false;
		if(inCart != 0) document.getElementById("check_"+domain).checked = true;
		document.getElementById("div_domain_"+domain).style.backgroundColor = "#d9f9d8";
		document.getElementById("avail_"+domain).innerHTML = "";
		document.getElementById("displayDomain_"+displaySld).innerHTML = displaySld+"."+tld;
	    }
	}
	else
	{
	    if(document.getElementById("check_"+domain)) 
	    {
	    	notAvailable[counter] = domain;
		document.getElementById("div_domain_"+domain).style.backgroundColor = "#DDDDDD";

		if(tld == lastTld)
		{
		    document.getElementById("avail_"+domain).innerHTML = "&nbsp;<a target='_new' href='/search.php?domain="+displaySld+"' style='text-decoration: underline; color: blue;'>search more TLDs</a>";
		}
		else
		{
		    document.getElementById("avail_"+domain).innerHTML = "&nbsp;searching "+tld+"..."
		}

		counter++;
	    }
	}
    }

    if(done == 1)
    {
        if(counter > 0)
            getURL(encodeURI('/domain-suggestions/services/domain-suggestions.php?action=getmoreresults&names='+notAvailable), getMoreResultsHandler);

	return;
    }
    else
    {
	var url = "getURL(encodeURI('/domain-suggestions/services/availability.php?code="+searchId+"&domainCount="+domainCount+"'), availabilityHandler)";
        setTimeout(url, 1000);
    }
}

function getMoreResultsHandler(status, content, contentType)
{
    if(status != 200 && status != 0)
    {
	return;
    }

    var results = eval('('+content+')');
    var code = results["wrangledDomains"]["searchCode"];
    var domainCount = results["wrangledDomains"]["searchCount"];

    if(code && domainCount > 0)
    {
        getURL(encodeURI('/domain-suggestions/services/availability.php?code='+code+'&domainCount='+domainCount), availabilityHandler);
    }
}

function synonymToWord(word)
{
    getSynonyms(word, activeWord);
}

function getSynonyms(word, newActiveWord)
{
    var cookieLanguages = getCookie("languages");
    var languagesArray = new Array();

    if(cookieLanguages != null)
    {
        languagesArray = cookieLanguages.split(",");
    }

    var includeAdword = document.getElementById("includeAdword") ? document.getElementById("includeAdword").checked : "";
    var includeTranslations = document.getElementById("includeTranslations") ? document.getElementById("includeTranslations").checked : "";

    $('#JqueryLoadingDiv').dialog('open');
    activeWord = newActiveWord;
    getURL(encodeURI('/domain-suggestions/services/domain-suggestions.php?action=getsynonyms&name='+word+"&includeAdword="+includeAdword+"&includeTranslations="+includeTranslations+"&detectedLanguage="+detectedCode+"&languages="+languagesArray), getSynonymsHandler);
}

function getSynonymsHandler(status, content, contentType)
{
    if(status != 200 && status != 0)
    {
	resetLoadingDiv();
        return;
    }

    var results = eval('('+content+')');

    if(!results["status"])
    {
	resetLoadingDiv();
        return;
    }

    var word = results["word"];
    var innerHTML = "";

    document.getElementById("extended").style.display = "";
    document.getElementById("word").innerHTML = word;
    document.getElementById("word2").innerHTML = word;

    document.getElementById("synonyms").innerHTML = "";
    document.getElementById("similar").innerHTML = "";
    document.getElementById("abstract").innerHTML = "";

    if(results["synonymsWords"])
    {
        var realWords = results["synonymsWords"];
        var realWordsLength = realWords.length;

	document.getElementById("tabLabelSynonyms").innerHTML = "Synonyms<br>"+results["synonymsWordsCount"];

	innerHTML = "<b>"+results["synonymsSetFirst"]+"</b> - <b>"+results["synonymsSetLast"]+"</b> out of <b>"+results["synonymsWordsCount"]+"</b><br><br>";

        if(results["synonymsWordsCount"] > results["extendedDisplayCount"])
        {
            var first = "";
            var last = "";

            if(results["synonymsSetFirst"] > 1)
                first = "<span onmouseover=\"this.style.cursor = 'pointer'\" style='color:blue;text-decoration:underline' onclick='firstExtended(\"synonyms\");'>&lt;&lt; first</span> <span onmouseover=\"this.style.cursor = 'pointer'\" style='color:blue;text-decoration:underline' onclick='previousExtended(\"synonyms\", "+results["synonymsSetFirst"]+");'>&lt; previous</span>";
            else
                first = "<span style='color:gray'>&lt;&lt; first &lt; previous</span>";

            if(results["synonymsSetLast"] < results["synonymsWordsCount"])
                last = "<span onmouseover=\"this.style.cursor = 'pointer'\" style='color:blue;text-decoration:underline' onclick='nextExtended(\"synonyms\", "+results["synonymsSetFirst"]+");'>next &gt;</span> <span onmouseover=\"this.style.cursor = 'pointer'\" style='color:blue;text-decoration:underline' onclick='lastExtended(\"synonyms\");'>last &gt;&gt;</span></span>";
            else
                last = "<span style='color:gray'>next &gt; last &gt;&gt;</span>";

            innerHTML += ""+first+" | "+last+"<br><br>";
        }

        for(var i = 0; i < realWordsLength; i++)
        {
            var wordArray = realWords[i].split(":");
            var displayWord = wordArray[0];
            var language = wordArray[1];
	    innerHTML += "<div onclick=\"synonymToWord('"+displayWord+"')\" onmouseover=\"this.style.cursor = 'pointer'\" style='color:blue;text-decoration:underline;float:left;'>"+displayWord+"</div><div style='width:100%; text-align:right;'>"+language+"</div>\n";
        }
	document.getElementById("synonyms").innerHTML = innerHTML;
    }

    if(results["similarWords"])
    {
        var realWords = results["similarWords"];
        var realWordsLength = realWords.length;

	document.getElementById("tabLabelSimilar").innerHTML = "Similar<br>"+results["similarWordsCount"];

	innerHTML = "<b>"+results["similarSetFirst"]+"</b> - <b>"+results["similarSetLast"]+"</b> out of <b>"+results["similarWordsCount"]+"</b><br><br>";

        if(results["similarWordsCount"] > results["extendedDisplayCount"])
        {
            var first = "";
            var last = "";

            if(results["similarSetFirst"] > 1)
                first = "<span onmouseover=\"this.style.cursor = 'pointer'\" style='color:blue;text-decoration:underline' onclick='firstExtended(\"similar\");'>&lt;&lt; first</span> <span onmouseover=\"this.style.cursor = 'pointer'\" style='color:blue;text-decoration:underline' onclick='previousExtended(\"similar\", "+results["similarSetFirst"]+");'>&lt; previous</span>";
            else
                first = "<span style='color:gray'>&lt;&lt; first &lt; previous</span>";

            if(results["similarSetLast"] < results["similarWordsCount"])
                last = "<span onmouseover=\"this.style.cursor = 'pointer'\" style='color:blue;text-decoration:underline' onclick='nextExtended(\"similar\", "+results["similarSetFirst"]+");'>next &gt;</span> <span onmouseover=\"this.style.cursor = 'pointer'\" style='color:blue;text-decoration:underline' onclick='lastExtended(\"similar\");'>last &gt;&gt;</span></span>";
            else
                last = "<span style='color:gray'>next &gt; last &gt;&gt;</span>";

            innerHTML += ""+first+" | "+last+"<br><br>";
        }

        for(var i = 0; i < realWordsLength; i++)
        {
            var wordArray = realWords[i].split(":");
            var displayWord = wordArray[0];
            var language = wordArray[1];
	    innerHTML += "<div onclick=\"synonymToWord('"+displayWord+"')\" onmouseover=\"this.style.cursor = 'pointer'\" style='color:blue;text-decoration:underline;float:left;'>"+displayWord+"</div><div style='width:100%; text-align:right;'>"+language+"</div>\n";
        }
	document.getElementById("similar").innerHTML = innerHTML;
    }

    if(results["abstractWords"])
    {
        var realWords = results["abstractWords"];
        var realWordsLength = realWords.length;

	document.getElementById("tabLabelAbstract").innerHTML = "Abstract<br>"+results["abstractWordsCount"];

	innerHTML = "<b>"+results["abstractSetFirst"]+"</b> - <b>"+results["abstractSetLast"]+"</b> out of <b>"+results["abstractWordsCount"]+"</b><br><br>";

        if(results["abstractWordsCount"] > results["extendedDisplayCount"])
        {
            var first = "";
            var last = "";

            if(results["abstractSetFirst"] > 1)
                first = "<span onmouseover=\"this.style.cursor = 'pointer'\" style='color:blue;text-decoration:underline' onclick='firstExtended(\"abstract\");'>&lt;&lt; first</span> <span onmouseover=\"this.style.cursor = 'pointer'\" style='color:blue;text-decoration:underline' onclick='previousExtended(\"abstract\", "+results["abstractSetFirst"]+");'>&lt; previous</span>";
            else
                first = "<span style='color:gray'>&lt;&lt; first &lt; previous</span>";

            if(results["abstractSetLast"] < results["abstractWordsCount"])
                last = "<span onmouseover=\"this.style.cursor = 'pointer'\" style='color:blue;text-decoration:underline' onclick='nextExtended(\"abstract\", "+results["abstractSetFirst"]+");'>next &gt;</span> <span onmouseover=\"this.style.cursor = 'pointer'\" style='color:blue;text-decoration:underline' onclick='lastExtended(\"abstract\");'>last &gt;&gt;</span></span>";
            else
                last = "<span style='color:gray'>next &gt; last &gt;&gt;</span>";

            innerHTML += ""+first+" | "+last+"<br><br>";
        }

        for(var i = 0; i < realWordsLength; i++)
        {
            var wordArray = realWords[i].split(":");
            var displayWord = wordArray[0];
            var language = wordArray[1];
	    innerHTML += "<div onclick=\"synonymToWord('"+displayWord+"')\" onmouseover=\"this.style.cursor = 'pointer'\" style='color:blue;text-decoration:underline;float:left;'>"+displayWord+"</div><div style='width:100%; text-align:right;'>"+language+"</div>\n";
        }
	document.getElementById("abstract").innerHTML = innerHTML;
    }

    var phrase = document.getElementById("phrase").innerHTML;
    var newPhrase = phrase.replace(activeWord, word);

    if(phrase != newPhrase)
    {
        activeWord = word;
        document.getElementById("wordSplitWord").value = newPhrase;
        document.getElementById("wordSplitButton").focus();
        document.getElementById("wordSplitButton").click();
	return;
    }

    resetLoadingDiv();
}

function processKeyPress(e, buttonId)
{
    if(!e || !buttonId)
        return;

    if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13))
    {
     	if(document.getElementById(buttonId))
        {
            document.getElementById(buttonId).focus();
            document.getElementById(buttonId).click();
        }
    }
}

String.prototype.replaceAll = function(strTarget, strSubString)
{
    var strText = this;
    var intIndexOfMatch = strText.indexOf( strTarget );
 
    while (intIndexOfMatch != -1)
    {
        strText = strText.replace( strTarget, strSubString )
        intIndexOfMatch = strText.indexOf( strTarget );
    }

    return(strText);
}

function getCookie(cookieName)
{
    var results = document.cookie.match ( '(^|;) ?' + cookieName + '=([^;]*)(;|$)' );

    if ( results )
        return ( unescape ( results[2] ) );
    else
        return null;
}

function setCookie (name, value, exp_y, exp_m, exp_d, path, domain, secure)
{
    var cookie_string = name + "=" + escape ( value );

    if ( exp_y )
    {
        var expires = new Date ( exp_y, exp_m, exp_d );
        cookie_string += "; expires=" + expires.toGMTString();
    }

    if ( path )
        cookie_string += "; path=" + escape ( path );

    if ( domain )
        cookie_string += "; domain=" + escape ( domain );
  
    if ( secure )
        cookie_string += "; secure";
  
    document.cookie = cookie_string;
}

function wrangleProductCartSwap(add, name, duration, type, tag)
{
    var action = "";
    if(!tag){ tag = "";}
    
    if(add)
        action = "add";
    else
        action = "remove";
    
    getURL(encodeURI('/products-pricing/services/productCart.php?action='+action+'&name='+name+'&duration='+duration+'&type='+type+'&tld=&tag='+tag+'&billing_interval='), wrangleProductCartSwapHandler);
}

function wrangleProductCartSwapHandler(status, content, contentType)
{
    if(status != 200 && status !== 0)
    {
        return;
    }

    var results = eval('('+content+')');
    setShoppingCartInfo(results.productTotalPrice, results.productCount);
}
