/*

	This script 
	
	1. Calls OAS to get an xml based list of video ads with
	synchronized imu's
	2. Generates an array of Ad Objects for consumption by video portal
	3. Calls the callback method to load the player with a playlist

*/
var root;

function OasAdObj(){
    this.Id='';
    this.Host='';
    this.Video_OAS='';
    this.VideoTracking=new Array();
    this.VideoClickThru = '';
    this.IMU_OAS='';
    this.Position = '';
    this.VideoAdUrl = '';
    this.Source = '';
    
    }
    

//interval tracking
    function OasTrackingObj() {
		this.VideoTrackingURL =  '';
		this.VideoTrackingInterval = '';
		
    }
//interval tracking

//Create XML Doc to hold XML Results
var xmlDoc;

function setXMLFromOAS(result)
{
try
  {	
	
	if (window.ActiveXObject)
			{
			   xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
			   xmlDoc.async = false;
			   xmlDoc.loadXML(result);
			   //Parse the XML if we are in IE Browser
               getOASXMLFromIEBrowsers();
			}
			else
			{  
					//Make sure we start with the first <ads> node
					var iAds = result.indexOf("<ads>");					
					if(iAds>0)
						result=result.substring(iAds);
						
					//Create DOM Parser for parsing xml
					xmlParser = new DOMParser();
					try{xmlDoc = xmlParser.parseFromString(result,"text/xml");}
					catch (xe){xmlDoc=null;}
					
					if(xmlDoc!=null){
						getOASXMLInFireFox();
					}
			}
  }
	catch(err)
  {

  
  }
 	callback(parent._g6CurrClipId,parent._g6CurrChannel);

}



function getOASXMLInFireFox(){
 
    var ads = xmlDoc.getElementsByTagName('ad');
  
    if (ads.length==0) 
    {
      return false;
    }

	//######################## if empty string is there... #################################
 	var arrayCounter = 0;
	for(var k=0; k<ads.length; k++) {
	       if (typeof ads[k].getElementsByTagName('empty')[0] != 'undefined')
	       {   
	           //write the image for empty.gif here!
			   try{LogEmptyAd(ads[k].getElementsByTagName('empty')[0].childNodes[0].nodeValue);}
               catch(err){}
	       }
	       else {arrayCounter=arrayCounter+1;} 
	}
	//######################## if empty string is there... #################################
	//############################ define _g6AdArray #######################################
 	  parent._g6AdArray = new Array(arrayCounter);
	//############################ define _g6AdArray #######################################
	for(var i=0; i<ads.length; i++) {
	
	     if (typeof ads[i].getElementsByTagName('empty')[0] == 'undefined')
	   {
	    adObj=new OasAdObj();
			
	      
	      
	      
            adObj.Id     = ads[i].getElementsByTagName('id')[0].childNodes[0].nodeValue+i;
            
            
             try{ adObj.Position   =  ads[i].getElementsByTagName('position')[0].childNodes[0].nodeValue;}
               catch(err){  adObj.Position="";}
               
          
            
            try{ 
             adObj.Source    =  ads[i].getElementsByTagName('source')[0].childNodes[0].nodeValue;
            }
            catch (errSource){
            adObj.Source="oas";
            }
            
           //######################## what node is this coming from #################################
           // adObj.Video_OAS   = ads[i].childNodes[3].childNodes[1].childNodes[0].childNodes[0].nodeValue;
           //######################## what node is this coming from #################################
           
            try{ 
       
            adObj.VideoClickThru = ads[i].getElementsByTagName('clickthru')[0].childNodes[1].childNodes[0].nodeValue;
            }
            catch (errVideoClickThru){}
               
           try{  
				 adObj.IMU_OAS   = ads[i].getElementsByTagName('imu')[0].childNodes[1].childNodes[0].nodeValue;;
			}
           catch (errIMU){}
          //######################## get the stream url based on bitrate and format################################
            var streamNodes = ads[i].getElementsByTagName('stream');
            adObj.VideoAdUrl=getNearestBitRateUrlForFireFox(streamNodes); 
                   
          
         //######################## get tracking and put in tracking array ################################
            trackingNodes = ads[i].getElementsByTagName('tracking');
         
            trackingCount = 0;
            for(urlCount=0;urlCount<trackingNodes[0].childNodes.length;urlCount++){     
             if (trackingNodes[0].childNodes[urlCount].nodeName == 'url')
                {
					
					 adTrackingObj=new OasTrackingObj();
					 adTrackingObj.VideoTrackingURL = trackingNodes[0].childNodes[urlCount].childNodes[0].nodeValue;
					 var attInterval =  trackingNodes[0].childNodes[urlCount].getAttribute('interval'); 
					//add if interval attribute exists....
					 if (attInterval != null && attInterval !="")
						      {
								adTrackingObj.VideoTrackingInterval = attInterval;
							  }
						    
						    adObj.VideoTracking[trackingCount] =   adTrackingObj; // trackingNodes[0].childNodes[urlCount].childNodes[0].nodeValue;
                    
					// adGTrackingObj.VideoTrackingInterval = trackingNodes[0].childNodes[urlCount].childNodes[0].nodeValue;
					//adObj.VideoTracking[trackingCount] = adGTrackingObj;
				    //adObj.VideoTracking[trackingCount]= trackingNodes[0].childNodes[urlCount].childNodes[0].nodeValue;
                    trackingCount= trackingCount+1;
                 
                }
             }   
				  if (adObj.VideoAdUrl != '') 
		   {
		
		    parent._g6AdArray[adObj.Id] = adObj
           }
              
				
           
	}	
    }
 
		
}



function getNearestBitRateUrlForFireFox(streamnodes){
    
    var nearestBitRate=bitrate;
    var nearestBitRatePos=0;
    var avlStreamAttr=new Array();
    var j=0;
    
    for (var streamCount=0;streamCount<streamnodes.length;streamCount++){  
        var attBitRate =  streamnodes[streamCount].getAttribute('bitrate');
        var attFormat =  streamnodes[streamCount].getAttribute('format');   
        var attURL = streamnodes[streamCount].childNodes[0].nodeValue;
       
        if (sFormat.toLowerCase() == attFormat.toLowerCase()){
            avlStreamAttr[j]=new Array(2);
            avlStreamAttr[j][0]=attBitRate;
            avlStreamAttr[j][1]=attURL;
            j++;
         }
    }        
     
     for(i=0;i<avlStreamAttr.length;i++){
        if(bitrate-avlStreamAttr[i][0]>=0 && bitrate-avlStreamAttr[i][0] <= nearestBitRate){
            nearestBitRate=bitrate-avlStreamAttr[i][0];nearestBitRatePos=i;
        }
     }
          
     return (avlStreamAttr.length !=0? avlStreamAttr[nearestBitRatePos][1]: '');
}

 function getOASXMLFromIEBrowsers(){


    var ads = xmlDoc.getElementsByTagName('ad');  
  
        if (ads.length==0) 
        {
          return false;
        }
 
  	//######################## if empty string is there... #################################
 	var arrayCounter = 0;
	for(var k=0; k<ads.length; k++) {
	      
	       if (ads[k].getElementsByTagName('empty')[0] != null)
	       { 
			    //write the image for empty.gif here!
			   try{LogEmptyAd(ads[k].getElementsByTagName('empty')[0].childNodes[0].nodeValue);}
               catch(err){}
	       }
	       else {arrayCounter=arrayCounter+1; } 
	      
	}
	

 	//############################ define _g6AdArray #######################################
 		 parent._g6AdArray = new Array(arrayCounter);
    //############################ define _g6AdArray #######################################
 
	for(var i=0; i<ads.length; i++) {
	   //check to see if the first node is empty if it is ....if it is the write to gif file....

	 
	   if (ads[i].getElementsByTagName('empty')[0] == null)
	   {        

	       
	            adObj=new OasAdObj();
       
                adObj.Id     = ads[i].getElementsByTagName('id')[0].childNodes[0].nodeValue+i; 
                
                
                try{
                    adObj.Position   =  ads[i].getElementsByTagName('position')[0].childNodes[0].nodeValue;
                }
                catch (errPosition){
                    adObj.Position="";
                }
                
                // alert(adObj.Position);
                
                try{ 
                adObj.Source    =  ads[i].getElementsByTagName('source')[0].childNodes[0].nodeValue;
                }
                catch (errSource){
                adObj.Source="oas";
                }
               
                  
                //######################## what node is this coming from #################################
                // adObj.Video_OAS   = ads[i].childNodes[3].childNodes[1].childNodes[0].childNodes[0].nodeValue;
                //######################## what node is this coming from #################################
               
               try{ 
                
                adObj.VideoClickThru = ads[i].getElementsByTagName('clickthru')[0].childNodes[0].childNodes[0].nodeValue;
                }
                catch (errVideoSource)
                {
                
                }
                
                try{ 
				   adObj.IMU_OAS   = ads[i].getElementsByTagName('imu')[0].childNodes[0].childNodes[0].nodeValue;;
				}
                  catch (errVideoSource)
                {
                
                }
                  
                //######################## get the stream url based on bitrate and format################################
                var streamNodes = ads[i].getElementsByTagName('stream');
				
			
			      
				   adObj.VideoAdUrl=getNearestBitRateUrlForFireFox(streamNodes); 
				 
           
           
                //######################## get the stream url based on bitrate and format################################
                //######################## get tracking and put in tracking array ################################
               trackingNodes = ads[i].getElementsByTagName('tracking');
               

              trackingCount = 0;
                    for(urlCount=0;urlCount<trackingNodes[0].childNodes.length;urlCount++){
                      
                     if (trackingNodes[0].childNodes[urlCount].nodeName == 'url')
                        {
						
                        
                        	  adTrackingObj=new OasTrackingObj();
							  adTrackingObj.VideoTrackingURL = trackingNodes[0].childNodes[urlCount].childNodes[0].nodeValue;
										  						
							  var attInterval =  trackingNodes[0].childNodes[urlCount].getAttribute('interval');  
						      //add if interval attribute exists....
						      if (attInterval != null && attInterval !="")
						      {		
								adTrackingObj.VideoTrackingInterval = attInterval;
								//trackingNodes[0].childNodes[urlCount].childNodes[0].nodeValue;
							  }
						    
						    adObj.VideoTracking[trackingCount] =   adTrackingObj; // trackingNodes[0].childNodes[urlCount].childNodes[0].nodeValue;
                            //adObj.VideoTracking[trackingCount]= trackingNodes[0].childNodes[urlCount].childNodes[0].nodeValue;
                            trackingCount= trackingCount+1;
                         
                        }
                     }   
                     
           // for(urlCount=0;urlCount<trackingNodes.childNodes.length;urlCount++){
             //   adObj.VideoTracking[urlCount]= trackingNodes.childNodes[urlCount].childNodes[0].nodeValue;
               // }
         //######################## get tracking and put in tracking array ################################
         
            //#############################parent._g6AdArray[adObj.Id] = adObj;
            //add only if adObj.VideoAdUrl matches the format and is not null or empty............
         
		   if (adObj.VideoAdUrl != '') 
		   {
		
		    parent._g6AdArray[adObj.Id] = adObj
           }
        
        }
   
	     }
	     
    }

    function LogEmptyAd(imgSrc) {

       var ni = document.getElementById("DivAdEmptyOASGIFLogging");
       if(typeof(ni)=='undefined')
            return;

       if(typeof(imgSrc)=='undefined')
            return;
            
       //write the image
       ni.innerHTML = ni.innerHTML+ "<img src=\""+imgSrc+"\" border=\"0\"   width=\"1\"  height=\"50\" />";
   
       

      }

 
