var Behaviour = {
	list : [],

	register : function(sheet){
		Behaviour.list.push(sheet);
	},
	
	apply : function(){
		for (var sheet, h=0;sheet=Behaviour.list[h];h++){
			for (var selector in sheet){
				var list = document.getElementsBySelector(selector);
				if (!list){
					continue;
				}

				for (var i=0;element=list[i];i++){
					sheet[selector](element);
				}
			}
		}
	},
	
	start : function(){
		Behaviour.addLoadEvent(function(){
            document.getElementsBySelector = document.getElementsBySelector || function(selector) {
                var getAllChildren = function (e) {
                  // Returns all children of element. Workaround required for IE5/Windows. Ugh.
                  return e.all ? e.all : e.getElementsByTagName('*');
                }
              // Attempt to fail gracefully in lesser browsers
              if (!document.getElementsByTagName) {
                return new Array();
              }
              // Split selector in to tokens
              var tokens = selector.split(' ');
              var currentContext = new Array(document);
              for (var i = 0; i < tokens.length; i++) {
                var token = tokens[i].replace(/^\s+/,'').replace(/\s+$/,'');;
                if (token.indexOf('#') > -1) {
                  // Token is an ID selector
                  var bits = token.split('#');
                  var tagName = bits[0];
                  var id = bits[1];
                  var element = document.getElementById(id);
                  if (!element || (tagName && element.nodeName.toLowerCase() != tagName)) {
                    // tag with that ID not found, return false
                    return new Array();
                  }
                  // Set currentContext to contain just this element
                  currentContext = new Array(element);
                  continue; // Skip to next token
                }
                if (token.indexOf('.') > -1) {
                  // Token contains a class selector
                  var bits = token.split('.');
                  var tagName = bits[0];
                  var className = bits[1];
                  if (!tagName) {
                    tagName = '*';
                  }
                  // Get elements matching tag, filter them for class selector
                  var found = new Array;
                  var foundCount = 0;
                  for (var h = 0; h < currentContext.length; h++) {
                    var elements;
                    if (tagName == '*') {
                        elements = getAllChildren(currentContext[h]);
                    } else {
                        elements = currentContext[h].getElementsByTagName(tagName);
                    }
                    for (var j = 0; j < elements.length; j++) {
                      found[foundCount++] = elements[j];
                    }
                  }
                  currentContext = new Array;
                  var currentContextIndex = 0;
                  for (var k = 0; k < found.length; k++) {
                    if (found[k].className && found[k].className.match(new RegExp('\\b'+className+'\\b'))) {
                      currentContext[currentContextIndex++] = found[k];
                    }
                  }
                  continue; // Skip to next token
                }
                // Code to deal with attribute selectors
                if (token.match(/^(\w*)\[(\w+)([=~\|\^\$\*]?)=?"?([^\]"]*)"?\]$/)) {
                  var tagName = RegExp.$1;
                  var attrName = RegExp.$2;
                  var attrOperator = RegExp.$3;
                  var attrValue = RegExp.$4;
                  if (!tagName) {
                    tagName = '*';
                  }
                  // Grab all of the tagName elements within current context
                  var found = new Array;
                  var foundCount = 0;
                  for (var h = 0; h < currentContext.length; h++) {
                    var elements;
                    if (tagName == '*') {
                        elements = getAllChildren(currentContext[h]);
                    } else {
                        elements = currentContext[h].getElementsByTagName(tagName);
                    }
                    for (var j = 0; j < elements.length; j++) {
                      found[foundCount++] = elements[j];
                    }
                  }
                  currentContext = new Array;
                  var currentContextIndex = 0;
                  var checkFunction; // This function will be used to filter the elements
                  switch (attrOperator) {
                    case '=': // Equality
                      checkFunction = function(e) { return (e.getAttribute(attrName) == attrValue); };
                      break;
                    case '~': // Match one of space seperated words 
                      checkFunction = function(e) { return (e.getAttribute(attrName).match(new RegExp('\\b'+attrValue+'\\b'))); };
                      break;
                    case '|': // Match start with value followed by optional hyphen
                      checkFunction = function(e) { return (e.getAttribute(attrName).match(new RegExp('^'+attrValue+'-?'))); };
                      break;
                    case '^': // Match starts with value
                      checkFunction = function(e) { return (e.getAttribute(attrName).indexOf(attrValue) == 0); };
                      break;
                    case '$': // Match ends with value - fails with "Warning" in Opera 7
                      checkFunction = function(e) { return (e.getAttribute(attrName).lastIndexOf(attrValue) == e.getAttribute(attrName).length - attrValue.length); };
                      break;
                    case '*': // Match ends with value
                      checkFunction = function(e) { return (e.getAttribute(attrName).indexOf(attrValue) > -1); };
                      break;
                    default :
                      // Just test for existence of attribute
                      checkFunction = function(e) { return e.getAttribute(attrName); };
                  }
                  currentContext = new Array;
                  var currentContextIndex = 0;
                  for (var k = 0; k < found.length; k++) {
                    if (checkFunction(found[k])) {
                      currentContext[currentContextIndex++] = found[k];
                    }
                  }
                  // alert('Attribute Selector: '+tagName+' '+attrName+' '+attrOperator+' '+attrValue);
                  continue; // Skip to next token
                }

                if (!currentContext[0]){
                	return;
                }

                // If we get here, token is JUST an element (not a class or ID selector)
                tagName = token;
                var found = new Array;
                var foundCount = 0;
                for (var h = 0; h < currentContext.length; h++) {
                  var elements = currentContext[h].getElementsByTagName(tagName);
                  for (var j = 0; j < elements.length; j++) {
                    found[foundCount++] = elements[j];
                  }
                }
                currentContext = found;
              }
              return currentContext;
            }
			Behaviour.apply();
		});
	},
	
	addLoadEvent : function(func){
		var oldonload = window.onload;
		
		if (typeof window.onload != 'function') {
			window.onload = func;
		} else {
			window.onload = function() {
				oldonload();
				func();
			}
		}
	}
}

Behaviour.start();

var PaymentChannel = {
    show: function(e) {
        var tag = document.getElementById('PaymentShortDescription');
        tag.save = e.innerHTML;
        tag.innerHTML = e.getAttribute('content');
        tag.style.display = 'block';
    },
    hide: function(e) {
        var tag = document.getElementById('PaymentShortDescription');
        tag.innerHTML = tag.save;
        tag.style.display = 'none';
    }
}

/* open and close TagCloud */
var TagCloudHandler = {
    open: function(e) {
        TagCloudHandler.setOpen(e, true);
    },
    close: function(e) {
        TagCloudHandler.setOpen(e, false);
    },
    setOpen: function(e, doOpen) {
        var ctrl = document.getElementById("TagCloudControl");
        var cloud = document.getElementById("TagCloud");
        if(ctrl && cloud) {
            if(!doOpen) {
                 ctrl.firstChild.style.display = "none";
                 ctrl.lastChild.style.display = "block";
                 cloud.style.display = "none";
            } else {
                 ctrl.firstChild.style.display = "block";
                 ctrl.lastChild.style.display = "none";
                 cloud.style.display = "block";
            }
        }
    }
}

/* reorder shortcut  */
function moveToFront(source, target) {
   var dest = document.getElementById(target);
   if(dest == null) return;
   var element = document.getElementById(source);
   if(element == null) return;
	element.parentNode.removeChild(element);
	dest.insertBefore(element, dest.firstChild);
	element.style.display = "block"
   return 
}

function moveToMenu(source) {
   var dest = document.getElementById("TopMenu");
   var element = document.getElementById(source);
   if(element == null) return;
	element.parentNode.removeChild(element);
	dest.insertBefore(element, dest.firstChild);
   return 
}

function addTextHint(e, hintText) {           
    if (e.value == '') {               
        e.value = hintText;
        e.style.className = 'ghost';
    }

    e.onfocus = function () {                       
        if (e.value == hintText) {
            e.value = '';
            e.style.className = 'normal';
        }
    }

    e.onblur = function () {
        if (e.value == '') {
            e.value = hintText;
            e.style.className = 'ghost';
        }
    }              
}

function reorderMenues() {
    if(pageContext.webSite == "magmaclips") {
		var ServiceNavigation = document.getElementById('ServiceNavigation');
		var SideMenu = document.getElementById('SideMenu');
		var BottomMenu = document.getElementById('BottomMenu');

		if(SideMenu && BottomMenu && ServiceNavigation) {
		    SideMenu.removeChild(ServiceNavigation);
		    BottomMenu.appendChild(ServiceNavigation);
		}
		var login = document.getElementById('quickloginLoginField');
		var password = document.getElementById('quickloginPasswordField');
		if(login) {
		    addTextHint(login, "Login");
		    addTextHint(password, "Password");
		    document.body.className += " noCustomerMode";
		} else {
		    document.body.className += " customerMode";
		}
        setTimeout(scrollLabels, 50);
        return;
    }
    if(pageContext.webSite == "magmafilm") {
		var InfoNavigationItemList = document.getElementById('InfoNavigationItemList');
		var MovieTrailerNavigationItemList = document.getElementById('MovieTrailerNavigationItemList');
		if(InfoNavigationItemList && MovieTrailerNavigationItemList) {
		    MovieTrailerNavigationItemList.parentNode.removeChild(MovieTrailerNavigationItemList);
		    InfoNavigationItemList.parentNode.insertBefore(MovieTrailerNavigationItemList, InfoNavigationItemList);
		}
    }
    reorderMenuesGlobal();
    // moveToFront("languageChooser", "ServiceNavigation");
    //moveToFront("PaymentNavigationItemSubMenu", "Content");
    //moveToFront("AVSNavigationItemSubMenu", "Content");
    moveToFront("PortalTopDeliverables", "extraColumn");

    moveToMenu("PrivacyNavigationItem");
    moveToMenu("CreateAccountNavigationItem");
    moveToMenu("PortalNavigationItem");


 	/* The Main Page Elements */
 	var PortalPage = document.getElementById('PortalPage');
 	var MoviePage = document.getElementById('MoviePage');
 	var MovieDetailPage = document.getElementById('MovieDetailPage');
 	var Content = document.getElementById('Content');
 	var pagewrapper = document.getElementById('pagewrapper');

	
 	/* Reorder TagCloud */
    var ctrl = document.getElementById("TagCloudControl");
    var cloud = document.getElementById("TagCloud");
 	var TagCloudWrapper = document.getElementById('TagCloudWrapper');
 	var MovieAreaPageTeaser = document.getElementById('MovieAreaPageTeaser');
 	var MovieOverviewList = document.getElementById('MovieOverviewList');
 	var TagCloudTeaser = document.getElementById('TagCloudTeaser');

    if(cloud) {
       ctrl.firstChild.style.display = "none";
       ctrl.lastChild.style.display = "block";
    }

    if(cloud && PortalPage) {
 	   TagCloudWrapper.removeChild(cloud);
  	   TagCloudTeaser.insertBefore(cloud, TagCloudTeaser.firstChild);
       cloud.style.display = "block";
    }

    if(MoviePage) {
 	   MovieOverviewList.removeChild(TagCloudWrapper);
  	   MovieAreaPageTeaser.insertBefore(TagCloudWrapper, MovieAreaPageTeaser.lastChild);
  	   MovieAreaPageTeaser.style.height = "auto"
    }

    if(MovieDetailPage) {
 	   Content.removeChild(TagCloudWrapper);
  	   MovieAreaPageTeaser.insertBefore(TagCloudWrapper, MovieAreaPageTeaser.lastChild);
  	   MovieAreaPageTeaser.style.height = "auto"
    }


 	/* Second Areaheader */
 	var currentFeature = document.getElementById('currentFeature');

    if(currentFeature) {
 	   Content.removeChild(currentFeature);
  	   pagewrapper.insertBefore(currentFeature, pagewrapper.firstChild);
       currentFeature.style.display = "block";
    }

 	/* Logged in Styles + First Time Ausblenden */
 	var MyAccountNavigationItem = document.getElementById('MyAccountNavigationItem');
 	var PrivacyNavigationItemList = document.getElementById('PrivacyNavigationItemList');
    if(MyAccountNavigationItem) { 
    	PrivacyNavigationItemList.style.display = "none";
    }

 	/* Scharfstellen bei AG18 ausblenden */
    if(pageContext && pageContext.ageGroup == "ag18") { 
     	var noPixelImg = document.getElementById('noPixelImg');
     	var relatedDeliverables = document.getElementById('relatedDeliverables');
     	if(noPixelImg)
            	noPixelImg.style.display = "none";
     	if(relatedDeliverables && !document.getElementById('coverflow'))
            	relatedDeliverables.style.top = "0px";
    }
}

/* LABELS SCROLLER & JUMP */

var scrollDirection = -1;
var scrollSpeed = 1;

function scrollLabels() {
    var labellist = document.getElementById("labellist");
    var labellistcontent = document.getElementById("labellistcontent");
    if(labellistcontent) {
        if(labellistcontent.currentX == undefined) {
            labellistcontent.currentX = -800;
        }
        if(labellistcontent.currentX > 0 || labellistcontent.currentX < -800) {
            scrollDirection *= -1;
        }
        labellistcontent.currentX += (scrollDirection * scrollSpeed);
        labellistcontent.style.left = labellistcontent.currentX + "px";
        var debug = document.getElementById("debug");
        if(debug) debug.innerHTML = labellistcontent.currentX + " - " + labellistcontent.style.left;
    }
    setTimeout(scrollLabels, 50);
}

function jumpToLabel(theLabel) {
	var label = theLabel
	jump({feature:'MovieLabelDeliverables',area:'MoviesByLabel',site:'channelsex',category:label});
}

function jumpToSeries(theLabel) {
	var label = theLabel
	jump({feature:'SeriesDeliverables',area:'MoviesSeriesMasc',category:label});
}

function jumpToCategory(theCategory) {
	var thecategory = theCategory
	jump({feature:'MovieTagDeliverables',area:'MoviesByTag',site:'channelsex',category:thecategory});
}

Behaviour.register({
    ".areaOverview .deliverableOverviewImage img": function(e) {
        e.onmouseover = function() {
            if(e.src.indexOf("clip-cover") < 0) return;
            e.oldSrc = e.src + "";
            e.curr = 0;
            e.timer = setInterval(function() {
                e.src = e.oldSrc.replace("clip-cover", "clip-preview_0" + e.curr);
                e.curr =  e.curr + 1;
                if(e.curr > 4) {
                    e.curr = 0;
                }
            }, 1000);
        },
        e.onmouseout = function() {
            if(!e.timer) return;
            clearInterval(e.timer);
            e.timer = null;
            e.src = e.oldSrc;
        }
    }
});

