﻿var LatestWebCookieName = "WebSitesatcomet";
var FavoriteWebCookieName = "Favoritesatcomet";
var IsSetCookieName = "IsSetCookieatcomet";
var LatestWebLimit = 25;



String.prototype.binLength = function()
{
    var n = 0;
    for(var i=0;i<this.length;i++)
    {
        if(this.charCodeAt(i) > 127)
            n += 2;
        else
            n += 1;
    }
    return n;
}




function Cookie()
{
    this.Success = false;
    this.baseString = ";path=/;domain=.atcomet.com;expires=Sun, 31 Oct 2010 02:57:53 UTC";
    //this.baseString = ";expire=Sat, 30 Oct 2010 09:45:41 UTC";
}

Cookie.prototype.SetCookie = function(sName, sValue) {
	document.cookie = sName + "=" + escape(sValue.replace(/;/ig, "")) + this.baseString;
};

Cookie.prototype.GetCookie = function(sName) {

	var arr = document.cookie.match(new RegExp("(^| )"+sName+"=([^;]*)(;|$)"));
	if(arr != null){return unescape(arr[2])};
	return "";

};

Cookie.prototype.DeleteCookie = function(sName) {
    document.cookie = sName + "=;path=/;domain=.atcomet.com;expires=Sun, 1 Nov 1970 06:52:02 UTC";
};





function WebSites()
{
    this.cookie = new Cookie();
    this.IsSetCookie = this.cookie.GetCookie(IsSetCookieName).toLowerCase()=="false"?false:true;
}

WebSites.prototype.SetIsSetCookie = function(bIsSet){
    if(bIsSet == false)
        this.cookie.SetCookie(IsSetCookieName, "false");
    else
        this.cookie.SetCookie(IsSetCookieName, "true");
};

WebSites.prototype.DeleteLatestWeb = function(){
    this.cookie.DeleteCookie(LatestWebCookieName);
};

WebSites.prototype.SourceString = function(){
    if(this.IsSetCookie==true)
        return this.cookie.GetCookie(LatestWebCookieName);
    else
        return "";
};

WebSites.prototype.SiteArray = function(){
    //if(this.IsSetCookie==true)
    {
        var sites = this.cookie.GetCookie(LatestWebCookieName);
        if(sites != "")
        {
            var temp = sites.match(/([^\|\$]+?)\|([^\|\$]+)/ig);
            if(temp != null)
            {
                var a = new Array();
                for(var i=0;i<temp.length;i++)
                {
                    var site = new Site(temp[i]);
                    if(site.Success==true)
                    {
                        a.push(site);
                    }
                }
                if(a.length > 0)
                    return a;
                else
                    return null;
            }
            else
                return null;
        }
        else
            return null;
    }
    //else
        //return null;
};

WebSites.prototype.AddSite = function(sName, sUrl){
    if(this.IsSetCookie==true)
    {
        var sValue = sName.replace("|","%7C").replace("$","%24") + "|"
            + CompressUrl(sUrl.replace("|","%7C").replace("$","%24"));
        var temp = this.cookie.GetCookie(LatestWebCookieName)
        if(temp.indexOf(sValue) == -1)
        {
            var ar = this.SiteArray();
            if(ar!=null && ar.length>=LatestWebLimit)
            {
                sValue += "$" + temp.replace(/\$[^\$]+$/ig, "");
            }
            else
            {
                if(temp != "")
                    sValue += "$" + temp;
            }
            this.cookie.SetCookie(LatestWebCookieName, sValue);
        }
        else if(temp.indexOf(sValue) > 0)
        {
            temp = temp.replace("$" + sValue, "");
            sValue += "$" + temp;
            this.cookie.SetCookie(LatestWebCookieName, sValue);
        }
    }
};


function Site(siteString)
{
    var a = siteString.split("|");
    if(a.length == 2)
    {
        this.Success = true;
        this.Name = a[0].replace("%7C", "|").replace("%24", "$");
        this.Url = DecompressUrl(a[1].replace("%7C", "|").replace("%24", "$"));
    }
    else
        this.Success = false
}

function DecompressUrl(cUrl)
{
    var s = cUrl.replace(/^\s*(.+)\s*$/,"$1");
    s = s.replace(/^hw:/ig, "http://www.");
    s = s.replace(/^hsw:/ig, "https://www.");
    s = s.replace(/^h:/ig, "http://");
    s = s.replace(/^hs:/ig, "https://");
    s = s.replace(/^f:/ig, "ftp://");
    s = s.replace(/:m$/ig, ".com");
    s = s.replace(/:t$/ig, ".net");
    s = s.replace(/:mn$/ig, ".com.cn");
    s = s.replace(/:n$/ig, ".cn");
    return s;
}

function CompressUrl(sUrl)
{
    var s = sUrl.replace(/^\s*(.+)\s*$/,"$1");
    s = s.replace(/^http:\/\/www\./ig, "hw:");
    s = s.replace(/^https:\/\/www\./ig, "hsw:");
    s = s.replace(/^http:\/\//ig, "h:");
    s = s.replace(/^https:\/\//ig, "hs:");
    s = s.replace(/^ftp:\/\//ig, "f:");
    s = s.replace(/\.com\/?$/ig, ":m");
    s = s.replace(/\.net\/?$/ig, ":t");
    s = s.replace(/\.com\.cn\/?$/ig, ":mn");
    s = s.replace(/\.cn\/?$/ig, ":n");
    return s;
}




function Class(sName)
{
    this.Name = sName;
    this.Sites = new Array();
}

Class.prototype.toString = function(){
    return this.Name;
};



function Favorite()
{
    this.classLimit = 6;
    this.siteLimitPerClass = 10;
    this.cookie = new Cookie();
    this.ClassArray = null;
    this.InitializeArray();
}

Favorite.prototype.DeleteLatestWeb = function(){
    this.cookie.DeleteCookie(FavoriteWebCookieName);
};

Favorite.prototype.Save = function()
{
    if(this.ClassArray != null && this.ClassArray.length >= 0)
    {
        var c = "", s = "";
        for(var i=0;i<this.ClassArray.length;i++)
        {
            if(i > 0)
                c += "$";
            c += this.ClassArray[i].toString().replace("|","%7C").replace("$","%24");
            for(var j=0;j<this.ClassArray[i].Sites.length;j++)
            {
                if(s != "")
                    s += "$";
                s += i.toString() + "|" + this.ClassArray[i].Sites[j].Name.replace("|","%7C").replace("$","%24")
                    + "|" + CompressUrl(this.ClassArray[i].Sites[j].Url.replace("|","%7C").replace("$","%24"));
            }
        }
        this.cookie.SetCookie(FavoriteWebCookieName, c + "$$" + s);
        this.InitializeArray();
    }
};

Favorite.prototype.InitializeArray = function()
{
    this.ClassArray = null;
    var fav = this.cookie.GetCookie(FavoriteWebCookieName);
    if(fav == "")
        this.cookie.SetCookie(FavoriteWebCookieName, "My Favorite" + "$$");
    fav = this.cookie.GetCookie(FavoriteWebCookieName);
    if(fav != "")
    {
        var total = fav.split("$$");
        if(total.length == 2 && total[0] != "")
        {
            var cs = total[0].split("$");
            if(cs.length > 0 && cs.length <= this.classLimit)
            {
                var a = new Array();
                for(var i=0;i<cs.length;i++)
                {
                    a.push(new Class(cs[i].replace("%7C", "|").replace("%24", "$")));
                }
                this.ClassArray = a;
            }
            var re = new RegExp("[0-" + (this.ClassArray.length - 1).toString() + "]\\|([^\\|\\$]+?)\\|([^\\|\\$]+)","ig");
            var temp = total[1].match(re);
            if(temp != null)
            {
                for(var i=0;i<temp.length;i++)
                {
                    var site = new Site(temp[i].substr(2));
                    if(site.Success == true)
                    {
                        var sn = parseInt(temp[i].substr(0,1))
                        this.ClassArray[sn].Sites.push(site);
                    }
                }
            }
        }
        else
        {
            this.ClassArray = new Array();
        }
    }
    else
    {
        this.ClassArray = new Array();
    }
};

Favorite.prototype.AddClass = function(sName, iSN)
{
    var cName = sName.replace(/^\s*(.+)\s*$/,"$1");
    var cs = this.ClassArray;
    if(cs.length < this.classLimit)
    {
        for(var i=0;i<cs.length;i++)
        {
            if(cs[i].Name == cName)
                return false;
        }
        if(iSN>=0 && iSN<cs.length)
            cs.splice(iSN, 0, new Class(cName));
        else
            cs.push(new Class(cName));
        this.ClassArray = cs;
        this.Save();
        return true;
    }
    else
        return false
};

Favorite.prototype.EditClass = function(sName, iClassId)
{
    if(iClassId>=0 && iClassId<this.ClassArray.length)
    {
        this.ClassArray[iClassId].Name = sName;
        this.Save();
        return true;
    }
    else
        return false;
};

Favorite.prototype.DelClass = function(iClassId)
{
    if(iClassId>=0 && iClassId<this.ClassArray.length)
    {
        this.ClassArray.splice(iClassId, 1);
        this.Save();
        return true;
    }
    else
        return false;
};

Favorite.prototype.AddSite = function(sName, sUrl, iClassId)
{
    if(iClassId >=0 && iClassId < this.ClassArray.length)
    {
        if(this.ClassArray[iClassId].Sites.length < this.siteLimitPerClass)
        {
            var site = new Site("");
            site.Success = true;
            site.Name = sName;
            site.Url = sUrl;
            for(var i=0;i<this.ClassArray[iClassId].Sites.length;i++)
            {
                if(site.Name == this.ClassArray[iClassId].Sites[i].Name)
                    return false;
            }
            this.ClassArray[iClassId].Sites.push(site);
            this.Save();
            return true;
        }
        else
            return false;
    }
    else
        return false;
};

Favorite.prototype.EditSite = function(sName, sUrl, iClassId, iSiteSN)
{
    if(iClassId>=0 && iClassId<this.ClassArray.length)
    {
        if(iSiteSN>=0 && iSiteSN<this.ClassArray[iClassId].Sites.length)
        {
            this.ClassArray[iClassId].Sites[iSiteSN].Name = sName;
            this.ClassArray[iClassId].Sites[iSiteSN].Url = sUrl;
            this.Save();
            return true;
        }
        else
            return false;
    }
    else
        return false;
};

Favorite.prototype.DelSite = function(iClassId, iSiteSN)
{
    if(iClassId>=0 && iClassId<this.ClassArray.length)
    {
        if(iSiteSN>=0 && iSiteSN<this.ClassArray[iClassId].Sites.length)
        {
            this.ClassArray[iClassId].Sites.splice(iSiteSN, 1);
            this.Save();
            return true;
        }
        else
            return false;
    }
    else
        return false;
}

function SetIsSaveCookie(bIsSave)
{
    var web = new WebSites();
    web.SetIsSetCookie(bIsSave);
    OutputLog();
}

function OutputFavorites(isEdit)
{
    var d0 = document.getElementById("qian5");
	if(d0!=null)
	{
		var r;
		var f = new Favorite();
		var cs = f.ClassArray;
		r = '<table width="90%" border="0" align="right" cellpadding="2" cellspacing="0">';
		if(cs != null && cs.length > 0)
		{
			for(var i=0;i<cs.length;i++)
			{
				r += '<tr><td class="h1">';
				if(isEdit == true)
					r += '<span title="Edit Category Name" style="cursor:pointer;" onclick="ShowEditClass(' + i + ');">';
				r += cs[i].Name + ": ";
				if(isEdit == true)
					r += '</span><span title="Delete Category" style="cursor:pointer;color:red" onclick="DelFavoriteClass(' + i + ');">[-]</span>';
				r += '</td></tr><tr><td class="h2" height="40px;" valign="top">';
				for(var j=0;j<cs[i].Sites.length;j++)
				{
					r += '<a href="';
					if(isEdit == true)
						r += 'javascript:ShowEditSite(' + i + ',' + j + ');" target="_self">';
					else
						r += cs[i].Sites[j].Url + '" onClick="urchinTracker(\'/clicks/FavoriteUrl/\')">';
					r += cs[i].Sites[j].Name + '</a>';
					if(isEdit == true)
						r += '<span title="Delete Site" style="cursor:pointer;color:red" onclick="DelFavoriteSite(' + i + ',' + j + ');">[-]</span>&nbsp;&nbsp;&nbsp;&nbsp;';
					else
						r += '&nbsp;&nbsp;&nbsp;&nbsp;'
				}
				if(cs[i].Sites.length < f.siteLimitPerClass && isEdit == true)
					r += '<span style="cursor:pointer;color:#999" title="Add Site" onclick="ShowEditSite(' + i + ');">＋Add</span>';
				if(cs[i].Sites.length < 1 && isEdit == false){
					r += '<span style="cursor:pointer;font-size:11px;" onclick="ShowEditSite(' + i + ');">Add your favorite site here.</span>';
				}
				r += '</td></tr>'
			}
		}
		else
			r += '<tr><td class="h2"><span style="cursor:pointer;color:#999" title="Add Category" onclick="ShowEditClass();">＋Add Category</span></td></tr>';
		if(isEdit == false)
			r += '<tr><td align="right" class="h2"><span style="cursor:pointer;color:red;font-size:11px;" onclick="OutputFavorites(true);">[Edit]</span></a></td></tr>';
		else
			if(cs == null || cs.length < f.classLimit)
				r += '<tr><td align="right" class="h2"><table width="100%" border="0" align="center" cellpadding="2" cellspacing="0" class="h2"><tr><td align="left" width="90px;"><span style="cursor:pointer;color:#999;font-size:11px;" title="Add Category" onclick="ShowEditClass();">＋Add Category</span></td><td align="right"><span style="cursor:pointer;color:red;font-size:11px;" onclick="OutputFavorites(false);">[Save]</span></td></tr></table></td></tr>';
			else
				r += '<tr><td align="right" class="h2"><span style="cursor:pointer;color:red;font-size:11px;" onclick="OutputFavorites(false);">[Save]</span></td></tr>';
		r += '</table>';
		r += AddClassDivSource(f) + AddSiteDivSource(f, 0);
		d0.innerHTML = r;
	}
}

function getAbsolutePos(el)
{
	var SL = 0, ST = 0;
	var is_div = /^div$/i.test(el.tagName);
	if (is_div && el.scrollLeft)
		SL = el.scrollLeft;
	if (is_div && el.scrollTop)
		ST = el.scrollTop;
	var r = { x: el.offsetLeft - SL, y: el.offsetTop - ST };
	if (el.offsetParent)
	{
	  var tmp = this.getAbsolutePos(el.offsetParent);
	  r.x += tmp.x;
	  r.y += tmp.y;
	}
	return r;
}

function AddClassDivSource(favorite)
{
    var s = '<div id="AddClassDiv" style="float:left;display:none;position:absolute;width:420px;height:60px;background-color:#FFF;border:solid 1px #0000cc;font-size:11px">'
        + '    <div onclick="CloseAddClass();" style="width:14px;height:14px;float:right;font-size:12px;line-height:14px;overflow:hidden;padding-left:1px;'
        + '    margin-right:3px;margin-top:3px;border:solid 1px #ff9999;text-align:center;cursor:pointer; vertical-align:middle">×</div>'
        + '    <div style="float:left;width:120px;line-height:30px;font-weight:bold; border-right:solid 1px #0000cc">'
        + '        <div style="height:30px;width:100%;text-align:right;" padding-right:5px;>Category: </div>'
        + '        <div style="height:30px;width:100%;text-align:right;" padding-right:5px;>Order: </div>'
        + '    </div>'
        + '    <div style="float:left;line-height:30px;padding-left:2px;color:#999;width:260px">'
        + '        <div style="height:28px;padding-top:2px;width:100%">'
        + '            <input type="text" id="iClassName" style="height:22px;width:100px;"  maxlength="8"/>'
        + '            (max 8 characters)'
        + '        </div>'
        + '        <div style="height:28px;padding-top:2px;width:100%">'
        + '            <select id="iClassId">';
        
    for(var i=0;i<favorite.ClassArray.length;i++)
        s += '                <option value="' + i + '">' + (i + 1) + '</option>';
        
    s += '                <option value="' + favorite.ClassArray.length + '" selected>' + (favorite.ClassArray.length + 1) + '</option>'
        + '            </select>'
        + '            <input type="button" style="height:22px" id="iClassButton" onclick="AddFavoriteClass();" value="Add" />'
        + '            <input type="button" style="height:22px" onclick="CloseAddClass();" value="Cancel" />'
        + '        </div>'
        + '    </div>'
        + '</div>';
    return s;
}

function ShowEditClass(cId)
{
    var d0 = document.getElementById("qian5");
	if(d0!=null)
	{
		var d = document.getElementById("AddClassDiv");
		if(d != null)
		{
			var f = new Favorite();
			if(typeof(cId)!="undefined")
			{
				document.getElementById("iClassName").value = f.ClassArray[cId].Name;
				document.getElementById("iClassButton").onclick = EditFavoriteClass;
				document.getElementById("iClassButton").value = "Save";
				var iClassId = document.getElementById("iClassId");
				iClassId.selectedIndex = cId;
				iClassId.disabled = true;
			}
			else
			{
				document.getElementById("iClassName").value = "";
				document.getElementById("iClassButton").onclick = AddFavoriteClass;
				document.getElementById("iClassButton").value = "Add";
				var iClassId = document.getElementById("iClassId");
				iClassId.selectedIndex = f.ClassArray.length;
				iClassId.disabled = false;
			}
			var r = getAbsolutePos(d0);
			d.style.top = r.y + 40;
			d.style.left = r.x + 100;
			d.style.display = "";
		}
	}
}

function CloseAddClass()
{
    var d = document.getElementById("AddClassDiv");
    if(d != null)
    {
        d.style.display = "none";
    }
}

function AddFavoriteClass()
{
    var iName = document.getElementById("iClassName");
    var iClassId = document.getElementById("iClassId");
    if(iName != null && iClassId != null)
    {
        var cName = iName.value;
        var cId = parseInt(iClassId.value);
        var f = new Favorite();
        if(cName.binLength() <= 8 && cId >= 0 && cId <= f.ClassArray.length)
        {
            if(f.AddClass(cName, cId))
            {
                OutputFavorites(true);
            }
            else
                alert("False");
        }
        else
            alert("No more than 8 characters.");
    }
    else
        alert("Erro");
	urchinTracker ('/clicks/AddFavoriteClass/');
}

function EditFavoriteClass()
{
    var iName = document.getElementById("iClassName");
    var iClassId = document.getElementById("iClassId");
    if(iName != null && iClassId != null)
    {
        var cName = iName.value;
        var cId = parseInt(iClassId.value);
        var f = new Favorite();
        if(cName.binLength() <= 8 && cId >= 0 && cId < f.ClassArray.length)
        {
            if(f.EditClass(cName, cId))
            {
                alert("Edited");
                OutputFavorites(true);
            }
            else
                alert("False");
        }
        else
            alert("No more than 8 characters.");
    }
    else
        alert("Erro");
	urchinTracker ('/clicks/EditFavoriteClass/');
}

function DelFavoriteClass(cId)
{
    if(confirm("Delete the category will delete all the URLs it contains. \r\nConfirm to delete the URL?"))
    {
        var f = new Favorite();
        f.DelClass(cId);
        OutputFavorites(true);
    }
	urchinTracker ('/clicks/DelFavoriteClass/');
}

function AddSiteDivSource(favorite, cId)
{
    var s = '<div id="AddSiteDiv" style="display:none;position:absolute;width:320px;height:75px;background-color:#FFF;border:solid 1px #0000cc;font-size:11px">'
        + '    <div onclick="CloseAddSite();" style="width:14px;height:14px;float:right;font-size:12px;line-height:14px;overflow:hidden;padding-left:1px;'
        + '    margin-right:3px;margin-top:3px;border:solid 1px #ff9999;text-align:center;cursor:pointer; vertical-align:middle">×</div>'
        + '    <div style="float:left;width:60px;line-height:25px;font-weight:bold; border-right:solid 1px #0000cc">'
        + '        <div style="text-align:right;height:25px;width:100%">Title: </div>'
        + '        <div style="text-align:right;height:25px;width:100%">URL: </div>'
        + '        <div style="text-align:right;height:25px;width:100%">Category: </div>'
        + '    </div>'
        + '    <div style="width:230px;float:left;line-height:25px;padding-left:2px;color:#999">'
        + '        <div style="height:24px;padding-top:1px;width:100%">'
        + '            <input type="text" id="iWebName" style="height:22px;width:85px;" maxlength="10"/>'
        + '            (max 10 characters)'
        + '        </div>'
        + '        <div style="height:24px;padding-top:1px;width:100%">'
        + '            <input type="text" id="iWebUrl" style="height:22px;width:200px;" value="http://" />'
        + '        </div>'
        + '        <div style="height:24px;padding-top:1px;width:100%">'
        + '            <select id="iSiteClass">';
    
    for(var i=0;i<favorite.ClassArray.length;i++)
    {
        s += '                <option value="' + i + '"' + (i==cId?" selected":"") + '>' + favorite.ClassArray[i].Name + '</option>';
    }
    
    s += '            </select>'
        + '            <input onclick="AddFavoriteSite();" type="button" id="iSiteButton" style="height:22px" value="Add" />'
        + '            <input onclick="CloseAddSite();" style="height: 22px" type="button" value="Cancel" />'
        + '        </div>'
        + '    </div>'
        + '</div>';
    return s;
}

function ShowEditSite(cId, sId)
{
    var d0 = document.getElementById("qian5");
	if(d0!=null)
	{
		var d = document.getElementById("AddSiteDiv");
		if(d != null)
		{
			var se = document.getElementById("iSiteClass");
			se.selectedIndex = cId;
			if(typeof(sId)!="undefined")
			{
				se.disabled = true;
				var f = new Favorite();
				document.getElementById("iWebName").value = f.ClassArray[cId].Sites[sId].Name;
				document.getElementById("iWebUrl").value = f.ClassArray[cId].Sites[sId].Url;
				document.getElementById("iSiteButton").value = "Save";
				document.getElementById("iSiteButton").onclick = function()
				{
					var sName = document.getElementById("iWebName").value;
					var classId = cId;
					var siteId = sId;
					var sUrl = document.getElementById("iWebUrl").value;
					if(sName.binLength() <= 10 && classId >= 0 && classId <= f.ClassArray.length)
					{
						if(f.EditSite(sName, sUrl, classId, siteId))
						{
							alert("Edited");
							OutputFavorites(true);
						}
						else
							alert("False");
					}
					else
						alert("No more than 10 characters.");
				};
			}
			else
			{
				document.getElementById("iWebName").value = "";
				document.getElementById("iWebUrl").value = "http://";
				document.getElementById("iSiteButton").value = "Add";
				document.getElementById("iSiteButton").onclick = AddFavoriteSite;
				se.disabled = false;
			}
			var r = getAbsolutePos(d0);
			d.style.top = r.y + 40;
			d.style.left = r.x + 100;
			d.style.display = "";
		}
	}
}

function CloseAddSite()
{
    var d = document.getElementById("AddSiteDiv");
    if(d != null)
    {
        d.style.display = "none";
    }
}

function AddFavoriteSite()
{
    var iName = document.getElementById("iWebName");
    var iClassId = document.getElementById("iSiteClass");
    var iUrl = document.getElementById("iWebUrl");
    if(iName != null && iClassId != null && iUrl != null)
    {
        var sName = iName.value;
        var cId = parseInt(iClassId.value);
        var sUrl = iUrl.value;
        var f = new Favorite();
        if(sName.binLength() <= 10 && cId >= 0 && cId <= f.ClassArray.length)
        {
            if(f.AddSite(sName, sUrl, cId))
            {
                OutputFavorites(true);
            }
            else
                alert("Fasle");
        }
        else
            alert("No more than 10 characters.");
    }
    else
        alert("Erro");
	urchinTracker ('/clicks/AddFavoriteSite/');
}

function DelFavoriteSite(cId, sId)
{
    if(confirm("Delete This Site?"))
    {
        var f = new Favorite();
        f.DelSite(cId, sId);
        OutputFavorites(true);
    }
	urchinTracker ('/clicks/DelFavoriteSite/');	
}