// Place your application-specific JavaScript functions and classes here
// This file is automatically included by javascript_include_tag :defaults
function decrement_character_count( src, dest ) {
    var dest = $(dest);
    var src = $(src);
    dest.innerHTML = src.maxLength - src.value.length;
}

function position_css_popup( event, id ) {
    var x = 0;
    var y = 0;
    if( event.pageX ) {
        x = event.pageX;
        y = event.pageY;
    } else  if( event.clientX ) {
        var target;
        if( event.target ) target = event.target;
        else if( event.srcElement ) target = event.srcElement;
        x = 15 + findPos(target)[0];
        y = 15 + findPos(target)[1];
    }
    
    //stop from overflowing the viewport
    // max_width = sizes[0];
    // ele_width = parseFloat(Element.getStyle(id,'width')  || '0');
    // alert("W:"+ ele_width);
    // alert("X:" + x);
    // 
    // new_right_edge = ele_width + x;
    // alert("MI:" + max_width);
    // alert("NRE:" + new_right_edge);
    // 
    // if( new_right_edge > max_width ) {
    //   to_far = max_width - new_right_edge;
    //   alert(to_far);
    //   x = x - to_far;
    // }
    

    position_element(id, x, y);
}

function getEventTarget(event) {
    var target = null;
    if( event.target ) target = event.target;
    else if( event.srcElement ) target = event.srcElement;
    return target;
}

function position_element(ele, x, y) {
    if( self.$ ) {
        ele = $(ele);
    } else if( ! ele.style ) {
        ele = document.getElementById(ele); //Hope we're passed an id
    }
    ele.style.top =  y + "px";
    ele.style.left = x + "px";

}

function position_element_fixed(target_element, target_id) {
    var position = findPos(target_element);
    position_element(target_id, position[0], position[1] + target_element.offsetHeight);
}

function position_element_fixed_width(target_element, target_id) {
    var position = findPos(target_element);
    position_element(target_id, position[0] + target_element.offsetWidth, position[1]);
}

function findPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	return [curleft,curtop];
}

function defaultInputText( ele, defaultText ) {
    ele = $(ele);
    ele.value = defaultText;
    ele.onfocus = function() {
        this.value = ( this.value == defaultText ? '' : this.value );
    }
    
    ele.onblur = function() {
        this.value = ( this.value == '' ? defaultText : this.value );
    }
}

function selectOptionWithValue(list, value) {
    list = $(list);
    var found = false;
    for(var i=0; i<list.options.length; i++ ) {
        if( list.options[i].value == value ) {
            list.selectedIndex = i;
            found = true;
            break;
        }
    }
    
    return found;
}

// Color swatching functions
  var original_image = null;
  var displayed_detail = null;
  function swapImage(id, new_src) {
    if( ! new_src || new_src.length == 0 ) {
      return;
    }
    
    var img = document.getElementById(id);
    if( img ) {
      if( ! original_image ) {
        original_image = img.src;
      }
      img.src = new_src;
    }
  }
  
  function mouseOver(id, img, detail_id, span_ele) {
    //if( ! original_image ) {
      swapImage(id, img);
      var det = document.getElementById(detail_id);
      if( det ) {
        var span_pos = findPos(span_ele)
        position_element(detail_id, span_pos[0], span_pos[1] + 21);
        if( displayed_detail ) { displayed_detail.style.display = "none"; }
        det.style.display = "block";
        displayed_detail = det;
      }
    //}
  }
  
  function mouseOut(id, detail_id) {
    restoreImage(id);
    var det = document.getElementById(detail_id);
    if( det ) {
      det.style.display = "none";
    }
  }
  
  function restoreImage(id) {
    var img = document.getElementById(id);
    if( img && original_image ) {
      img.src = original_image;
      original_image = null;
    }
  }
  
  function hide_detail() {
    if( displayed_detail ) {
        displayed_detail.style.display = "none";
        displayed_detail = null;
    }
  }
  
  // Requires :defaults
  function toggle(ele) {
      var element = $(ele);
      
      if( element.style.display == 'none' ) {
          new Effect.Appear(ele);
      } else {
          new Effect.Fade(ele);
      }
  }

  function toggle_slide(ele) {
    var element = $(ele);

    if( Element.visible(element) ) {
        new Effect.SlideUp(element);
    } else {
        new Effect.SlideDown(element);
    }
  }

  function page_preview(preview){
	preview=unescape(preview);
	preview=preview.replace(/\+/g," ");
	preview=preview.replace(/\*P\*/g,"\+");

	newwindow=window.open();
	newdocument=newwindow.document;
	newdocument.write(preview);
  }

/* Source: http://ajaxian.com/archives/replacehtml-for-when-innerhtml-dogs-you-down */	
/* This is much faster than using (el.innerHTML = str) when there are many
existing descendants, because in some browsers, innerHTML spends much longer
removing existing elements than it does creating new ones. */
//function replaceHtml(el, html) {
//        var oldEl = (typeof el === "string" ? document.getElementById(el) : el);
//        var newEl = document.createElement(oldEl.nodeName);
//        // Preserve the element's id and class (other properties are lost)
//        newEl.id = oldEl.id;
//        newEl.className = oldEl.className;
//        // Replace the old with the new
//        newEl.innerHTML = html;
//        oldEl.parentNode.replaceChild(newEl, oldEl);
//        /* Since we just removed the old element from the DOM, return a reference
//        to the new element, which can be used to restore variable references. */
//        return newEl;
//};
//
//
//	
 
function miniCartAjaxAndAdd(miniCartID, pID, attributesArray) {
  new Effect.Appear(miniCartID);
  
  if(attributesArray.length > 0){
    if(document.getElementById( pID + '-' + (attributesArray.length-1) ).value.length == 0){
      alert('Please select one of each attribute.');
      new Effect.Fade(miniCartID, {queue: 'end'});
    }else{
      
      atrURL = "";
      for(i=0;i<attributesArray.length;i++){ atrURL += 'atr['+ attributesArray[i][0] +']=' + document.getElementById(pID+'-'+i).value + '&'};
          
          
      new Ajax.Updater(miniCartID,
        '/cart/ajaxadd/prod_'+ pID + '?' + atrURL + 'qty=1',
        {
          asynchronous:true,
          onComplete:function(request){
            new Effect.Fade('cloading');
            new Effect.Highlight(miniCartID);
            new Effect.Fade(miniCartID, {queue: 'end'});
          },
          onLoading:function(request){Element.toggle('cloading');}
        }
      )
    }
  }else{
    new Ajax.Updater(miniCartID,
     '/cart/ajaxadd/prod_'+ pID +'?qty=1',
      {
        asynchronous:true,
        onComplete:function(request){
          new Effect.Fade('cloading');
          new Effect.Highlight(miniCartID);
          new Effect.Fade(miniCartID, {queue: 'end'});
        },
        onLoading:function(request){
          Element.toggle('cloading');
        }
      }
    );
  }
  
  return false;
}
// var IframeShim = Class.create();
// IframeShim.prototype = {
//  initialize: function() {
//     // this.element = new Element('iframe',{
//     //  style: 'position:absolute;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);display:none',
//     //  src: 'javascript:void(0);'
//     //  frameborder: 0 
//     // });
//     this.element = document.createElement('IFRAME');
//     Element.setStyle(this.element, {
//       position: 'absolute',
//       filter: 'progid:DXImageTransform.Microsoft.Alpha(opacity=0)',
//       display: 'none'
//     });
//     this.element.src = 'javascript:void(0);';
//         // this.element.frameborder: 0;
//     
//     $(document.body).appendChild(this.element);
//  },
//  hide: function() {
//    Element.hide(this.element);
//    return this;
//  },
//  show: function() {
//    Element.show(this.element);
//    return this;
//  },
//  positionUnder: function(element) {
//    var element = $(element);
//    var offset = Position.cumulativeOffset(element);
//    var dimensions = Element.getDimensions(element);
//    Element.setStyle(this.element, {
//      left: offset[0] + 'px',
//      top: offset[1] + 'px',
//      width: dimensions.width + 'px',
//      height: dimensions.height + 'px',
//      zIndex: Element.getStyle(element, 'z-index') - 1
//    })
//    Element.show(element);
//    return this;
//  },
//  setBounds: function(bounds) {
//    for(prop in bounds)
//      bounds[prop] += 'px';
//    Element.setStyle(this.element, bounds);
//    return this;
//  },
//  destroy: function() {
//    if(this.element)
//      this.element.remove();
//    return this;
//  }
// };

