// Version SVN: $Id: default.js.php 18844 2011-04-05 10:07:52Z sven $
function setChangedState(obj)
{
  if(typeof obj != 'object')
  {
    obj = dojo.byId(obj);
  }

  if(!dojo.hasAttr(obj, 'changed') || dojo.attr(obj, 'changed') == 0)
  {
   dojo.attr(obj, 'changed', 1);
  }
}

function clearField(field)
{
  if(typeof field != 'object')
  {
    field = dojo.byId(field);
  }

  if(dojo.attr(field, 'changed') != 1)
  {
    field.value = '';
  }
}

function resetField(field, defaultValue)
{
  if(typeof field != 'object')
  {
    field = dojo.byId(field);
  }

  if(dojo.trim(field.value) == '')
  {
    field.value = defaultValue;
    dojo.removeAttr(field, 'changed');
  }
}

function ieCheck(field, defaultValue)
{
  if(navigator.userAgent.match(/MSIE/gi))
  {
    var field = document.getElementById(field);
    if(field.value != defaultValue)
    {
      setChangedState(field);
    }
  }
}

function toggle_menu(id)
{
 if(dojo.hasClass(id, 'opened'))
 {
  dojo.addClass(id, 'closed');
  dojo.removeClass(id, 'opened');
 }
 else
 {
  dojo.addClass(id, 'opened');
  dojo.removeClass(id, 'closed');
 }
}

ViMP = {};

ViMP.Browser = {};

ViMP.Browser.Flash = (function(){
	var version = '0 r0';
  try {
		version = navigator.plugins['Shockwave Flash'].description;
  } catch(e) {
      try {
          version = new ActiveXObject('ShockwaveFlash.ShockwaveFlash').GetVariable('$version')
      } catch(e) {
      }
  }
  version = version.match(/\d+/g);
	return {version: parseInt(version[0] || 0 + '.' + version[1] || 0), build: parseInt(version[2] || 0)};
})();

ViMP.Browser.Flash.hasFlash = function() {
 return ViMP.Browser.Flash.version > 0;
}

ViMP.Browser.getXHR = function() {
  try
  {
    // Mozilla, Opera, Safari sowie Internet Explorer (ab v7)
    xhr = new XMLHttpRequest();
  }
  catch(ex)
  {
    try
    {
      // MS Internet Explorer (ab v6)
      xhr  = new ActiveXObject("Microsoft.XMLHTTP");
    }
    catch(ex)
    {
      try
      {
        // MS Internet Explorer (ab v5)
        xhr  = new ActiveXObject("Msxml2.XMLHTTP");
      }
      catch(ex)
      {
        xhr  = null;
      }
    }
  }

  return xhr;
}

ViMP.Browser.getConentDocument = function(oIframe) {
  var oDoc = oIframe.contentWindow || oIframe.contentDocument;
  if (oDoc && oDoc.document) {
      oDoc = oDoc.document;
  }
  return oDoc;
}

ViMP.Browser.isIE = function() {
  return (/MSIE (6|7|8)/).test(navigator.userAgent);
}

ViMP.Browser.scrollToElement = function(element, offsetX, offsetY) {
  var selectedPosX = 0;
  var selectedPosY = 0;
  
  if(typeof(offsetX) == 'undefinded') {
    offsetX = 0;
  }

  if(typeof(offsetY) == 'undefinded') {
    offsetY = 0;
  }

  while(element != null){
    selectedPosX += element.offsetLeft;
    selectedPosY += element.offsetTop;
    element = element.offsetParent;
  }

  selectedPosX += offsetX;
  selectedPosY += offsetY;

  window.scrollTo(selectedPosX, selectedPosY);
}

/* event handling */
ViMP.Event = {}

ViMP.Event.add = function(obj, type, fn) {
  if (obj.addEventListener) {
    obj.addEventListener(type, fn, false);
  } else if (obj.attachEvent) {
    obj.attachEvent("on" + type, fn);
  }
}

ViMP.Event.remove = function (obj, type, fn) {
  if (obj.removeEventListener) {
    obj.removeEventListener(type, fn, false);
  } else if (obj.detachEvent) {
    obj.detachEvent("on" + type, fn);
  }
}

ViMP.Event.fixObject = function (eObj) {
  return  eObj || window.event; // fix empty event object in Internet Explorer
}

ViMP.Event.fixTarget = function (eObj) {
  var target = eObj.target || eObj.srcElement; // assign Internet Explorer srcElement to target
  target = target.nodeType == 3 ? target.parentNode : target; // defeat Safari text node bug [node type 3 == text node]
  return target;
}

ViMP.Event.fixKeyCode = function (eObj) {
  return eObj.keyCode || eObj.which; // fix key codes
}

ViMP.XML = {};

ViMP.XML.loadString = function(xmlString) {
  if(typeof(DOMParser) == 'function' || typeof(DOMParser) == 'object') {  // Firefox, Opera, Webkit & Internet Explorer 9
    return (new DOMParser()).parseFromString(xmlString, "text/xml");
  } else if(typeof(window.ActiveXObject) == 'function') {                 // Internet Explorer
    xmlObject = new ActiveXObject("Microsoft.XMLDOM");
    xmlObject.async = "false";
    xmlObject.loadXML(xmlString);
    return xmlObject;
  } else {
    return null;
  }
}

ViMP.XML.serialize = function(xmlObject) {
  console.log(typeof(XMLSerializer));
  if(typeof(XMLSerializer) == 'function' || typeof(XMLSerializer) == 'object') {  // Firefox, Opera, Webkit & Internet Explorer 9
    return (new XMLSerializer()).serializeToString(xmlObject);
  } else if(typeof(window.ActiveXObject) == 'function') {                         // Internet Explorer < 9
    return xmlObject.xml;
  } else {
    return null;
  }
}

// Helper functions
ViMP.Helper = {};

ViMP.Helper.cloneObject = function (what) {
  for (var i in what) {
    if (what.hasOwnProperty(i)) {
      if(typeof(what[i]) == 'object') {
        if(typeof(what[i].nodeValue) == 'object') {
          this[i] = what[i].cloneNode(true);
        } else {
          this[i] = new ViMP.Helper.cloneObject(what[i]);
        }
      }
      else {
        this[i] = what[i];
      }
    }
  }
}

