/**
 * @author HubSpot
 * WebSiteGrader Client Side Library
 */


function SetCookie() {
if(arguments.length < 2) { return; }
var n = arguments[0];
var v = arguments[1];
var d = 0;
if(arguments.length > 2) { d = parseInt(arguments[2]); }
var exp = '';
if(d > 0) {
	var now = new Date();
	then = now.getTime() + (d * 24 * 60 * 60 * 1000);
	now.setTime(then);
	exp = '; expires=' + now.toGMTString();
	}
document.cookie = n + "=" + escape(String(v)) + '; path=/' + exp;
} // function SetCookie()

function ReadCookie(n) {
var cookiecontent = new String();
if(document.cookie.length > 0) {
	var cookiename = n+ '=';
	var cookiebegin = document.cookie.indexOf(cookiename);
	var cookieend = 0;
	if(cookiebegin > -1) {
		cookiebegin += cookiename.length;
		cookieend = document.cookie.indexOf(";",cookiebegin);
		if(cookieend < cookiebegin) { cookieend = document.cookie.length; }
		cookiecontent = document.cookie.substring(cookiebegin,cookieend);
		}
	}
return unescape(cookiecontent);
} // function ReadCookie()

function WSGLib(WSGProg, StartUpUrl,CurrentCompetitors,Product){
    var me = this;
    me.StartUpUrl = StartUpUrl;
    me.SendingEmail = false;
    me.WSGProg = WSGProg;
    me.SendEmailProgressDivID;
    me.WSGCurrentUrl;
    me.CurrentCompetitors=parseInt(CurrentCompetitors);
	
	me.UpgrdeManager=null;
	me.AddingNewCompetitor=false;
	me.Product=Product;
	me.DeletingCompetitors=false;
	
    me.Init = function(){
        YAHOO.util.Event.on(window, 'load', me.AutoGenerateReport, null, true);
        YAHOO.util.Event.on(window, 'keydown', me.IgnoreEscButtonClick, null, true);
        YAHOO.util.Event.on(window, 'load', DoClientAction('ToggleReportForm'), null, true);
        me.WSGProg.on('WorkItemFinished', me.OnWorkItemFinished, me.WSGProg, true);
        me.WSGProg.on('WorkItemErrored', me.OnWorkItemError, me.WSGProg, true);
        me.WSGProg.on('WorkItemProgress', me.WorkItemProgress, me.WSGProg, true);
        // check out the user token
        if(me.WSGProg.UserToken=="00000000-0000-0000-0000-000000000000" || me.WSGProg.UserToken=='undefined')
        {
			
            var currentUserToken=ReadCookie('hubspotutk');
            if(currentUserToken=='' || currentUserToken=='undefined')
            {
				
                currentUserToken= "";
		        for(var i = 0; i < 32; i++)
		        {
		         currentUserToken += Math.floor(Math.random() * 0xF).toString(0xF) ;
		        }
				//alert(currentUserToken);
		        me.WSGProg.UserToken=currentUserToken;
            }
        }
    }
    
    me.GenerateReport = function(){
        if (Page_ClientValidate()) {
        
            if (document.getElementById(UrlTextBox).value != '') {
                me.GetWebsiteReport();
            }
            else {
                document.getElementById("WSGReportSection").innerHTML = "Please enter a url.";
            }
        }
    }
    
    me.ShowComparedDiv = function(CompareDivID){
        document.getElementById(CompareDivID).style.display = "";
    }
    
    me.AutoGenerateReport = function(){
        if (StartupUrl != '') {
            document.getElementById(UrlTextBox).value = StartupUrl;
            me.GenerateReport();
        }
    }
    
    me.IgnoreEscButtonClick = function(e){
        if (e.keyCode == 27) {
            e.preventDefault();
            e.cancelBubble = true;
            e.returnValue = false;
            e.stopPropagation();
        }
    }
    
    me.GetWebsiteReport = function(Ext){
        document.getElementById('WSGReportSection').innerHTML = "";
        WSGProg.SetUserID(UserID);
        WSGProg.SetModuleID(ModuleID);
        WSGProg.SetTabModuleID(TabModuleID);
		me.WSGCurrentUrl=document.getElementById(UrlTextBox).value;
        var ReqParams = "";
        ReqParams += '&PID=' + PortalID;
        ReqParams += '&TabID=' + TabID;
        ReqParams += '&Action=CreateReport';
        ReqParams += '&AID=' + AID;
        ReqParams += '&ECID=' + ECID;
        ReqParams += '&ForSA=' + IntWSG;
        ReqParams += '&Ext=' + Ext;
	    ReqParams += '&GraderMode=' + GraderMode;
        ReqParams += '&URL=' + encodeURIComponent(document.getElementById(UrlTextBox).value);
        if (document.getElementById(EmailTextBox) != null) {
            ReqParams += '&Email=' + encodeURIComponent(document.getElementById(EmailTextBox).value);
        }
        
        ReqParams += '&Keywords=' + encodeURIComponent(document.getElementById(KeywordsTextBox).value);
        ReqParams += '&CompsUrls=' + encodeURIComponent(document.getElementById(CompTextBox).value);
        if (document.getElementById(DashBoardCheckBox) != null) {
            ReqParams += '&AddDashboard=' + encodeURIComponent(document.getElementById(DashBoardCheckBox).checked);
        }
        ReqParams += '&UIP=' + IP;
        ReqParams += '&BURL=' + LeadURL;
        //OptIn Parameters
        
        if (document.getElementById(OptInCheckBox) != null) {
            if (document.getElementById(OptInCheckBox).checked) {
                
                ReqParams += '&EOI=1';
            }
            else {
                ReqParams += '&EOI=2';
            }
        }
        else {
            ReqParams += '&EOI=0';
        }
        
        if (Page_ClientValidate("CreateReport")) {
            window.location.href = "#ReportTop";
            try {
                WSGUIEnable(false, document.getElementById(UrlTextBox).value);
            } 
            catch (e) {
            }
            //disable button
            document.getElementById(GenerateButtonID).setAttribute('disabled', 'true');
            WSGProg.PrintMessage("Initializing for " + document.getElementById(UrlTextBox).value + "...", true);
            WSGProg.StartRequest('WSGReport', ReqParams, 0);
        }
        else {
            //document.getElementById("WSGReportSection").innerHTML="Invalid Url";
        }
        
    }
    
    me.OnWorkItemFinished = function(evname, args){
        var Content = args[1];
        if (me.SendingEmail == true) {
            me.SendingEmail=false;
            var MailProg = document.getElementById(me.SendEmailProgressDivID);
            MailProg.innerHTML = Content;
        } else {
            document.getElementById(GenerateButtonID).removeAttribute('disabled');
            try {
                WSGUIEnable(true, document.getElementById(UrlTextBox).value);
            } 
            catch (e) {
            }
               
                if(me.AddingNewCompetitor && Content.indexOf("Failed to retrieve page content") <0 )
				{
					//alert("Before " + me.CurrentCompetitors )
					me.CurrentCompetitors=me.CurrentCompetitors +1;
					me.AddingNewCompetitor=false;
				}
				//alert("After "+me.CurrentCompetitors );
				jQuery("span#WSGReportSection").html(Content);

                //Skin Code
                if (document.getElementById("rightcol") != null) {
                    document.getElementById("rightcol").style.display = "none";
                }
                if (document.getElementById("maincol") != null) {
                    document.getElementById("maincol").style.width = "100%";
                }
			
				// Do Badge Switching
				var Badge1=document.getElementById(Badge1ID);
				var Badge2=document.getElementById(Badge2ID);
				if(IntWSG =='False')
				{    
					
					if(Badge1!=null)
					{
						Badge1.style.display="block"	;
					}
					if(Badge2!=null)
					{
						Badge2.style.display="none";
					}
						
				}
				else{
					if(Badge1!=null)
					{
						Badge1.style.display="none"	;
					}
					if(Badge2!=null)
					{
						Badge2.style.display="block";
					}
				}
                // End Skin Code
                //refresh Grid
                try {
                    RefreshDashboard()
                } 
                catch (Exception) {
                    //alert(Exception.message);
                }
                
            
            window.location.href = "#ReportTop";
        }
    }
    
    me.OnWorkItemError = function(evname, args){
        document.getElementById('WSGReportSection').innerHTML = args[2];
        
        //alert(args[2]);
        document.getElementById(GenerateButtonID).removeAttribute('disabled');
        try {
            WSGUIEnable(true, document.getElementById(UrlTextBox).value);
        } 
        catch (e) {
        }
        window.location.href = "#ReportTop";
    }
    
    me.ToggleReportForm = function(){
        var x = document.getElementById("Drill");
        if (x != null) {
            me.ShowHideReportForm("none");
            me.ChangeLayout();
        }
        else {
            me.ShowHideReportForm("block");
        }
        
        var ProgCont = document.getElementById("ProgCont");
        var HistChart = document.getElementById("HistChart");
        if (ProgCont != null && HistChart != null) {
            ProgCont.style.display = "none";
        }
    }
    
    me.ShowHideReportForm = function(State){
        var g = document.getElementById("ReportForm");
        if (g != null) {
            g.style.display = State;
        }
    }
    
    me.ChangeLayout = function(){
        if (document.getElementById("rightcol") != null) {
            window.clearInterval(XT);
            document.getElementById("rightcol").style.display = "none";
        }
        if (document.getElementById("maincol") != null) {
            document.getElementById("maincol").style.width = "100%";
        }
    }
    
    me.ValidateEmail = function(){
        var txtEmail = document.getElementById("txtEmail");
        if (txtEmail != null) {
            if (txtEmail.value != "") {
                var emailReg = "^[\\w-_\.]*[\\w-_\.]\@[\\w]\.+[\\w]+[\\w]$";
                var regex = new RegExp(emailReg);
                if (!regex.test(txtEmail.value)) {
                    var ErrorDiv = document.getElementById("Error");
                    ErrorDiv.innerHTML = "Invalid email address";
                    return false;
                }
            }
            else {
                var ErrorDiv = document.getElementById("Error");
                ErrorDiv.innerHTML = "Please enter your email";
                return false;
            }
        }
        return true;
    }
    
    me.ValidateUserUrl = function(source, arguments){
    
        var Value = arguments.Value;
        
        var StrToCheck = Value.replace(/^\s+|\s+$/, '');
        
        myregexp = new RegExp(document.getElementById("RegexBox").value);
        if (StrToCheck.match(myregexp)) {
            arguments.IsValid = true;
        }
        else {
            arguments.IsValid = false;
        }
    }
    
    me.ChartRequestStarted = function(){
    
    }
    
    me.ChartRequestEnded = function(){
    
        me.WSGProg.Abort(null);
    }
    
    me.SendWSGReportLink = function(Email, Link, ErrorDiv){
        me.SendEmailProgressDivID = ErrorDiv;
        me.SendingEmail = true;
        WSGProg.SetUserID(UserID);
        WSGProg.SetModuleID(ModuleID);
        WSGProg.SetTabModuleID(TabModuleID);
        var Link = document.getElementById(Link);
        var URL = document.getElementById(URL);
        var ReqParams = "";
        ReqParams += '&PID=' + PortalID;
        ReqParams += '&TabID=' + TabID;
        ReqParams += '&Action=SendEmail';
        ReqParams += '&URL=' + encodeURIComponent(me.WSGCurrentUrl);
        ReqParams += '&Email=' + encodeURIComponent(Email);
        ReqParams += '&UIP=' + IP;
        ReqParams += '&ForSA=' + IntWSG;
        ReqParams += '&ReportLink=' + encodeURIComponent(Link.href);
        
       var MailProg = document.getElementById(me.SendEmailProgressDivID);
       MailProg.innerHTML = "<img src='/hsimages/hubspot_load5.gif' border='0'/>&nbsp; Sending To "+Email+" , Please Wait ... ";
        WSGProg.StartRequest('SendEmail', ReqParams, 0);
        
    }
    
    me.WorkItemProgress = function(evname, args){
        if (me.SendingEmail == true) {
            
            //Get Progress Message Div
            var ProgMsgDiv = document.getElementById('wb-progress-span');
			var MailProg = document.getElementById(me.SendEmailProgressDivID);
            MailProg.innerHTML = "<img src='/hsimages/hubspot_load5.gif' border='0'/>&nbsp; "+ProgMsgDiv.innerHTML;
        }

    }

	me.showExceededLimitPanel=function()
	{
		var messageId=0;
		if(me.Product=='express'){
			 messageId=6;
		}
		else if(me.Product=='owner'){
			 messageId=7;
		}
		huiUpgrade.init('websiteGrader','competitors',me.CurrentCompetitors,MaxCompetitorsCount,me.Product,UpgrdeToProduct,me.Upgrade)
		//productUpgrade.init('WebsiteGrader', messageId,me.Upgrade);
	}
	
    me.RequestStarted=function(sender,arguments)
   {
	 var Target=arguments.EventTarget;
     if(me.DeletingCompetitors)
	 {
	 	
	 	me.CurrentCompetitors=me.CurrentCompetitors-1;
		me.DeletingCompetitors=false;
	 }
	  
  }

	me.Upgrade=function()
	{
		
        //productUpgrade.showProcessing();
		huiUpgrade.showProcessing();
		DoTheCallback("Upgrade", 0);
	}

	me.OnUpgradeFinished=function(evname, args)
	{
	    var result=parseInt(evname)
		if( result !=-1)
		{
			MaxCompetitorsCount= result;
			//productUpgrade.showThanks();
			huiUpgrade.showThanks();
		}
		else
		{
		   //Show Error
		   //alert('upgrade failed for some reason');
		   huiUpgrade.upgradeFailed();
		}
	}
	
	me.CheckCurrentCompetitors=function(MaxCompetitors)
	{
		return me.CurrentCompetitors < MaxCompetitors;
	}
}

var SendLinkByMail = function(URL, Mail, Link, CBHURL, ErrorDiv){
    this.ErrorDiv = document.getElementById(ErrorDiv);
    this.CBUrl = CBHURL;
    this.Asynch = null;
    this.Mail = Mail;
    this.Link = document.getElementById(Link);
    this.URL = document.getElementById(URL);
    
    this.init = function(){
    
        this.Abort = false;
    }
    
    this.abort = function(){
        this.Abort = true;
    }
    
    this.handleSuccess = function(o){
        var xml = o.responseXML;
        var Success = xml.getElementsByTagName('s')[0];
        if (Success.firstChild.nodeValue == 'true') {
            this.ErrorDiv.innerHTML = "Email Sent Successfully.";
        }
        else {
            var Error = xml.getElementsByTagName('error')[0];
            this.ErrorDiv.innerHTML = Error.firstChild.nodeValue;
        }
        this.Link.disabled = false;
    }
    
    this.handleFailure = function(o){
        this.ErrorDiv.innerHTML = "Server contact failed, please try again.";
        this.Link.disabled = false;
    }
    
    this.startRequest = function(){
        if (this.Abort) {
            this.init();
            return;
        }
        if (this.Asynch != null) 
            if (YAHOO.util.Connect.isCallInProgress(this.Asynch)) 
                return;
        this.Link.disabled = true;
        var callback = {
            success: this.handleSuccess,
            failure: this.handleFailure,
            timeout: 5000,
            scope: this
        };
        
        this.ErrorDiv.innerHTML = "Sending Please Wait ...";
        
        // the url QS is commented because we get it from the session
        var Url = this.CBUrl + '&Action=SendReportLink' + '&Email=' + encodeURIComponent(this.Mail) + '&ReportLink=' + encodeURIComponent(this.Link.href) + '&URL=' + encodeURIComponent(this.URL.value);
        this.Asynch = YAHOO.util.Connect.asyncRequest('GET', Url, callback);
    }
}

function ToggleFromCalendar(renderDay, e){
    var DateRangeDDL = GetDateRange();
    DateRangeDDL.value = "-100";
}

function ToggleFromDateRange(){
    var DateRangeDDL = GetDateRange();
    var FromDate = GetFromDate();
	var ToDate = GetToDate();
//	alert(ToDate);
    var CustomDateTable = GetCustomDateTable();
    var DR = 0;
    if (DateRangeDDL.value == "-100") {
        DR = 6
        var Now = new Date();
        var From = new Date(Now - DR * 24 * 60 * 60 * 1000);
        
        ToDate.SetDate(Now);
        FromDate.SetDate(From);
        
        CustomDateTable.style.display = 'block';
        CustomDateTable.style.visibility = 'visible';
    }
    else {
        CustomDateTable.style.display = 'none';
        CustomDateTable.style.visibility = 'hidden';
        var DivObj = document.getElementById("dvDateError");
        if (DivObj != null) {
            DivObj.innerHTML = "";
        }
    }
}

function GetDateParams(){
    var DateRangeDDL = GetDateRange();
    if (DateRangeDDL == null) 
        return 'dr=30';
    var FromDate = GetFromDate();
    var ToDate = GetToDate();
    var s = '';
    if (DateRangeDDL.value == "-100") { //return
        s = 'sd=' + encodeURIComponent(FormateDate(FromDate.GetDate())) + '&ed=' + encodeURIComponent(FormateDate(ToDate.GetDate())) + '&';
    }
    //else
    return s += 'dr=' + DateRangeDDL.value;
}

function HideCloaps(Parent, Child){
    var P = document.getElementById(Parent);
    var C = document.getElementById(Child);
    if (C != null) {
        if (C.style.display == 'none') {
            C.style.display = 'block';
        }
        else {
            C.style.display = 'none'
        }
    }
}

function ISLongText(Text){
    if (Text.length > 50) {
        return true;
    }
    else {
        return false;
    }
}

function CreateItemCell(ItemText){
    if (ISLongText(ItemText)) {
        var Display = ItemText.substr(0, 47);
        document.write("<td title='" + ItemText + "'>" + Display + "...</td>");
    }
    else {
        document.write("<td title='" + ItemText + "'>" + ItemText + "</td>");
    }
}

function CreateAnchorItemCell(Anchor, ItemText){
    if (ISLongText(ItemText)) {
        var Display = ItemText.substr(0, 47);
        document.write("<td title='" + ItemText + "'><a href='" + Anchor + "'>" + Display + "...</a></td>");
    }
    else {
        document.write("<td title='" + ItemText + "'><a href='" + Anchor + "'>" + ItemText + "...</a></td>");
    }
}

function CreateShortLink(Anchor, AnchorText){

    if (ISLongText(AnchorText)) {
        var Display = AnchorText.substr(0, 47);
        document.write("<a title='" + AnchorText + "' href='" + Anchor + "'>" + Display + "...</a>");
    }
    else {
        document.write("<a title='" + AnchorText + "' href='" + Anchor + "'>" + AnchorText + "</a>");
    }
}

function Return301RedirectUrl(Domain){
    if (Domain.indexOf("www") == 0) {
        var x = Domain.replace("www.", "");
        document.write(x);
    }
    else {
        document.write("www." + Domain);
    }
}

function DoClientAction(Action,Arg1,Arg2,Arg3)
{
    switch(Action)
    {
        case "ToggleReportForm":
            Lib.ToggleReportForm();
        break;
        
        case "GenerateReport":
           Lib.GenerateReport(false)
        break;
        
        case "SendReportLink":
            if(Lib.ValidateEmail())
            {
                Lib.SendWSGReportLink(document.getElementById("txtEmail").value,"ReportLink",'Error');
            }
        break;   
        
        case "ExternalReportGeneration":
        
            var URLTextBox=document.getElementById(URLTextBoxID);
		    if(URLTextBox!=null)URLTextBox.value=Arg1;
		    var CompareCheckBox=document.getElementById(DashBoardCheckBox);
		    if(CompareCheckBox!=null)CompareCheckBox.checked=true;
		    // if ture we are adding a new competitor, otherwise we are grading a url form dashboard
		    if(Arg2)
		    {
		        if(!Page_ClientValidate())
	            {
	                return;
	            }
	            if(IntWSG=='True')
	            {
	              Lib.AddingNewCompetitor=true;
	            }  
		    }

		    if( (Lib.CheckCurrentCompetitors(MaxCompetitorsCount)) || (!EnableLimits) || (IntWSG=='False') || (Arg2==false))
            {
		        Lib.GetWebsiteReport(!Arg2);
		    }
		    else
		    {
		        Lib.showExceededLimitPanel();
		    }
        break;
    }
}

function SendEmail()
{
    DoClientAction("SendReportLink");
}

function ShowPopupOnclick(pick)
			{
				var picker;
				if (pick == 'from')
					picker = GetFromDate();
				else if (pick == 'to')
					picker = GetToDate();
					
				var textBox = picker.GetTextBox();
				var popupElement = picker.GetPopupContainer();

				var dimensions = picker.GetElementDimensions(textBox);
				var position = picker.GetElementPosition(textBox);

				picker.ShowPopup(position.x, position.y+dimensions.height);		
			}
			
function RemoveChartSeries(e,SeriesIndex)
{

    Lib.WSGProg.PrintMessage('Contacting servers',true);
    ChartCB.call(e,DChartID,'LegendClick::'+SeriesIndex);
}

function GetCustomDateTable()
{
	return document.getElementById(CustomeDateTableID);
}

function GetFromDate()
{
	if (typeof( FromDateID) == 'undefined')
		return null;
	
	//return  document.getElementById(FromDateID);
	return window[FromDateID];
}

function GetToDate()
{
	if (typeof( ToDateID) == 'undefined')
		return null;
	
	//return  document.getElementById(ToDateID);
		return window[ToDateID];
}

function FormateDate(D)
{
    var ret = (D.getMonth()+1) + '/' + D.getDate() + '/' + D.getFullYear();
    return ret;
}

function GetDateRange()
{

	return document.getElementById(DateRangeID);
}

function DisplayReport(Metric, DrillMode,InWSG)
{
    //Validate Dates
    var FromDate=GetFromDate();
    var ToDate=GetToDate();
    var DateRange=GetDateRange();
    var DivObj=document.getElementById("dvDateError");
   
    if( DivObj !=null)DivObj.innerHTML="";
    if (FromDate!=null && ToDate!=null && DateRange !=null && DateRange.value=="-100")
    {
        var FD=FromDate.GetDate();
        //alert(FD);
        var FFD=Date.UTC( FD.getYear(), FD.getMonth()+1, FD.getDate(),0,0,0);
        var TD=ToDate.GetDate();
        //alert(TD);
        var TTD=Date.UTC( TD.getYear(), TD.getMonth()+1, TD.getDate(),0,0,0);
        if( FFD>TTD ) 
        {
        DivObj.innerHTML="Invalid Date Range.From Date cannot be after To Date!";
        return false;
        }
    }
    if(DivObj!=null)DivObj.innerHTML="";
    //alert(InWSG);
    if(InWSG==1)
    {
        window.location.href = BaseUrl+'&' + GetDateParams() + '&met=' + encodeURIComponent(Metric) + '&dm=' + DrillMode;
    }
    else
    {
        window.location.href = BaseUrl+'?' + GetDateParams() + '&met=' + encodeURIComponent(Metric) + '&dm=' + DrillMode;
    }
	
}

function RefreshDashboard()
{
     
     window[GridCID].AjaxRequest(CtrlUID,"Rebind");
     try
     {
       Lib.ShowComparedDiv(CompareDivID);
     }
     catch(ex)
     {
     }
}

function WSGUIEnable(Enabled,Val)
{
    
    var Tx=document.getElementById(CompetitorTxID);
    var Btn=document.getElementById(AddCompetitorBtnID);
    
    if(Tx !=null)
    {
        if(!Enabled)
        {
        Tx.value=Val;
        }
    }
    if(Btn!=null)
    {
        if(Enabled)
       {
         Btn.removeAttribute('disabled');
       }
       else
       {
        Btn.setAttribute('disabled', 'true');
       }
    }
}
