/* $Id : common.js 4865 2007-01-31 14:04:10Z paulgao $ */

/* *
 * 加载事件代码
 */
function addLoadEvent(func) {
	var oldonload = window.onload;
	if (typeof window.onload != 'function') {
		window.onload = func;
	} else {
		window.onload = function() {
			oldonload();
			func();
		}
	}

	bindReady();
}

function bindReady() {
	if ( document.addEventListener ) {
		document.addEventListener( "DOMContentLoaded", function(){
			document.removeEventListener( "DOMContentLoaded", arguments.callee, false );
			if(window.onload) {
				var fn = window.onload;
				window.onload = null;
				fn();
			}
		}, false );

	} else if ( document.attachEvent ) {
		document.attachEvent("onreadystatechange", function(){
			if ( document.readyState === "complete" ) {
				document.detachEvent( "onreadystatechange", arguments.callee );
				if(window.onload) {
					var fn = window.onload;
					window.onload = null;
					fn();
				}
			}
		});

		if ( document.documentElement.doScroll && typeof window.frameElement === "undefined" ) (function(){
			if(!window.onload) {
				return;
			}

			try {
				document.documentElement.doScroll("left");
			} catch( error ) {
				setTimeout( arguments.callee, 0 );
				return;
			}

			if(window.onload) {
				var fn = window.onload;
				window.onload = null;
				fn();
			}
		})();
	}
}


/* *
 * 添加商品到购物车
 */
function addToCart(goodsId, parentId)
{

  var sels = document.getElementsByTagName('select');
  for(var i = 0; i < sels.length; i++){
	if(sels[i].options.length < 2){
		alert('该商品暂无库存，敬请选购其他商品。');
		return;
	}
	if(sels[i].name.match(/^spec_\d+$/)){
	  if(sels[i].options[sels[i].selectedIndex].value.length == 0){
	    alert('请选择完整商品的各项属性！');
	    return;
	  }else if(!sels[i].options[sels[i].selectedIndex].value.match(/^\d+$/)){
	    alert('请选择' + sels[i].options[sels[i].selectedIndex].value + '！');
	    return;
	  }
	}else if(sels[i].name.match(/^规格$/)){ 
		  alert('请选择商品属性！');
  }
}


  var goods        = new Object();
  var spec_arr     = new Array();
  var fittings_arr = new Array();
  var number       = 1;
  var formBuy      = document.forms['ECS_FORMBUY'];

  // 检查是否有商品规格
  if (formBuy)
  {
    spec_arr = getSelectedAttributes(formBuy);

    if (formBuy.elements['number'])
    {
      number = formBuy.elements['number'].value;
    }
  }


  goods.spec     = spec_arr;
  goods.goods_id = goodsId;
  goods.number   = number;
  goods.parent   = (typeof(parentId) == "undefined") ? 0 : parseInt(parentId);
  Ajax.call('/flow.php?step=add_to_cart', 'goods=' + goods.toJSONString(), addToCartResponse, 'POST', 'JSON');
}

/**
 * 获得选定的商品属性
 */
function getSelectedAttributes(formBuy)
{
  var spec_arr = new Array();
  var j = 0;

  for (i = 0; i < formBuy.elements.length; i ++ )
  {
    var prefix = formBuy.elements[i].name.substr(0, 5);

    if (prefix == 'spec_' && (
      (formBuy.elements[i].type == 'radio' && formBuy.elements[i].checked) ||
      formBuy.elements[i].tagName == 'SELECT'))
    {
      spec_arr[j] = formBuy.elements[i].value;
      j++ ;
    }
  }

  return spec_arr;
}

/* *
 * 处理添加商品到购物车的反馈信息
 */
function addToCartResponse(result)
{
  if (result.error > 0)
  {
    // 如果需要缺货登记，跳转
    if (result.error == 2)
    {
      if (confirm(result.message))
      {
        location.href = '/user.php?act=add_booking&id=' + result.goods_id;
      }
    }
    // 没选规格，跳到商品详情页
    else if (result.error == 6)
    {
      if (confirm(result.message))
      {
        location.href = '/goods.php?id=' + result.goods_id;
      }
    }
	else if (result.error == 7)
	{
			location.href = '/user.php?back_act=' + result.message;	
	}
    else
    {
      alert(result.message);
    }
  }
  else
  {
    var cartInfo = document.getElementById('ECS_CARTINFO');

    if (cartInfo)
    {
      cartInfo.innerHTML = result.content;
    }

    if (result.one_step_buy == '1')
    {
      location.href = '/flow.php';
    }
    else
    {
      switch(result.confirm_type)
      {
        case '1' :
          if (confirm(result.message)) location.href = '/flow.php';
          break;
        case '2' :
          if (!confirm(result.message)) location.href = '/flow.php';
          break;
        case '3' :
          location.href = '/flow.php';
          break;
        default :
          break;
      }
    }
  }
}

/* *
 * 添加商品到收藏夹
 */
function collect(goodsId)
{
  Ajax.call('/user.php?act=collect', 'id=' + goodsId, collectResponse, 'GET', 'JSON');
}

/* *
 * 处理收藏商品的反馈信息
 */
function collectResponse(result)
{
  alert(result.message);
  if(result.url){
	open(result.url, '_blank');
  }
}

/* *
 * 处理会员登录的反馈信息
 */
function signInResponse(result)
{
  toggleLoader(false);

  var done    = result.substr(0, 1);
  var content = result.substr(2);

  if (done == 1)
  {
    document.getElementById('member-zone').innerHTML = content;
  }
  else
  {
    alert(content);
  }
}

/* *
 * 评论的翻页函数
 */
function gotoPage(page, id, type)
{
  Ajax.call('/comment.php?act=gotopage', 'page=' + page + '&id=' + id + '&type=' + type, gotoPageResponse, 'GET', 'JSON');
}

function gotoPageResponse(result)
{
  document.getElementById("ECS_COMMENT").innerHTML = result.content;
}

/* *
 * 取得格式化后的价格
 * @param : float price
 */
function getFormatedPrice(price)
{
  if (currencyFormat.indexOf("%s") > - 1)
  {
    return currencyFormat.replace('%s', advFormatNumber(price, 2));
  }
  else if (currencyFormat.indexOf("%d") > - 1)
  {
    return currencyFormat.replace('%d', advFormatNumber(price, 0));
  }
  else
  {
    return price;
  }
}

/* *
 * 夺宝奇兵会员出价
 */

function bid(step)
{
  var price = '';
  var msg   = '';
  if (step != - 1)
  {
    var frm = document.forms['formBid'];
    price   = frm.elements['price'].value;
    id = frm.elements['snatch_id'].value;
    if (price.length == 0)
    {
      msg += price_not_null + '\n';
    }
    else
    {
      var reg = /^[\.0-9]+/;
      if ( ! reg.test(price))
      {
        msg += price_not_number + '\n';
      }
    }
  }
  else
  {
    price = step;
  }

  if (msg.length > 0)
  {
    alert(msg);
    return;
  }

  Ajax.call('/snatch.php?act=bid&id=' + id, 'price=' + price, bidResponse, 'POST', 'JSON')
}

/* *
 * 夺宝奇兵会员出价反馈
 */

function bidResponse(result)
{
  if (result.error == 0)
  {
    document.getElementById('ECS_SNATCH').innerHTML = result.content;
    if (document.forms['formBid'])
    {
      document.forms['formBid'].elements['price'].focus();
    }
    newPrice(); //刷新价格列表
  }
  else
  {
    alert(result.content);
  }
}

/* *
 * 夺宝奇兵最新出价
 */

function newPrice(id)
{
  Ajax.call('/snatch.php?act=new_price_list&id=' + id, '', newPriceResponse, 'GET', 'TEXT');
}

/* *
 * 夺宝奇兵最新出价反馈
 */

function newPriceResponse(result)
{
  document.getElementById('ECS_PRICE_LIST').innerHTML = result;
}

/* *
 *  返回属性列表
 */
function getAttr(cat_id)
{
  var tbodies = document.getElementsByTagName('tbody');
  for (i = 0; i < tbodies.length; i ++ )
  {
    if (tbodies[i].id.substr(0, 10) == 'goods_type')tbodies[i].style.display = 'none';
  }

  var type_body = 'goods_type_' + cat_id;
  try
  {
    document.getElementById(type_body).style.display = '';
  }
  catch (e)
  {
  }
}

/* *
 * 截取小数位数
 */
function advFormatNumber(value, num) // 四舍五入
{
  var a_str = formatNumber(value, num);
  var a_int = parseFloat(a_str);
  if (value.toString().length > a_str.length)
  {
    var b_str = value.toString().substring(a_str.length, a_str.length + 1);
    var b_int = parseFloat(b_str);
    if (b_int < 5)
    {
      return a_str;
    }
    else
    {
      var bonus_str, bonus_int;
      if (num == 0)
      {
        bonus_int = 1;
      }
      else
      {
        bonus_str = "0."
        for (var i = 1; i < num; i ++ )
        bonus_str += "0";
        bonus_str += "1";
        bonus_int = parseFloat(bonus_str);
      }
      a_str = formatNumber(a_int + bonus_int, num)
    }
  }
  return a_str;
}

function formatNumber(value, num) // 直接去尾
{
  var a, b, c, i;
  a = value.toString();
  b = a.indexOf('.');
  c = a.length;
  if (num == 0)
  {
    if (b != - 1)
    {
      a = a.substring(0, b);
    }
  }
  else
  {
    if (b == - 1)
    {
      a = a + ".";
      for (i = 1; i <= num; i ++ )
      {
        a = a + "0";
      }
    }
    else
    {
      a = a.substring(0, b + num + 1);
      for (i = c; i <= b + num; i ++ )
      {
        a = a + "0";
      }
    }
  }
  return a;
}

/* *
 * 根据当前shiping_id设置当前配送的的保价费用，如果保价费用为0，则隐藏保价费用
 *
 * return       void
 */
function set_insure_status()
{
  // 取得保价费用，取不到默认为0
  var shippingId = getRadioValue('shipping');
  var insure_fee = 0;
  if (shippingId > 0)
  {
    if (document.forms['theForm'].elements['insure_' + shippingId])
    {
      insure_fee = document.forms['theForm'].elements['insure_' + shippingId].value;
    }
    // 每次取消保价选择
    if (document.forms['theForm'].elements['need_insure'])
    {
      document.forms['theForm'].elements['need_insure'].checked = false;
    }

    // 设置配送保价，为0隐藏
    if (document.getElementById("ecs_insure_cell"))
    {
      if (insure_fee > 0)
      {
        document.getElementById("ecs_insure_cell").style.display = '';
        setValue(document.getElementById("ecs_insure_fee_cell"), getFormatedPrice(insure_fee));
      }
      else
      {
        document.getElementById("ecs_insure_cell").style.display = "none";
        setValue(document.getElementById("ecs_insure_fee_cell"), '');
      }
    }
  }
}

/* *
 * 当支付方式改变时出发该事件
 * @param       pay_id      支付方式的id
 * return       void
 */
function changePayment(pay_id)
{
  // 计算订单费用
  calculateOrderFee();
}

function getCoordinate(obj)
{
  var pos =
  {
    "x" : 0, "y" : 0
  }

  pos.x = document.body.offsetLeft;
  pos.y = document.body.offsetTop;

  do
  {
    pos.x += obj.offsetLeft;
    pos.y += obj.offsetTop;

    obj = obj.offsetParent;
  }
  while (obj.tagName.toUpperCase() != 'BODY')

  return pos;
}

function showCatalog(obj)
{
  var pos = getCoordinate(obj);
  var div = document.getElementById('ECS_CATALOG');

  if (div && div.style.display != 'block')
  {
    div.style.display = 'block';
    div.style.left = pos.x + "px";
    div.style.top = (pos.y + obj.offsetHeight - 1) + "px";
  }
}

function hideCatalog(obj)
{
  var div = document.getElementById('ECS_CATALOG');

  if (div && div.style.display != 'none') div.style.display = "none";
}

function sendHashMail()
{
  Ajax.call('/user.php?act=send_hash_mail', '', sendHashMailResponse, 'GET', 'JSON')
}

function sendHashMailResponse(result)
{
  alert(result.message);
}

/* 订单查询 */
function orderQuery()
{
  var order_sn = document.forms['ecsOrderQuery']['order_sn'].value;

  var reg = /^[\.0-9]+/;
  if (order_sn.length < 10 || ! reg.test(order_sn))
  {
    alert(invalid_order_sn);
    return;
  }
  Ajax.call('/user.php?act=order_query&order_sn=s' + order_sn, '', orderQueryResponse, 'GET', 'JSON');
}

function orderQueryResponse(result)
{
  if (result.message.length > 0)
  {
    alert(result.message);
  }
  if (result.error == 0)
  {
    var div = document.getElementById('ECS_ORDER_QUERY');
    div.innerHTML = result.content;
  }
}

function display_mode(str)
{
    document.getElementById('display').value = str;
    setTimeout(doSubmit, 0);
    function doSubmit() {document.forms['listform'].submit();}
}


/* 修复IE6以下版本PNG图片Alpha */
function fixpng()
{
  var arVersion = navigator.appVersion.split("MSIE")
  var version = parseFloat(arVersion[1])

  if ((version >= 5.5) && (document.body.filters))
  {
     for(var i=0; i<document.images.length; i++)
     {
        var img = document.images[i]
        var imgName = img.src.toUpperCase()
        if (imgName.substring(imgName.length-3, imgName.length) == "PNG")
        {
           var imgID = (img.id) ? "id='" + img.id + "' " : ""
           var imgClass = (img.className) ? "class='" + img.className + "' " : ""
           var imgTitle = (img.title) ? "title='" + img.title + "' " : "title='" + img.alt + "' "
           var imgStyle = "display:inline-block;" + img.style.cssText
           if (img.align == "left") imgStyle = "float:left;" + imgStyle
           if (img.align == "right") imgStyle = "float:right;" + imgStyle
           if (img.parentElement.href) imgStyle = "cursor:hand;" + imgStyle
           var strNewHTML = "<span " + imgID + imgClass + imgTitle
           + " style=\"" + "width:" + img.width + "px; height:" + img.height + "px;" + imgStyle + ";"
           + "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader"
           + "(src=\'" + img.src + "\', sizingMethod='scale');\"></span>"
           img.outerHTML = strNewHTML
           i = i-1
        }
     }
  }
}

function hash(string, length)
{
  var length = length ? length : 32;
  var start = 0;
  var i = 0;
  var result = '';
  filllen = length - string.length % length;
  for(i = 0; i < filllen; i++)
  {
    string += "0";
  }
  while(start < string.length)
  {
    result = stringxor(result, string.substr(start, length));
    start += length;
  }
  return result;
}

function stringxor(s1, s2)
{
  var s = '';
  var hash = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
  var max = Math.max(s1.length, s2.length);
  for(var i=0; i<max; i++) 
  {
    var k = s1.charCodeAt(i) ^ s2.charCodeAt(i);
    s += hash.charAt(k % 52);
  }
  return s;
}

var evalscripts = new Array();
function evalscript(s)
{
  if(s.indexOf('<script') == -1) return s;
  var p = /<script[^\>]*?src=\"([^\>]*?)\"[^\>]*?(reload=\"1\")?(?:charset=\"([\w\-]+?)\")?><\/script>/ig;
  var arr = new Array();
  while(arr = p.exec(s)) appendscript(arr[1], '', arr[2], arr[3]);
  return s;
}

function $$(id)
{
    return document.getElementById(id);
}

function appendscript(src, text, reload, charset) 
{
  var id = hash(src + text);
  if(!reload && in_array(id, evalscripts)) return;
  if(reload && $$(id))
  {
    $$(id).parentNode.removeChild($$(id));
  }
  evalscripts.push(id);
  var scriptNode = document.createElement("script");
  scriptNode.type = "text/javascript";
  scriptNode.id = id;
  //scriptNode.charset = charset;
  try 
  {
    if(src) 
    {
      scriptNode.src = src;
    }
    else if(text)
    {
      scriptNode.text = text;
    }
    $$('append_parent').appendChild(scriptNode);
  } 
  catch(e)
  {}
}

function in_array(needle, haystack)
{
  if(typeof needle == 'string' || typeof needle == 'number')
  {
    for(var i in haystack)
    {
      if(haystack[i] == needle)
      {
        return true;
      }
    }
  }
  return false;
}

var pmwinposition = new Array();

var userAgent = navigator.userAgent.toLowerCase();
var is_opera = userAgent.indexOf('opera') != -1 && opera.version();
var is_moz = (navigator.product == 'Gecko') && userAgent.substr(userAgent.indexOf('firefox') + 8, 3);
var is_ie = (userAgent.indexOf('msie') != -1 && !is_opera) && userAgent.substr(userAgent.indexOf('msie') + 5, 3);
function pmwin(action, param)
{
  var objs = document.getElementsByTagName("OBJECT");
  if(action == 'open')
  {
    for(i = 0;i < objs.length; i ++)
    {
      if(objs[i].style.visibility != 'hidden')
      {
        objs[i].setAttribute("oldvisibility", objs[i].style.visibility);
        objs[i].style.visibility = 'hidden';
      }
    }
    var clientWidth = document.body.clientWidth;
    var clientHeight = document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.clientHeight;
    var scrollTop = document.body.scrollTop ? document.body.scrollTop : document.documentElement.scrollTop;
    var pmwidth = 800;
    var pmheight = clientHeight * 0.9;
    if(!$$('pmlayer'))
    {
      div = document.createElement('div');div.id = 'pmlayer';
      div.style.width = pmwidth + 'px';
      div.style.height = pmheight + 'px';
      div.style.left = ((clientWidth - pmwidth) / 2) + 'px';
      div.style.position = 'absolute';
      div.style.zIndex = '999';
      $$('append_parent').appendChild(div);
      $$('pmlayer').innerHTML = '<div style="width: 800px; background: #666666; margin: 5px auto; text-align: left">' +
        '<div style="width: 800px; height: ' + pmheight + 'px; padding: 1px; background: #FFFFFF; border: 1px solid #7597B8; position: relative; left: -6px; top: -3px">' +
        '<div onmousedown="pmwindrag(event, 1)" onmousemove="pmwindrag(event, 2)" onmouseup="pmwindrag(event, 3)" style="cursor: move; position: relative; left: 0px; top: 0px; width: 800px; height: 30px; margin-bottom: -30px;"></div>' +
        '<a href="###" onclick="pmwin(\'close\')"><img style="position: absolute; right: 20px; top: 15px" src="images/close.gif" title="关闭" /></a>' +
        '<iframe id="pmframe" name="pmframe" style="width:' + pmwidth + 'px;height:100%" allowTransparency="true" frameborder="0"></iframe></div></div>';
    }
    $$('pmlayer').style.display = '';
    $$('pmlayer').style.top = ((clientHeight - pmheight) / 2 + scrollTop) + 'px';
    if(!param)
    {
        pmframe.location = '/pm.php';
    }
    else
    {
        pmframe.location = '/pm.php?' + param;
    }
  }
  else if(action == 'close')
  {
    for(i = 0;i < objs.length; i ++)
    {
      if(objs[i].attributes['oldvisibility'])
      {
        objs[i].style.visibility = objs[i].attributes['oldvisibility'].nodeValue;
        objs[i].removeAttribute('oldvisibility');
      }
    }
    hiddenobj = new Array();
    $$('pmlayer').style.display = 'none';
  }
}

var pmwindragstart = new Array();
function pmwindrag(e, op)
{
  if(op == 1)
  {
    pmwindragstart = is_ie ? [event.clientX, event.clientY] : [e.clientX, e.clientY];
    pmwindragstart[2] = parseInt($$('pmlayer').style.left);
    pmwindragstart[3] = parseInt($$('pmlayer').style.top);
    doane(e);
  }
  else if(op == 2 && pmwindragstart[0])
  {
    var pmwindragnow = is_ie ? [event.clientX, event.clientY] : [e.clientX, e.clientY];
    $$('pmlayer').style.left = (pmwindragstart[2] + pmwindragnow[0] - pmwindragstart[0]) + 'px';
    $$('pmlayer').style.top = (pmwindragstart[3] + pmwindragnow[1] - pmwindragstart[1]) + 'px';
    doane(e);
  }
  else if(op == 3)
  {
    pmwindragstart = [];
    doane(e);
  }
}

function doane(event)
{
  e = event ? event : window.event;
  if(is_ie)
  {
    e.returnValue = false;
    e.cancelBubble = true;
  } 
  else if(e)
  {
    e.stopPropagation();
    e.preventDefault();
  }
}

function TabPager(tabs, tabtype, clients, opt){
	this.tabs = document.getElementById(tabs);
	this.tabtype = tabtype;
	this.timer = 0;
	this.a = 1;

	if(opt.autoChange){
		this.autoChange = opt.autoChange;
	}else{
		this.autoChange = false;
	}

	if(opt.imgChange){
		this.imgChange = opt.imgChange;
	}else{
		this.imgChange = false;
	}

	if(opt.arr){
		this.arr = opt.arr;
	}else{
		this.arr = null;
	}

	var that = this;
	this.enable = function (start){
		if(that.disabled && start){
			that.disabled = false;
		}
		if(!that.disabled){
			if(that.autoChange){
				that.caller(true);
			}
		}
	}

	this.disable = function (stop){
		if(that.timer){
			clearTimeout(that.timer);
			that.timer = 0;
		}

		if(stop){
			if(that.disabled){
				that.enable(true);
			}else{
				that.disabled = true;
			}
		}
	}

	this.changePage = function (){
		if(arguments.length > 0){
			that.n = arguments[0];
		}

		if(that.n < 0){
			that.n = that.total - 1;
		}else if(that.n >= that.total){
			that.n = 0;
		}

		var reg = new RegExp(that.tabtype, 'i');
		var tablist = that.tabs.getElementsByTagName(tabtype);
		var j = 0;
		for(var i = 0; i < tablist.length; i++){
			var tab = tablist[i];
			if(tab.tagName && reg.test(tab.tagName) && tab.innerHTML){
				if(j == that.n){
					tab.className = tab.className.match('hot') ? tab.className : tab.className + ' hot';
				}else{
					tab.className = tab.className.replace(/ ?hot/, '');
				}
				j++;
			}
		}

		if(that.imgChange){
			if(that.arr[that.n].map){
				that.clients.childNodes[0].useMap = that.arr[that.n].map;
				that.clients.childNodes[0].src = that.arr[that.n].img;
				that.clients.childNodes[0].alt = that.arr[that.n].alt;
			}else{
				that.clients.childNodes[0].href = that.arr[that.n].lnk;
				that.clients.childNodes[0].title = that.arr[that.n].title;
				that.clients.childNodes[0].childNodes[0].src = that.arr[that.n].img;
				that.clients.childNodes[0].childNodes[0].alt = that.arr[that.n].alt;
			}
		}
		else
		{
			j = 0;
			for(var i = 0; i < that.clients.childNodes.length; i++){
				var client = that.clients.childNodes[i];
				if(client.tagName){
					client.style.display = (j == that.n ? '' : 'none');

					var classTemp = client.className.split(' ');
					for (k = 0; k < classTemp.length; k++){
						if(m = classTemp[k].match(/^(.*)_hidden$/)){
							classTemp[k] = m[1];
						}
					}
					client.className = classTemp.join(' ');

					if(j == that.n && that.arr){
						var imgs = client.getElementsByTagName('img');

						for(var k = 0; k < imgs.length; k++){
							if(!imgs[k].src || imgs[k].src.match('space.gif')){
								imgs[k].src = that.arr[j][k];
							}
						}
					}

					j++;
				}
			}
		}
	}

	this.caller = function (){
		if(that.timer){
			clearTimeout(that.timer);
			that.timer = 0;
		}

		if(!arguments[0]){
			that.n += that.a;
			that.changePage();
		}

		that.timer = setTimeout(that.caller, 3000);
	};

	var reg = new RegExp(this.tabtype, 'i');
	var k = 0, tab, oldonmouseover = new Array;
	var tablist = this.tabs.getElementsByTagName(tabtype);
	for(var i = 0; i < tablist.length; i++){
		tab = tablist[i];
		if(tab.tagName && reg.test(tab.tagName) && tab.innerHTML){
			if(tab.onmouseover){
				oldonmouseover[i] = tab.onmouseover;
			}
			eval('tab.onmouseover = function (){' + (tab.onmouseover ? 'oldonmouseover[' + i + ']();' : '') + 'that.disable();that.changePage(' + k +  '); }');
			tab.onmouseout = this.enable;
			k++;
		}
	}

	if(opt.clientEvent)
	{
		k = 0;
		var clientslist = document.getElementById(clients).childNodes;
		for(var i = 0; i < clientslist.length; i++){
			var client = clientslist[i];
			if(client.tagName){
				if(client.onmouseover){
					oldonmouseover[i] = client.onmouseover;
				}
				eval('client.onmouseover = function (){' + (client.onmouseover ? 'oldonmouseover[' + i + ']();' : '') + 'that.disable();that.changePage(' + k +  '); }');
				client.onmouseout = this.enable;
				k++;
			}
		}
	}

	this.total = k;
	this.n = 0;

	this.clients = document.getElementById(clients);
	this.clients.onmouseover = this.disable;
	this.clients.onmouseout = this.enable;

	if(this.autoChange){
		this.caller(true);
	}
}

function ShiftPager(navi, client, cfg){
	if(!navi || !client 
		|| !(this.naviObj = document.getElementById(navi))
		|| !(this.clientObj = document.getElementById(client))){
		return;
	}

	if(!this.naviObj.style.postion){
		this.naviObj.style.position = 'relative';
	}

	if(cfg.naviTag){
		this.navis = this.naviObj.getElementsByTagName(cfg.naviTag);
	}else{
		var naviChildren = this.naviObj.childNodes;

		this.navis = new Array;
		for(var i = 0; i < naviChildren.length; i++){
			if(naviChildren[i].nodeType == 1){
				this.navis.push(naviChildren[i]);
			}
		}
	}

	if(cfg.clientTag){
		this.clients = this.clientObj.getElementsByTagName(cfg.clientTag);
	}else{
		var clientChildren = this.clientObj.childNodes;

		this.clients = new Array;
		for(var i = 0; i < clientChildren.length; i++){
			if(clientChildren[i].nodeType == 1){
				this.clients.push(clientChildren[i]);
			}
		}
	}

	if(!cfg){
		cfg = {};
	}

	this.cfg = cfg;

	if(!this.cfg.totalHeight){
		this.cfg.totalHeight = this.naviObj.clientHeight;
	}

	if(!this.cfg.naviHeight){
		this.cfg.naviHeight = this.navis[0].offsetHeight;
	}

	this.bIndex = 0;
	for(var i = 0; i < this.navis.length; i++){
		this.navis[i].style.position = 'absolute';
		this.navis[i].style.top = ((i == 0) ? 0 : this.cfg.totalHeight - (this.navis.length - i) * this.cfg.naviHeight) + 'px';
		
		this.clients[i].style.zIndex = (i == 0) ? 25 : 0;
		this.clients[i].style.display = '';
		this.clients[i].style.top = this.cfg.naviHeight * (i + 1) + 'px';
	}

	if(!this.cfg.speed){
		this.cfg.speed = 30;
	}

	if(!this.cfg.frequency){
		this.cfg.frequency = 60;
	}

	this.timer = 0;
	this.status = 0;
	this.cur = 0;

	var that = this;

	this.changePage = function (){
		if(that.status == 0 && arguments.length > 0){
			if(arguments[0] == that.cur){
				return;
			}else{
				that.next = arguments[0];
				if(!that.clients[that.next])
				{
					return;
				}
				that.naviObj.style.zIndex = 100;
				that.clients[that.next].style.zIndex = (that.next > that.cur) ? 30 : 10;
				that.status = 1;
			}
		}

		var end = false;
		var offset, top;

		if(that.next > that.cur){
			if(that.navis[that.cur + 1].offsetTop < that.navis[that.cur].offsetTop + that.cfg.naviHeight + that.cfg.speed){
				offset = that.navis[that.cur + 1].offsetTop - that.navis[that.cur].offsetTop - that.cfg.naviHeight;
				end = true;
			}else{
				offset = that.cfg.speed;
			}

			for(var i = that.cur + 1; i <= that.next; i++){
				top = parseInt(that.navis[i].style.top);
				that.navis[i].style.top = (top - offset) + 'px';
				that.navis[i].style.zIndex = 100;
			}

			that.clients[that.next].style.top = (top - offset + that.cfg.naviHeight) + 'px';
		}else{
			var bottom = ((that.cur == that.navis.length - 1) ? that.cfg.totalHeight : that.navis[that.cur + 1].offsetTop) - that.cfg.naviHeight;

			if(that.navis[that.cur].offsetTop > bottom - that.cfg.speed){
				offset = bottom - that.navis[that.cur].offsetTop;
				end = true;
			}else{
				offset = that.cfg.speed;
			}

			for(var i = that.next + 1; i <= that.cur; i++){
				top = parseInt(that.navis[i].style.top);
				that.navis[i].style.top = (top + offset) + 'px';
			}

			that.clients[that.cur].style.top = (top + offset + that.cfg.naviHeight) + 'px';
		}

		if(end){
			that.clients[that.cur].style.zIndex = 0;
			that.cur = that.next;
			that.status = 0;
			that.clients[that.cur].style.zIndex = 20;
			that.naviObj.style.zIndex = 15;
		}else{
			that.timer = setTimeout(that.changePage, 1000 / that.cfg.frequency);
		}
	}

	for(var i = 0; i < this.navis.length; i++){
		eval('that.navis[i].onclick = function (){that.changePage(' + i + ');}');
	}
}

function goodsNumber(num){
	var that = this;

	this.caller = function (){
		that.t = 0;

		changePrice();
	};

	this.refresh = function (num){
		if(num != 0){
			if(that.t){
				clearTimeout(this.t);
				that.t = 0;
			}

			var oldNum = parseInt(document.getElementById('number').value);
			if(oldNum + num > 0){
				document.getElementById('number').value = oldNum + num;
			}

			that.t = setTimeout(that.caller, 500);
			document.getElementById('ECS_GOODS_AMOUNT').innerHTML = '?';
		}

		document.getElementById('strong_number').innerHTML = document.getElementById('number').value;
	};
}

function showGallery(goods_id){
	if(goods_id){
		if(typeof(hideImage) == 'function'){
			hideImage();
		}
		var g = document.getElementsByTagName('div')[0];
		/*g.style.overflow = 'hidden';
		g.style.height = document.documentElement.clientHeight + 'px';*/
		g.style.zIndex = 50;

		var d = document.getElementById('overlay_back');
		d.style.width = document.documentElement.clientWidth + 'px';
		d.style.height = document.documentElement.scrollHeight + 'px';
		d.style.display = 'block';
		d.onclick = function (){
			showGallery(0);
		}


		var ifrwrap = document.getElementById('comb_goods_gallery');
		ifrwrap.style.display = 'block';
		ifrwrap.style.left = Math.round((document.documentElement.clientWidth - 40 - 340) / 2) + 'px';
		ifrwrap.style.top = (document.documentElement.scrollTop || window.pageYOffset || 0) + Math.round((document.documentElement.clientHeight - 40 - 550) / 2) + 'px';

		var ifr = ifrwrap.getElementsByTagName('iframe')[0];
		ifr.src = '/gallery.php?id=' + goods_id;


		var sels = document.getElementsByTagName('select');
		for(var i = 0; i < sels.length; i++){
			sels[i].style.visibility = 'hidden';
		}
	}else{
		var g = document.getElementsByTagName('div')[0];
		g.style.overflow = '';
		g.style.height = '';
		g.style.zIndex = 100;

		var d = document.getElementById('overlay_back');
		d.style.display = 'none';

		var ifr = document.getElementById('comb_goods_gallery');
		ifr.style.display = 'none';

		var sels = document.getElementsByTagName('select');
		for(var i = 0; i < sels.length; i++){
			sels[i].style.visibility = '';
		}
	}
}

function showSize(goods_id){
	if(goods_id){
		if(typeof(hideImage) == 'function'){
			hideImage();
		}
		var g = document.getElementsByTagName('div')[0];
		/*g.style.overflow = 'hidden';
		g.style.height = document.documentElement.clientHeight + 'px';*/
		g.style.zIndex = 50;

		var d = document.getElementById('overlay_back');
		d.style.width = document.documentElement.clientWidth + 'px';
		d.style.height = document.documentElement.scrollHeight + 'px';
		d.style.display = 'block';
		d.onclick = function (){
			showSize(0);
		}


		var ifrwrap = document.getElementById('comb_goods_size_' + goods_id);
		ifrwrap.style.left = Math.round((document.documentElement.clientWidth - 445) / 2) + 'px';
		ifrwrap.style.top = (document.documentElement.scrollTop || window.pageYOffset || 0) + Math.round((document.documentElement.clientHeight - 504) / 2) + 'px';
		ifrwrap.style.display = 'block';

		var sels = document.getElementsByTagName('select');
		for(var i = 0; i < sels.length; i++){
			sels[i].style.visibility = 'hidden';
		}
	}else{
		var g = document.getElementsByTagName('div')[0];
		g.style.overflow = '';
		g.style.height = '';
		g.style.zIndex = 100;

		var d = document.getElementById('overlay_back');
		d.style.display = 'none';

		var wnd = document.getElementsByTagName('div');
		for(i = 0; i < wnd.length; i++){
			if(wnd[i].id && wnd[i].id.match(/^comb_goods_size_\d+/))
			{
				wnd[i].style.display = 'none';
			}
		}

		var ifr = document.getElementById('comb_goods_gallery');
		ifr.style.display = 'none';

		var sels = document.getElementsByTagName('select');
		for(var i = 0; i < sels.length; i++){
			sels[i].style.visibility = '';
		}
	}
}

function goodsSelectAttr(obj){
	var sel = obj.parentNode.getElementsByTagName('select')[0];
	if(!sel){
		return;
	}


	for(var i = 0; i < sel.options.length; i++){
		if(sel.options[i].innerHTML == (obj.alt ? obj.alt : obj.innerHTML)){
			sel.selectedIndex = i;
			break;
		}
	}

	var objs = obj.parentNode.getElementsByTagName('img');
	for(var i = 0; i < objs.length; i++){
		if(objs[i].nodeType == 1 && objs[i].className.match('attr')){
			if(objs[i] != obj){
				objs[i].className = 'attr';
			}else{
				objs[i].className = 'attr hot';
			}
		}
	}

	var objs = obj.parentNode.getElementsByTagName('span');
	for(var i = 0; i < objs.length; i++){
		if(objs[i].nodeType == 1 && objs[i].className.match('attr')){
			if(objs[i] != obj){
				objs[i].className = 'attr';
			}else{
				objs[i].className = 'attr hot';
			}
		}
	}
}

if(location.toString().match(/article\/\d+\.html/)){
	addLoadEvent(function (){
		var anchor;
		if(anchor = location.toString().match(/#([0-9a-z]+)$/i)){
			var objs = document.getElementsByName(anchor[1]);
			for(var i = 0; i < objs.length; i++){
				if(objs[i].tagName.toLowerCase() == 'a'){
					break;
				}
			}

			if(i < objs.length){
				var parent = objs[i].parentNode;
				do{
					if(parent.onmouseover){
						parent.onmouseover();
						break;
					}
					parent = parent.parentNode;
				}while(parent)
			}

			if(parent != objs[i].parentNode){
				location = location;
			}
		}
	});
}

function chooseFace(goods_id){
	var obj = document.getElementById('goods_face');
	var ipts = obj.getElementsByTagName('input');

	for(var i = 0; i < ipts.length; i++){
		if(ipts[i].checked){
			Ajax.call('/goods.php', 'act=choose_face&id=' + goods_id + '&face_id=' + ipts[i].value, chooseFaceResponse, 'POST', 'JSON');
			return;
		}
	}

	Ajax.call('/goods.php', 'act=choose_face&id=' + goods_id + '&face_id=', chooseFaceResponse, 'POST', 'JSON');
}

function chooseFaceResponse(res){
	if(res.confirm){
		if(confirm('登陆后才能投票，是否现在登陆？')){
			location = '/user.php?back_act=' + encodeURIComponent('/goods/' + res.goods_id + '.html');
			return;
		}else{
			return;
		}
	}

	if(res.message){
		alert(res.message);
	}

	if(res.page){
		var obj = document.getElementById('goods_face');
		obj.innerHTML = res.page;
	}
}

function writeRange(){
	var cfg = {tag: 'li', hot: 0, num: 0, src: false, dest: false, clear: false}, i, src, dest, str = '', tag;
	if(arguments.length > 0 && typeof(arguments[0]) == 'object'){
		for(i in arguments[0]){
			cfg[i] = arguments[0][i];
		}
	}else{
		return;
	}

	if(cfg.src){
		src = document.getElementById(cfg.src);
		if(typeof(src) == 'undefined' || typeof(src.childNodes) == 'undefined'){
			return;
		}

		cfg.num = 0;
		for(i = 0; i < src.childNodes.length; i++){
			if(src.childNodes[i].nodeType == 1){
				cfg.num++;
			}
		}
	}

	if(cfg.dest){
		dest = document.getElementById(cfg.dest);
		if(typeof(dest) == 'undefined'){
			return;
		}

		if(!cfg.clear)
			writeRange_dest:
			while(dest.childNodes.length > 0){
				for(i = 0; i < dest.childNodes.length; i++){
					if(dest.childNodes[i].nodeType == 1){
						dest = dest.childNodes[i];
						continue writeRange_dest;
					}
				}
				break;
			}
	}

	if(cfg.dest && cfg.clear){
		while(dest.childNodes.length > 0){
			dest.removeChild(dest.firstChild);
		}
	}

	for(i = 0; i < cfg.num; i++){
		if(dest){
			tag = document.createElement(cfg.tag);
			tag.innerHTML = i + 1;
			if(i == cfg.hot){
				tag.className = 'hot';
			}
			dest.appendChild(tag);
			
		}else{
			document.write('<' + cfg.tag + (i == cfg.hot ? ' class="hot"' : '') + '>' + (i + 1) + '</' + cfg.tag + '>');
		}
	}
}
