/* ########################################################################
*
* DC2.0 Client javascript functions list
*
* # Edwon.Jiang
* # edwon2002@hotmail.com
* # 2005-3-10
*
* Copyright(c)2005 Global Mart International Technology Inc.
* All Rights Reserved.
*
##########################################################################*/
/*------------------------------------------------------------------------//
//----------- definition site info            ----------------------------//
*/
var _SITE_NAME		= "";
var _SITE_LANGUAGE	= "";
var _SITE_ENCODING	= "";
var _SITE_DEFAULT_PAGE	= "";

var _g_selectedMenuItemIndex = -1;

/*------------------------------------------------------------------------//
//---------- Site Menu Edit               --------------------------------//
*/
/*********************************************************
* menu display init
*
* # parm: rMenuGUID
* # return :(boolean)result
**********************************************************/
function _dc2_MenuDisplayInit(rMenuGUID)
{
  _gdc_loadDebuger(rMenuGUID);

  //correct
  _dc2_correctHtmlContent(rMenuGUID);

  if(_dc2_beInPagePreviewing()){
	_gdc_showADInfo();
  }

  //check if in editing
  if(_dc2_beInPageEditing()){
	_dc2_InitMenuInEditing(rMenuGUID)
	return false;
  }

  eval("var _menu = "+rMenuGUID+";");
  if(_menu==null || _menu.length<1)return false;
  var _cur_idx = _dc2_SetCurrentMenuItemCss(rMenuGUID);
  var _layers = _dc2_GetMenuMaxLayer(_menu);
  var _flow = "";
  var _action = "";

  var _sub = null;
  for(var i=2;i<=_layers;i++){
    if(document.all(_dc2_getLayerTagIdByLayer(rMenuGUID,i))==null)continue;
    _sub = document.all(rMenuGUID+"_layer"+i);
    _action = _sub.className.split(",")[0];
    _flow = _sub.className.split(",")[1];
    if(_action=="on_load"){
      _sub.style.display = "block";
      _sub.innerHTML = _dc2_GetOneLayerContent(rMenuGUID,_cur_idx,_flow);
    }else{
      _sub.style.display = "none";
      _sub.innerHTML = "";
    }
  }
  return true;
}

/*********************************************************
* correct the html content first in init
*
* # parm: rMenuGUID
* # return :(boolean)
*********************************************************/
function _dc2_correctHtmlContent(rMenuGUID){
  if( document.all(_dc2_getLayerTagIdByLayer(rMenuGUID,1)) ){
    //temp in user set some menu can't by wrap
	//don't remove the func until it'e resolved in page_edit
	_dc2_setItemNowrap(rMenuGUID,1);

  }else{
	return false;
  }
  return true;
}

/*********************************************************
* get layer container width
*
* # parm: rMenuGUID
* # return :(boolean)
*********************************************************/
function _dc2_setItemNowrap(rMenuGUID,rLayer){
  eval("var _menu = "+rMenuGUID+";");
  if(_menu==null || _menu.length<1)return 0;
  var _width = 0;
  var _tempWidth = "";
  var _item;
  for(var i=0;i<_menu.length;i++){
    if( document.all( _dc2_getItemTagIdByIndex(rMenuGUID,_menu[i].index)) && _menu[i].layer==rLayer){
        _item = document.all( _dc2_getItemTagIdByIndex(rMenuGUID,_menu[i].index));
        _tempWidth = _item.currentStyle.width.toLowerCase();
		if(_tempWidth.indexOf("ps")!=-1)
			_width += parseInt(_tempWidth.replace("ps",""));
	}
  }
  document.all(_dc2_getLayerTagIdByLayer(rMenuGUID,rLayer)).width = _width;
}
/*********************************************************
* _dc2_getLayerTagIdByLayer
*
* # parm: rMenuGUID
*         rLayer
* # return :(string)layerTagId
**********************************************************/
function _dc2_getLayerTagIdByLayer(rMenuGUID,rLayer){
	return rMenuGUID+"_layer"+rLayer;
}
/*********************************************************
* _dc2_getItemTagIdByIndex
*
* # parm: rMenuGUID
*         rIndex
* # return :(string)itemTagId
**********************************************************/
function _dc2_getItemTagIdByIndex(rMenuGUID,rIndex){
	return rMenuGUID+"_item"+rIndex;
}

/*********************************************************
* get menu children count
*
* # parm: rMenuGUID
*         rItemIdx
* # return :(int)count
**********************************************************/
function _dc2_getMenuItemChildrenCount(rMenuGUID,rItemIdx){
  eval("var _menu = "+rMenuGUID+";");
  if(_menu==null || _menu.length<1)return 0;
  var _count = 0;
  for(var i=0;i<_menu.length;i++){
	  if(_menu[i].parentIndex==rItemIdx)_count++;
  }
  return _count;
}

/*********************************************************
* Check if the page is being edited
*
* # parm:
* # return :(boolean)
**********************************************************/
function _dc2_beInPageEditing(){
  return (window.location.href.indexOf("page_edit/edit_core")!=-1);
}

/*********************************************************
* Check if the page is being preview
*
* # parm:
* # return :(boolean)
**********************************************************/
function _dc2_beInPagePreviewing(){
  return (window.location.href.indexOf("page_edit/edit_preview")!=-1);
}

/*********************************************************
* init in editing
*
* # parm: rMenuGUID
* # return :
**********************************************************/
function _dc2_InitMenuInEditing(rMenuGUID){
  eval("var _menu = "+rMenuGUID+";");
  if(_menu==null || _menu.length<1)return false;
  var firstLayer = document.getElementById(_dc2_getLayerTagIdByLayer(rMenuGUID,1));
  firstLayer.style.pixelWidth = 0;
}

/*********************************************************
* _dc2_getMenuItemClassNameWhenDrawing
*
* # parm: rMenuGUID
*         rIndex
*         rLayer
* # return :(string)classAttr
**********************************************************/
function _dc2_getMenuItemClassNameWhenDrawing(rMenuGUID,rIndex,rLayer){
	if(_dc2_checkBeCurrentMenuItem(rMenuGUID,rIndex))
		return " class=\""+_dc2_getLayerTagIdByLayer(rMenuGUID,rLayer)+"_clicked\" ";
	else
		return " class=\""+_dc2_getLayerTagIdByLayer(rMenuGUID,rLayer)+"\" ";

}

/*********************************************************
* Get one menu layer html content
*
* # parm: rMenuGUID
*         rParentIndex
*         rFlow
* # return :(string)content
**********************************************************/
function _dc2_GetOneLayerContent(rMenuGUID,rParentIndex,rFlow){
  eval("var _menu = "+rMenuGUID+";");
  var _str = "<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\">";
  if (rFlow=="vertical"){
    for (var i=0;i<_menu.length;i++){
      if(_menu[i].parentIndex==rParentIndex){
        _str += "<tr><td nowrap ";
		_str += " id=\""+_dc2_getItemTagIdByIndex(rMenuGUID,i)+"\" ";
        _str += _dc2_getMenuItemClassNameWhenDrawing(rMenuGUID,i,_menu[i].layer);
        _str += " onmouseover='_dc2_MenuItemOnMouseOver(\""+rMenuGUID+"\")' ";
        _str += " onmouseout='_dc2_MenuItemOnMouseOut(\""+rMenuGUID+"\")' ";
        _str += " onclick='_dc2_MenuItemOnClick(\""+rMenuGUID+"\")' ";
        _str += ">"+_menu[i].caption+"</td>";
        _str += "</tr>";
      }
    }
  }else{
    _str += "<tr>";
    for (var i=0;i<_menu.length;i++){
      if(_menu[i].parentIndex==rParentIndex){
        _str += "<td nowrap ";
		_str += " id=\""+_dc2_getItemTagIdByIndex(rMenuGUID,i)+"\" ";
        _str += _dc2_getMenuItemClassNameWhenDrawing(rMenuGUID,i,_menu[i].layer);
        _str += " onmouseover='_dc2_MenuItemOnMouseOver(\""+rMenuGUID+"\")' ";
        _str += " onmouseout='_dc2_MenuItemOnMouseOut(\""+rMenuGUID+"\")' ";
        _str += " onclick='_dc2_MenuItemOnClick(\""+rMenuGUID+"\")' ";
        _str += ">"+_menu[i].caption+"</td>";
      }
    }
    _str += "</tr>";
  }
  _str += "</table>";
  return _str;
}

/*********************************************************
* Get menu layers count
*
* # parm: rMenu
* # return :(int)count
**********************************************************/
function _dc2_GetMenuMaxLayer(rMenu)
{
  var _layer = 1;
  for (var i=0;i<rMenu.length;i++){
    if(rMenu[i].layer>_layer)_layer=rMenu[i].layer;
  }
  return _layer;
}

/*********************************************************
* Get the item's index
*
* # parm: rMenuGUID
*         rCurObj
* # return :(int)index
**********************************************************/
function _dc2_GetItemIndex(rMenuGUID,rCurObj){
 return parseInt(rCurObj.id.replace(rMenuGUID+"_item",""));
}

/*********************************************************
* Get the item's index
*
* # parm: rMenuGUID
*         rCurObj
* # return :(int)index
**********************************************************/
function _dc2_getTopParentIndex(rMenuGUID,rItemIdx){
  eval("var _menu = "+rMenuGUID+";");
  if(_menu==null || _menu.length<1)return -1;

  var parentIdx = parseInt(_menu[rItemIdx].parentIndex);
  if(parentIdx==-1){
	_g_selectedMenuItemIndex = parseInt(rItemIdx);
	return;
  }else{
	_dc2_getTopParentIndex(rMenuGUID,parentIdx);
  }
}

/*********************************************************
* Check current menu item
*
* # parm: rMenuGUID
*         rItemIdx
* # return :boolean
**********************************************************/
function _dc2_checkBeCurrentMenuItem(rMenuGUID,rItemIdx){
  eval("var _menu = "+rMenuGUID+";");
  if(_menu==null || _menu.length<1)return false;
  var _url = window.location.href;
  return (_url.indexOf(_menu[rItemIdx].url)!=-1);
}

/*********************************************************
* Set current menu item class
*
* # parm: rMenuGUID
*         rItemIdx
* # return :boolean
**********************************************************/
function _dc2_SetCurrentMenuItemCss(rMenuGUID)
{
  eval("var _menu = "+rMenuGUID+";");
  if(_menu==null || _menu.length<1)return false;

  var _url = window.location.href;
  for (var i=0;i<_menu.length;i++){
    if(_url.indexOf(_menu[i].url)!=-1){
      if(document.all(rMenuGUID+"_item"+i)!=null){
		var _curObj = document.all(rMenuGUID+"_item"+i);
		_curObj.className = _dc2_getLayerTagIdByLayer(rMenuGUID,_menu[i].layer)+"_clicked";
	  }else{
		  _dc2_getTopParentIndex(rMenuGUID,i);
		  if(_g_selectedMenuItemIndex!=-1){
			var _curObj = document.all(rMenuGUID+"_item"+_g_selectedMenuItemIndex);
			_curObj.className = _dc2_getLayerTagIdByLayer(rMenuGUID,_menu[_g_selectedMenuItemIndex].layer)+"_clicked";
		  }
	  }
	  return i;
    }
  }
  return -1;
}

/*********************************************************
* _dc2_MenuItemOnClick
*
* # parm: rMenuGUID
* # return :
**********************************************************/
function _dc2_MenuItemOnClick(rMenuGUID){

  if(_dc2_beInPageEditing())return false;

  eval("var _menu = "+rMenuGUID+";");
  if(_menu==null || _menu.length<1)return false;

  var _curObj = event.srcElement;
  var _curIdx = _dc2_GetItemIndex(rMenuGUID,_curObj);

  var _url = _menu[_curIdx].url;
  var _target = _menu[_curIdx].target;

  if(_target=="_self"){
	window.location.href = _url;
  }else if(_target=="_top"){
	top.window.location.href = _url;
  }else if(_target=="_parent"){
	parent.window.location.href = _url;
  }else if(_target=="_blank"){
	window.open(_url);
  }else{
  }
}

/*********************************************************
* Set Selected Menu Item Css when mouse action
*
* # parm: (string)rMenuGUID
*         (int)rLayer
*         (object)rCurObj
*         (string)rAction
* # return :
**********************************************************/
function _dc2_SetSelectedMenuItemCss(rMenuGUID,rLayer,rCurObj,rAction){
  eval("var _menu = "+rMenuGUID+";");
  if(_menu==null || _menu.length<1)return false;

  if(rCurObj.className.indexOf("_clicked")!=-1)return true;
  if(rAction=="mouse_over"){
		rCurObj.className = _dc2_getLayerTagIdByLayer(rMenuGUID,rLayer)+"_hover";
	}else if(rAction=="mouse_out"){
		rCurObj.className = _dc2_getLayerTagIdByLayer(rMenuGUID,rLayer);
	}else{
		//do nothing
  }
}

/*********************************************************
* menu action -- Mouse Over
*
* # parm: (string)rMenuGUID
* # return :
**********************************************************/
function _dc2_MenuItemOnMouseOver(rMenuGUID)
{
  if(_dc2_beInPageEditing())return false;

  eval("var _menu = "+rMenuGUID+";");
  if(_menu==null || _menu.length<1)return false;



  var _curObj = event.srcElement;
  var _curIdx = _dc2_GetItemIndex(rMenuGUID,_curObj);
  var _curLayer = parseInt(_menu[_curIdx].layer);

  var _curLayerTab = document.all(_dc2_getLayerTagIdByLayer(rMenuGUID,_curLayer));

  _dc2_SetSelectedMenuItemCss(rMenuGUID,_curLayer,_curObj,"mouse_over");

  var _new_layer = _curLayer+1;

  if(document.all(_dc2_getLayerTagIdByLayer(rMenuGUID,_new_layer))!=null){
    var _showObj = document.all(_dc2_getLayerTagIdByLayer(rMenuGUID,_new_layer));

    //clean next layer content
	_showObj.innerHTML = "";

	//show new content
	var _display = _showObj.className.split(",")[0];
    var _expand = _showObj.className.split(",")[1];
    var _left = 0;
    var _top = 0;
    //set a new div in absolute position
    //get parent position
    if(_display=="on_load"){
        _showObj.innerHTML = _dc2_GetOneLayerContent(rMenuGUID,rIndex,_expand);
    }else{
      var _adjust = 1;
      //var originLeft = getAbsoluteLeft(rCurObj);
      //var originTop = getAbsoluteTop(rCurObj);
      var originLeft =  _curLayerTab.style.pixelLeft + _curObj.offsetLeft;
      var originTop =  _curLayerTab.style.pixelTop + _curObj.offsetTop;

	  if(_display=="on_left"){
        _left = originLeft - _curObj.offsetWidth + _adjust;
        _top = originTop - _adjust;
      }else if(_display=="on_right"){
        _left = originLeft + _curObj.offsetWidth - _adjust;
        _top = originTop - _adjust;
      }else if(_display=="on_top"){
        _left = originLeft;
        _top = originTop - _curObj.offsetHeight + _adjust;
      }else if(_display=="on_bottom"){
        _left = originLeft;
        _top = originTop + _curObj.offsetHeight - _adjust;
      }else{//on bottom is default
        _left = originLeft;
        _top = originTop + _curObj.offsetHeight - _adjust;
      }
      _showObj.style.display = "block";
      _showObj.style.position = "absolute";
	  _showObj.style.zIndex = 10000-_new_layer;
      _showObj.style.left = _left;
      _showObj.style.top = _top;
      _showObj.innerHTML = _dc2_GetOneLayerContent(rMenuGUID,_curIdx,_expand);
   }
  }
}

/*********************************************************
* closeExtMenuLayer
*
* # parm: (object)rExtObj
* # return :
**********************************************************/
function _dc2_closeExtMenuLayer(rExtObj){
	if(rExtObj==null)return false;
	rExtObj.style.display = "none";
	rExtObj.style.zIndex = 0;
	rExtObj.innerHTML = "";
}

/*********************************************************
* _dc2_MenuItemOnMouseOut
*
* # parm: (string)rMenuGUID
* # return :
**********************************************************/
function _dc2_MenuItemOnMouseOut(rMenuGUID){
  if(_dc2_beInPageEditing())return false;

  eval("var _menu = "+rMenuGUID+";");
  if(_menu==null || _menu.length<1)return false;

  var _curObj = event.srcElement;
  var _curIdx = _dc2_GetItemIndex(rMenuGUID,_curObj);
  var _curLayer = parseInt(_menu[_curIdx].layer);

  _dc2_SetSelectedMenuItemCss(rMenuGUID,_curLayer,_curObj,"mouse_out");

}

/*********************************************************
* Menu Action -- Mouse Out for table
*
* # parm: (object)rCurObj
*         (string)rMenuGUID
*         (int)rLayer
* # return :
**********************************************************/
function _dc2_MenuOnMouseOut(rCurObj,rEvent,rMenuGUID,rLayer){
  rEvent.cancelBubble = true;

  if(_dc2_beInPageEditing())return false;

  eval("var _menu = "+rMenuGUID+";");
  if(_menu==null || _menu.length<1)return false;

  if(event.toElement && event.toElement.tagName.toUpperCase()!="TD"){
    _gdc_debug("get:"+event.toElement.tagName);
    rLayer = parseInt(rLayer);

    for(var i=rLayer;i<=_dc2_GetMenuMaxLayer(_menu);i++){
	  if( document.all(_dc2_getLayerTagIdByLayer(rMenuGUID,i)) ){
		var _curSpan = document.all(_dc2_getLayerTagIdByLayer(rMenuGUID,i));
		var _class = _curSpan.className;
		if(i!=1 && _class.toLowerCase().indexOf("on_load")==-1){
			_dc2_closeExtMenuLayer(_curSpan);
			_gdc_debug("close layer:"+i);
		}
	  }
    }
  }else{
	 return false;
  }
}

//----------- Site Menu Edit End -----------------------------------------//
/*------------------------------------------------------------------------//
//----------- Util functions list ----------------------------------------//
* Edwon.Jiang
* edwon2002@hotmail.com
* http://www.yuzhi.cn
*/
/*********************************************************
* Get absolute LEFT position
*********************************************************/
function getAbsoluteLeft( ob ){
  if(!ob){return null;}
    var curOb = ob;
    var ableft = curOb.offsetLeft;
    while( curOb != null && curOb.offsetParent != null && curOb.offsetParent.tagName != "BODY" ){
      ableft += curOb.offsetParent.offsetLeft;
      curOb = curOb.offsetParent;
    }
  return ableft;
}

/*********************************************************
* Get absolute TOP position
*********************************************************/
function getAbsoluteTop( ob ){
  if(!ob){return null;}
  var curOb = ob;
  var abtop = curOb.offsetTop;
  while( curOb != null && curOb.offsetParent != null && curOb.offsetParent.tagName != "BODY" ){
    abtop += curOb.offsetParent.offsetTop;
    curOb = curOb.offsetParent;
  }
  return abtop;
}
/*********************************************************
* draw shadow for a div object
*********************************************************/
function drawRectangularDropShadow(objId, color, size){
  var el = document.all(objId);
  var global = window.document;
  global.fo_currentMenu = null;
  global.fo_shadows = new Array;
  var i;
  for (i=size; i>0; i--){
    var rect = document.createElement('div');
    var rs = rect.style;
    rs.position = "absolute";
	rs.left = (getAbsoluteLeft(el) + i) + "px";
    rs.top = (getAbsoluteTop(el) + i) + "px";
    rs.width = el.offsetWidth + "px";
    rs.height = el.offsetHeight + "px";
    rs.zIndex = el.style.zIndex - i;
    rs.backgroundColor = color;
    var opacity = 1 - i / (i + 1);
    rs.filter = "alpha(opacity=" + (100 * opacity) + ")";
    el.insertAdjacentElement("afterEnd", rect);
    global.fo_shadows[global.fo_shadows.length] = rect;
  }
}
//
/*------------------------------------------------------------------------//
//----------- Specifically Functions used by GDC   -----------------------//
*/
/*********************************************************
* draw shadow for a div object
*********************************************************/
/*********************************************************
* draw loading info
* # parm:
* # return:
*********************************************************/
function _gdc_drawLoadingInfo(){
	if(document.all("dc2_site_entrance_loading")==null)return false;
	var obj = document.all("dc2_site_entrance_loading");
	obj.innerText = "loading......";
	obj.style.padding = "20 0 20 0";
	obj.style.width = 300;
	obj.style.backgroundColor = "#fffff0";
	drawRectangularDropShadow("dc2_site_entrance_loading","#999999",5);
}

/*********************************************************
* draw loading info
*
* # parm: (String)rMenuGUID
* # return:
*********************************************************/
function _gdc_loadDebuger(rMenuGUID){
  return;
  var str = "<span id=\"dc2_client_debug\" name=\"dc2_client_debug\"";
  str += " style=\"position:absolute;z-index:10000;left:0;top:0;width:200;border:2 inset #ffffff;background-color:#fffff0\" ";
  str += "><span>";
  if(document.all("dc2_client_debug")!=null){
    document.all("dc2_client_debug").style.display = "block";
    document.all("dc2_client_debug").outerHTML = str;
  }else{
    document.body.insertAdjacentHTML("AfterBegin",str);
      drawRectangularDropShadow("dc2_client_debug","#555550",5);
  }
}

/*********************************************************
* draw loading info
*
* # parm: (String)rInfo
* # return:
*********************************************************/
function _gdc_debug(rInfo){
  return;
  if(document.all("dc2_client_debug")){
	document.all("dc2_client_debug").innerText = rInfo;
  }
}

/*********************************************************
* draw AD info in previewing
*
* # parm:
* # return:
*********************************************************/
function _gdc_drawADInfoInPagePreviewing(){
  var _objId = "dc2_client_preview_ad";
  var _clientHeight = document.body.clientHeight;
  var _clientWidth = document.body.clientWidth;
  var _clientTop = document.body.scrollTop;

  var _style = "position:absolute;";
  _style += "z-index:100000;";
  _style += "left:0px;top:"+_clientTop+"px;";
  _style += "width:"+_clientWidth+"px;height:20px;";
  _style += "filter:alpha(opacity=30);";
  _style += "background-color:#336699;color:#cccccc";
  _style += "padding:10 10 10 10;";
  _style += "font-family:verdana;font-size:13px;";

  var _str = "<span id=\""+_objId+"\" ";
  _str += " style=\""+_style+"\" ";
  _str += ">";
  _str += "<table cellspacing=0 cellpadding=0 width=\"100%\">";
  _str += "<tr><td style=\"color:#ffffff\">Welcome to use DesignCenter2.0 System!</td></tr>";
  _str += "<tr><td style=\"color:#ffffff;font-size:10px\">";
  _str += "Designed by DC2.0 (http://www.yuzhi.cn)";
  _str += "</td></tr>";
  _str += "</table>";
  _str += "</span>";
  if(document.all(_objId)){
	var _curObj = document.all(_objId);
	if(_curObj.style.pixelTop!=_clientTop)
		_curObj.outerHTML = _str;

  }else{
    document.body.insertAdjacentHTML("AfterBegin",_str);
  }
}
var g_gdc_ADInfoIntval = "";
function _gdc_showADInfo(){
  return;
  g_gdc_ADInfoIntval = window.setInterval("_gdc_drawADInfoInPagePreviewing()",2);
}
//
/*------------------------------------------------------------------------//
//----------- Site entrance!! --------------------------------------------//
*/
/*********************************************************
* site onload
*********************************************************/
function _dc2_siteOnLoad(){
  // draw loading info
  _gdc_drawLoadingInfo();
  // go to default page
  _dc2_gotoDefaultPage(_SITE_DEFAULT_PAGE);
}
/*********************************************************
* goto default site page
*********************************************************/
function _dc2_gotoDefaultPage(url){
  if(url!=null && url!=""){
    window.location.href = url;
  }
}
//------------------------------------------------------------------------//
