var PROTOCOL_SEPARATOR = ":\/\/";
//Add the protocols as we support them in future
var supportedProtocols = ["http"];
var ERROR_COLOR = "#FFAEB9";
var begSpaceExp = /^\s*/;
var endSpaceExp = /\s*$/;
var SUBDOMAINS = 1;
var DEFAULT_COLOR = "White";
var EMAIL_MAILBOX_MAX_SIZE = 64;
var EMAIL_DOMAIN_MAX_SIZE = 255;

//  Browser Identification
var nAgt = navigator.userAgent;
var isIE = "false";
if (nAgt.indexOf("MSIE")!=-1) 
{
	isIE = "true";
}

// Check for IE version
var verIE = -1;
if (navigator.appName == 'Microsoft Internet Explorer')
{
    var ua = navigator.userAgent;
    var re  = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
    if (re.exec(ua) != null)
      verIE = parseFloat( RegExp.$1 );
}

// Attach to the onLoad event
addEvent(window, 'load', ReSizeContent);
addEvent(window, 'resize', ReSizeContent);

function addEvent(obj, evType, fn)
{ 
    if (obj.addEventListener)
    {
        obj.addEventListener(evType, fn, false); 
        return true; 
    }
    else if (obj.attachEvent)
    { 
        var r = obj.attachEvent("on"+evType, fn); 
        return r; 
    } 
    else
    { 
        return false; 
    }
}

function ReSizeContent()
{
    if (isIE == "true" && verIE == 6)
	{
	    var sw_width = document.getElementById("sw_width");
	    if (sw_width)
	    {
	        if (document.body.clientWidth < 1100) sw_width.style.width = 110 + "em";
	    }
	}	
}

function ValidateAddUpdateForms(formname)
{    
	//clear previous errors. 
    ClearPreviousError("addsitetxtbx");
    ClearPreviousError("sitemaptxtbx");
    	
    var form = document.getElementById(formname);
    if(form)
    {
    	var websiteUrl = ltrim(rtrim(form.siteName.value));

    	websiteUrl = ConvertBackwardSlash(websiteUrl);
    	var websiteDomain = FilterUrl(websiteUrl);
    
    	//blank url
    	if( 0 >= websiteDomain.length)
    	{        
        	return showErrMsg(URL_Loc_Strings.LOC_WEBMASTER_URL_GENERIC + " " + URL_Loc_Strings.LOC_WEBMASTER_URL_BLANK, 
                        "maincontainer", "addsitetxtbx");    
    	}
    
    	var websiteProtocol = "";    
    	var idx = websiteUrl.indexOf(PROTOCOL_SEPARATOR);
    
    	if(0 < idx)
    	{
        	//if Protocol is specified, split into domain and protocol parts.
        	websiteProtocol = websiteUrl.slice(0, idx+3);
        	websiteProtocol = ltrim(rtrim(websiteProtocol));        
    	}
    
    	if(!IsValidProtocol(websiteProtocol))
    	{     
        	//Invalid protocol.
        	return showErrMsg(URL_Loc_Strings.LOC_WEBMASTER_URL_GENERIC + " " + URL_Loc_Strings.LOC_WEBMASTER_URL_INVALID_PROTOCOL, 
                          "maincontainer", "addsitetxtbx");               
    	}
    
    	var errMsg = VerifyURLFormat(websiteDomain , websiteProtocol);
    
    	if(0 < errMsg.length)
    	{       
        	return showErrMsg(errMsg, "maincontainer", "addsitetxtbx");    
    	}
    
    	//only one subdomain is supported
    	if(NumberOfSubDomains(websiteDomain) >  SUBDOMAINS)
    	{
        	return showErrMsg(URL_Loc_Strings.LOC_WEBMASTER_URL_GENERIC + " " + URL_Loc_Strings.LOC_WEBMASTER_URL_SUBDOMAIN, 
                        "maincontainer", "addsitetxtbx");            
    	}
    
    	//sitemap url
    	var sitemapUrl = ltrim(rtrim(form.siteMap.value)); 
    	sitemapUrl = ConvertBackwardSlash(sitemapUrl);      
    
    	errMsg = VerifySitemap(websiteProtocol, websiteDomain, sitemapUrl);
    	if(0 < errMsg.length)
    	{
        	return showErrMsg(errMsg, "maincontainer", "sitemaptxtbx");   
    	} 
        
    	var sitemapDomain = FilterUrl(sitemapUrl);

    	form.siteName.value = websiteDomain;
    	form.siteMap.value = sitemapDomain;
    
    	//validate the email address
    	var emailaddress = ltrim(rtrim(form.contactEmail.value));
    	if (emailaddress.length > 0)
    	{
    		errMsg = VerifyEmailAddress(emailaddress);
    	}
    	if(0 < errMsg.length)
    	{
        	return showErrMsg(errMsg, "maincontainer", "contactemailtxtbx");   
    	}
    }

    return true;
}

function showErrMsg(errStr, parentID, elementID)
{
	//set element color
	var el = document.getElementById(elementID);
	
	if(el)
	{
	    el.style.backgroundColor = ERROR_COLOR;
	}
	
	// If the alert div is already showing remove it first.
	var ErrMed = document.getElementById("ErrorMed");
	if (ErrMed != null)
	{
		ErrMed.parentNode.removeChild(ErrMed);
	}

	// Make the alert div
	var d = document.createElement("div");
	d.setAttribute("className", "ErrorMed alert");	// For IE
	d.setAttribute("class", "ErrorMed alert");	// For FireFox 
	d.setAttribute("id", "ErrorMed");
	var aimg = document.createElement("img");
	aimg.setAttribute('src', '/s/webmaster/hig_notif_icn_warn16.png');
	aimg.setAttribute('align', 'left');
	var p = document.createElement("p");
	p.innerHTML = errStr;
	d.appendChild(aimg);	
	d.appendChild(p);

	// Display the alert div
	var header = document.getElementById(parentID);
	var currentchild = header.childNodes[0];
	
	if(header && currentchild)
	{
	    header.removeChild(currentchild);
	    header.appendChild(d);
	    header.appendChild(currentchild);	    
	}

	return false;
}

function VerifyURLFormat(siteDomain, siteProtocol)
{
    //Blank domain should be checked before entering this fucntion
    if(0 >= siteProtocol.length)
    {
        siteProtocol = "http://";
    }
    
    var totLength = siteDomain.length + siteProtocol.length;    
        
    if(totLength >= INTERNET_MAX_URL_LENGTH)
    {
        //Url too long
        return (URL_Loc_Strings.LOC_WEBMASTER_URL_GENERIC + " " + URL_Loc_Strings.LOC_WEBMASTER_URL_TOO_LONG);            
    }          
    
    return "";
}

function IsValidProtocol(urlProtocol)
{
    var retVal = false;
    
    if(0 >= urlProtocol.length)
        return true;
        
    var idx = urlProtocol.indexOf(PROTOCOL_SEPARATOR);
    
    if(0 < idx)
    {
        //Protocol specified
        urlProtocol = urlProtocol.slice(0,idx);
        var protocol = ltrim(rtrim(urlProtocol));
    
        if(0 >= protocol.length)
        {
            //empty protocol.
            return false;        
        }
    
        protocol = protocol.toLowerCase();
    
        for(var i =0; i < supportedProtocols.length; i++)
        {
            if (protocol == supportedProtocols[i])                        
            {
                retVal = true;
                break;    
            }
        }
    }
    else
    {
        //protocol part is missing, we will assume http
        retVal = true;
    }
    return retVal;
}

//deletes all white spaces from the begining of the string
function ltrim(inString)
{
    return inString.replace(begSpaceExp, "");
}

//Removes all the white spaces in the end and also comment
function rtrim(inString)
{
    return inString.replace(endSpaceExp, "");
}

function StripLastChar(url)
{
    if(0 < url.length)
    {
        var pattern = /\/$/;
        url = url.replace(pattern, "");
    }
    
    return url;    
}

function NumberOfSubDomains(url)
{
    var count = 0;
    
    if(0 < url.length)
    {
        for(var i = 0; i < url.length; i++)
        {
            if(url.charAt(i) == '\/')
            {
                count++;
            }
        }
    }    
    return count;
}

function ConvertBackwardSlash(url)
{
    var patttern = /%2f/g;
    if(0 < url.length)
        url = url.replace(patttern, '\/');

    var patttern = /%2F/g;
    if(0 < url.length)
        url = url.replace(patttern, '\/');

    patttern = /\\/g;
    if(0 < url.length)
        url = url.replace(patttern, '\/');
    
    return url; 
}

function FilterUrl(url)
{   
    if(0 < url.length)
    {
        var idx = url.indexOf(PROTOCOL_SEPARATOR);
    
        if(0 < idx)      
            url = url.slice(idx+3); 
        
        url = ltrim(rtrim(url));        
        url = StripLastChar(url); 
    
    }
        
    return url;
}

function VerifySitemap(websiteProtocol, websiteDomain, sitemapUrl)
{
    var retVal = "";
    var sitemapDomain = FilterUrl(sitemapUrl);
        
    if(0 < sitemapDomain.length)
    {
        //validate sitemapUrl
        var sitemapProtocol = "";        
        var idx = sitemapUrl.indexOf(PROTOCOL_SEPARATOR);
    
        if(0 < idx)
        {
            //if Protocol is specified, split into domain and protocol parts.
            sitemapProtocol = sitemapUrl.slice(0, idx+3);
            sitemapProtocol = ltrim(rtrim(sitemapProtocol));        
        }
        
        if(0 < sitemapProtocol.length)
        {
            if(0 < websiteProtocol.length)
            {
                if(sitemapProtocol != websiteProtocol)
                {                   
                    //Invalid protocol.
                    return (URL_Loc_Strings.LOC_WEBMASTER_URL_GENERIC + " " + URL_Loc_Strings.LOC_WEBMASTER_URL_INVALID_PROTOCOL);                          
                }
            }
            else
            {
                 if(!IsValidProtocol(sitemapProtocol))
                {
                    //Invalid protocol.
                    return (URL_Loc_Strings.LOC_WEBMASTER_URL_GENERIC + " " + URL_Loc_Strings.LOC_WEBMASTER_URL_INVALID_PROTOCOL);                          
                }
            }        
        }
                      
        retVal = VerifyURLFormat(sitemapDomain , sitemapProtocol);
        
        if(0 >= retVal.length)
        {                                   
            if(!VerifySitemapIsRelated(sitemapDomain, websiteDomain))
            {
                retVal = URL_Loc_Strings.LOC_WEBMASTER_URL_GENERIC + " " + URL_Loc_Strings.LOC_WEBMASTER_URL_SITEMAP_ERROR;                          
            }   
        }     
    }
    
    return retVal;
}

function VerifySitemapIsRelated(sitemapDomain, websiteDomain)
{
    var retVal = true;
    websiteDomain = websiteDomain + '\/';
    
    if(websiteDomain.length >= sitemapDomain.length)
        return false;
        
    var sitemapRoot = sitemapDomain.substr(0, websiteDomain.length);
    
    if(sitemapRoot != websiteDomain)
        return false;
    
    var sitemapDirectory = sitemapDomain.slice(websiteDomain.length);
    
    if(0 >= sitemapDirectory.length)
        return false;
    
    if(0 < NumberOfSubDomains(sitemapDirectory))
        return false;
    
    return retVal;
}

function VerifyEmailAddress(emailaddress)
{
    var retVal = "";

    if (emailaddress.length > EMAIL_MAILBOX_MAX_SIZE + EMAIL_DOMAIN_MAX_SIZE + 1)
    {
	retVal = URL_Loc_Strings.LOC_WEBMASTER_EMAIL_LENGTH_EXCEEDED;
    }

    // verify that the email address is valid
    if (retVal == "")
    {
        var regexp = /^[a-zA-Z0-9\!\#\$\%\*\/\?\|\^\{\}\`\~\&\'\+\-\=\_]+(\.[a-zA-Z0-9\!\#\$\%\*\/\?\|\^\{\}\`\~\&\'\+\-\=\_]+)*\@[a-zA-Z0-9\!\#\$\%\*\/\?\|\^\{\}\`\~\&\'\+\-\=\_]+(\.[a-zA-Z0-9\!\#\$\%\*\/\?\|\^\{\}\`\~\&\'\+\-\=\_]+)+$/
        if (!regexp.test(emailaddress))
        {
	    retVal = URL_Loc_Strings.LOC_WEBMASTER_EMAIL_INVALID;
        }
    }

    // Split the email address and check lengths
    if (retVal == "")
    {
    	var idx_at = emailaddress.indexOf("@");
	var mailbox;
	var domain;

    	if(idx_at > 0)
    	{
            mailbox = emailaddress.slice(0, idx_at);
	    domain = emailaddress.slice(idx_at+1, emailaddress.length);
    	}

    	if (mailbox.length > EMAIL_MAILBOX_MAX_SIZE)
    	{
	    retVal = URL_Loc_Strings.LOC_WEBMASTER_EMAIL_MAILBOX_LENGTH_EXCEEDED;
    	}
	if (domain.length > EMAIL_DOMAIN_MAX_SIZE)
    	{
	    retVal = URL_Loc_Strings.LOC_WEBMASTER_EMAIL_DOMAIN_LENGTH_EXCEEDED;
    	}
    }

    return retVal;
}
function ClearPreviousError(elementId)
{
    
    var urlElement = document.getElementById(elementId);
    
    if(urlElement)
    {
        urlElement.style.backgroundColor = DEFAULT_COLOR;
    }
}

var slideSpeed = 10;
var inProgress = false;
var timerId = 0;
var heightIncrement = 4;
var maxWidth = 0;

function showHideContent(slideProxy, slideDiv, slideUL, parent)
{
	var sliderProxy = document.getElementById(slideProxy);
	var sliderDiv = document.getElementById(slideDiv);
	var sliderUL = document.getElementById(slideUL);
		
    var parentElement = document.getElementById(parent);
    
    var y = 1;
    var x = 1;
    if(parentElement != null)
    {
        y +=  parentElement.offsetHeight;
    }
    
    while(parentElement!=null)
    {
        y  += parentElement.offsetTop;
        x += parentElement.offsetLeft;
        parentElement = parentElement.offsetParent;        
    } 
    
    // Check if collapsed
	var height = parseInt(sliderProxy.style.height);
	if (height <= 1)
	{
	    // Get the required width
		var maxWidthInPx = longestTextLength(sliderUL);

		// Get the required height
		var contentDivHeight = getHeight(sliderUL);

		// Show the div
		if (isIE == "true")
		{
		  
		    sliderProxy.style.height = contentDivHeight;    
			sliderDiv.style.top = y + 5;
			sliderDiv.style.left = x;			
			sliderDiv.style.height = contentDivHeight;
			sliderDiv.style.width = maxWidthInPx;						
		}
		else
		{
			sliderProxy.style.height = contentDivHeight + "px";
			sliderDiv.style.top = y + 5 + "px";
			sliderDiv.style.left = x + "px";
			sliderDiv.style.height = contentDivHeight + "px";
			sliderDiv.style.width = maxWidthInPx + "px";
		}
		
        sliderProxy.style.visibility = "visible";
		sliderDiv.style.position = "absolute";
		sliderDiv.style.visibility = "visible";		
	}
	else
	{
		if (isIE == "true")
		{
			sliderProxy.style.height = 1;
			sliderProxy.style.width= 1;
			sliderDiv.style.height = 1;
			sliderDiv.style.width= 1;
		}
		else
		{
			sliderProxy.style.height = 1 + "px";
			sliderProxy.style.width= 1 + "px";
			sliderDiv.style.height = 1 + "px";
			sliderDiv.style.width= 1 + "px";
		}
		// Don't show the div
		sliderDiv.style.visibility="hidden";
		sliderProxy.style.visibility = "hidden";
	}
}

function getTextLength(s, boldStyle) 
{ 
	var rulerSpan = document.getElementById('ruler'); 
	if (boldStyle)
		rulerSpan.style.fontweight = "bold";
	else
		rulerSpan.style.fontweight = "normal";		
		
	rulerSpan.innerHTML = s; 
	var widthInPx = rulerSpan.offsetWidth; 
	//reset ruler to blank
	rulerSpan.innerHTML = ""; 
	return widthInPx;
} 

function longestTextLength(ulBlock)
{
	var anchors = ulBlock.getElementsByTagName('a');
	var widthInPx = 0;
	var boldStyle = true;
	for(var i=0; i < anchors.length; i++)
	{		
	    //Add extra chars for margin
		var currentWidthInPx = getTextLength(anchors[i].innerHTML + "xxxxxxxxxx" , boldStyle);
		if (currentWidthInPx > widthInPx)
		{
			widthInPx = currentWidthInPx;
		}
	}
	
	return widthInPx;
}

function lineHeight(s, boldStyle) 
{ 
	var rulerSpan = document.getElementById('ruler'); 
	if (boldStyle)
		rulerSpan.style.fontweight = "bold";
	else
		rulerSpan.style.fontweight = "normal";		
		
	rulerSpan.innerHTML = s; 
	var heightInPx = rulerSpan.offsetHeight;
	//reset ruler to blank
	rulerSpan.innerHTML = ""; 
	return heightInPx;
} 

function getHeight(ulBlock)
{
	var anchors = ulBlock.getElementsByTagName('a');
	var heightInPx = 0;
	var boldStyle = true;
	var currentHeightInPx = 0;
	for(var i=0; i < anchors.length; i++)
	{		
	    //Add extra chars for margin
		currentHeightInPx = lineHeight(anchors[i].innerHTML, boldStyle);
        heightInPx += currentHeightInPx;
	}
	
	// Add a little bit extra height
	heightInPx += currentHeightInPx/10;
	return heightInPx;
}
function ShowConfirmation()
{
    if (SiteSelected())
    {
	return confirm(URL_Loc_Strings.LOC_WEBMASTER_MNGESITES_DELETECONFM_DESC);
    }

    return false;
}

function SiteSelected()
{
    // Make sure a site is checked...
    var bFound = "false";
    var deletesitestable = document.getElementById("frmdeletesitestable");
    if (deletesitestable)
    {
        var deletesitestablebody = deletesitestable.childNodes[0];

        var trNodes = deletesitestablebody.childNodes;
    
        for(var i = 0; i < trNodes.length; i++)
        {
	    var tdNodes = trNodes[i].childNodes;
	    for (var j = 0; j < tdNodes.length; j++)
	    {
	    	if (tdNodes[j].childNodes.length > 0)
	    	{
	    	    var chkbx = tdNodes[j].childNodes[0];
	    	    if (chkbx.checked == true)
	    	    {
			bFound = "true";
			break;
	    	    }
	    	}
	    }
    	}
    }

    if (bFound == "false")
    {
	return false;
    }
    else
    {
	return true;
    }
}
