 Request.HTML.implement({
  
         processHTML: function(text){
             var match = text.match(/<body[^>]*>([\s\S]*?)<\/body>/i);
             text = (match) ? match[1] : text;
            
             var container = new Element('div');
            
             return $try(function(){
                 var root = '<root>' + text + '</root>', doc;
                 if (Browser.Engine.trident){
                     doc = new ActiveXObject('Microsoft.XMLDOM');
                     doc.async = false;
                     doc.loadXML(root);
                 } else {
                     doc = new DOMParser().parseFromString(root, 'text/html');
                 }
                 root = doc.getElementsByTagName('root')[0];
                 for (var i = 0, k = root.childNodes.length; i < k; i++){
                     var child = Element.clone(root.childNodes[i], true, true);
                     if (child) container.grab(child);
                 }
                 return container;
             }) || container.set('html', text);
         }
    
     });

/*
    cartDetail is the ajax popup to edit product details in the cart
*/
var sku = "";
var cartDetail = {

    init: function(options){
        this.options = $extend({
            previewWidth:       EDIT_POPUP_WIDTH,
            previewHeight:      EDIT_POPUP_HEIGHT,
            popupDuration:      POPUP_DURATION,
            fadeoutDuration:    FADEOUT_DURATION,
            previewId:          POPUP_HOLDER,
            triggerId:          EDIT_TRIGGER_ID,
            closeId:            POPUP_CLOSE_ID,
            overlayOpacity:     OVERLAY_OPACITY
        }, options || {});
        
        $$('a.'+this.options.triggerId).each( function(el){
            el.addEvent('click', function(e){ 
                this.trigger = el;
                var event = new Event(e);
                this.open(event);
            }.bind(this));   
        }, this);        
               
		//this.eventKeyDown = this.KeyboardListener.bindAsEventListener(this);
		this.eventPosition = this.positionOverlay.bind(this);

        this.overlay = new Element('div', {'id': 'overlay'}).setStyle('opacity', 0).inject(document.body);
        this.popup = new Element('div', {'id': this.options.previewId}).inject(document.body);
        this.overlay.style.display = 'none';
        this.popup.style.display = 'none';
        this.closer = new Element('div', {'id': this.options.closeId}).inject(this.popup);
        this.closeLink = this.closer.set('html','Close X').onclick = this.overlay.onclick = this.close.bind(this);
        this.popupContent = new Element('div', {'id': 'ajaxContent1'}).inject(this.popup)
        
    },     
   
    open: function(event){
    
        trigger = this.trigger;
        this.triggerParent = this.trigger.getParent();
        this.pid = this.trigger.getProperty('name');
        this.triggerPosition = this.trigger.getPosition();
        this.triggerDimensions = this.triggerParent.getSize();
        if(this.triggerDimensions.size){
            triggerY = this.triggerDimensions.size.y;
            triggerX = this.triggerDimensions.size.x;
        } else {
            triggerY = this.triggerDimensions.y;
            triggerX = this.triggerDimensions.x;
        }
		this.setup(true);
        //this.popup.setStyles({'left': this.triggerPosition.x, 'top': this.triggerPosition.y + this.triggerDimensions.size.y });
        this.overlay.style.display = 'block';
        //this.popup.style.display = 'block';
        this.positionOverlay();
        this.overlay.style.opacity = 0;
        this.popupContent.set('html','');
        
        this.popup.setStyles({
            'display': 'block',
            'left': this.triggerPosition.x, 
            'top': this.triggerPosition.y + triggerY,
            'width': 1, 
            'height': 1,
            'padding': 0
        });
        //this.popup.style.padding = 0;
        //var top = this.popup.getPosition().y;
        new Fx.Scroll(window, {duration: 500}).set(0,this.popup.getPosition().y - 100);
        //new Fx.Scroll(window, {duration: 500}).scrollTo(0, 0);
        
        //var openOverlay = new Fx.Styles(this.overlay,{duration: 500, wait: false});
        //var openDiv = new Fx.Styles(this.popup,{duration: this.options.popupDuration});
        //var closeDiv = new Fx.Styles(this.triggerParent, {duration: 200});
        //var boxTop = this.popup.styles.  
        this.toggleSelects(true);
        this.overlay.set('tween', {duration: 500});
        this.overlay.tween('opacity', [0,this.options.overlayOpacity]);
        this.popupContent.set('html', '<br /><div style="text-align: center;"><img src="/images/ajax_loading.gif" /><br/>Loading...</div>');  
        /*
        openDiv.start({
            'height': [1,this.options.previewHeight], 
            'width': [1,triggerX],
            'opacity': [0.9,1]
        }).chain(function(){     
            this.loadContents();            
        }.bind(this));
        */
        
        var myEffect = new Fx.Morph(this.popup, {duration: this.options.popupDuration, transition: Fx.Transitions.Sine.easeOut});
        myEffect.start({
            'height': [1,this.options.previewHeight], 
            'width': [1,triggerX],
            'opacity': [0.9,1]
        }).chain(function(){this.loadContents()}.bind(this));
        
        return true;
    },
    
    toggleSelects: function(open){
        var ie6 = Browser.Engine.trident4;
        [ie6 ? "select" : "embed"].forEach(function(tag) {
			Array.forEach(document.getElementsByTagName(tag), function(el) {
				if (open) {
                    el.lbBackupStyle = el.style.visibility;
                    el.style.visibility = "hidden";
                } else {
                    if($defined(el.lbBackupStyle)){                        
                        el.style.visibility =  el.lbBackupStyle;
                    }
                }
			});
		}); 
    },
    
    loadContents: function(){
    
        //this.popupContent.set('html','<br /><div style="text-align: center;"><img src="/images/ajax_loading.gif" /><br/>Loading...</div>');
        sku = this.trigger.getProperty('name');
        var qty = $('qty_'+sku).value;  
        var skuBits = sku.split("-");      
        var url = "/detail.php?p="+skuBits[1]+"&edit=1&sku="+sku+"&qty="+qty;  
        var resizeWindow = this.resizeWindow.bind(this);
        var ajaxOptions = {
            url: url,
            mode: 'get',
            update: $('ajaxContent1'),
            evalScripts: 1,
            onComplete: function(){
                this.resizeWindow();
            }.bind(this)
        }        
        this.ajaxRequest = new Request.HTML(ajaxOptions).send();
    },
    
    resizeWindow: function(){
        //var openDiv = new Fx.Styles(this.popup,{duration: 500});
        var closerSize = this.closer.getSize();
        if(closerSize.size){
            closerY = closerSize.size.y;
            contentY = this.popupContent.getSize().size.y;
        } else {
            closerY = closerSize.y;
            contentY = this.popupContent.getSize().y;
        }
        this.popup.set('tween', {duration: 500});
        this.popup.tween('height', [closerY + contentY]);
       // openDiv.start({
       //     'height': [closerY + contentY]
       // }); 
        
        
    },
    
    positionOverlay: function(){
    
	    this.overlay.setStyles({'left': 0, 'top': window.getScrollTop(), 'height': window.getHeight()});
    },
        
	keyboardListener: function(event){
		switch (event.keyCod){
			case 27: case 88: case 67: this.close(); break;
			case 37: case 80: this.previous(); break;	
			case 39: case 78: this.next();
		}
	},
    
    setup: function(open){
		var elements = $A(document.getElementsByTagName('object'));
		elements.extend(document.getElementsByTagName(window.ie ? 'select' : 'embed'));
		elements.each(function(el){
			if (open) el.lbBackupStyle = el.style.visibility;
			el.style.visibility = open ? 'hidden' : el.lbBackupStyle;
		});
		var fn = open ? 'addEvent' : 'removeEvent';
		window[fn]('scroll', this.eventPosition)[fn]('resize', this.eventPosition);
		//document[fn]('keydown', this.eventKeyDown);
		this.step = 0;
	},
    
    close: function(){
        this.overlay.style.display = 'none';
        this.popup.set('tween', {duration: this.options.fadeoutDuration});
        this.popup.tween('opacity', [0]);
        this.toggleSelects(false);
        /*
        var closeDiv = new Fx.Styles(this.popup,{duration: this.options.fadeoutDuration});
        closeDiv.start({
            
            'opacity': [0]
        })*/
    }
}

window.addEvent('domready', cartDetail.init.bind(cartDetail));


