var INVALID_CHARS_REGEXP = /[^abcdefghijklmnopqrstuvwxyz .01234567890-]/gi;
var validTlds = new Array('.ac','.ac.il','.ac.uk','.aero','.ag','.am','.arpa','.as','.at','.au','.be','.bg','.biz','.br','.br.com','.bt','.bz','.ca','.cc','.cd','.ch','.ck','.cl','.cn','.cn.com','.co.il','.co.nz','.co.uk','.com','.com.br','.com.cn','.coop','.cx','.cz','.de','.de.com','.dk','.edu','.edu.cn','.ee','.eu','.eu.com','.fi','.fj','.fm','.fr','.gb.com','.gb.net','.gg','.gm','.gov','.gov.il','.gov.uk','.gs','.hk','.hm','.hn','.hu','.hu.com','.id','.id.au','.ie','.in','.info','.int','.ir','.is','.it','.je','.jobs','.jp','.k12.il','.ke','.kr','.la','.li','.lk','.lt','.lu','.lv','.mc','.md','.me.uk','.mil','.mobi','.ms','.mu','.muni.il','.museum','.mx','.my','.name','.nc','.net','.net.cn','.net.il','.nl','.no','.no.com','.nu','.nz','.org','.org.cn','.org.il','.org.uk','.pl','.pt','.pw','.qc.com','.re','.ro','.ru','.ru.com','.sa.com','.sc','.se','.se.com','.se.net','.sg','.sh','.si','.sk','.sm','.sr','.st','.tc','.tf','.th','.tj','.tm','.to','.tr','.tv','.tw','.ua','.uk','.uk.com','.uk.net','.us','.us.com','.uy.com','.vc','.ve','.vg','.web.com','.ws','.za.com'); 
var usedTlds = new Array('com','net','org','biz','info','name','us','ca','uk');



var OnKeyRequestBuffer = 
{
        bufferText: false,
        bufferTime: 125,
        
        modified : function(strId)
        {
           setTimeout('OnKeyRequestBuffer.compareBuffer("'+strId+'","'+xajax.$(strId).value+'");', this.bufferTime);
        },
        
        compareBuffer : function(strId, strText)
        {
            if (strText == xajax.$(strId).value && strText != this.bufferText)
            {
                this.bufferText = strText;
                OnKeyRequestBuffer.makeRequest(strId);
            }
        },
        
        makeRequest : function(strId)
        {
            
            var domain = xajax.$(strId).value;
			var domainValue = trim(domain).toLowerCase();
			if(domainValue.indexOf("www.")==0||domainValue.indexOf("http://")==0||domainValue.indexOf("https://")==0)
			domainValue = domainValue.substring(domainValue.indexOf("www.")+4);
			domainValue = domainValue.replace(INVALID_CHARS_REGEXP,'');
			
			var tld = getTld(domainValue);
				
			if(tld!=null&&tld.length>0){
				enterOneDomainLookupMode(tld);
				domain = getDomain(domainValue);
				if(validateDomain(domainValue)){
					xajax_doSearchDomain(domain,tld);
				}
			}else{
				leaveOneDomainLookupMode();
				for(var i=0;i<usedTlds.length;i++){		
					var check_box = getObjectByID(usedTlds[i]+'_tpl');			
					if(check_box.checked){				
						if(validateDomain(domainValue +'.'+check_box.value)){
						 	xajax_doSearchDomain(domainValue,check_box.value);
						}
					}
				}
			}
        }
}


function doLookup(tld){
			var domain = xajax.$('domain').value;
			var domainValue = trim(domain).toLowerCase();
			if(domainValue.indexOf("www.")==0||domainValue.indexOf("http://")==0||domainValue.indexOf("https://")==0)
			domainValue = domainValue.substring(domainValue.indexOf("www.")+4);
			domainValue = domainValue.replace(INVALID_CHARS_REGEXP,'');
			
			//var tld = getTld(domainValue);
				
			if(tld!=null&&tld.length>0){
				enterOneDomainLookupMode(tld);
				domain = getDomain(domainValue);
				if(validateDomain(domainValue)){
					xajax_doSearchDomain(domain,tld);
				}
			}else{
				leaveOneDomainLookupMode();
				for(var i=0;i<usedTlds.length;i++){		
					var check_box = getObjectByID(usedTlds[i]+'_tpl');			
					if(check_box.checked){				
						if(validateDomain(domainValue +'.'+check_box.value)){
						 	xajax_doSearchDomain(domainValue,check_box.value);
						}
					}
				}
			}
}

function getInputValue(){
	var domain=getObjectByID('domain').value;
	var output=trim(domain).toLowerCase();
	if(output.indexOf("www.")==0||output.indexOf("http://")==0||output.indexOf("https://")==0)
	output=output.substring(output.indexOf("www.")+4);
	output=output.replace(INVALID_CHARS_REGEXP,'');
	return output;
}

function getTld(domain){
	if(domain.indexOf(".")==-1)
		return null;
	else
		return domain.substring(domain.indexOf(".")+1,domain.length);
}

function getDomain(domain){
	var output=null;
	if(domain==null)
		output=null;
	else if(domain.indexOf(".")==-1)
		output=domain;
	else
		output=domain.substring(0,domain.indexOf('.'));
	return output;
}
function hasTld(domain){
	return domain.indexOf('.')>-1;
}


function checkspace(checkstr) {
  var str = '';
  for(i = 0; i < checkstr.length; i++) {
    str = str + ' ';
  }
  return (str == checkstr);
}

function getObjectByID(id){
	var theObject;
	if(document.getElementById)
		theObject=document.getElementById(id);
	else
		theObject=document.all[id];
	return theObject;
}

function trim(str)
{
	return str.replace(/^\s*|\s*$/g,"");
}
function validateDomain(nname)
{
	var arr=validTlds;
	var mai=nname;
	var val=true;
	var dot=mai.lastIndexOf(".");
	var dname=mai.substring(0,dot);
	var ext=mai.substring(dot,mai.length);
	if(dot>1&&dot<57){
		for(var i=0;i<arr.length;i++){
			if(ext==arr[i]){
				val=true;
				break;
			}else{
				val=false;
			}
		}
		if(val==false){
			return false;
		}else{
			for(var j=0;j<dname.length;j++){
				var dh=dname.charAt(j);
				var hh=dh.charCodeAt(0);
				if((hh>47&&hh<59)||(hh>64&&hh<91)||(hh>96&&hh<123)||hh==45||hh==46){
					if((j==0||j==dname.length-1)&&hh==45){
						return false;
					}
				}
				else{
					return false;
				}
			}
		}
	}
	else{
		return false;
	}
	return true;
}
function enterOneDomainLookupMode(tld){
	for(var i=0;i<usedTlds.length;i++){		
		var result_box = getObjectByID(usedTlds[i]+'_result_box');
		result_box.style.display='none';
	}
	var check_box = getObjectByID(tld+'_tpl');			
	if(check_box.checked){	
		var result_box = getObjectByID(tld+'_result_box');
		if(result_box)
			result_box.style.display='block';
	}	
}
function leaveOneDomainLookupMode(){
	for(var i=0;i<usedTlds.length;i++){
		var check_box = getObjectByID(usedTlds[i]+'_tpl');			
		if(check_box.checked){		
			var result_box = getObjectByID(usedTlds[i]+'_result_box');
			result_box.style.display='block';
		}
	}	
	
}

function toggle_result_box(result_box){	
	var result_box = getObjectByID(result_box+'_result_box');
	if(result_box.style.display=='none'){
		result_box.style.display='block';
		doLookup(result_box);
	}
	else{
		result_box.style.display='none';
	}
}
function addUniqueToArray(myArray,itemToAdd){
if(myArray.indexOf(itemToAdd)==-1)
myArray.push(itemToAdd);
}

function sanitizeArray(arr){
if(arr.length==1&&arr[0]==''){
arr.splice(0,1);
}
return arr
}
function removeFromArray(arr,value){
while(arr.indexOf(value)>-1){
arr.splice(arr.indexOf(value),1);
}
return arr;
}
var Cookie={
set:function(name,value,daysToExpire){
var expire='';
if(daysToExpire!=undefined){
var d=new Date();
d.setTime(d.getTime()+(86400000*parseFloat(daysToExpire)));
expire='; expires='+d.toGMTString();
}
return(document.cookie=escape(name)+'='+escape(value||'')+expire);
},
get:function(name){
var cookie=document.cookie.match(new RegExp('(^|;)\\s*'+escape(name)+'=([^;\\s]*)'));
return(cookie?unescape(cookie[2]):null);
},
erase:function(name){
var cookie=Cookie.get(name)||true;
Cookie.set(name,'',-1);
return cookie;
},
accept:function(){
	if(typeof navigator.cookieEnabled=='boolean'){
	return navigator.cookieEnabled;
	}
	Cookie.set('_test','1');
	return(Cookie.erase('_test')='1');
}
};

var favorites=getFavorites();
//alert(favorites);

function getFavorites(){
	var id='favorites';
	if(!initCookie())
		return[];
	else{
		var strFavorites=Cookie.get(id)||"";
		return sanitizeArray(strFavorites.split(','));
	}
}

function initCookie(){
	var id='my_favorites';
	if(Cookie.get(id)==null){
		Cookie.set(id,'1',365);
		return true;
	}
	else{
		return Cookie.get(id)=='1';
	}
}

function showFavorites(){	
var output="<ul class='favorites'>";
for(var i=0;i<favorites.length;i++){
itemId='favorite_'+favorites[i].replace(/\./g,'_');
output+="<li id='"+itemId+"'>";
var domain=favorites[i];
output+="<a href='#' class='removefromlist' onclick='removeFromFavorites(\""+favorites[i]+"\");return false;'><img src='design/images/delete.gif' alt='Remove "+domain+" from favorites' title='Remove "+domain+" from favorites' /></a><a href='#' onclick='searchFavorite(\""+favorites[i]+"\");'>"+domain+"</a>";
output+="</li>";
}
output+="</ul>";

objFavorites = $('favorites_div');
objFavorites.innerHTML='';

if(favorites.length>0){
objFavorites.innerHTML=output;
objFavorites.className='';
}
else{
objFavorites.innerHTML='You currently have no favorites.';
objFavorites.className='empty';
}
}

function addToFavorites(domain){
	if(domain==null)
		return;	
	addUniqueToArray(favorites,domain);
	addFavoriteToCookie(domain);
	favorites.sort();
	showFavorites();
}

function addFavoriteToCookie(value){
	if(!initCookie())
	return;
	var id='favorites';
	value=value.toLowerCase();
	var strFavorites=Cookie.get(id)||"";
	var arFavorites=sanitizeArray(strFavorites.split(','));
	addUniqueToArray(arFavorites,value);
	arFavorites.sort();
	strFavorites=arFavorites.toString();
	Cookie.set(id,strFavorites,365);
}

function removeFromFavorites(domain){
	favorites.removeItems(domain);
	removeFavoriteFromCookie(domain);
	showFavorites();
}

function removeFavoriteFromCookie(value){
	var id='favorites';
	var strFavorites=Cookie.get(id)||"";
	var arFavorites=sanitizeArray(strFavorites.split(','));
	arFavorites=removeFromArray(arFavorites,value);
	strFavorites=arFavorites.toString();
	Cookie.set(id,strFavorites,365);
}

Array.prototype.removeItems=function(itemsToRemove){
if(!/Array/.test(itemsToRemove.constructor)){
itemsToRemove=[itemsToRemove];
}
var j;
for(var i=0;i<itemsToRemove.length;i++){
j=0;
while(j<this.length){
if(this[j]==itemsToRemove[i]){
this.splice(j,1);
}else{
j++;
}
}
}
}

function searchFavorite(domain){
	getObjectByID('domain').value = domain;
	var tld = getTld(domain);
	doLookup(tld);	
}

