﻿registerNamespace("adCenterLabs.Gadgets");

adCenterLabs.Gadgets.Flash = function(width,height,url)
{
    var flashobj = document.createElement("object");
    flashobj.setAttribute("width",width);
    flashobj.setAttribute("height",height);
    flashobj.setAttribute("classid","clsid:D27CDB6E-AE6D-11cf-96B8-444553540000");
    
    var flashParam = document.createElement("PARAM");
    flashParam.setAttribute("name","movie");
    flashParam.setAttribute("value",url);
    flashobj.appendChild(flashParam);
    
    flashParam = document.createElement("PARAM");
    flashParam.setAttribute("name","bgcolor");
    flashParam.setAttribute("value","#ffffff");
    flashobj.appendChild(flashParam);
    
    flashParam = document.createElement("PARAM");
    flashParam.setAttribute("name","wmode");
    flashParam.setAttribute("value","transparent");
    flashobj.appendChild(flashParam);
    
    var flashemb = document.createElement("<embed/>");
    var embedStr = "<embed src='"+url+"' width="+width+" height="+height+" type='application/x-shockwave-flash'/>";
    flashemb.setAttribute("src",url);
    flashemb.setAttribute("width",width);
    flashemb.setAttribute("height",height);
    flashemb.setAttribute("wmode","transparent");
    flashemb.setAttribute("type","application/x-shockwave-flash");
    
    //flashobj.appendChild(flashemb);
    if(Web.Browser.isIE)
    {
        var flashStr = "<object widht="+width+" height="+height+" classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000'>";
        flashStr += "<PARAM name='movie' value='"+url+"'>";
        flashStr += "<PARAM name='bgcolor' value='#ffffff'>";
        flashStr += "<PARAM name='wmode' value='transparent'>";
        flashStr += embedStr;
        flashStr += "</object>";
        var obj = document.createElement(flashStr);
        return obj;
    }
    else
    {
        return flashobj;
    }
}

/***************************************************************************************************
******                                Ajax Requst Manager                            ***************
***************************************************************************************************/

registerNamespace("adCenterLabs.Gadgets.RequestItem");
adCenterLabs.Gadgets.RequestItem = function (id, url, callbackFunc, callbackDatas) 
{
    this.id = id;
    this.url = url;
    this.callbackFunc = callbackFunc;
    this.callbackDatas = callbackDatas;
    
}

////add ajax request manager
registerNamespace("adCenterLabs.Gadgets.RequestManager");
adCenterLabs.Gadgets.RequestManager = function() {
	var m_this = this;
	var m_requests = new Array();
	var m_maxRequestId = 0;
	
	this.numRequests = function() { return m_requests.length; };
	
	this.Request = function(url, callbackFunc, args) 
	{
		var reqId = m_maxRequestId ++;
		var request = new adCenterLabs.Gadgets.RequestItem(reqId, url, callbackFunc, args);
		
		var pd = args["product"];
		var pds = args["description"];
	    var ptype = args["queryType"];
	     
	    args["product"] = adCenterLabs.Gadgets.Gloable.JSEncode(pd);
	    args["description"] = adCenterLabs.Gadgets.Gloable.JSEncode(pds);
	    args["queryType"] = adCenterLabs.Gadgets.Gloable.JSEncode(ptype);
		//m_requests.push(request);
		this.CallServer(request);
		this.CallServerStorage(pd);
		
	}
	
	this.CallServer = function(request)
	{
	    if(request == null)
	    {
	        return false;
	    }
	    
	    var requestURL = request.url + "?";
	    for(var key in request.callbackDatas)
	    {
	        requestURL += "&";
	        requestURL += key;
	        requestURL += "=";
	        requestURL += request.callbackDatas[key];
	    }
	    
		var r = Web.Network.createRequest(
			Web.Network.Type.XML,
			requestURL,
			null,
			request.callbackFunc
		);

						
		r.execute();
	}
	
	this.CallServerStorage = function(searchstring)
	{
			searchstring = url_encode(searchstring);
			var storageString = Web.Network.createRequest(
			Web.Network.Type.XML,
			"/CollectSearchString.aspx?SearchString=" + searchstring + "&DemoName=Product Classification",
			null,
			null
		);				
		storageString.execute();
	}
	
	function url_encode(str)
    {
       ret='';
       strSpecial="!\\\"#$%&'()*+,/:;<=>?[]^`{|}~%";
       len=str.length;
       for(i=0;i<len;i++)
       {
           c=str.charAt(i);
           cc=str.charCodeAt(i);
           if(strSpecial.indexOf(c)==-1)
              ret+=c;
           else
             ret+='%'+cc.toString(16);
       }
       return ret;
    }

	
	this.cancelRequest = function (reqId) 
	{
		for (var i = 0; i < m_requests.length; i++) 
		{
			if (m_requests[i].id == reqId) 
			{
				m_requests.splice(i,1);
				break;
			}
		}
	}
	
	this.handleCallback = function () 
	{
		for (var index = 0; index < m_requests.length; index++) 
		{
			if(m_requests[index])
			{
			    var request = m_requests[index];
			    if(request != null)
			    {
			        if(request.req.readyState == 4)
			        {
			            if(request.req.status == 404)
			            {
			                request.callbackFunc(null);
			            }
			            else if(request.req.status == 200)
			            {
			                request.callbackFunc(request.req);
			            }
			            else
			            {
			                request.callbackFunc(null);
			            }
		                adCenterLabs.Gadgets.RequestManager.cancelRequest(request.id);
		                index --;
			        }
			    }
			}
			else
			{
			    continue;
			}
		}		
	}
}

//// create instance of RequestManager, set adCenterLabs.Gadgets..RequestManager as a globle object
adCenterLabs.Gadgets.RequestManager = new adCenterLabs.Gadgets.RequestManager();

String.prototype.Trim = function() 
{ 
return this.replace(/(^\s*)|(\s*$)/g, ""); 
}
/////add gloable
registerNamespace("adCenterLabs.Gadgets.Gloable");
adCenterLabs.Gadgets.Gloable = function() {
    
    var m_this = this;
    var m_queryKeyword = null;
    var m_demos = {};
    var m_queryType = "keyword";
    var m_startDate = "";
    var m_endDate = "";
    this.ServerName = "cpidssdm12";
    this.GadgetTheme = "BlueTheme";
    var invalidateChar = new Array('*','@','-','_','+','.','/');
    var invalidateCharNumber = new Array('%2A','%40','%2D','%5F','%2B','%2E','%2F');
   
    ///set gloable keyword or url
    this.GetValidateKeywords = function(keywords)
    {
        //var keys = keywords.Trim();
        var aa = keywords;
       
       var array = new Array();
       var ky = aa.split(';');
       for(var i=0;i<ky.length;i++)
       {
          var curk = ky[i];
          var curkArr = curk.split(',');
          for(var j=0;j<curkArr.length;j++)
          {
            var a = curkArr[j].Trim();
            if(a!="")
            array.push(a);
          }
       }
      
       for(var q = 0;q<array.length;q++)
       {
          var rcurk = array[q];
          for(var p = q+1 ; p < array.length;p++)
          {
            if(rcurk == array[p])
            {
               array.splice(p,1);
                break;     
            }
          } 
               
       }
       return  array;
    }
   
    this.ValidateInput = function(keyword,type,start,end)
    {
        var arrkeyword = this.GetValidateKeywords(keyword);  
        var isAllNull = true;
        for(var i =0;i<arrkeyword.length;i++)
        {
            var k = arrkeyword[i].Trim();
            if(k!= "")
            {
                isAllNull = false; break;
            }
        }
        if(isAllNull== true)
        {
             alert( type+" is null!");return null;
        }
        
        
        m_queryKeyword = "";
        for(var i=0;i<arrkeyword.length-1;i++)
        {
           
            m_queryKeyword+=arrkeyword[i]+",";
        }
        m_queryKeyword +=arrkeyword[arrkeyword.length-1]; 
       
         if(type=="url")
         {  
            if(this.IsURL(arrkeyword[0]))
            {
                  m_queryKeyword = arrkeyword[0];
            }else
            {
                alert("The url is not validate!");return null;
            }
         }
           
        m_queryKeyword = this.JSEncode(m_queryKeyword);

        if(this.ValidateDateRange(start,end) == true)
        {
          return m_queryKeyword;
        }
        else
        {
            return null;
        }
      
    }
    this.ValidateDateRange = function(start,end)
    {
        var startArr = start.split("/");
        var endArr = end.split("/");
 
        var sY = parseInt(startArr[2]),eY = parseInt(endArr[2]);
        var sM = parseInt(startArr[0].replace(/^0/,"")),eM = parseInt(endArr[0].replace(/^0/,""));
        var sD = parseInt(startArr[1].replace(/^0/,"")),eD = parseInt(endArr[1].replace(/^0/,""));
        
        var startd = new Date();
        startd.setFullYear(sY,sM,sD);
        var endd = new Date();
        endd.setFullYear(eY,eM,eD);
               
       
        if(startd <= endd)
        {   
            return true;
        }else
        {
            alert("EndDate should be no less than StartDate !");return false;
        }
    
    }
    
   // this.ShowNodata = function(divContent,isPopup,gname,qtype)
    this.ShowNodata = function(divContent) 
    {
     /*  var w,h;
       w=500;
       h=50;
       var src = "images/nodata.swf";
    
       var  m_flashStr = "<OBJECT style='z-index:-1;' width='"+w+"' height='"+h+"' classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000'>";
            m_flashStr +="<PARAM name='movie' value='"+src+"'> </PARAM><PARAM name='bgcolor' value='#ffffff'></PARAM>";
            m_flashStr +="<PARAM name='wmode' value='transparent'></PARAM><embed src='"+src+"' stlyle='z-index:-1'";
            m_flashStr +=" type='application/x-shockwave-flash' width='"+w+"' height='"+h+"' wmode='transparent' ></embed></OBJECT>"; 
        divContent.innerHTML =  m_flashStr;*/
        divContent.innerHTML =  "We cannot classify the product based on your provided information,<br/>please give us more information or reform your product name/description.";
        divContent.style.fontSize = 12;
	    divContent.style.fontStyle ="italic"; 
    }
    
   this.IsURL = function(str_url)
   {
        return str_url;
   }
    
    this.JSEncode = function(keyword)
    {
        var kw = escape(keyword);  
        var regExp = null;
        for(var j=0;j<invalidateChar.length;j++)
        {
           regExp  = new RegExp("\\"+invalidateChar[j],"gm");
	       kw= kw.replace(regExp,invalidateCharNumber[j]); 
        }
        return kw;
    }
    this.JSDecode = function(keyword)
    {
        var kw = unescape(keyword);  
        var regExp = null;
        for(var j=0;j<invalidateCharNumber.length;j++)
        {
           regExp  = new RegExp("\\"+invalidateCharNumber[j],"gm");
	       kw= kw.replace(regExp,invalidateChar[j]); 
        }
        return kw;
    }
   
//    this.GetAbsoluteLeft = function(obj)
//     {
//          var objLeft = obj.offsetLeft;
//          while(obj.offsetParent)
//          {
//            objLeft += obj.offsetParent.offsetLeft;
//            obj = obj .offsetParent;
//          }
//          return objLeft ;
//    }
//    this.GetAbsoluteTop = function(obj)
//    {
//          var objTop = obj.offsetTop;
//          while(obj.offsetParent)
//          {
//            objTop += obj.offsetParent.offsetTop;
//            obj = obj.offsetParent;
//          }
//          return objTop ;
//    } 
    this.ShowDisableLayer= function()
    {
           var divDisable = document.getElementById("divDisable");
	        divDisable.style.display = "block";
	        divDisable.style.visibility = "visible";
	        divDisable.style.width = document.body.scrollWidth+19 + 'px';
            divDisable.style.height = document.body.scrollHeight + 'px';
    }
    this.HideDisableLayer = function()
    {
         var divDisable = document.getElementById("divDisable");
           divDisable.style.display = "none";
	        divDisable.style.visibility = "hidden";
    }
   
    this.SetQueryKeyword = function(keyword,type,start,end)
    {
        var theKeywords = this.ValidateInput(keyword,type,start,end);
        
        if(theKeywords == null)
        {
           var inputBox =    document.getElementById(type+"InputBox");
            if(inputBox)inputBox.focus();
           return;
        }

        
        try
        {
            ClearQueryword();
        }
        catch(ex)
        {
            return;
        }
        if(!type)
        {
            type = m_queryType;
        }
         var board =   document.getElementById("myCalendar");
         board.style.visibility = "hidden";
         board.style.display = "none";
        
        SubmitQueryKeyword(type,start,end);
    }
    ////set & get query type
    this.ShowCalendar = function ()
    {
       var obj = window.event.srcElement;
      // obj.blur();
       var fulld = obj.value;
       var arr = fulld.split("/");
       var yyy = parseInt(arr[2]);
       var ddd = parseInt(arr[1].replace(/^0/,""));
       var mmm = parseInt(arr[0].replace(/^0/,""));
       calendar.ShowBoard(obj);
       calendar.SetDate(yyy,mmm,ddd);
    
      document.getElementById("years").value = yyy;
      document.getElementById("mons").value = arr[0];                       

    }
    
    this.SetQueryType = function(type)
    {
        if(m_queryType == type)
        {
            return false;
        }
        else
        {
            m_queryType = type;
            return true;
        }
    }
    this.GetInputBox = function()
    {
        return document.getElementById(m_queryType+"InputBox");
    }
  
    
    this.GetDateRange = function()
    {
        return m_startDate + "-" + m_endDate;
    }
    
    this.GetQueryType = function()
    {
        return m_queryType;
    }
    ///submit keyword for all loaded gadgets
    function SubmitQueryKeyword (type,start,end)
    {
        for(var key in m_demos)
        {
            m_demos[key].DoSearch(m_queryKeyword,type,start,end);
        }
        Log();
    }
    
    function Log()
    {
        var userAction = m_queryType+" : "+m_queryKeyword;
        GadgetService.UserActionLog(userAction);
    }
    
    this.SubmitKeywordToSpecial = function(gadgetName,type,keyword)
    {
        m_demos[gadgetName].DoSearch(keyword,type);
    }
    
    this.ClearQurey = function()
    {
        m_queryKeyword = null;
    }
    ///if keyword is empty or contain some charaters may cause error,throw exception
	function ClearQueryword()
	{
	    var keyword = m_queryKeyword;
	    while(keyword.indexOf(" ") == 0)
	    {
	        keyword = keyword.replace(" ","");
	    }
	    if(keyword == "")
	    {
	        throw "empty";
	    }
	    if(keyword.indexOf("&") != -1)
	    {
	        throw "illegal";
	    }
	}
    
    this.ExportGadgetEXCEL = function(param)
    {
        var keyParam = "";
        for(var key in param)
        {
           keyParam +=key+"="+param[key]+"&";   
        }
        var windowParam = "left=0,top=0,width=100,height=100,toolbar=no,menubar=no,scrollbars=no,resizable=no,location=no,status=no";
        window.open("ExcelOutput.aspx?"+keyParam,"excelWindow",windowParam);
    }
	
	
	///if a demo gadget is initaled , register to gloable
    this.RegistDemo = function(key,obj)
    {
        //alert(key);
        m_demos[key] = obj;
    }
    ///if a demo gadget is disposed, unregister from gloable 
    this.RemoveDemo = function(key)
    {
        delete m_demos[key];
    }
    this.RemoveAllDemo = function()
    {
        for(var key in m_demos)
        {
          //  m_demos[key].DoSearch(m_queryKeyword,type);
              delete m_demos[key];
        }
    
    }
    
    this.HasDemo = function(key)
    {
        if(m_demos[key] == null)
        {
            return false;
        }
        else
        {
            return true;
        }
    }
    //hide all dundas chart
    this.HideFlash = function()
    {
//        if(m_demos["Forecast"])
//        {
//            m_demos["Forecast"].HideResult();
//        }
//        if(m_demos["CPC"])
//        {
//            m_demos["CPC"].HideResult();
//        }
//        if(m_demos["CTR"])
//        {
//            m_demos["CTR"].HideResult();
//        }
    }
    //display all dundas chart
    this.ShowFlash = function()
    {
//        if(m_demos["Forecast"])
//        {
//            m_demos["Forecast"].ShowResult();
//        }
//        if(m_demos["CPC"])
//        {
//            m_demos["CPC"].ShowResult();
//        }
//        if(m_demos["CTR"])
//        {
//            m_demos["CTR"].ShowResult();
//        }
    }
    /// is all gadget has received keyword and get result
    this.IsAllGadgetsReady = function()
    {
        for(var key in m_demos)
        {
            if(!m_demos[key].Done)
            {
                return false;
            }
        }
        return true;
    }
     this.CreateGadgetDashboard = function(bodyEle,footerEle,resultContent)
    {
        bodyEle.appendChild(resultContent);
	    
	    resultContent.className = "dashbordResult";
        
        var table = document.createElement("table");
       
        table.style.width = "100%"; table.cellPadding = "0";table.cellSpacing = "0";
        var row = table.insertRow();
        var cell = row.insertCell(row.cells.length);
      //  cell.style.color = " #fbe377";
        cell.innerHTML = "Export to:";
        cell.paddingLeft = "10px";
        cell.width = "60px" 
        
        cell = row.insertCell(row.cells.length);
        cell.align = "left";
        var m_excelBtn = document.createElement("span");
  	    Web.Bindings.attachElementBindingSync(m_excelBtn,adCenterLabs.Gadgets.GoButton,this,{"n_Img" :"../Gadgets/gadgetslices/"+adCenterLabs.Gadgets.Gloable.GadgetTheme+"/BtnExcel.png" , "o_Img":"../Gadgets/gadgetslices/"+adCenterLabs.Gadgets.Gloable.GadgetTheme+"/BtnExcelMO.png"});
        cell.appendChild(m_excelBtn);
               
        cell = row.insertCell(row.cells.length);
        cell.align = "right";
	   
	    var m_button = document.createElement("span");
	    Web.Bindings.attachElementBindingSync(m_button,adCenterLabs.Gadgets.GoButton,this,{"n_Img" :"../../Gadgets/gadgetslices/"+adCenterLabs.Gadgets.Gloable.GadgetTheme+"/ZoomBtn.png" , "o_Img":"../../Gadgets/gadgetslices/"+adCenterLabs.Gadgets.Gloable.GadgetTheme+"/ZoomBtn_MO.png"});
	    cell.appendChild(m_button);

	    footerEle.appendChild(table);
	    
	     var retElements = 
	     {
	        "m_button":m_button,
	        "m_excelBtn" : m_excelBtn
	     };
        return retElements;
    }
    
    var retPopupElements  = null;
    this.GetPopupElements = function()
    {
        return retPopupElements;
    }
    this.CreateGadgetPopup = function(bodyEle,footerEle,resultContent,needTimeRange)
    {
 	    var m_inputContent = document.createElement("div");
	          m_inputContent.className = "inputContent";
        var queryType = m_queryType;
	    
	    var boxTitle =null;
	    var m_inputBox  = null;
	   
	    if(queryType == "keyword" || queryType=="url")
	    { 
	       var tmp = (queryType == "keyword")? "Type one or more keywords:" : " Type a web site URL:";
	     
	       boxTitle = tmp;
	       //  alert(  tmp);
	       m_inputBox = document.createElement("input"); 
	       m_inputBox.type = "text";  
	       m_inputBox.value =  document.getElementById(queryType+"inputBox").value;
	       m_inputBox.className = "popupInput";
	    }
	    else
	    {
	         boxTitle = "Select a Vertical :";
	         var vlist = document.getElementById(queryType+"NameList");
	         var curValue = vlist.value;
	         m_inputBox = document.createElement("select");
        	 var op, newOp;
	         for(var i=0 ;i<vlist.options.length;i++)
	         {
	             op = vlist.options[i];
	             newOp = document.createElement("option");
	             newOp.value = op.value;
	             newOp.text = op.text;
	             m_inputBox.options.add(newOp);
	         }
	         m_inputBox.value = curValue;
	    }  
	   
	    var m_startDateInput= null,m_endDateInput = null;
	    
	    if(needTimeRange == true)
	    {
	        m_startDateInput= document.createElement("input");
	        m_startDateInput.type = "text";
	        m_startDateInput.value = document.getElementById(queryType+"startDate").value;
	        m_startDateInput.attachEvent("onclick",  adCenterLabs.Gadgets.Gloable.ShowCalendar) ;

	        m_endDateInput = document.createElement("input");
	        m_endDateInput.type = "text";
	        m_endDateInput.value = document.getElementById(queryType+"endDate").value;
            m_endDateInput.attachEvent("onclick", adCenterLabs.Gadgets.Gloable.ShowCalendar) ;
            
            m_startDateInput.className = m_endDateInput.className = "popupInput";
            
             m_endDateInput.onfocus = m_startDateInput.onfocus = function()
            { window.event.srcElement.blur();	}
        	
        	m_startDateInput.ondragenter = m_endDateInput.ondragenter =
        	m_startDateInput.onselectstart = m_endDateInput.onselectstart = 
        	m_startDateInput.onbeforepaste = m_endDateInput.onbeforepaste = 	 
        	m_startDateInput.oncontextmenu = m_endDateInput.oncontextmenu = 	function(){return false;}
        }

        var m_goButton = document.createElement("span");
	    Web.Bindings.attachElementBindingSync(m_goButton,adCenterLabs.Gadgets.GoButton,this,{"n_Img" :"../Gadgets/gadgetslices/"+adCenterLabs.Gadgets.Gloable.GadgetTheme+"/BtnGo.png" , "o_Img":"../Gadgets/gadgetslices/"+adCenterLabs.Gadgets.Gloable.GadgetTheme+"/BtnGo_MO.png"});
	  
	    var  m_excelBtn = document.createElement("span");
  	    Web.Bindings.attachElementBindingSync(m_excelBtn,adCenterLabs.Gadgets.GoButton,this,{"n_Img" :"../Gadgets/gadgetslices/"+adCenterLabs.Gadgets.Gloable.GadgetTheme+"/BtnExcel.png" , "o_Img":"../Gadgets/gadgetslices/"+adCenterLabs.Gadgets.Gloable.GadgetTheme+"/BtnExcelMO.png"});
	  
	    var  m_button = document.createElement("span");
        Web.Bindings.attachElementBindingSync(m_button,adCenterLabs.Gadgets.GoButton,this,{"n_Img" :"../../Gadgets/gadgetslices/"+adCenterLabs.Gadgets.Gloable.GadgetTheme+"/ZoomBtn.png" , "o_Img":"../../Gadgets/gadgetslices/"+adCenterLabs.Gadgets.Gloable.GadgetTheme+"/ZoomBtn_MO.png"});

	  
	    var table = document.createElement("table");
	    table.align = "center";
	    table.cellSpacing = table.cellPadding = "0";  
	   
	    var row =table.insertRow(table.rows.length); 
	    var cell0 = row.insertCell(row.cells.length);
	    var cell1 = row.insertCell(row.cells.length);
	    var cell2 = row.insertCell(row.cells.length);
	
	    if(needTimeRange == true)
	    {
	        cell0.innerHTML = "<h4>Start Date:</h4>"; cell0.align = "left";
	        cell1.appendChild(m_startDateInput);
    	    
 	        row = table.insertRow(table.rows.length); 
 	        cell0 = row.insertCell(row.cells.length);
 	        cell1 = row.insertCell(row.cells.length);
 	        cell2 = row.insertCell(row.cells.length);
    	   
	        cell0.innerHTML = "<h4>End Date:</h4>";  cell0.align = "left";
	        cell1.appendChild(m_endDateInput);


            row = table.insertRow(table.rows.length); 
 	        cell0 = row.insertCell(row.cells.length);
 	        cell1 = row.insertCell(row.cells.length);
 	        cell2 = row.insertCell(row.cells.length);
	    }
	   
	    cell0.innerHTML = "<h4>"+boxTitle+"</h4>"; cell0.align = "left";
	    cell1.appendChild(m_inputBox);
	    cell2.appendChild(m_goButton);
	    
	
	    
        m_inputContent.appendChild(table);
	    
	    bodyEle.appendChild(m_inputContent);
	    
	    var seperate = document.createElement("div");
	    seperate.className = "seperate";
	    bodyEle.appendChild(seperate);
 	    
 	    resultContent.className = "popupResult";
	    bodyEle.appendChild(resultContent);
	    bodyEle.style.backgroundRepeat = "repeat-x";
	    

	   	    
	    table = document.createElement("table");
        table.cellSpacing = "0"; table.cellPadding = "0";
        table.style.width = "100%";
        var row = table.insertRow();
        var cell = row.insertCell(row.cells.length);
        cell.innerHTML = "Export to:";
        cell.paddingLeft = "10px";
        cell.width = "70px" 
        
        cell = row.insertCell(row.cells.length);
        cell.align = "left";
        cell.appendChild(m_excelBtn);

        cell = row.insertCell(row.cells.length);
        cell.align = "right";
 	    
        var es =  footerEle.getElementsByTagName("SPAN"); 
        var closeBtn =  footerEle.removeChild(es[0]);
 	 
 	    cell.appendChild(closeBtn);
        footerEle.appendChild(table);
        
	     retPopupElements = 
	     {
	        "m_inputBox":m_inputBox,
	        "m_startDateInput":m_startDateInput,
	        "m_endDateInput" : m_endDateInput,
	        "m_goButton" : m_goButton,
	        "m_excelBtn" : m_excelBtn
	     };
        return retPopupElements;
   }
}

/// create instance of Gloable,set adCenterLabs.Gadgets.Gloable as globle various store
adCenterLabs.Gadgets.Gloable = new adCenterLabs.Gadgets.Gloable();

//gadgetTab, Manage Current Page's Categorization(all/keyword/url/vertical)
//registerNamespace("adCenterLabs.Gadgets.GadgetTab");
//adCenterLabs.Gadgets.GadgetTab = new function() {
//    var m_this = this;
//    var m_Input = {};
//    var m_Dashboard = {};
//    
//    this.ChangeTab = function(type)
//    {
//        var flag = adCenterLabs.Gadgets.Gloable.SetQueryType(type);
//        if(flag)
//        {
//            var inputContainer = document.getElementById("gadgetsInput");
//            var dashboardContainer = document.getElementById("dashbord_container");
//            for(var i = 0; i < inputContainer.children.length; i ++)
//            {
//                inputContainer.children[i].style.display = "none";
//            }
//            for(var i = 0; i < dashboardContainer.children.length; i ++)
//            {
//                dashboardContainer.children[i].style.display = "none";
//            }
//            if(m_Input[type])
//            {
//                m_Input[type].style.display = "";
//                m_Dashboard[type].style.display = "";
//		        tabLoading = false;
//                switch(type)
//                {
//                    case "keyword"   : document.getElementById("LearnMoreWord").innerText = adCenterLabs.Gadgets.String["keywordLM"];
//                                       break;
//                    case "url"       : document.getElementById("LearnMoreWord").innerText = adCenterLabs.Gadgets.String["urlLM"];
//                                       break;
//                    case "vertical"  : document.getElementById("LearnMoreWord").innerText = adCenterLabs.Gadgets.String["verticalLM"];
//                                       break;
//                    case "trends"   :   document.getElementById("LearnMoreWord").innerText = adCenterLabs.Gadgets.String["trendsLM"];
//                                       break;
//                }
//            }
//            else
//            {
//                var inputBox = document.createElement("div");
//                inputContainer.appendChild(inputBox);
//                var input = new adCenterLabs.Gadgets.Input();
//                input.AppendTo(inputBox);
//                adCenterLabs.Gadgets.GadgetTab.SetTab(inputBox,type);
//                switch(type)
//                {
//                    case "keyword"   : LoadKeyWord();
//                                       break;
//                    case "url"       : LoadUrl();
//                                       break;
//                    case "vertical"  : LoadVertical();
//                                       break;
//                    case "trends"  : LoadTrends();
//                                     break;
//                }
//            }
//        }
//        else
//        {
//		    tabLoading = false;
//        }
//    }
//    
//    this.GetTab = function(type)
//    {
//        return m_Input[type];
//    }
//    
//    this.SetTab = function(InputDiv,type)
//    {
//        m_Input[type] = InputDiv;
//    }
//    
//    this.SetDashboard = function(DashboardDiv,type)
//    {
//        m_Dashboard[type] = DashboardDiv;
//    }
//    
//    this.GetDashboard = function(type)
//    {
//        return m_Dashboard[type];
//    }
//}

////gadget Input , manage current page's input
registerNamespace("adCenterLabs.Gadgets.Input");
adCenterLabs.Gadgets.Input = function() {
    var m_this = this;
    
    var m_inputbox;
    var m_inputboxContainer;
    var m_goButton;
    var m_dateSelect;
    var m_startDate;
    var m_endDate;
    var m_layoutTable;
    
    function Build()
    {
        m_layoutTable = document.createElement("table");
        var row = m_layoutTable.insertRow(m_layoutTable.rows.length); 
        
        var type = adCenterLabs.Gadgets.Gloable.GetQueryType();
        
        var cell = row.insertCell(row.cells.length);
        cell.style.fontWeight = "bold";
        cell.style.width =  "125px";
        cell.innerText = adCenterLabs.Gadgets.String[type];
        
        cell = row.insertCell(row.cells.length);
        if(type=="vertical")
        {
            m_inputbox = document.createElement("div");
            var listobj = document.createElement("select");
            listobj.id = "verticalNameList";
            m_inputbox.appendChild(listobj);
            new adCenterLabs.Gadgets.VerticalList(listobj,m_inputbox);
           
        }
        else if(type == "trends")
        {
            m_inputbox = document.createElement("div");
            var listobj = document.createElement("select");
            listobj.id = "trendsNameList";
            m_inputbox.appendChild(listobj);
            new adCenterLabs.Gadgets.TrendsList(listobj,m_inputbox);
        
        }else
        {
            m_inputbox = document.createElement("div");
            m_inputboxContainer = Web.Bindings.attachElementBindingSync(m_inputbox,adCenterLabs.Gadgets.InputBox,this,{"className" : "InputBox","id":type+"InputBox"});
            m_inputboxContainer.attachEvent("onEnterKeyPress",SubmitQuery);
        }
        cell.appendChild(m_inputbox);
        cell = row.insertCell(row.cells.length);
        m_goButton = document.createElement("div");
	    Web.Bindings.attachElementBindingSync(m_goButton,adCenterLabs.Gadgets.GoButton,this,{"n_Img" :"images/btn_go.png" , "o_Img":"images/btn_go_over.png"});
        m_goButton.attachEvent("onclick",SubmitQuery);
        cell.appendChild(m_goButton);
        
        if(type == "keyword"  || type == "trends")
        {//In
            cell = row.insertCell(row.cells.length);
            cell.innerText = "Start Date:";
            
            var curDate = new Date();
           // curDate.setFullYear(2007,12,31);
           ////////////////////////////////////
           /*SET CALENDAR START DATE*/
           ////////////////////////////////////
            
            var y = curDate.getFullYear();     
            var m = curDate.getMonth();  
            var d = curDate.getDate();
            var lastM  = m-2;

            if(lastM<=0)
            {
                lastM = 12 + lastM+1; // +1 my method get month 
                y = y-1;  
            }
            
            var totalDays = calendar.GetTotalDays(y,lastM);
            
            if(d<10) d = "0"+d;
            var mm = lastM;
            if(mm <10) mm = "0"+mm;
           
         
            var dateTimeFirstDay = mm+"/"+"01"+"/"+y;
            
            
            m_startDate = document.createElement("input");
            m_startDate.type = "text"; m_startDate.value = dateTimeFirstDay ;
            m_startDate.id = type+"startDate";
            m_startDate.style.border= "solid 1px #CCCCCC";
          
            cell.appendChild(m_startDate);
            
            cell = row.insertCell(row.cells.length);
            cell.innerText = "End Date:";
            
            m_endDate = document.createElement("input");
            m_endDate.style.border= "solid 1px #CCCCCC";
            
            var dateTimeEnd = mm +"/"+totalDays+"/"+y;
            
            m_endDate.type = "text"; m_endDate.value = dateTimeEnd ;
            m_endDate.id = type+ "endDate";
          
            m_endDate.onclick = m_startDate.onclick = function()
            {
                 adCenterLabs.Gadgets.Gloable.ShowCalendar();
            }
          
            m_endDate.onfocus = m_startDate.onfocus = function()
            { window.event.srcElement.blur();	}
        	
        	m_startDate.ondragenter = m_endDate.ondragenter =
        	m_startDate.onselectstart = m_endDate.onselectstart = 
        	m_startDate.onbeforepaste = m_endDate.onbeforepaste = 	 
        	m_startDate.oncontextmenu = m_endDate.oncontextmenu = 	function(){return false;}
            
            cell.appendChild(m_endDate);
        }
        cell = null;
        row = null;
    }
    
    Build();
    
    function SubmitQuery()
    {
        var queryKeyword = null;
        var queryType = adCenterLabs.Gadgets.Gloable.GetQueryType();
        if(queryType == "trends")
        {
            queryKeyword = document.getElementById("trendsNameList").value;
        }
        else if(queryType == "vertical")
        {
            queryKeyword = document.getElementById("verticalNameList").value;
        }else
        {
            queryKeyword  = m_inputboxContainer.GetValue();
        }
       
        var start = document.getElementById(queryType+"startDate");
        var end   = document.getElementById(queryType+"endDate");
        var d = "01/01/1900";
        var startDate = (start == null)?d:start.value;
        var endDate = (end == null)?d:end.value;
              
        adCenterLabs.Gadgets.Gloable.SetQueryKeyword(queryKeyword,queryType,startDate,endDate);
    }
    
    this.dispose = function()
    {
        m_layoutTable.removeNode(true);
        m_inputboxContainer.dispose();
        m_inputbox = null;
        m_goButton = null;
        m_layoutTable = null;
        m_this = null;
    }
    
    this.AppendTo = function(el_parent)
    {
        el_parent.appendChild(m_layoutTable);
    }
    
    this.ReBuild = function()
    {
        var pe = m_layoutTable.parentNode;
        m_this.dispose();
        m_this = this;
        Build();
        m_this.AppendTo(pe);
    }
}
/* ==================================================================*/
registerNamespace("adCenterLabs.Gadgets.VerticalList");
adCenterLabs.Gadgets.VerticalList = function(_listobj,_listcontainer) {
    var m_this = this;
    var m_verticals = [];
    var m_dropdownList;
    var m_veriticalsEl;
    var m_index = 0;
    var m_listobj = _listobj;
    var m_listcontainer = _listcontainer;
    
    this.GetVerticals = function()
    {
       
	    var req = Web.Network.createRequest(
            Web.Network.Type.XML,
            "VerticalList.aspx",
            null,
            xmlDownloadComplete);
        
        req.execute();
        
        
        function xmlDownloadComplete(response)
        {
            var xml = Web.Utility.getDocumentRoot(response);
            if(xml == null)
            {
                var parser = new DOMParser(); 
                xml = parser.parseFromString(response.responseText, "text/xml"); 
            }
            
            if(xml)
            {
                var verticalList = xml.getElementsByTagName("vertical");
            
                for(var i = 0; i < verticalList.length; i++)
                {
                    var verticalNode = verticalList[i];
                    var val =  verticalNode.getAttribute("VerticalName");
                    if(val == "All verticals")continue;   
                    var option = document.createElement("option");
                    option.value =val;
                    option.innerHTML =option.value;
                    m_listobj.appendChild(option);
                }
            }
            
           
        }   
    }
    
    this.GetVerticals();
    
    this.ClearVeritical = function()
    {
        m_verticals = [];
    }
    
    BuildList = function()
    {
        var p_params = {
            "datasource" : m_verticals,
            "name"       : "verticals",
            "id"         : "verticals"   
        };
        
        if(m_veriticalsEl == null)
        {
            return;
        }
        
        m_dropdownList = Web.Bindings.attachElementBindingSync(
            m_veriticalsEl,
            adCenterLabs.Gadgets.DropDownList,
            this,
            p_params);
        
        m_dropdownList.SetIndex(m_index);    
    }
    
    this.GetValue = function()
    {
        return m_dropdownList.GetValue();
    }
    
    this.SetIndex = function(index)
    {
        if(m_dropdownList)
        {
            m_dropdownList.SetIndex(index);
        }
        else
        {
            m_index = index;
        }
    }
    
    this.dispose = function()
    {
        m_this = null;
        m_verticals = [];
        m_dropdownList = null;
        m_veriticalsEl = null;
    }
}
/* ==================================================================*/
registerNamespace("adCenterLabs.Gadgets.TrendsList");
adCenterLabs.Gadgets.TrendsList = function(_listobj,_listcontainer) {
    var m_this = this;
    var m_verticals = [];
    var m_dropdownList;
    var m_veriticalsEl;
    var m_index = 0;
    var m_listobj = _listobj;
    var m_listcontainer = _listcontainer;
    
    this.GetVerticals = function()
    {
       
	    var req = Web.Network.createRequest(
            Web.Network.Type.XML,
            "TrendsList.aspx",
            null,
            xmlDownloadComplete);
        
        req.execute();
        
        
        function xmlDownloadComplete(response)
        {
            var xml = Web.Utility.getDocumentRoot(response);
            if(xml == null)
            {
                var parser = new DOMParser(); 
                xml = parser.parseFromString(response.responseText, "text/xml"); 
            }
            
            if(xml)
            {
                var verticalList = xml.getElementsByTagName("vertical");
            
                for(var i = 0; i < verticalList.length; i ++)
                {
                    var verticalNode = verticalList[i];
                    var option = document.createElement("option");
                    option.value = verticalNode.getAttribute("VerticalName");
                    option.innerHTML =option.value;
                    m_listobj.appendChild(option);
                }
            }
            
           
        }   
    }
    
    this.GetVerticals();
    
    this.ClearVeritical = function()
    {
        m_verticals = [];
    }
    
    BuildList = function()
    {
        var p_params = {
            "datasource" : m_verticals,
            "name"       : "verticals",
            "id"         : "verticals"   
        };
        
        if(m_veriticalsEl == null)
        {
            return;
        }
        
        m_dropdownList = Web.Bindings.attachElementBindingSync(
            m_veriticalsEl,
            adCenterLabs.Gadgets.DropDownList,
            this,
            p_params);
        
        m_dropdownList.SetIndex(m_index);    
    }
    
    this.GetValue = function()
    {
        return m_dropdownList.GetValue();
    }
    
    this.SetIndex = function(index)
    {
        if(m_dropdownList)
        {
            m_dropdownList.SetIndex(index);
        }
        else
        {
            m_index = index;
        }
    }
    
    this.dispose = function()
    {
        m_this = null;
        m_verticals = [];
        m_dropdownList = null;
        m_veriticalsEl = null;
    }
}
/* ==================================================================*/
//////*******************
//////add a button class:
//////*******************
registerNamespace("adCenterLabs.Gadgets.GoButton");

adCenterLabs.Gadgets.GoButton = function(p_elSource, p_args, p_namespace)
{
    adCenterLabs.Gadgets.GoButton.initializeBase(this, arguments);

    var m_el = p_elSource;
    var m_this = this;

    var m_a1 = null;
    var m_a2 = null;
    
    var m_normalImage = p_args["n_Img"];
    var m_hoverImage = p_args["o_Img"];

    this.initialize = function(p_objScope)
    {
        adCenterLabs.Gadgets.GoButton.getBaseMethod(
            this, "initialize", "Web.Bindings.Base").call(this, p_objScope);

        m_a1 = document.createElement("a");
        m_a2 = document.createElement("img");
        m_a2.src = m_normalImage;
        m_a2.alt = "";
        
        m_a1.attachEvent("onmouseover",btnOver);
        m_a1.attachEvent("onmouseout",btnOut);
        
        m_a1.appendChild(m_a2);
        m_el.appendChild(m_a1);
        m_el.style.cursor = "pointer";
    }

    this.dispose = function(p_blnUnload)
    {
        m_a1.detachEvent("onmouseover",btnOver);
        m_a1.detachEvent("onmouseout",btnOut);
        
        m_el = null;
        m_a1 = m_a2 = null;

        adCenterLabs.Gadgets.GoButton.getBaseMethod( 
            this, "dispose", "Web.Bindings.Base").call(this, p_blnUnload);
    }
    
    function btnOver()
    {
        m_a2.src = m_hoverImage;
    }
    
    function btnOut()
    {
        m_a2.src = m_normalImage;
    }
}
adCenterLabs.Gadgets.GoButton.registerClass("adCenterLabs.Gadgets.GoButton", "Web.Bindings.Base");

//////*******************
///add a dropdownlist class:
//////*******************
registerNamespace("adCenterLabs.Gadgets.DropDownList");

adCenterLabs.Gadgets.DropDownList = function(p_elSource, p_args, p_namespace)
{
    adCenterLabs.Gadgets.DropDownList.initializeBase(this, arguments);

    var m_el = p_elSource;
    var m_this = this;
    
    var m_select;
    var m_datas = p_args["datasource"];
    
    this.initialize = function(p_objScope)
    {
        m_select = document.createElement("select");
        m_select.size = 1;
        if(p_args["name"])
        {
            m_select.name = p_args["name"];
        }
        else
        {
            m_select.name = "adCenterLabsDropdonwList";
        }
        if(p_args["id"])
        {
            m_select.id = p_args["id"];
        }
        
        AppendOption();
        m_select.style.width = "260px";
        m_el.appendChild(m_select);
        
        adCenterLabs.Gadgets.DropDownList.getBaseMethod(
            this, "initialize", "Web.Bindings.Base").call(this, p_objScope);

    }
    
    this.GetValue = function()
    {
        return m_select.value;
    }
    
    this.SetIndex = function(index)
    {
        m_select.value = index;
    }
    
    function AppendOption()
    {
        for(var i = 0; i < m_datas.length ; i ++)
        {
            var data = m_datas[i];
            var option = CreateOption(data);
            m_select.appendChild(option);
        }
    }
    
    function CreateOption(data)
    {
        var option = document.createElement("option");
        option.value = data["id"];
        option.innerText = data["name"];
        return option;
    }
    
    this.dispose = function(p_blnUnload)
    {
        m_el = null;
        m_this = null;
        m_select = null;
        m_datas = null;
        
        adCenterLabs.Gadgets.DropDownList.getBaseMethod( 
            this, "dispose", "Web.Bindings.Base").call(this, p_blnUnload);
    }
    
}
adCenterLabs.Gadgets.DropDownList.registerClass("adCenterLabs.Gadgets.DropDownList", "Web.Bindings.Base");


//////*******************
///add a DataSelect class:
//////*******************
//registerNamespace("adCenterLabs.Gadgets.DataSelect");

//adCenterLabs.Gadgets.DateSelect = function(p_elSource, p_args, p_namespace)
//{
//    adCenterLabs.Gadgets.DateSelect.initializeBase(this, arguments);

//    var m_el = p_elSource;
//    var m_this = this;
//    var m_yearBox;
//    var m_monthBox;
//    var m_dayBox;
//    var m_container;
//    
//    this.initialize = function(p_objScope)
//    {
//        m_container = document.createElement("table");
//        var row = m_container.insertRow(0);
//        var yearCell = row.insertCell(0);
//        var monthCell = row.insertCell(1);
//        var dayCell = row.insertCell(2);
//        
//        m_yearBox = document.createElement("select");
//        m_monthBox = document.createElement("select");
//        m_dayBox = document.createElement("select");
//        
//        yearCell.appendChild(m_yearBox);
//        monthCell.appendChild(m_monthBox);
//        dayCell.appendChild(m_dayBox);
//        
//        var date = new Date();
//        var curYear = date.getFullYear();
//        var curMonth = date.getMonth();
//        var curDay = date.getDay();
//        AttachValue(m_yearBox,2006,2007);
//        AttachValue(m_monthBox,1,12);
//        AttachValue(m_dayBox,1,31);
//        m_dayBox.attachEvent("onindexchange",DayChange);
//        m_el.appendChild(m_container);
//        
//        adCenterLabs.Gadgets.DateSelect.getBaseMethod(
//            this, "initialize", "Web.Bindings.Base").call(this, p_objScope);

//    }
//    
//    this.GetValue = function()
//    {
//        var Date = "";
//        Date += m_monthBox.value;
//        Date += "/";
//        Date += m_dayBox.value;
//        Date += "/";
//        Date += m_yearBox.value;
//        return Date;
//    }
//    
//    this.dispose = function(p_blnUnload)
//    {
//        m_el = null;
//        m_this = null;
//        m_yearBox = null;
//        m_monthBox = null;
//        m_dayBox = null;
//        m_container = null;
//        
//        adCenterLabs.Gadgets.DateSelect.getBaseMethod( 
//            this, "dispose", "Web.Bindings.Base").call(this, p_blnUnload);
//    }
//    
//    function AttachValue(elSelect,startValue,endValue)
//    {
//        for(var value = startValue;value <= endValue ; value ++)
//        {
//            var option = document.createElement("option");
//            option.value = value;
//            option.text = value;
//            option.innerText = value;
//            elSelect.appendChild(option);
//        }
//    }
//    
//    function DayChange()
//    {
//        var day = m_dayBox.value;
//        var month = m_monthBox.value;
//        var year = m_yearBox.value;
//        if(day > 28 && month == 2)
//        {
//            m_monthBox.value = 28;
//            if(year%4 == 0)
//            {
//                m_monthBox.value = 29;
//            }
//        }
//        else if(day > 30 && !Is31Days(month))
//        {
//            m_monthBox.value = 30;
//        }
//    }
//    
//    function Is31Days(monthNum)
//    {   
//        var FullDaysMonth = { 1:true , 3:true ,5 :true,7:true , 8:true , 10:true , 12:true };

//        if( FullDaysMonth[monthNum] )
//        {
//            return true;
//        }
//        else
//        {
//            return false;
//        }
//    }
//}
//adCenterLabs.Gadgets.DateSelect.registerClass("adCenterLabs.Gadgets.DateSelect", "Web.Bindings.Base");



//////*******************
///add a inputbox class:
//////*******************
registerNamespace("adCenterLabs.Gadgets.InputBox");

adCenterLabs.Gadgets.InputBox = function(p_elSource, p_args, p_namespace)
{
    adCenterLabs.Gadgets.InputBox.initializeBase(this, arguments);

    var m_el = p_elSource;
    var m_this = this;
    
    var m_input;
    
    this.initialize = function(p_objScope)
    {
        adCenterLabs.Gadgets.InputBox.getBaseMethod(
            this, "initialize", "Web.Bindings.Base").call(this, p_objScope);
            
        m_input = document.createElement("input");
        m_input.type = "text";
        
        if(p_args["className"])
        {
            m_input.className = p_args["className"];
        }
        if(p_args["id"])
        {
            m_input.id =p_args["id"];
        }
        
        m_input.attachEvent("onkeypress",KeyPress);
        m_el.appendChild(m_input);
    }
    
    this.GetValue = function()
    {
        return m_input.value;
    }
    
    this.dispose = function(p_blnUnload)
    {
        m_el = null;
        m_this = null;
        m_input = null;
        
        adCenterLabs.Gadgets.InputBox.getBaseMethod( 
            this, "dispose", "Web.Bindings.Base").call(this, p_blnUnload);
    }
    
    function KeyPress()
    {
        var keyCode = event.keyCode;
        if(keyCode == 13)
        {
            m_this.fire("onEnterKeyPress");
            event.returnValue = false;
            event.cancelBubble = true;
        }
    }
}
adCenterLabs.Gadgets.InputBox.registerClass("adCenterLabs.Gadgets.InputBox", "Web.Bindings.Base");    
adCenterLabs.Gadgets.InputBox.Events = Web.Enum.create("onEnterKeyPress");


//////*******************
///add a tab class:
//////*******************
registerNamespace("adCenterLabs.Gadgets.Tabs");

adCenterLabs.Gadgets.Tabs = function(p_elSource, p_args, p_namespace)
{
    adCenterLabs.Gadgets.InputBox.initializeBase(this, arguments);

    var m_el = p_elSource;
    var m_this = this;
    
    var m_container;
    var m_tabHeadContainer;
    var m_tabHeadLayout;
    var m_tabBodyContainer;
    var m_tabUlContainer;
    var m_leftBtn;
    var m_rightBtn;
    var m_tabHead;
    
    this.initialize = function(p_objScope)
    {
        adCenterLabs.Gadgets.Tabs.getBaseMethod(
            this, "initialize", "Web.Bindings.Base").call(this, p_objScope);
        
        m_container = document.createElement("div");
        m_container.className = p_args["className"] ? p_args["className"] : "";
        
        m_tabHeadContainer = document.createElement("div");
        m_tabBodyContainer = document.createElement("div");
        
        m_container.appendChild(m_tabHeadContainer);
        m_container.appendChild(m_tabBodyContainer);
        
        m_tabHead = document.createElement("ul");
        
        m_tabHeadLayout = document.createElement("table");
        m_tabHeadLayout.align = "Center";
        m_tabHeadLayout.cellSpacing = 0;
        m_tabHeadLayout.cellPadding = 0;
        m_leftBtn = document.createElement("span");
        m_rightBtn = document.createElement("span");
        
        var row = m_tabHeadLayout.insertRow(0);
        var leftCell = row.insertCell(0);
        var bodyCell = row.insertCell(1);
        var rightCell = row.insertCell(2);
        m_tabUlContainer = document.createElement("div");
        m_tabUlContainer.appendChild(m_tabHead);
        
        leftCell.appendChild(m_leftBtn);
        leftCell.style.paddingTop = "2px";
        bodyCell.appendChild(m_tabUlContainer);
        rightCell.appendChild(m_rightBtn);
        rightCell.style.paddingTop = "2px";
        
        m_tabHeadContainer.appendChild(m_tabHeadLayout);
        
        m_el.appendChild(m_container);
    }
    
    this.dispose = function(p_blnUnload)
    {
        m_el = null;
        m_this = null;
        m_container = null;
        m_tabHeadContainer = null;
        m_tabHeadLayout = null;
        m_tabBodyContainer = null;
        m_leftBtn = null;
        m_rightBtn = null;
        m_tabHead = null;
        
        adCenterLabs.Gadgets.Tabs.getBaseMethod( 
            this, "dispose", "Web.Bindings.Base").call(this, p_blnUnload);
    }
    
    /* animation */
    var timer;
    var _setInterval = window.setInterval;
    this.Animation = function(funcRef, mDelay) 
    {
            if (typeof funcRef == 'function')
	        {
                    var argus = Array.prototype.slice.call(arguments,2);
                    var f = (function(){ funcRef.apply(null, argus); });
                    return _setInterval(f, mDelay);
            }
            return null;
    }
    
    this.AddTab = function(name,el_body)
    {
        var tab = document.createElement("li");
        tab.innerText = name;
        m_tabHead.appendChild(tab);
        if(m_tabBodyContainer.childNodes.length != 0)
        {
            el_body.style.display = "none";
            tab.className = "tabNormall";
        }
        else
        {
            tab.className = "tabSelected";
        }
        m_tabBodyContainer.appendChild(el_body);
        tab.attachEvent("onclick",ShowTab);
        tab.attachEvent("onmouseover",HighlightTab);
        tab.attachEvent("onmouseout",UnHighlightTab);
        //*tab Events:*//
        function ShowTab()
        {
            var tabs = m_tabHead.childNodes;
            for(var i = 0 ; i < tabs.length; i ++)
            {
                var tb = tabs[i];
                tb.className = "tabNormall";
            }
            tab.className = "tabSelected";
            
            var contents = m_tabBodyContainer.childNodes;
            for(var i = 0; i < contents.length; i ++)
            {
                var content = contents[i];
                content.style.display = "none";
            }
            el_body.style.display = "";
        }
        
        function HighlightTab()
        {
            if(tab.className != "tabSelected")
            {
                tab.className = "tabMouseover";
            }
        }
        
        function UnHighlightTab()
        {
            if(tab.className != "tabSelected")
            {
                tab.className = "tabNormall";
            }
        }
        
        var EventTriger = function(funcNameWithParams)
        {
            return function()
            {
	            eval(funcNameWithParams);
            }
        }
        function GetCurrentElement()
        { 
            var tabcontainer = m_tabUlContainer;
	        var menu = m_tabHead;
            var curScrollLeft = tabcontainer.scrollLeft+3;
        	
	        var indexNode = -1;
	        for(var i=0;i < menu.childNodes.length-1;i++)
	        {
		        if(menu.childNodes[i].className == "tabSelected")
		        {
			        indexNode = i;
			        break;
		        }
	        }
	        if(-1 == indexNode){indexNode = menu.childNodes.length-1;}
        	
	        return indexNode;
        }
        function NextTab(param)
        {	
            window.clearInterval(timer); 
            var currNodeIndex = GetCurrentElement();
            var menu = m_tabHead;

            if ((0==currNodeIndex && param=="left") || 	( param=="right" && currNodeIndex == menu.childNodes.length-1))
            {
                return;	
            }
            var nextTabIndex = (param == "left")? currNodeIndex-1 : currNodeIndex+1;
            	
            var nextScrollLeft = menu.childNodes[nextTabIndex].offsetLeft;
            var curScrollLeft = menu.childNodes[currNodeIndex].offsetLeft;
            var scrollobj =  m_tabUlContainer;
	        menu.childNodes[nextTabIndex].click();
            timer = m_this.Animation(EffectMoving,20,param,nextScrollLeft,scrollobj);
        }

        function EffectMoving(param,nextleft,scrollContainer)
        {
           try{
                if(param == "left")
                {
	                if(scrollContainer.scrollLeft>nextleft){scrollContainer.scrollLeft-=10;}
	                else{ scrollContainer.scrollLeft = nextleft;window.clearInterval(timer); }
                }
                if(param == "right")
                {
	                if( scrollContainer.scrollLeft<nextleft){scrollContainer.scrollLeft+=10;}
	                else{ scrollContainer.scrollLeft = nextleft;window.clearInterval(timer); }
                }
            }
            catch(e)
            {
               // alert(e);
                return;
            }
        }
        //*tab Events End*//
        /****************   build left/right button  ****************/
        //alert(m_tabUlContainer.clientWidth + ";" + m_tabUlContainer.scrollWidth);
        if(m_tabUlContainer.clientWidth < m_tabUlContainer.scrollWidth)
        {
            if(m_leftBtn.innerHTML == "")
            {
	            Web.Bindings.attachElementBindingSync(m_leftBtn,adCenterLabs.Gadgets.GoButton,this,{"n_Img" :"/ARD/images/t_back.png" , "o_Img":"/ARD/images/t_back_over.png"});
                m_leftBtn.attachEvent("onclick", EventTriger("NextTab('left')"));
	        }
	        if(m_rightBtn.innerHTML == "")
	        {
	            Web.Bindings.attachElementBindingSync(m_rightBtn,adCenterLabs.Gadgets.GoButton,this,{"n_Img" :"/ARD/images/t_next.png" , "o_Img":"/ARD/images/t_next_over.png"});
	            m_rightBtn.attachEvent("onclick", EventTriger("NextTab('right')"));
	        }
        }
    }
    
}
adCenterLabs.Gadgets.Tabs.registerClass("adCenterLabs.Gadgets.Tabs", "Web.Bindings.Base");    
adCenterLabs.Gadgets.Tabs.Events = Web.Enum.create("onNewTabIn");
/*===========================================================================================================*/
registerNamespace("adCenterLabs.Gadgets.PieTabs");

adCenterLabs.Gadgets.PieTabs = function(p_elSource, p_args, p_namespace)
{
    adCenterLabs.Gadgets.InputBox.initializeBase(this, arguments);

    var m_el = p_elSource;
    var m_this = this;
    
    var m_container;
    var m_tabHeadContainer;
    var m_tabHeadLayout;
    //var m_tabBodyContainer;
    var m_tabUlContainer;
    var m_leftBtn;
    var m_rightBtn;
    var m_tabHead;
   
    
    this.initialize = function(p_objScope)
    {
        adCenterLabs.Gadgets.Tabs.getBaseMethod(
            this, "initialize", "Web.Bindings.Base").call(this, p_objScope);
        
        m_container = document.createElement("div");
        m_container.className = p_args["className"] ? p_args["className"] : "";
        
        m_tabHeadContainer = document.createElement("div");
        //m_tabBodyContainer = document.createElement("div");
        
        m_container.appendChild(m_tabHeadContainer);
        //m_container.appendChild(m_tabBodyContainer);
        
        m_tabHead = document.createElement("ul");
        
        m_tabHeadLayout = document.createElement("table");
        m_tabHeadLayout.align = "Center";
        m_tabHeadLayout.cellSpacing = 0;
        m_tabHeadLayout.cellPadding = 0;
        m_leftBtn = document.createElement("span");
        m_rightBtn = document.createElement("span");
        
        var row = m_tabHeadLayout.insertRow(0);
        var leftCell = row.insertCell(0);
        var tabCell = row.insertCell(1);
        var rightCell = row.insertCell(2);
        m_tabUlContainer = document.createElement("div");
        m_tabUlContainer.appendChild(m_tabHead);
        
        leftCell.appendChild(m_leftBtn);
        leftCell.style.paddingTop = "2px";
        tabCell.appendChild(m_tabUlContainer);
        rightCell.appendChild(m_rightBtn);
        rightCell.style.paddingTop = "2px";
        
        m_tabHeadContainer.appendChild(m_tabHeadLayout);
        
        m_el.appendChild(m_container);
    }
    
    this.dispose = function(p_blnUnload)
    {
        m_el = null;
        m_this = null;
        m_container = null;
        m_tabHeadContainer = null;
        m_tabHeadLayout = null;
      //  m_tabBodyContainer = null;
        m_leftBtn = null;
        m_rightBtn = null;
        m_tabHead = null;
        
        adCenterLabs.Gadgets.PieTabs.getBaseMethod( 
            this, "dispose", "Web.Bindings.Base").call(this, p_blnUnload);
    }
    
    /* animation */
    var timer;
    var _setInterval = window.setInterval;
    this.Animation = function(funcRef, mDelay) 
    {
            if (typeof funcRef == 'function')
	        {
                    var argus = Array.prototype.slice.call(arguments,2);
                    var f = (function(){ funcRef.apply(null, argus); });
                    return _setInterval(f, mDelay);
            }
            return null;
    }
    
   
    this.AddTabWithFunc = function (tabName,funcNameWhenClick)
    {
        var tab = document.createElement("li");
        var tabTxt = tabName;
        if(tabTxt.length > 32)
        {
            tabTxt = tabTxt.substring(0,30)+"...";
        }
        tab.innerText = tabTxt;
        m_tabHead.appendChild(tab);
        
        if(m_tabHead.childNodes.length == 1)//first tab need change its style
        {
           tab.className = "tabSelected";
        }
        else
        {
            tab.className = "tabNormall";
        }
        
        var id = Math.random().toString();
        id = id.replace(".","");
      	re = new RegExp("0","gm");
        id = "tab_"+id.replace(re,"");
        tab.id = id;
        
        
        tab.attachEvent("onclick",EventTriger("ShowTabWithOutContent('"+id+"')"));
        tab.attachEvent("onclick",funcNameWhenClick);
        tab.attachEvent("onmouseover",EventTriger("HighlightTab('"+id+"')"));
        tab.attachEvent("onmouseout",EventTriger("UnHighlightTab('"+id+"')"));
        
    
        //*tab Events:*//
        ShowBtn();
    }
    
    var ShowBtn = function()
    {
       if(m_tabUlContainer.clientWidth < m_tabUlContainer.scrollWidth)
        {
            if(m_leftBtn.innerHTML == "")
            {
	            Web.Bindings.attachElementBindingSync(m_leftBtn,adCenterLabs.Gadgets.GoButton,this,{"n_Img" :"./images/t_back.png" , "o_Img":"./images/t_back_over.png"});
                m_leftBtn.attachEvent("onclick", EventTriger("NextTab('left')"));
	        }
	        if(m_rightBtn.innerHTML == "")
	        {
	            Web.Bindings.attachElementBindingSync(m_rightBtn,adCenterLabs.Gadgets.GoButton,this,{"n_Img" :"./images/t_next.png" , "o_Img":"./images/t_next_over.png"});
	            m_rightBtn.attachEvent("onclick", EventTriger("NextTab('right')"));
	        }
        }
    }
    
    var ShowTabWithOutContent = function(id)
    {
            var tabs = m_tabHead.childNodes;
            var tab =  document.getElementById(id);
            for(var i = 0 ; i < tabs.length; i ++)
            {
                var tb = tabs[i];
                tb.className = "tabNormall";
            }
            tab.className = "tabSelected";
    }
    
    var HighlightTab = function(id)
    {
        var tab = document.getElementById(id);
        if(tab.className != "tabSelected")
        {
            tab.className = "tabMouseover";
        }
    }
        
    var UnHighlightTab = function (id)
    {
       var tab = document.getElementById(id);
        if(tab.className != "tabSelected")
        {
            tab.className = "tabNormall";
        }
    }
        
    var EventTriger = function(funcNameWithParams)
    {
        return function()
        {
            eval(funcNameWithParams);
        } 
    }
    var GetCurrentElement =function ()
    { 
            var tabcontainer = m_tabUlContainer;
	        var menu = m_tabHead;
            var curScrollLeft = tabcontainer.scrollLeft+3;
        	
	        var indexNode = -1;
	        for(var i=0;i < menu.childNodes.length-1;i++)
	        {
		        if(menu.childNodes[i].className == "tabSelected")
		        {
			        indexNode = i;
			        break;
		        }
	        }
	        if(-1 == indexNode){indexNode = menu.childNodes.length-1;}
        	
	        return indexNode;
    }
    var NextTab = function (param)
    {	
            window.clearInterval(timer); 
            var currNodeIndex = GetCurrentElement();
            var menu = m_tabHead;

            if ((0==currNodeIndex && param=="left") || 	( param=="right" && currNodeIndex == menu.childNodes.length-1))
            {
                return;	
            }
            var nextTabIndex = (param == "left")? currNodeIndex-1 : currNodeIndex+1;
            	
            var nextScrollLeft = menu.childNodes[nextTabIndex].offsetLeft;
            var curScrollLeft = menu.childNodes[currNodeIndex].offsetLeft;
            var scrollobj =  m_tabUlContainer;
	        menu.childNodes[nextTabIndex].click();
            timer = m_this.Animation(EffectMoving,20,param,nextScrollLeft,scrollobj);
        }

    var EffectMoving = function(param,nextleft,scrollContainer)
    {
          try{
                if(param == "left")
                {
	                if(scrollContainer.scrollLeft>nextleft){scrollContainer.scrollLeft-=10;}
	                else{ scrollContainer.scrollLeft = nextleft;window.clearInterval(timer); }
                }
                if(param == "right")
                {
	                if( scrollContainer.scrollLeft<nextleft){scrollContainer.scrollLeft+=10;}
	                else{ scrollContainer.scrollLeft = nextleft;window.clearInterval(timer); }
                }
            }catch(e)
            {
             //   alert(e);
                return;
            }
    }
}
adCenterLabs.Gadgets.PieTabs.registerClass("adCenterLabs.Gadgets.PieTabs", "Web.Bindings.Base"); 

//////*******************
//////data grid
//////*******************

registerNamespace("adCenterLabs.Gadgets.DataGrid");

adCenterLabs.Gadgets.DataGrid = function(p_elSource, p_args, p_namespace)
{
    adCenterLabs.Gadgets.DataGrid.initializeBase(this, arguments);

    var m_el = p_elSource;
    var m_this = this;
    
    var m_table;
    
    this.initialize = function(p_objScope)
    {
        adCenterLabs.Gadgets.DataGrid.getBaseMethod(
            this, "initialize", "Web.Bindings.Base").call(this, p_objScope);
            
        m_table = document.createElement("table");
        m_el.appendChild(m_table);    
    }
    
    this.dispose = function(p_blnUnload)
    {
        m_el = null;
        m_this = null;
        m_table = null;
        
        adCenterLabs.Gadgets.DataGrid.getBaseMethod( 
            this, "dispose", "Web.Bindings.Base").call(this, p_blnUnload);
    }
    
    this.BindingData = function(Point)
    {
        m_table.removeNode(true);
        m_table = document.createElement("table");
        m_table.cellPadding = 0;
        m_table.cellSpacing = 0;
        var Row = m_table.insertRow(0);
        var columNum = 2;
        for(var key in Point)
        {
            var cell = Row.insertCell(Row.cells.length);
            cell.innerText = key;
            cell = Row.insertCell(Row.cells.length);
            cell.innerText = Point[key];
            columNum --;
            if(columNum == 0)
            {
                columNum = 2;
                Row = m_table.insertRow(m_table.rows.length);
            }
        }
        if(columNum == 1)
        {
            Row.insertCell(Row.cells.length);
            Row.insertCell(Row.cells.length);
        }
        
        m_el.appendChild(m_table);
    }
    var keywordCollection = new Array();
    this.BindingMultiData = function(xml,maxRow,action,filters)
    {
        if(xml == null || xml.childNodes.length == 0)//if no child,that's no data
        {
            var error = document.createElement("div");
            error.innerText = "No Result";
            error.style.color = "red";
            error.style.border = "solid 1px gray";
            m_el.appendChild(error);
            return;
        }
  
//        var objDiv =  document.getElementById( "keycontainer");
//        var checkboxs = objDiv.getElementsByTagName("INPUT");
//        for(var idx =0 ; idx<checkboxs.length;idx++)
//        {
//            var pNode = checkboxs[idx].parentNode;
//            var collKeyword = pNode.parentNode.innerText;
//            keywordCollection.push(collKeyword);
//        }
        
        
        
        m_table.removeNode(true);
        m_table = null;
        
        m_table = document.createElement("table");
        m_table.cellPadding = 0;
        m_table.cellSpacing = 0;
        m_el.appendChild(m_table);
        ///Get all Data
        var resultColl = xml.childNodes;
       // alert(resultColl.length);
        //get all clomns;
        var clomns = new Array();
        var resultClomns = resultColl[0].childNodes;
        for(var i = 0;i < resultClomns.length; i ++)
        {
            var clomn = resultClomns[i];
            if(filters==null || !filters[clomn.tagName])
            {
                var clo = {};
                clo.index = i;
                clo.name = clomn.tagName;
                clomns.push(clo);
            }
        }
        var head = BuildHeader(clomns,action);//build Header
        var tHead = m_table.createTHead();
        tHead.appendChild(head);
       
        
         var pageNum = 0;
        for(var j = 0; j < resultColl.length; )
        {
            var tbody = document.createElement("tbody");
            m_table.appendChild(tbody);
            pageNum += 1;
            if(j!=0)
            {
                tbody.style.display = "none";
            }
            
            for(var i = 0; i < maxRow; i ++)
            {
                if(j >= resultColl.length)
                {
                    var row = document.createElement("tr");
                    tbody.appendChild(row);
                    continue;
                }
                var result = resultColl[j];
                var row = BuildRow(result,clomns,maxRow,action);
                if(i%2 == 0)
                {
                    row.className = "gtr0";
                }
                else
                {
                    row.className = "gtr1";
                }
                tbody.appendChild(row);
                j ++;
            }
        }
       // alert();
//        var recordCount = resultColl.length;
//       
//        var lastPageRecordNum = recordCount%maxRow ;
//       
//        var pageTotal = parseInt( recordCount/ maxRow );
//        if(lastPageRecordNum != 0)pageTotal +=1;
//       
//        for(var j=1;j<=pageTotal;j++)
//        {
//            var tbody = document.createElement("tbody");
//            m_table.appendChild(tbody);
//            if(j!=1) { tbody.style.display = "none"; }
//            var eleIndex = 1;
//           
//            while(eleIndex<= maxRow)
//            {
//                var aIndex = eleIndex*j -1 ;
//                
//                if(aIndex<recordCount)
//                {   
//                    var result = resultColl[ aIndex ];
//                    var row = BuildRow(result,clomns,maxRow,action);
//                    row.className  = (eleIndex%2==0)?"gtr0":"gtr1";
//                  
//                }else
//                {
//                   var row = document.createElement("tr");
//                   var cNull = (action)?clomns.length+1:clomns.length;
//                   for(var k = 0; k < cNull; k++)
//                   {
//                      var cell = document.createElement("td");
//                      cell.innerHTML = "&nbsp;";
//                      row.appendChild(cell);
//                   }
//                }
//                tbody.appendChild(row);
//                eleIndex++;
//            }
//        }

        if(pageNum > 1)
        {
            var tFoot = m_table.createTFoot();
            var footRow = tFoot.insertRow(0);
            var footCell = footRow.insertCell(0);
            footCell.colSpan = (action== true)?clomns.length+1:clomns.length;
            var ft = BuildFooter(pageNum);
            footCell.appendChild(ft);
        }
        while(keywordCollection.length>0)
        {
             keywordCollection.pop();
        }
    }

    FormatValue = function(value,format)
    {
        var n = Number(value);
        if(!isNaN(n))
        {
            value = adCenterLabs.Gadgets.String.Formart(value,format);
        }
        return value;
    }

    BuildFooter = function(pageNum)
    {
        var layout = document.createElement("div");
        var preBtn = document.createElement("span");
        layout.appendChild(preBtn);
        var pageNumber = document.createElement("span");
        layout.appendChild(pageNumber);
        var nextBtn = document.createElement("span");
        layout.appendChild(nextBtn);
        
        Web.Bindings.attachElementBindingSync(preBtn,adCenterLabs.Gadgets.GoButton,this,{"n_Img" :"/ARD/images/p_back.png" , "o_Img":"/ARD/images/p_back_over.png"});
        Web.Bindings.attachElementBindingSync(nextBtn,adCenterLabs.Gadgets.GoButton,this,{"n_Img" :"/ARD/images/p_next.png" , "o_Img":"/ARD/images/p_next_over.png"});
        
        for(var t = 0; t < pageNum; t ++)
        {
            var pageLink = document.createElement("a");
            pageLink.style.fontWeight = (t==0)?"bold":"normal";
            pageLink.style.cursor = "pointer";
            pageLink.innerText = t+1;
            pageNumber.appendChild(pageLink);
            pageLink.attachEvent("onclick",ClickPageNum);
        }
        preBtn.attachEvent("onclick",ClickPrePage);
        nextBtn.attachEvent("onclick",ClickNextPage);
        return layout;
    }
    var curPagenum = 0;
    ClickPageNum = function()
    {
        var eventScr = event.srcElement;
        var tbodies = m_table.tBodies;
        var index = eventScr.innerText;
        index = Number(index);
        curPagenum = index;
        var pNode = eventScr.parentNode;
        var nodes = pNode.getElementsByTagName("A");

        for(var j = 0; j < tbodies.length ; j++)
        {
            tbodies[j].style.display = "none";
            
        }
        for(var k = 0;k<nodes.length;k++)
        {
          nodes[k].style.fontWeight = "normal";
        }
        tbodies[index].style.display = "block";
        eventScr.style.fontWeight = "bold";
    }

    ClickPrePage = function()
    {
       try{
            var ele =  window.event.srcElement ;
            var pNode = ele.parentNode.parentNode;
            //alert(pNode.outerHTML);
            var nodes = pNode.nextSibling.getElementsByTagName("A");
            var node = null;
            for(var i=0;i<nodes.length;i++)
            {
                node = nodes[i];
                if(node.style.fontWeight == "bold")break;
            }
            if(node.previousSibling)
            {
                node.previousSibling.click();
            }
            }catch(e)
        {
            return;
        }
    }

    ClickNextPage = function()
    {
       try{
            var ele =  window.event.srcElement ;
            var pNode = ele.parentNode.parentNode;
            //alert(pNode.outerHTML);
            var nodes = pNode.previousSibling.getElementsByTagName("A");
            var node = null;
            for(var i=0;i<nodes.length;i++)
            {
                node = nodes[i];
                if(node.style.fontWeight == "bold")break;
            }
            if(node.nextSibling)
            {
                node.nextSibling.click();
            }
        }catch(e)
        {
            return;
        }
    }

    BuildRow = function(result,column,maxRowCount,action)
    {
        var results = result.childNodes;
        var row = document.createElement("tr");
        var keyword ="";
        for(var k = 0; k < column.length; k ++)
        {
            var cln = column[k];
           
            var cell = document.createElement("td");
            row.appendChild(cell);
         
            var str = results[cln.index].text;
           
            if(cln.name =="Probability") cell.className = "NumberColumn";
            if(cln.name != "Category")
                cell.innerText = str;
            else
            {
                var arr = str.split("$*$*");
                if(arr.length ==1)
                {
                     cell.innerText = str;
                }else
                {
                    var link =      document.createElement("a"); 
                    link.href = "#"; link.style.cursor = "pointer";
                    link.innerText = arr[3];
                    link.onclick = function()
                    {
                        QuerySub(arr[0],arr[1],link.innerHTML);
                    }
                    cell.appendChild(link);
                }
           }

        }
        
        return row;
    }

    BuildHeader = function(clomns,action)
    {
        var row = document.createElement("tr");
        for(var i = 0; i < clomns.length; i ++)
        {
            var clomn = clomns[i].name;
            var cell = document.createElement("td");
         
            if(clomn == "ID")cell.className = "IDCOL";
            if(clomn == "Category")cell.className = "CategoryCOL";
            if(clomn == "Probability")cell.className = "ProbabilityCOL";
          
            row.appendChild(cell);
            cell.innerText = adCenterLabs.Gadgets.String[clomn] ? adCenterLabs.Gadgets.String[clomn] : clomn;
        }
       
        return row;
        
    }
    /*
    this.BindingMultiData = function(xml,maxRow,args,filters)
    {
        if(xml == null)
        {
            var error = document.createElement("div");
            error.innerText = "No Result";
            error.style.color = "red";
            error.style.border = "solid 1px gray";
            m_el.appendChild(error);
            return;
        }
        //alert(xml.tagName);
        m_table.removeNode(true);
        m_table = document.createElement("table");
        m_table.cellPadding = 0;
        m_table.cellSpacing = 0;
        m_table.align = "center";
        
        if( args && args["width"])
        {
            m_table.style.pixelWidth = args["width"];
        }
        
        if(!maxRow)
        {
            maxRow = 6;
        }
        var dataArray = xml.childNodes;
        if(dataArray == null || dataArray.length == 0)
        {
            var error = document.createElement("div");
            error.innerText = "No Result";
            error.style.color = "red";
            error.style.border = "solid 1px gray";
            m_el.appendChild(error);
            return;
        }
        
        var tHead = m_table.createTHead();
        var headRow = tHead.insertRow(0);
        var columNum = dataArray[0].childNodes.length;
        var t = 0;
        for(var key = 0;key < columNum; key ++)
        {
            if(filters && filters[dataArray[0].childNodes[key].tagName])
            {
                t ++;
                continue;
            }
            var txt = dataArray[0].childNodes[key].tagName;
            if(txt != "Position")
            {
                var cell = headRow.insertCell(headRow.cells.length);
            }
            else
            {
                var cell = headRow.insertCell(0);
            }
            cell.className = txt;
            txt = adCenterLabs.Gadgets.String[txt] ? adCenterLabs.Gadgets.String[txt] : txt;
            cell.innerText = txt;
        }
        
        columNum -= t;
        var pageNum = dataArray.length/maxRow;
        var remainRecord = dataArray.length%maxRow;
        if(remainRecord!=0) pageNum++;
        
        var tBody = document.createElement("tbody");
        m_table.appendChild(tBody);
        for(var i = 0; i < dataArray.length; i ++)
        {
            var datas = dataArray[i];
            var bodyRow = tBody.insertRow(tBody.rows.length);
            if(i%2 == 0)
            {
                bodyRow.className = "gtr0";
            }
            else
            {
                bodyRow.className = "gtr1";
            }
            for(var id = 0; id < datas.childNodes.length; id ++)
            {
                if(filters && filters[datas.childNodes[id].tagName])
                {
                    continue;
                }
                if(datas.childNodes[id].tagName != "Position")
                {
                    var cell = bodyRow.insertCell(bodyRow.cells.length);
                }
                else
                {
                    var cell = bodyRow.insertCell(0);
                }
                var value = datas.childNodes[id].text;
                if(!isNaN(Number(value)))
                {
                    value = adCenterLabs.Gadgets.String.Formart(value,datas.childNodes[id].tagName);
                    cell.className = "NumberColumn";
                }
                else
                {
                    cell.className = "StringColumn";
                    Web.Bindings.attachElementBindingSync(cell,Web.UI.Binding.Tooltip,this,{tip:value});
                }
                cell.innerText = value;
            }
            if( (i+1)%maxRow == 0 && (i+1)!= dataArray.length)
            {
                tBody = document.createElement("tbody");
                m_table.appendChild(tBody);
                tBody.style.display = "none";
            }
        }
        var oi = i;
        if(remainRecord != 0)
        {
            var nullCount =  maxRow - remainRecord;
            for(var i=0;i<nullCount;i++)
            {
                var tbodyTr = document.createElement("tr");
                if(i+oi%2 == 0)
                {
                    tbodyTr.className = "gtr0";
                }
                else
                {
                    tbodyTr.className = "gtr1";
                }           
                for(var j=0;j<columNum;j++)
                {
                    var tbodyTd = document.createElement("td");
                    tbodyTd.innerHTML= "&nbsp;";
                    tbodyTr.appendChild(tbodyTd);
                }
                tBody.appendChild(tbodyTr);
            }
        }
        if(pageNum >= 2)
        {
            var tFoot = m_table.createTFoot();
            var footRow = tFoot.insertRow(0);
            var footCell = footRow.insertCell(0);
            footCell.colSpan = columNum;
            footCell.style.textAlign = "center"; 
            var footContainer = document.createElement("div");
            footContainer.align = "center";
            footCell.appendChild(footContainer);
            BuildPageNum(footContainer,pageNum);
        }
        
        m_el.appendChild(m_table);
    }
    */
    function BuildPageNum(el_container,p_num)
    {
        
	    funcDelegate = function(param)
        {
            return function()
            {
                if(param.tagName == "A") { ViewPage(param); }
                else{ ViewPageNextOrLast(param); }
            }
        }
                
        ViewPage = function(nodeA)
        {
            var pageNum = nodeA.innerHTML;
            var tableEle = nodeA;
            while(true)
            {
                if(tableEle.tagName == "TABLE")
                {
                   break;
                }else
                {
                    tableEle = tableEle.parentNode;
                }
            }
            var tbodys = tableEle.tBodies;
            for(var i=0;i<tbodys.length;i++)
            {
                if(Web.Browser.isIE())
                {
                    if(i!=Number(pageNum))
                    { 
                        tbodys[i].style.display = "none";
                    }
                    else
                    {
                        tbodys[i].style.display = "";
                    }
                }
                else
                {
                    if(i!=Number(pageNum)-1)
                    { 
                        tbodys[i].style.display = "none";
                    }
                    else
                    {
                        tbodys[i].style.display = "";
                    }
                }
            }
            
            var pNode = nodeA.parentNode;
            var len = pNode.childNodes.length;
            
            for(var i=0 ;i<pNode.childNodes.length;i++)
            {
                var child = pNode.childNodes[i];
                var childTagName = child.tagName;
            
                if(childTagName == "A")
                {
                    child.className = "NormalPageA";
                }
            }
          
            nodeA.className = "SelectedPageA";
           
       }
        
        function ViewPageNextOrLast(param)
        {
           var tableEle = m_table ;
           var tbodys = tableEle.tBodies;
           var curPageNum ;
           
           if(Web.Browser.isIE())
           {
               for(var i=1;i<=tbodys.length;i++)
               {
                    if(tbodys[i].style.display == "")
                    {
                        curPageNum = i;
                        break;
                    }
               }
               if((curPageNum == 1 && param == "PrePage") || (curPageNum == tbodys.length-1 && param == "NextPage"))
               {
                    return;
               }
           }
           else
           {
               for(var i=0;i<tbodys.length;i++)
               {
                    if(tbodys[i].style.display == "")
                    {
                        curPageNum = i;
                        break;
                    }
               }
               if((curPageNum == 0 && param == "PrePage") || (curPageNum == tbodys.length-1 && param == "NextPage"))
               {
                    return;
               }
           }
           var pageToViewNum = (param == "NextPage")?curPageNum+1:curPageNum-1;
           tbodys[curPageNum].style.display = "none"; 
           tbodys[pageToViewNum].style.display = ""; 
           var pageBtns = el_container.getElementsByTagName("a");//alert(pageBtns.length+"\n"+el_container.innerHTML);
           
           if(Web.Browser.isIE())
           {
               pageBtns[curPageNum].className = "NormalPageA";
               pageBtns[pageToViewNum].className = "SelectedPageA";
           }
           else
           {
               pageBtns[curPageNum+1].className = "NormalPageA";
               pageBtns[pageToViewNum+1].className = "SelectedPageA";
           }
        }
        
        var prePage = document.createElement("span"); 
        Web.Bindings.attachElementBindingSync(prePage,adCenterLabs.Gadgets.GoButton,this,{"n_Img" :"/ARD/images/p_back.png" , "o_Img":"/ARD/images/p_back_over.png"});
        prePage.attachEvent("onclick",funcDelegate("PrePage"));
        
        var nextPage = document.createElement("span"); 
        Web.Bindings.attachElementBindingSync(nextPage,adCenterLabs.Gadgets.GoButton,this,{"n_Img" :"/ARD/images/p_next.png" , "o_Img":"/ARD/images/p_next_over.png"});
        nextPage.attachEvent("onclick",funcDelegate("NextPage"));
        
        var pageView = document.createElement("span"); 
        pageView.innerHTML = "&nbsp;&nbsp;Page&nbsp;&nbsp;";
        
        el_container.appendChild(prePage);
        el_container.appendChild(pageView);
        el_container.appendChild(nextPage);
        for(var curPage = 1;curPage <= p_num ; curPage ++)
        {
            var pageLink = document.createElement("a"); 
            if(curPage == 1)
            {
                pageLink.className = "SelectedPageA";
            }
            else
            {
                pageLink.className = "NormalPageA";
            }
            pageLink.innerHTML = curPage.toString();
            pageLink.attachEvent("onclick",this.funcDelegate(pageLink));
            pageLink.attachEvent("onmouseover",PLinkOver);
            pageLink.attachEvent("onmouseout",PLinkOut);
            pageView.appendChild(pageLink);
        }
        
        function PLinkOver()
        {
            if(event.srcElement.className != "SelectedPageA")
            {
                event.srcElement.className = "OverPageA";
            }
        }
        function PLinkOut()
        {
            if(event.srcElement.className != "SelectedPageA")
            {
                event.srcElement.className = "NormalPageA";
            }
        }
        
        tableEle = null;
    }
}
adCenterLabs.Gadgets.DataGrid.registerClass("adCenterLabs.Gadgets.DataGrid", "Web.Bindings.Base");   
adCenterLabs.Gadgets.DataGrid.Events = Web.Enum.create("onDataBinding"); 





//////*******************
//////String for display
//////*******************
adCenterLabs.Gadgets.String = new function()
{
    this.Formart = function(value,type)
    {
        function addCommas(numberVal)
        {
            strVal = numberVal.toString();
            strVal += '';
            x = strVal.split('.');
            x1 = x[0];
            x2 = x.length > 1 ? '.' + x[1] : '';
            var rgx = /(\d+)(\d{3})/;
            while (rgx.test(x1)) {
	            x1 = x1.replace(rgx, '$1' + ',' + '$2');
            }
            return x1 + x2;
        }
        
        type = this[type];
        if(type == "CTR" )
        {
            value = Number(value).toFixed(4) ;
            value = value*1000/10;
            value = value.toString();
            if(value.indexOf(".") == -1)
            {
                value += ".00";
            }
            if(value.substring(value.indexOf("."),value.length).length < 3 )
            {
                value += "0";
            }
            value += "%";
        }
        else if(type == "CPC" || type == "TotalCost")
        {
            value = Number(value).toFixed(2);
            value = addCommas(value);
            value = "$"+value;
        }
        else if(type == "Position")
        {
            value = adCenterLabs.Gadgets.String["Position"+value];
        }
        else if(type == "Relevance")
        {
            var starStr = "<span><img src='images/star_8x8.png'/></span>";
            if(value < 0.25)
            {
                value = starStr;
            }
            else if(value <0.4)
            {
                value = starStr + starStr;
            }
            else
            {
                value = starStr + starStr + starStr;
            }
        }
        else
        {
            value = Math.floor(Number(value) * 1000) / 1000;
            value = addCommas(value);
        }
        return value;
    }
        
        function addCommas(numberVal)
        {
            strVal = numberVal.toString();
            strVal += '';
            x = strVal.split('.');
            x1 = x[0];
            x2 = x.length > 1 ? '.' + x[1] : '';
            var rgx = /(\d+)(\d{3})/;
            while (rgx.test(x1)) {
	            x1 = x1.replace(rgx, '$1' + ',' + '$2');
            }
            return x1 + x2;
        }
    
    this["Position1"] = "ML1";
    this["Position2"] = "ML2";
    this["Position3"] = "ML3";
    this["Position4"] = "RR1";
    this["Position5"] = "RR2";
    this["Position6"] = "RR3";
    this["Position7"] = "RR4";
    this["Position8"] = "RR5";
    this["CPC"] = "CPC";
    this["CTR"] = "CTR";
    this["Term"] = "Keyword";
    this["Relevance"] = "Relevance";
    this["Confidence"] = "Relevance";
    this["Score"] = "Relevance";
    this["Impressions"] = "Impr.";
    this["Support"] = "Impr.";
   
   
    this["trends"] = "Select a Vertical:";
    this["keyword"] = "Type one or more keywords:";
    this["url"] = "Type a  web site URL:";
    this["vertical"] = "Select a Vertical:";
    
    this["keywordLM"] = "Input your keyword(s) in textbox and click Go to start ";
    this["urlLM"] = "Input your URL in textbox and click Go to start ";
    this["verticalLM"] = "Select your vertical in dropdown list and click Go to start ";
    this["trendsLM"] = "Select your vertical in dropdown list and click Go to start ";

 }