﻿var audienceData; //reusable XML holder for audience and duration list.
var m_Hide;
var m_Change;

function WWEClient() {
    this.showList = function(e, callback, log, senderObj, target, type, audience, duration, count, locale)
    {
        var sender          = _(e); //might be null
        var xgData;
        var params =    "type="         + $(senderObj).getAttribute("type") + 
                        "&audience="    + audience +
                        "&duration="    + duration +
                        "&count="       + count + 
                        "&locale="      + locale;
        
        var req = buildRequest("Handlers/EventList.ashx",true,params); //read from config, add auth
		req.onreadystatechange = function(){
			if (req.readyState == 4 && req.status == 200)
			{
				var status_code;
				var status_text;
				try
				{
					status_code = req.status;
					status_text = req.statusText;
				}
				catch(e) {
				    reportException(e,target);
				}
				if (status_code == 200 && req.responseText && req.responseText.indexOf("Error.aspx") == -1)
				{
				    if(req.responseXML)
				    {
				        xgData = req.responseXML;
				        
				        m_Change = xgData.documentElement.getAttribute("change");
				        m_Hide = xgData.documentElement.getAttribute("hide");
				        
				        var transformed;
				        try
				        {
				            $(target).innerHTML = null;
				            transformXsl("xsl/EventList.xsl",false,$(target),xgData,document,exSortKey,exSortType, exOrder, exDataType);
				        }catch(e){
				            reportException(e,target);
				        }
				    }
		        }
		        else
		        {
		            $(target).innerHTML = (req.responseText);
		            //req = null;
		        }
		        if(callback && eval("window."+callback))
                {
                    eval(callback+"(e || sender, log)");
                }
		    }
		} //virtual will only work here in IE7
		req.send(params);
    }.virtual(this);
    
    this.expand = function(e, callback, log, type) {
        var sender      = _(e);
        var pnlFilter   = $("pnlFilter"+type);
        var ddlTargetAud= $("ta"+type);
        var ddlDuration = $("dn"+type);
        var trDuration  = $("trDuration"+type);
        
        if(pnlFilter.style.display === "none")
        {
            $('change'+type).innerHTML = m_Hide;
            pnlFilter.style.display = "inline"
            if(ddlTargetAud.options.length > 1)
            {
                return; //no need to make a call when there's something already loaded
            }
        }
        else
        {
            $('change'+type).innerHTML = m_Change;
            pnlFilter.style.display = "none";
            return;
        }
        
        var target      = $("div"+type);   
        var culture     = $(target.getAttribute("container")).getAttribute("locale");
                       
        var params      =       "language=" + culture.split("-")[0] + 
                                "&country=" + culture.split("-")[1];
        if(audienceData != null)
        {
            eval("WWE"+type).renderAudienceEtAl(target, type);
            if(callback)
                eval(callback+"(e || event,log)");
            return;
        }    
                                
        var req = buildRequest("Handlers/Gatherer.ashx",true,params); //read from config, add auth
		req.onreadystatechange = function(){
			if (req.readyState == 4 && req.status == 200)
			{
				var status_code;
				var status_text;
				try
				{
					status_code = req.status;
					status_text = req.statusText;
				}
				catch(e) {
				    reportException(e,target.id);
				}
				if (status_code == 200 && req.responseText && req.responseText.indexOf("Error.aspx") == -1)
				{
				    if(req.responseXML)
				    {
				        audienceData = req.responseXML;
				        eval("WWE"+type).renderAudienceEtAl(target, type);
				    }
		        }
		        else
		        {
		            $(target).innerHTML = "Error occurred while processing your request, please refresh";
		        }
                
		        if(callback)
                {
                    eval(callback+"(e || event,log)");
                }
		    }
		}
		req.send(params);
    }.virtual(this);
    
    //#### it renders the target audience and duration drop downs
    this.renderAudienceEtAl = function(target, type)
    {
        var pnlFilter   = $("pnlFilter"+type);
        var ddlTargetAud= $("ta"+type);
        var ddlDuration = $("dn"+type);
        var trDuration  = $("trDuration"+type);
        
        try
        {
            var nodesForTA = audienceData.selectNodes("/root/audience/item");
            if(nodesForTA && nodesForTA.length > 0)
            {
                ddlTargetAud.options.length = 0;
                var selectedAudience = getCookie("ta"+type);
                for(var i=0 ; i<nodesForTA.length; i++)
                {
                    var opt = new Option(nodesForTA[i].getAttribute("val"), nodesForTA[i].getAttribute("id"));
                    ddlTargetAud.options[ddlTargetAud.options.length] = opt;
                    
                    if(selectedAudience === nodesForTA[i].getAttribute("id"))
                        opt.selected = true;
                }
            }
            
            var nodesForDn = audienceData.selectNodes("/root/duration/item");
            if(nodesForDn && nodesForDn.length > 0 && type < 3) //only for duration based events 
            {
                ddlDuration.options.length  = 0;
                var selectedDuration = getCookie("dn"+type);
                for(var i=0 ; i<nodesForDn.length; i++)
                {
                    var opt = new Option(nodesForDn[i].getAttribute("val"), nodesForDn[i].getAttribute("id"));
                    ddlDuration.options[ddlDuration.options.length] = opt;
                    
                    if(selectedDuration === nodesForDn[i].getAttribute("id"))
                        opt.selected = true;
                }
            }
            else
            {
                trDuration.style.display    = "none";
            }
        }catch(e){
            reportException(e,target.id);
        }
    }.virtual(this);
    
    //#### updates the content in EventList control on the basis of selected audience and duration
    this.updateSelection = function(e, callback, log, type)
    {
        var sender          = _(e); //get object from event
        var holder          = $("div"+type).getAttribute("container");
        var ddlTargetAud    = $("ta"+type);
        var ddlDuration     = $("dn"+type);
        var duration        = type < 3 ? ddlDuration.options[ddlDuration.selectedIndex].value : 0;
        var targetAudience  = ddlTargetAud.options[ddlTargetAud.selectedIndex].value;
        createCookie("ta"+type,targetAudience);
        createCookie("dn"+type,duration);
        this.showList.invoke(e, callback, holder,"div"+type,type,targetAudience, duration, $(holder).getAttribute("count"), $(holder).getAttribute("locale"), log);
    }.virtual(this); 
}

function expandCallback(e, log)
{
    if(e && log)
    {
        log.endTime = new Date().getTime();//toGMTString();
        log.entry(e,_(e));
    }
}


function listCallback(e, log)
{
    if(e && log)
    {
        log.endTime = new Date().getTime();//.toGMTString();
        log.entry(e,_(e));
    }
}

function doNothing(e)
{

}