/**
 * @author Joshi
 */
// IndexOf Workaround
if (!Array.prototype.indexOf)
{
  Array.prototype.indexOf = function(elt /*, from*/)
  {
    var len = this.length >>> 0;

    var from = Number(arguments[1]) || 0;
    from = (from < 0)
         ? Math.ceil(from)
         : Math.floor(from);
    if (from < 0)
      from += len;

    for (; from < len; from++)
    {
      if (from in this &&
          this[from] === elt)
        return from;
    }
    return -1;
  };
}

/**
 * Scripte für den Bestellvorgang
 * 
 * @namespace Bestellvorgang
 */
var Bestellvorgang = {}

Bestellvorgang.parseDocUrl = function()
{
  var url = document.URL;
  var parts = url.split('#');
  
  var left = parts[0];
  var anchor = parts[1];
  var baseUrl = null;
  var queryParams  = {};
  if (left)
  {
    leftParts = left.split('?');
    baseUrl = leftParts[0];
    queryString = leftParts[1];
    if(queryString)
    {
      query_parts = queryString.split('&');
      for(var i=0; i<query_parts[i]; i++)
      {
        var keyVal =query_parts[i].split('=');
        queryParams[keyVal[0]] = keyVal[1];
      }
    }
  }
  return {
    'baseUrl': baseUrl,
    'queryParams' : queryParams,
    'anchor' : anchor
  };
}

Bestellvorgang.varianten = {
	data : null	
}

Bestellvorgang.hasClassName = function(element, className)
{
	var classNames = Bestellvorgang.getClassNames(element);
	return (classNames.indexOf(className) > -1);
}

Bestellvorgang.addClassName = function(element, className)
{
	var classNames = Bestellvorgang.getClassNames(element);
	if(classNames.indexOf(className) < 0)
	{
		classNames.push(className);
		element.className = classNames.join(' ');
	}
	return element;
}

Bestellvorgang.removeClassName = function(element, className)
{
	var classNames = Bestellvorgang.getClassNames(element);
	var ind = classNames.indexOf(className);
	if(ind > -1)
	{
		classNames.splice(ind,1);
		element.className = classNames.join(' ');
	}
	return element;
}

Bestellvorgang.getClassNames = function(element)
{
	return element.className.length > 0 ? element.className.split(' ') : [];
}

Bestellvorgang.initVariantenSelect = function () 
{
	var selects = document.getElementsByTagName ( 'select' );
	
	for ( var i = 0; i < selects.length; i ++ )
	{
		var className = selects[i].className ? selects[i].className : selects[i].getAttribute( 'class' );
		if ( className == 'variantSelect') 
		{
			selects[i]._variantSelect = new Bestellvorgang.VariantSelect ( selects[i] );
			Bestellvorgang.variantSelects.push ( selects[i]._variantSelect );
		}
	}
	
	
	if (Bestellvorgang.variantSelects.length > 0) {
		Bestellvorgang.variantSelects[0].activate();
	}
}

Bestellvorgang.VariantSelect = function ( select )
{
	this.initialize(select);
}

Bestellvorgang.VariantSelect.activeContent = null;

Bestellvorgang.variantSelects = [];

Bestellvorgang.VariantSelect.prototype = 
{
	select: {},
	currentSubVariantSelect : null,
	id: "",
	targetId : "",
	contentId : "",
	initialize: function(select)
	{
		this.select = select;
		this.observeIt();
		this.id = this.select.id;
		
	},
	observeIt : function ( )
	{ 
		var self = this;
		this.select.onchange = function () 
		{
			self.activate();
		}
	},
	activate:function ( )
	{
		this.getValue();
		this.show();
	},
	toggle : function () 
	{
		this.select.style.display = this.select.style.display == "block" ? "none" : "block";
		return this;
	},
	getValue : function () 
	{
		var value = this.select.value;
		var valArr = value.split (",");
		this.targetId = valArr[0];
		this.contentId = valArr[1];
	},
	showSubSelects : function () 
	{
		if (target = document.getElementById(this.targetId)) 
		{
			if (target._variantSelect) {
				var subVariantSelect = target._variantSelect.toggle();
				this.currentSubVariantSelect = subVariantSelect;
				this.currentSubVariantSelect.activate();
			}
		}
	},
	hideSubSelects : function () 
	{
		if ( this.currentSubVariantSelect )
		{
			this.currentSubVariantSelect.hide();
			this.currentSubVariantSelect = null;
		}
	},
	hide : function () 
	{
		this.select.style.display ="none";
		this.hideSubSelects();
	},
	show : function () 
	{
		this.hideSubSelects();
		this.select.style.display = "block";
		this.showDataContainer();
		this.showSubSelects();
	},
	showDataContainer : function ( )
	{
		if (Bestellvorgang.VariantSelect.activeContent)
			Bestellvorgang.VariantSelect.activeContent.style.display="none";
		
		if (!this.currentSubVariantSelect)// letzter Eintrag 
		{
			if (Bestellvorgang.VariantSelect.activeContent = document.getElementById(this.contentId)) {
				Bestellvorgang.VariantSelect.activeContent.style.display = "block";
			}
		}
	}
}

Bestellvorgang.initTabs = function()
{
	// produkteigenschaften
	var list = document.getElementById('Tab_Navi');
	if (list) 
	{
		new Bestellvorgang.Tabs(list);
	}
	
	// passendlisten....
	var list2 = document.getElementById('Tab_Navi2');
	if (list2) 
	{
		new Bestellvorgang.Tabs(list2);
	}
}

/**
 * Objekt, um die Tabs-Navigation zu initialisieren
 * 
 * @namespace Tabs
 */
Bestellvorgang.Tabs = function(tab_holder) 
{
	
	/**
	 * @property array tabs: hält referenzen auf alle Tab-Objekte
	 */
	this.tabs = [],
	
	/**
	 * @property Tab activeTab : Hält die Referenz auf das aktuell geöffnente Tab-OBjekt
	 */
	this.activeTab = null,
	
	/**
	 * @method initTabs: Holt alle Ancher innerhalb der Tab-Navigation und instanziiert Tab-Objekte
	 */
	this._initTabs = function (tab_holder) 
	{
		if(tab_holder)
		{
			var as = tab_holder.getElementsByTagName('a');
			for (var i = 0; len = as.length, i < len; i ++ )
			{
				var a = as[i];
				this.tabs.push (new Bestellvorgang.Tabs.Tab(a, this));
			}
			var anchor = Bestellvorgang.parseDocUrl().anchor;
	    if(anchor)
	    {
	      for(var i=0; len=this.tabs.length,i<len;i++)
	      {
	        var tab=this.tabs[i];
	        if(tab.id == anchor)
	        {
	          tab.open();
	        }
	      }
	    }
		}
	}
	
	this._initTabs(tab_holder);
}

/**
 * Klasse zur Kontrolle des Verhalten eines Tabs
 * @param {HTMLAnchorElement} anchor
 */
Bestellvorgang.Tabs.Tab = function (anchor, tabs_object) 
{
	this.initialize(anchor, tabs_object);
} 

Bestellvorgang.Tabs.Tab.prototype.initialize = function (anchor, tabs_object)
{
	this.anchor = anchor;
	this.tabsObject = tabs_object;
	this.collectIt();
	this.styleIt();
	this.observeIt();
}
	
Bestellvorgang.Tabs.Tab.prototype.collectIt = function () 
{
  this.target = document.getElementById (this.anchor.getAttribute ( 'rel' ));
  this.id=this.target.id;
}

Bestellvorgang.Tabs.Tab.prototype.styleIt = function() 
{
	if (!this.tabsObject.activeTab )
	{
	  this.tabsObject.activeTab = this;
		this.toggle();
	}
}

Bestellvorgang.Tabs.Tab.prototype.toggle = function ( )
{
	Bestellvorgang.hasClassName(this.anchor, 'active') ? 
			Bestellvorgang.removeClassName(this.anchor, 'active') : 
			Bestellvorgang.addClassName(this.anchor, 'active'); 
			
	Bestellvorgang.hasClassName(this.target, 'artikelTab-active') ? 
			Bestellvorgang.removeClassName(this.target, 'artikelTab-active') :
		  Bestellvorgang.addClassName(this.target, 'artikelTab-active');
	return this;
};

Bestellvorgang.Tabs.Tab.prototype.open = function ( )
{
  this.tabsObject.activeTab.close();
  Bestellvorgang.addClassName(this.anchor, 'active'); 
  Bestellvorgang.addClassName(this.target, 'artikelTab-active');
  this.tabsObject.activeTab = this;
  return this;
};

Bestellvorgang.Tabs.Tab.prototype.close = function ( )
{
  Bestellvorgang.removeClassName(this.anchor, 'active'); 
  Bestellvorgang.removeClassName(this.target, 'artikelTab-active');
  this.tabsObject.activeTab=null;
  return this;
};

Bestellvorgang.Tabs.Tab.prototype.observeIt = function () 
{
	var self = this;
	this.anchor.onclick = function () 
	{
		if (self.tabsObject.activeTab === this)
		{
			return;
		}
		
		self.tabsObject.activeTab.toggle();
		self.tabsObject.activeTab = self.toggle();
		return false;
	}
};