/**
 * content.layout.popup.js - insert headline here
 *
 * COPYRIGHT: All  title   and  proprietary  rights,  including  trade
 * secrets,   in   the   Software   and   any   copies thereof and the
 * accompanying  written   materials,   are  owned  by   schukai  GmbH
 * and  are  protected  by  German  copyright  laws,  other applicable
 * copyright   laws  and  international  treaty  provisions.
 *
 * @package    alvine
 * @author     schukai GmbH <info@schukai.de>
 * @copyright  Copyright (C) 2002, 2003, 2004, 2005, 2006 schukai GmbH
 * @license    http://www.alvine.de/license/
 * @version    20061114
 * @link       http://www.alvine.de/
 */


function content_layout_popup_js_init(boxID, minSize, showPopup, cropContent){

  var parentBoxID = 'content_layout_popup_'+boxID;
  var backgroundBoxID = parentBoxID+'_background';
  var visibleBoxID = parentBoxID+'_visible_panel';
  var contentPanelID = parentBoxID+'_content';
  var visibleObj = element_isObject(visibleBoxID);
  var backgroundObj = element_isObject(backgroundBoxID);
  
  if(typeof visibleObj.alvine_setPositioning != 'function'){
    visibleObj.alvine_setPositioning = function(targetSize){
      var viewPort = alvine_getViewport();
      //positioning
      if(targetSize.width >= viewPort.width ||
        targetSize.height >= viewPort.height
        ){
        this.style.position = 'absolute';
        if(this.parentNode) this.parentNode.style.position = 'absolute';
      } else {
        if(!_ALVINE_IE6) {
          this.style.position = 'fixed';
          if(this.parentNode) this.parentNode.style.position = 'fixed';
        }
      }
    };
  }
  
  visibleObj.minimalSize = (typeof minSize == 'object')?minSize:{
    width:0,
    height:0
  };

  var useCapturing = true;
  /*
  event_add(window, 'resize', 'content_layout_popup_js_autoFit("'+boxID+'", true, true, false)', useCapturing);
  event_add(window, 'minimize', 'content_layout_popup_js_autoFit("'+boxID+'", true, true, false)', useCapturing);
  event_add(window, 'maximize', 'content_layout_popup_js_autoFit("'+boxID+'", true, true, false)', useCapturing);
*/
  
  event_add(window, 'resize', 'content_layout_popup_js_move("'+boxID+'")', useCapturing);
  event_add(window, 'minimize', 'content_layout_popup_js_move("'+boxID+'")', useCapturing);
  event_add(window, 'maximize', 'content_layout_popup_js_move("'+boxID+'")', useCapturing);

  var parentObj = element_isObject(parentBoxID);

  parentObj['alvine_visible'] = (parentObj.style.display == 'none')?false:true;
  parentObj['alvine_backgroundObj'] = backgroundObj;
  
  if(_ALVINE_IE){
    parentObj.alvine_ieFixCropping = function(){
      var windowSize;

      if(document.documentElement){
        windowSize = {
          width:document.documentElement.scrollWidth ,
          height:document.documentElement.scrollHeight
          };
      } else if(document.body){
        windowSize = {
          width:document.body.scrollWidth ,
          height:document.body.scrollWidth
          };
      }

      if(windowSize.width){
        element_setSize(this, windowSize.width, windowSize.height);
      }
    };
  }
  
  var objContent = element_isObject(contentPanelID);
  if(typeof objContent.alvine_executeChildrensHandler != 'function'){
    objContent.alvine_executeChildrensHandler = function(functionName, params){
      if(typeof functionName == 'undefined' || functionName == '') return true;

      for(var i in this.childNodes){
        var cNode = this.childNodes[i];
        if(typeof cNode != 'object') continue;
        if(typeof cNode[functionName] != 'function') continue;

        //execute onOpen Function
        cNode[functionName](params);
      }
      return true;
    };
  }
  showPopup = (showPopup===true)?true:false;

  if(!showPopup) return true;
  cropContent = (cropContent===true)?true:false;
  element_move(parentObj, -9999, 0);

  content_layout_popup_js_autoFit(boxID, false, true, cropContent);
  content_layout_popup_js_show(boxID, null, null, cropContent);
  
  return true;
}

function content_layout_popup_js_show(boxID, contentNodes, clear, cropContent, title, sourceObject, positionOffset, clearOnClose){
  clear = (typeof clear == 'undefined')?false:true;

  var newBoxID = 'content_layout_popup_'+boxID;
  var obj = element_isObject(newBoxID);

  if(!obj) return false;

  obj.alvine_sourceObject   = sourceObject;
  obj.alvine_positionOffset = positionOffset;
  obj.alvine_clearOnClose   = (typeof clearOnClose == 'undefined')?false:clearOnClose;

  var scrollContentObj = element_isObject(newBoxID+'_scroll_content');
  scrollContentObj.style.position = 'relative';

  var contentObj = element_isObject(newBoxID+'_content');
  if(!contentObj) contentObj = obj;

  if(typeof contentNodes!='undefined' && contentNodes!=null){
    if(clear==true){
      element_addChildNodes(contentObj, contentNodes, true);
    } else {
      element_addChildNodes(contentObj, contentNodes);
    }
  }

  //title
  if(title){
    content_layout_popup_js_setTitle(boxID, title);
  }

  ie6ToggleActiveXControls(false);

  //ParentBox
  element_setOpacity(obj, 0);
  element_setDisplay(obj, 'block');

  if(typeof contentObj.alvine_executeChildrensHandler == 'function') contentObj.alvine_executeChildrensHandler('alvine_onOpen');
  element_move(obj, 0, 0);
  obj['alvine_visible'] = true;

  cropContent = (cropContent===true)?true:false;
  content_layout_popup_js_autoFit(boxID, false, true, cropContent);
  content_layout_popup_js_move(boxID);

  if(obj.alvine_backgroundObj){
    if(typeof obj.alvine_backgroundObj.alvine_initOpacity == 'undefined') {
      obj.alvine_backgroundObj.alvine_initOpacity = element_getOpacity(obj.alvine_backgroundObj);
    }
    element_setOpacity(obj.alvine_backgroundObj, 0);
    element_setDisplay(obj.alvine_backgroundObj, 'block');
    
    var trgOpacity = (obj.alvine_backgroundObj.alvine_initOpacity>0)?obj.alvine_backgroundObj.alvine_initOpacity:100;
    effects_fade(obj.alvine_backgroundObj, trgOpacity, 'now', parseInt((trgOpacity/100*50)), parseInt((trgOpacity/100*80)));
  }
  effects_fade(obj, '100', 'now', 35, 90);

  return true;

}

function content_layout_popup_js_autoFit(boxID, considerVisibility, forceInit, cropContent){

  forceInit = (forceInit===true)?true:false;
  cropContent = false;//(cropContent===true)?true:false;
  considerVisibility = (considerVisibility===false)?false:true;
  var parentBoxID = 'content_layout_popup_'+boxID;
  var visiblePanelID = parentBoxID+'_visible_panel';

  var objParent = element_isObject(parentBoxID);
  if(!objParent) return true;

  if(!objParent['alvine_visible']) return true;

  if(_ALVINE_IE) objParent.alvine_ieFixCropping();

  var objVisible = element_isObject(visiblePanelID);
  if(!objVisible) return true;

  var viewPort = alvine_getViewport();

  element_resetSize(objVisible);

  var currentSize = element_getSize(objVisible);

  var max;
  if(cropContent){    
    var maxPercentage = 0.8; //percentage of viewport
    max = {
      width:parseInt((viewPort.width * maxPercentage)),
      height:parseInt((viewPort.height * maxPercentage))
    };

  /*
    currentSize.width  = (currentSize.width>viewPort.width)?viewPort.width:currentSize.width;
    currentSize.height = (currentSize.height>viewPort.height)?viewPort.height:currentSize.height;
    */
  } else {
    max = currentSize;
  }
  var min         = new Object();
  //for(var key in objVisible.minimalSize) min[key] = (currentSize[key]>=objVisible.minimalSize[key] && currentSize[key]<=max[key])?currentSize[key]:objVisible.minimalSize[key];
  for(var key in objVisible.minimalSize) min[key] = objVisible.minimalSize[key];

  //InitalSize needed to resize to init settings
  if(typeof objVisible.alvine_initialSize == 'undefined' || forceInit) objVisible.alvine_initialSize = new Object();

  var initialSize = new Object();
  for(var key in currentSize) {
    if(typeof objVisible.alvine_initialSize[key] == 'undefined' || objVisible.alvine_initialSize[key] == 0) objVisible.alvine_initialSize[key] = currentSize[key];
    initialSize[key] = (parseInt(currentSize[key])>=objVisible.alvine_initialSize[key])?parseInt(currentSize[key]):objVisible.alvine_initialSize[key];
  }

  var targetSize = initialSize;

  //max //min
  if(targetSize.width  >= max.width){
    targetSize.width  = max.width;
  } else if(targetSize.width  <= min.width){
    targetSize.width  = min.width;
  }

  if(targetSize.height >= max.height){
    targetSize.height = max.height;
  } else if(targetSize.height  <= min.height){
    targetSize.height = min.height;
  }
  
  //show
  element_setSize(objVisible, targetSize.width, targetSize.height, true);
  content_layout_popup_js_move(boxID);

  return true;
}

function content_layout_popup_js_move(boxID){

  var parentBoxID = 'content_layout_popup_'+boxID;
  var parentObj = element_isObject(parentBoxID);
  if(!parentObj) return true;
  if(!parentObj['alvine_visible']) return true;
  
  var visiblePanelID = parentBoxID+'_visible_panel';

  var objVisible = element_isObject(visiblePanelID);

  if(!objVisible) return true;

  var currentSize = element_getSize(objVisible);

  if(_ALVINE_IE) parentObj.alvine_ieFixCropping();

  var initialSize = new Object();
  for(var key in currentSize) {
    if(typeof objVisible.alvine_initialSize == 'undefined' ) {
      objVisible.alvine_initialSize = {};
      if(typeof objVisible.alvine_initialSize[key] == 'undefined' ) {
        objVisible.alvine_initialSize[key] = currentSize[key];
      }
    } else if(typeof objVisible.alvine_initialSize[key] == 0 ) {
      objVisible.alvine_initialSize[key] = currentSize[key];
    }

    initialSize[key] = (parseInt(currentSize[key])>=objVisible.alvine_initialSize[key])?parseInt(currentSize[key]):objVisible.alvine_initialSize[key];
  }

  var targetSize = initialSize;

  //positioning
  objVisible.alvine_setPositioning(targetSize);

  var sourceObject   = parentObj.alvine_sourceObject;
  var positionOffset = parentObj.alvine_positionOffset;

  if(typeof positionOffset != 'object'){
    positionOffset   = {
      x:'center',
      y:'center'
    };//options: 10 / -12 / center
  } else {
    positionOffset.x = (typeof positionOffset.x == 'undefined')?'center':positionOffset.x;
    positionOffset.y = (typeof positionOffset.y == 'undefined')?'center':positionOffset.y;
  }

  var popupSize = element_getSize(objVisible);

  var srcPos   = null;
  var srcSize  = null;
  if(typeof sourceObject == 'object'){
    srcPos   = element_getPosition(sourceObject, true);
    srcSize  = element_getSize(sourceObject);

    element_resetSize(objVisible);
    popupSize = element_getSize(objVisible);

    objVisible.style.position = 'absolute';
  } else {
    srcPos   = element_getPosition(objVisible, true);
    srcSize  = element_getSize(objVisible);
  }

  var hValues = positionOffset.x.toString().split(':');
  var vValues = positionOffset.y.toString().split(':');

  if(hValues[0] == 'center'){
  } else if(hValues[0] == 'left'){
    positionOffset.x = (popupSize.width  * (-1));
  } else if(hValues[0] == 'right'){
    positionOffset.x = srcSize.width;
  } else{
    positionOffset.x = parseInt(hValues[0]);
  }
  if(typeof positionOffset.x != 'string') positionOffset.x+= (typeof hValues[1] != 'undefined')?parseInt(hValues[1]):0;

  if(vValues[0] == 'center'){
  } else if(vValues[0] == 'top'){
    positionOffset.y = ((popupSize.height + srcSize.height)  * (-1));
  } else if(vValues[0] == 'bottom'){
    positionOffset.y = 0;
  } else{
    positionOffset.y = parseInt(vValues[0]);
  }
  if(typeof positionOffset.y != 'string') positionOffset.y+= (typeof vValues[1] != 'undefined')?parseInt(vValues[1]):0;

  var viewPort = alvine_getViewport();
  var parentCenter;
  var objectCenter;

  if(positionOffset.x == 'center' || positionOffset.y == 'center'){
    parentCenter = new Object();
    objectCenter = new Object();
  }

  var trgPos = new Object();
  if(positionOffset.x == 'center'){
    parentCenter.x = parseInt((viewPort.width/2));
    objectCenter.x = parseInt((popupSize.width/2));
    trgPos.x = (parentCenter.x - objectCenter.x);
  } else {
    trgPos.x = (srcPos.x + positionOffset.x);
    if((trgPos.x+popupSize.width)>=(viewPort.width+window.scrollX)) {
      var newWidth = (viewPort.width - srcPos.x - positionOffset.x);
      element_setWidth(objVisible, newWidth);
      popupSize.width = newWidth;
      trgPos.x = (srcPos.x - popupSize.width - positionOffset.x);
    }
  }

  if(positionOffset.y == 'center'){
    parentCenter.y = parseInt((viewPort.height/2));
    srcSize  = element_getSize(objVisible);
    objectCenter.y = parseInt((popupSize.height/2));
    trgPos.y = (parentCenter.y - objectCenter.y);
  } else {
    trgPos.y = (srcPos.y + srcSize.height + positionOffset.y);
    if((trgPos.y+popupSize.height)>=(viewPort.height+window.scrollY)) {
      /*
			var newHeight = (viewPort.height - srcPos.y - positionOffset.y);
			element_setHeight(objVisible, newHeight);
			popupSize.height = newHeight;
			*/

      trgPos.y = (srcPos.y - popupSize.height - positionOffset.y);
    }
  }

  if(trgPos.x<0) trgPos.x = 0;
  if(trgPos.y<0) trgPos.y = 0;

  element_move(objVisible, trgPos.x, trgPos.y);

  return true;
}



function content_layout_popup_js_setTitle(boxID, title){
  var newBoxID = 'content_layout_popup_'+boxID;

  var obj = element_isObject(newBoxID);
  if(!obj) return false;

  var titleObj = element_isObject(newBoxID+'_title');
  if(!titleObj) return false;

  writeHTML(titleObj, title);

  return true;
}

function content_layout_popup_js_attach(popupContentID, srcID, popupID, title, event, clear, cropContent, clearOnReset){

  if(typeof popupContentID    == 'undefined') return false;
  if(typeof popupID  == 'undefined') return false;

  var srcObj = element_isObject(srcID);
  if(!srcObj) return false;

  var popupContentObject = element_isObject(popupContentID);
  if(!popupContentObject) return false;

  srcObj['alvine_popupContentObject'] = popupContentObject;
  srcObj['alvine_popupID']            = popupID;
  srcObj['alvine_popupTitle']         = title;
  srcObj['alvine_popupClear']         = (typeof clear == 'undefined')?true:clear;
  srcObj['alvine_popupCropContent']   = (typeof cropContent == 'undefined')?false:cropContent;
  srcObj['alvine_popupClearOnReset']  = (typeof clearOnReset == 'undefined')?false:clearOnReset;

  event = (typeof event == 'undefined')?'click':event;

  event_add(srcObj, event, content_layout_popup_js_raisePopUp, true);

  return true;
}

function content_layout_popup_js_raisePopUp(ev){
  if(!ev) ev = window.event;

  content_layout_popup_js_show(this.alvine_popupID, this.alvine_popupContentObject, this.alvine_popupClear, this.alvine_popupCropContent, this.alvine_popupTitle, '', '', this.alvine_popupClearOnReset);

  return true;
}

function content_layout_popup_js_closePopup(popupID){

  var obj = element_isObject(popupID);
  if(!obj) return false;

  var contentObj = element_isObject(popupID+'_content');
  if(typeof contentObj.alvine_executeChildrensHandler == 'function') contentObj.alvine_executeChildrensHandler('alvine_onClose');

  var visibleObj = element_isObject(popupID+'_visible_panel');

  if(typeof visibleObj.alvine_initPosition == 'object') visibleObj.alvine_initPosition = new Object();
  if(typeof obj.alvine_initialSize == 'object') obj.alvine_initialSize = new Object();

  element_setDisplay(obj, 'none');

  if(obj.alvine_backgroundObj){
    element_setDisplay(obj.alvine_backgroundObj, 'none');
  }
  element_move(obj, -9999, 0);
  obj['alvine_visible'] = false;

  if(obj.alvine_clearOnClose){
    if(!contentObj) contentObj = obj;

  //writeHTML(contentObj, '');
  }

  element_resetSize(visibleObj);
  ie6ToggleActiveXControls(true);
  return true;

}
