/*
 * ELSlideshowParserXml 1.3.1
 *
 * Copyright 2010 Estee Lauder - www.esteelauder.com
 * Lovingly crafted By Nick Warner - www.nwarner.com
*/


ELSlideshowPlayer.addMethods({
  'parse_xml': function(xml){
    var player = this;

    // Parse Slides
    player.slideshow.slides = [];   
    var xml_container = Element.extend(document.createElement("div"));
    xml_container.update(xml);
    
    // Slideshow Properties
    var slideshow_xml = $(xml_container).select("SLIDESHOW")[0];
    player.slideshow.width =    slideshow_xml.readAttribute("WIDTH") || player.slideshow.width;
    player.slideshow.height =   slideshow_xml.readAttribute("HEIGHT") || player.slideshow.height;
    player.slideshow.autoplay = slideshow_xml.readAttribute("AUTOPLAY") || player.slideshow.autoplay;
    player.slideshow.loop =     slideshow_xml.readAttribute("LOOP") || player.slideshow.loop;
        
    
    var overlay_xml = $(xml_container).select("OVERLAY");
    if (overlay_xml.length > 0) {
      // Add pager
      var pager_xml = $(overlay_xml)[0].select("PAGER");
      if (pager_xml.length > 0) {
        pager_xml = pager_xml[0];
        player.pager = new ELPager();
        player.pager.start_x = parseInt(pager_xml.readAttribute("X"), 10);
        player.pager.start_y = parseInt(pager_xml.readAttribute("Y"), 10);
        player.pager.width = pager_xml.readAttribute("WIDTH");
        player.pager.height = pager_xml.readAttribute("HEIGHT");
        player.pager.src = pager_xml.readAttribute("SRC");
        player.pager.src_current = pager_xml.readAttribute("SRC_CURRENT");
        player.pager.onload_action = pager_xml.readAttribute("ONLOAD");
        player.pager.onmouseover_action = pager_xml.readAttribute("ONMOUSEOVER");
        player.pager.onmouseout_action = pager_xml.readAttribute("ONMOUSEOUT");   
      }
    
      // Add Slideshow Overlays
      var overlay_layers = $(overlay_xml)[0].select("LAYER");
      player.slideshow.overlays = [];
      overlay_layers.each(function(overlay_xml, index) {
        var overlay_layer = new ELImage("overlay_image"+index);
        overlay_layer = player.parse_xml_for_layer(overlay_xml, overlay_layer);       
        player.slideshow.overlays.push(overlay_layer);
      });
    }
    
    // Add Slideshow Underlays
    var underlay_xml = $(xml_container).select("UNDERLAY");
    if (underlay_xml.length > 0) {
      var underlay_layers = $(underlay_xml)[0].select("LAYER");
      player.slideshow.underlays = [];
      underlay_layers.each(function(underlay_xml, index) {
        var underlay_layer = new ELImage("underlay_image"+index);
        underlay_layer = player.parse_xml_for_layer(underlay_xml, underlay_layer);       
        player.slideshow.underlays.push(underlay_layer);
      });
    }
    
    var slides = $(xml_container).select("SLIDE");    
    slides.each(function(slide_xml, i) {
      var slide = new ELSlide("slide"+i);
      
      // Add Slide Layers
      slide.layers = [];
      var slide_layers = $(slide_xml).select("LAYER");

      slide_layers.each(function(layer_xml, index) {
        // Add images to layer
        if (layer_xml.readAttribute("TYPE").toLowerCase() !== "text") {          
          var image = new ELImage(slide.id+"_image"+index);
          image = player.parse_xml_for_layer(layer_xml, image);       
          slide.layers.push(image);
        }
        // Add texts to layer
        if (layer_xml.readAttribute("TYPE").toLowerCase() === "text") {
          var text = new ELText(slide.id+"_text"+index);
          text = player.parse_xml_for_layer(layer_xml, text);
          if (text.text !== undefined) {
            slide.layers.push(text);
          }
        }
      });

      // Other slide attributes
      slide.name =    slide_xml.readAttribute("NAME"); 
      slide.style = slide.style + slide_xml.readAttribute("STYLE"); 
      slide.background_color = player.hexify_color(slide_xml.readAttribute("BACKGROUND_COLOR"));   // Maybe deprecate this in the future in favor of setting this in the Style
      slide.metrics_id = slide_xml.readAttribute("COREMETRICSPAGEID");
      slide.interval = slide_xml.readAttribute("INTERVAL"); 
      slide = player.xml_parser_register_layer_actions(slide_xml, slide);      
   
      player.slideshow.slides.push(slide);   
    });
  },
  
  
  'parse_xml_for_layer': function(layer_xml, layer) {
    var player = this;
    if (layer.type === 'image') {
      layer.src =       layer_xml.innerHTML;
      layer.image.src = layer.src;
    }
    if (layer.type === 'text') {   // Future: if support for Text is really needed, perhaps rely on Style data instead of setting these individually
      layer.text =           layer_xml.innerHTML;
      layer.font =           layer_xml.readAttribute("FONT");
      layer.fontsize =       layer_xml.readAttribute("FONTSIZE");
      layer.color =          player.hexify_color(layer_xml.readAttribute("COLOR"));
      layer.letterspacing =  layer_xml.readAttribute("LETTERSPACING");
    }
    
    // add additional assets for layer
    layer.assets = [];
    var layer_assets = layer_xml.readAttribute("ASSETS");     
    if (layer_assets) {
      layer_assets.evalJSON().assets.each(function(asset){
        layer.assets.push(asset);
      });
    }
    
    layer.name =    layer_xml.readAttribute("NAME");
    layer.x =       layer_xml.readAttribute("X") || 0;
    layer.y =       layer_xml.readAttribute("Y") || 0; 
    layer.width =   layer_xml.readAttribute("WIDTH") || player.width;
    layer.height =  layer_xml.readAttribute("HEIGHT") || player.height;   
    layer.url =     layer_xml.readAttribute("URL");
    layer.style =   layer.style + layer_xml.readAttribute("STYLE");   
    layer = player.xml_parser_register_layer_actions(layer_xml, layer);
    
    return layer; 
  },


  'xml_parser_register_layer_actions': function(layer_xml, layer){
    var player = this;
    layer.onload = new ELAction(layer, layer_xml.readAttribute("ONLOAD"), player);          
    layer.onunload = new ELAction(layer, layer_xml.readAttribute("ONUNLOAD"), player);
    layer.onmouseover = new ELAction(layer, layer_xml.readAttribute("ONMOUSEOVER"), player);
    layer.onmouseout = new ELAction(layer, layer_xml.readAttribute("ONMOUSEOUT"), player);
    layer.onclick = new ELAction(layer, layer_xml.readAttribute("ONCLICK"), player);
    return layer;
  }

  
});



