//------------------------------------------------------------------------------
//  http://keytrack.de  -  Keytrack.de  -  Keytrack.de Home  - 
//------------------------------------------------------------------------------
//***** misc.js *****  some javascript formatting functions
//------------------------------------------------------------------------------

/*global document, window, getElementById, getElementsByClassName, escape */

var getElementsByClassName = document.getElementsByClassName ? function (className, scope) {
        return Array.prototype.slice.call((scope || document).getElementsByClassName(className));
    } : document.evaluate ? function (className, scope) {
        scope = scope || document;
        var re = [], xpathResult, ele,
            scopeDocument    = !scope.ownerDocument ? scope : scope.ownerDocument,
            searchClassNames = getElementsByClassName.quirksCheck(className.trim(), scope).split(" "),
            searchClassName  = searchClassNames[0],
            searchClassNameLength = searchClassNames.length;

        if (scopeDocument.compatMode === "BackCompat") {
            xpathResult = scopeDocument.evaluate(".//*[contains(concat(' ', translate(@class, 'ABCDEFGHIJKLMNOPQRSTUVWYXZ', 'abcdefghijklmnopqrstuvwyxz'), ' '), ' " + searchClassName + " ')]", scope, null, 0, null);
        } else {
            xpathResult = scopeDocument.evaluate(".//*[contains(concat(' ', @class, ' '), ' " + searchClassName + " ')]", scope, null, 0, null);
        }

        if (searchClassNameLength > 1) {
            var eleClassNames, classNameLength, i;
            while ((ele = xpathResult.iterateNext())) {
                classNameLength = 1;
                eleClassNames = getElementsByClassName.quirksCheck(ele.className, scope).split(" ");
                check: for (i = 1; searchClassName = searchClassNames[i]; i++) {
                    if (eleClassNames.indexOf(searchClassName) > -1) {
                        classNameLength++;
                        if (classNameLength === searchClassNameLength) {
                            re.push(ele);
                            break check;
                        }
                    }
                }
            }
        } else {
            while ((ele = xpathResult.iterateNext())) {
                re.push(ele);
            }
        }

        return re;
    } : function (className, scope) {
        scope = scope || document;
        var re = [], ele, eleClassNames, i = 0,
            elements = scope.getElementsByTagName("*"),
            searchClassNames = getElementsByClassName.quirksCheck(className.trim(), scope).split(" "),
            searchClassName  = searchClassNames[0],
            searchClassNameLength = searchClassNames.length;

        if (searchClassNameLength > 1) {
            var classNameLength, j;
            for (; ele = elements[i]; i++) {
                eleClassNames = getElementsByClassName.quirksCheck(ele.className, scope).split(" ");
                classNameLength = 0;
                check: for (j = 0; searchClassName = searchClassNames[j]; j++) {
                    if (eleClassNames.indexOf(searchClassName) > -1) {
                        classNameLength++;
                        if (classNameLength === searchClassNameLength) {
                            re.push(ele);
                            break check;
                        }
                    }
                }
            }
        } else {
            for (; ele = elements[i]; i++) {
                eleClassNames = getElementsByClassName.quirksCheck(ele.className, scope).split(" ");
                if (eleClassNames.indexOf(searchClassName) > -1) {
                    re.push(ele);
                }
            }
        }

        return re;
    };
getElementsByClassName.quirksCheck = function (className, scope) {
    return (!scope.ownerDocument ? scope : scope.ownerDocument).compatMode === "BackCompat" ? className.toLowerCase() : className;
};

if (typeof Array.prototype.indexOf === "undefined") {
    Array.prototype.indexOf = function (val) {
        for (var i = 0, len = this.length, ele; i < len ; i++) {
            ele = this[i];
            if (ele === val) {
                return i;
            }
        }
        return -1;
    };
}
if (typeof String.prototype.trim === "undefined") {
    String.prototype.trim = function () {
        var str = this.replace(/^\s\s*/, ''), ws = /\s/, i = str.length;
        while (ws.test(str.charAt(--i))) {}
        return str.slice(0, i + 1);
    };
}

//-------------------------------------------------------------------------- ---

function HighLight(obj, color)  
{      
  obj.style.backgroundColor = color;      
}  

//-------------------------------------------------------------------------- ---

function NavTo(url)  
{    
  document.location.href = url;  
}  

//-------------------------------------------------------------------------- ---

function getPosition(e) 
{
  e = e || window.event;
  var cursor = {x:0, y:0};
  if (e.pageX || e.pageY) {
      cursor.x = e.pageX;
      cursor.y = e.pageY;
  } 
  else {
      var de = document.documentElement;
      var b = document.body;
      cursor.x = e.clientX + 
          (de.scrollLeft || b.scrollLeft) - (de.clientLeft || 0);
      cursor.y = e.clientY + 
          (de.scrollTop || b.scrollTop) - (de.clientTop || 0);
  }
  return cursor;
}

//-------------------------------------------------------------------------- ---

function MsgPopUp(msg) 
{
  var cursor = getPosition();
  var header = "<html><head><title>Keytrack.de Message Window</title></head><body>";
  var footer = "</body>";
  var keytrack_msg = window.open(header+msg+footer, 'keytrack_msg', 'toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=0,width=300,height=300,left='+(cursor.x-150)+',top='+(cursor.y-150));
}

//-------------------------------------------------------------------------- ---

function switchDisplay(nr)
{
	var current;
	if (document.layers)
	{
		current = (document.layers[nr].display == 'none') ? 'block' : 'none';
		document.layers[nr].display = current;
	}
	else if (document.all)
	{
		current = (document.all[nr].style.display == 'none') ? 'block' : 'none';
		document.all[nr].style.display = current;
	}
	else if (document.getElementById)
	{
		current = (document.getElementById(nr).style.display == 'none') ? 'block' : 'none';
		document.getElementById(nr).style.display = current;
	}
}

//-------------------------------------------------------------------------- ---

function setDisplay(nr, state)
{
	var current = (state == 1) ? 'block' : 'none';
	if (document.layers)
	{
		document.layers[nr].display = current;
	}
	else if (document.all)
	{
		document.all[nr].style.display = current;
	}
	else if (document.getElementById)
	{
		document.getElementById(nr).style.display = current;
	}
}

//-------------------------------------------------------------------------- ---

function setDisplayRow(nr, state)
{
	var current = (state == 1) ? '' : 'none';
	if (document.layers)
	{
		document.layers[nr].display = current;
	}
	else if (document.all)
	{
		document.all[nr].style.display = current;
	}
	else if (document.getElementById)
	{
		document.getElementById(nr).style.display = current;
	}
}

//-------------------------------------------------------------------------- ---

function addClass( element, classname ) 
{    
  var cn = element.className;    //test for existance    
  if( cn.indexOf( classname ) != -1 ) {
	return;    
  }    
  //add a space if the element already has class    
  if( cn !== '' ) {        
    classname = ' '+classname;    
  }    
  element.className = cn+classname;
}
 
//-------------------------------------------------------------------------- ---

function removeClass(objElement, strClass)
{
  if ( objElement.className )
  {
    var arrList = objElement.className.split(' ');
    var strClassUpper = strClass.toUpperCase();
    for ( var i = 0; i < arrList.length; i++ ) {
        if ( arrList[i].toUpperCase() == strClassUpper ) {
            arrList.splice(i, 1);
            i--;
        }
    }
    objElement.className = arrList.join(' ');
  }
}

//-------------------------------------------------------------------------- ---

function getBgColor(object)
{
	var obj;
	if (object === null) {
		return object;
	}
	else if (typeof(object)=='string') {
		obj = getElementById(object);
	}
	else { 
		obj = object;
	}
	if (obj.currentStyle) {
		return obj.currentStyle['backgroundColor'];
	}
	if (window.getComputedStyle) {
		return document.defaultView.getComputedStyle(obj,null).getPropertyValue('background-color');
	}
}

//-------------------------------------------------------------------------- ---

function setDisplayByClass(sclass, state, tags, node)
{
	tags = tags || "*";
	var elements = document.getElementsByClassName(sclass, tags, (node?document.getElementById(node):document));
	var elementsLen = elements.length;
    for (var i=0; i<elementsLen; i++) {
	  if (tags=='tr') {
	    setDisplayRow(elements[i].id,state);
	  }
	  else {
	    setDisplay(elements[i].id,state);
	  }
	}
}

//-------------------------------------------------------------------------- ---

function various_deselect_others(divid,plus_icon)
{
	var details = document.getElementById('details_table'),
	    divs = details.getElementsByTagName('div'),
	    row_match = /^r(\d*)_/,
	    affected_row = divid.match(row_match)[1],
	    affected_match = new RegExp("r"+affected_row+"_"),
	    others = [],
	    divsLen = divs.length,
	    i;
		
	for (i=0; i<divsLen; i++) {
// 	  if (divs[i].id!='' && divs[i].id.search(affected_match)!=-1 && divs[i].id.substring(4)!=divid)
 	  if (divs[i].id!='' && divs[i].id.substring(0,3)==='btn' && divs[i].id.substring(4)!=divid) {
	    others[others.length] = divs[i].id.substring(4);
	  }
	}
	var othersLen = others.length;
	for (i=0; i<othersLen; i++) {
	  var btncurrent = document.getElementById('btn_'+others[i]);
	  btncurrent.className = 'ltgrey_font';
	  eval('state_'+others[i]+'=\'hidden\';');
	  var icon = document.getElementById('icon_'+others[i]);
	  icon.src = plus_icon;
	  setDisplayByClass(others[i],0,'tr');
	}
	if (typeof(zc_reposMovies)!='undefined') {
	  zc_reposMovies();
	}
}

//-------------------------------------------------------------------------- ---


function proper_copyToClipboard (s)
{
	if( window.clipboardData && clipboardData.setData )
	{
		clipboardData.setData("Text", s);
	}
	else
	{
		// You have to sign the code to enable this or allow the action in about:config by changing
		// user_pref("signed.applets.codebase_principal_support", true);
		netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
		var clip = Components.classes['@mozilla.org/widget/clipboard;[[[[1]]]]'].createInstance(Components.interfaces.nsIClipboard);
		if (!clip) return;
		// create a transferable
		var trans = Components.classes['@mozilla.org/widget/transferable;[[[[1]]]]'].createInstance(Components.interfaces.nsITransferable);
		if (!trans) return;
		// specify the data we wish to handle. Plaintext in this case.
		trans.addDataFlavor('text/unicode');
		// To get the data from the transferable we need two new objects
		var str = new Object();
		var len = new Object();
		var str = Components.classes["@mozilla.org/supports-string;[[[[1]]]]"].createInstance(Components.interfaces.nsISupportsString);
		var copytext=meintext;
		str.data=copytext;
		trans.setTransferData("text/unicode",str,copytext.length*[[[[2]]]]);
		var clipid=Components.interfaces.nsIClipboard;
		if (!clip) return false;
		clip.setData(trans,null,clipid.kGlobalClipboard);	   
	}
}

//-------------------------------------------------------------------------- ---


