function open3D(url,loc,X,Y) {
    newwin = window.open(url,loc,'width='+X+',height='+Y+',resizable=no,scrollbars=no,status=no');
}

function newImage(arg) {
	if (document.images) {
		rslt = new Image();
		rslt.src = arg;
		return rslt;
	}
}

function changeImages() {
	if (document.images && (preloadFlag == true)) {
		for (var i=0; i<changeImages.arguments.length; i+=2) {
			document[changeImages.arguments[i]].src = changeImages.arguments[i+1];
		}
	}
}


/* Get the product model and it's category by model string
   Writen by Len
*/
function getModelTree(model_string){
	var lis = document.getElementsByTagName('li');
	var nodes = [];
	for (var li = 0; li < lis.length; li++) {
		  if (lis[li].id.search('category_name') == -1) continue;
		  var as = lis[li].getElementsByTagName('a');
		  var hs = lis[li].getElementsByTagName('h4');
			for (var h = 0 ; h<hs.length; h++){
			nodes[0]=hs[h].id;
			}
			for (var a = 0 ; a<as.length; a++){
			if(as[a].id != "" && model_string.toLowerCase().search(as[a].id.toLowerCase()) != -1){
			//if(as[a].id != "" && model_string.toLowerCase()==as[a].id.toLowerCase() ){
				nodes[1] = as[a].id; //alert(nodes[0]);alert(nodes[1]);
				return nodes;
			}
		  }
		  
		 // alert(as.length);alert(hs.length);
	}
	
}

/* Highlight model by model string
   Writen by Len
*/

/*function modelHighlight(model_string){
	var cat = getModelTree(model_string)[0];
	var ul = document.getElementById("ul_"+cat);
	(ul.style.display="");
	ul.parentNode.className="on";
	var lis = ul.getElementsByTagName('li');
	for (var li=0; li < lis.length; li++){
		if(lis[li].id != "" && model_string.toLowerCase().search(lis[li].id.toLowerCase()) != -1){
		//if(lis[li].id != "" && model_string.toLowerCase()==lis[li].id.toLowerCase() ){
			lis[li].className="on";
			return;
			}
	}

}
*/
	
	
function modelHighlight(model_string){
	var cat = getModelTree(model_string)[0];
	var uls = document.getElementsByTagName('ul');
    for (ul=0;ul<uls.length ;ul++ )
    {
		if (uls[ul].id != "ul_"+cat) continue;
		var lis = uls[ul].getElementsByTagName('li');
		for (var li=0; li < lis.length; li++){
			if(lis[li].id != "" && model_string.toLowerCase().search(lis[li].id.toLowerCase()) != -1){
			//if(lis[li].id != "" && model_string.toLowerCase()==lis[li].id.toLowerCase() ){
				uls[ul].style.display="";
				uls[ul].parentNode.className="on";
				uls[ul].parentNode.parentNode.style.display="inline";
				uls[ul].parentNode.parentNode.parentNode.className="on";
				if(uls[ul].parentNode.parentNode.parentNode.id=="museum")
					{
						document.getElementById("left_product_nav").className="";
						document.getElementById("left_category").style.display="none";
					}
				lis[li].className="on";
				return;
				}
		}
    }


}


/*Get all the category names from the left navigation
  written by Len
*/

function getAllCategoryNames(){
	var ul = document.getElementById("left_category");
    var lis = ul.getElementsByTagName('li');
	var cats = [];
	var i = 0;
	for (var li = 0; li < lis.length; li++) {
		  if (lis[li].id.search('category_name') == -1) continue;
		  var hs = lis[li].getElementsByTagName('h4');
			for (var h = 0 ; h<hs.length; h++){
			cats[i]=hs[h].id;
			i++;
			}
		  }
		  return cats;
}		  

/*Get all the model names & links of same category from the left navigation
  written by Len
*/
function getAllCatModels(catName){
    var ul_lv1 = document.getElementById("left_category");
	var uls = ul_lv1.getElementsByTagName('ul');
	var models = [];
	var model_names = [];  // Store model names of same category
	var model_links = [];  // Store model links of same category
	var model_imgs = [];   // Store model images of same category
	var model_newmarks = [];  // Store "new" marks of same category
	var i = 0;
	catName = "ul_"+catName;
	for (var ul = 0; ul < uls.length; ul++) {
		  if (uls[ul].id != catName ) continue;
		  var as = uls[ul].getElementsByTagName('a');
			for (var a = 0 ; a<as.length; a++){
			model_names[i]=as[a].id;
			model_links[i]=as[a].href;
			i++;
			}
			var imgs = uls[ul].getElementsByTagName('img');
			i=0;
			for (var img = 0 ; img<imgs.length; img++){
			model_imgs[i]=imgs[img].src;
			i++;
			}
			var newmarks = uls[ul].getElementsByTagName('span');
			i=0;
			for (var n = 0 ; n<newmarks.length; n++){
			model_newmarks[i]=newmarks[n].className;
			i++;
			}
		  }
		  models[0]= model_names;
		  models[1]= model_links;
		  models[2]= model_imgs;
		  models[3]= model_newmarks;
		  return models;
}

/* Highlight left column navigation
   Writen by photoman
*/

function columnHighlight(model_string){
	
	if(ul = document.getElementById("left_mininav")){
		(ul.style.display="");
		var lis = ul.getElementsByTagName('li');
		for (var li=0; li < lis.length; li++){
			if(lis[li].id != "" && model_string.toLowerCase().search(lis[li].id.toLowerCase()) != -1){
				lis[li].className="on";
				return;
				}
		}
	}

	if(ul = document.getElementById("left_nav")){
		(ul.style.display="");
		var lis = ul.getElementsByTagName('li');
		for (var li=0; li < lis.length; li++){
			if(lis[li].id != "" && model_string.toLowerCase().search(lis[li].id.toLowerCase()) != -1){
				lis[li].className="on";
				document.getElementById("left_product_nav").className="";
				return;
				}
		}
	}

}

/* Highlight top navigation
   Writen by Len
*/

function topHighlight(top_string){
	
	if(top_nav = document.getElementById(top_string)){
				if(top_string.search("top_nav_product")!=-1){
					top_nav.className="first on";
					return;
					}else
				{
					top_nav.className="on";
					top_nav_p = document.getElementById("top_nav_product");
					top_nav_p.className="first";

					return;
				}
	}else
	{
		top_nav_p = document.getElementById("top_nav_product");
		top_nav_p.className="first";
	}
}


/* Photo Gallery filter 
   Written by Len
   */
function filter(){
	if(document.getElementById('filter').value=='P'){
		document.getElementById('products_filter').style.display='';
		document.getElementById('company_filter').style.display='none'
		}else
	{
		document.getElementById('products_filter').style.display='none';
		document.getElementById('company_filter').style.display=''
	}
}


String.prototype.trim= function()
    {
        //去掉左右的空格,全角
        return this.replace(/(^[\s|　]*)|([\s|　]*$)/g,"");
    }
    function isEmail(str) 
    { 
        var email = str; 
        var pattern = /^([a-zA-Z0-9_\.-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/; 
        flag = pattern.test(email); 
        if(flag) 
            return true; 
        else 
            return false; 
    }
    function isDate(str){ 
        var reg = /^(\d+)-(\d{1,2})-(\d{1,2})$/; 
        var r = str.match(reg); 
        if(r==null)return false; 
        r[2]=r[2]-1; 
        var d= new Date(r[1], r[2],r[3]); 
        if(d.getFullYear()!=r[1])return false; 
        if(d.getMonth()!=r[2])return false; 
        if(d.getDate()!=r[3])return false; 
        return true;
    } 
    function isMobile(str)
    {
        var sMobile = str; 
        var pattern = /^(13)(\d{9})$/; 
        flag = pattern.test(sMobile); 
        if(flag) 
            return true; 
        else 
            return false; 
    }
	function hideAllErr()
	{				
		var errObj = document.getElementsByName("error_msg");
		//alert(errObj.length);
		for(var i=0;i<errObj.length;i++)
		{
			errObj[i].style.display="none";		
		}
	}
	function showErr(str)
	{
		var objId = "err_" + str ;
		var errObj = document.getElementById(objId);
		errObj.parentNode.style.display="";		
	}
	function chkOne(colId)
	{
		hideAllErr();
		if (document.getElementById(colId).value=="")
		{
			showErr(colId);

			return false;
		}
	}
	function chkOneEmail(colId)
	{
		hideAllErr();
		if (!isEmail(document.getElementById(colId).value))
		{
			showErr(colId);

			return false;
		}
	}
    function chkFrmTech()
    {

		hideAllErr();
			
			if (document.getElementById("first_name").value=="")
            {
				showErr("first_name");
                document.getElementById("first_name").focus();
                return false;
            }
            if (document.getElementById("last_name").value=="")
            {
                showErr("last_name");
                document.getElementById("last_name").focus();
                return false;
            }
            if (!isEmail(document.getElementById("email").value))
            {
                showErr("email");
                document.getElementById("email").focus();
                return false;
            }

            if (document.getElementById("shop_country").value=="")
            {
                showErr("shop_country");
                document.getElementById("shop_country").focus();
                return false;
            }
            if (document.getElementById("serial_num").value=="")
            {
                showErr("serial_num");
                document.getElementById("serial_num").focus();
                return false;
            }
            if (document.getElementById("model").value=="true")
            {
				showErr("model");
                document.getElementById("model").focus();
                return false;
            }

            if (document.getElementById("subject").value=="")
            {
                showErr("subject");
                document.getElementById("subject").focus();
                return false;
            }
            if (document.getElementById("comment").value=="")
            {
                showErr("comment");
                document.getElementById("comment").focus();
                return false;
            }
       
        return true;
    }
    function chkFrmNonTech()
    {

		hideAllErr();
			
			if (document.getElementById("first_name").value=="")
            {
				showErr("first_name");
                document.getElementById("first_name").focus();
                return false;
            }
            if (document.getElementById("last_name").value=="")
            {
                showErr("last_name");
                document.getElementById("last_name").focus();
                return false;
            }
            if (!isEmail(document.getElementById("email").value))
            {
                showErr("email");
                document.getElementById("email").focus();
                return false;
            }

            if (document.getElementById("feedback_type").value=="")
            {
                showErr("feedback_type");
                document.getElementById("feedback_type").focus();
                return false;
            }

            if (document.getElementById("shop_country").value=="")
            {
                showErr("shop_country");
                document.getElementById("shop_country").focus();
                return false;
            }

            if (document.getElementById("subject").value=="")
            {
                showErr("subject");
                document.getElementById("subject").focus();
                return false;
            }
            if (document.getElementById("comment").value=="")
            {
                showErr("comment");
                document.getElementById("comment").focus();
                return false;
            }
       
        return true;
    }
    function chkFrmOKTech()
    {
        if (chkFrmTech())
        {
			// document.getElementById("registration").onsubmit=true;
            document.getElementById("registration").submit();
        }
    }
    function chkFrmOKNonTech()
    {
        if (chkFrmNonTech())
        {
			// document.getElementById("registration").onsubmit=true;
            document.getElementById("registration").submit();
        }
    }

/*	EventCache Version 1.0
	Copyright 2005 Mark Wubben

	Provides a way for automagically removing events from nodes and thus preventing memory leakage.
	See <http://novemberborn.net/javascript/event-cache> for more information.
	
	This software is licensed under the CC-GNU LGPL <http://creativecommons.org/licenses/LGPL/2.1/>
*/

/*	Implement array.push for browsers which don't support it natively.
	Please remove this if it's already in other code */
if(Array.prototype.push == null){
	Array.prototype.push = function(){
		for(var i = 0; i < arguments.length; i++){
			this[this.length] = arguments[i];
		};
		return this.length;
	};
};

/*	Event Cache uses an anonymous function to create a hidden scope chain.
	This is to prevent scoping issues. */
var EventCache = function(){
	var listEvents = [];
	
	return {
		listEvents : listEvents,
	
		add : function(node, sEventName, fHandler, bCapture){
			listEvents.push(arguments);
		},
	
		flush : function(){
			var i, item;
			for(i = listEvents.length - 1; i >= 0; i = i - 1){
				item = listEvents[i];
				
				if(item[0].removeEventListener){
					item[0].removeEventListener(item[1], item[2], item[3]);
				};
				
				/* From this point on we need the event names to be prefixed with 'on" */
				if(item[1].substring(0, 2) != "on"){
					item[1] = "on" + item[1];
				};
				
				if(item[0].detachEvent){
					item[0].detachEvent(item[1], item[2]);
				};
				
				item[0][item[1]] = null;
			};
		}
	};
}();





/* begin headnavigation animated menu 
   Written by Frederik Van Zande, guided by the sitepoint DHTMl book
*/
sM = {
  init: function() {
    var uls = document.getElementsByTagName('ul');
    for (var u = 0; u < uls.length; u++) {
       if ((uls[u].id.search('head_nav') == -1) && (uls[u].id.search('left_category') == -1) ) continue;
      var lis = uls[u].getElementsByTagName('li');
      for (var i = 0; i < lis.length; i++) {
        var node = lis[i];
        if (node.nodeName.toLowerCase() == 'li' &&
            node.getElementsByTagName('ul').length > 0) {
			for (var j=0;j<node.getElementsByTagName('ul').length;j++){
				node.getElementsByTagName('ul')[j].h=1;
				}
          //sM.addEvent(node, 'mouseover', sM.getMoverFor(node), false);
          //sM.addEvent(node, 'mouseout', sM.getMoutFor(node), false);
          if (uls[u].id.search('left_category')!=-1){
				sM.addEvent(node, 'click', sM.getMclickFor(node), false);
		   }else{
				sM.addEvent(node, 'mouseover', sM.getMoverFor(node), false);
                sM.addEvent(node, 'mouseout', sM.getMoutFor(node), false);
			}
			node.getElementsByTagName('a')[0].className += ' subheader';
          node.isIn = false;
        }
      }
    }
  },
  
   getMclickFor: function(node) {
    return function(e) { sM.mclick(e, node); };
  },
  getMoverFor: function(node) {
    return function(e) { sM.mover(e, node); };
  },
  
  getMoutFor: function(node) {
    return function(e) { sM.mout(e, node); };
  },

  mclick: function(e, targetElement) {
    var el = window.event ? targetElement : e ? e.currentTarget : null;
    if (!el) return;
    clearTimeout(el.outTimeout);
      for (var i = 0; i < el.childNodes.length; i++) {
        var node = el.childNodes[i];
        if (node.nodeName.toLowerCase() == 'ul') {
          // Stop current animation
          clearInterval(node.intervalID);
          // Assign initial visible area
          node.clippingRectangle = [0, 0, 24, 0];
          // Save full width and height
          node.style.display = 'block';
          node.savedOW = node.offsetWidth;
          node.savedOH = node.offsetHeight;
          node.style.display = 'none';
          // Start animation
		  if (node.h == 1){
				node.intervalID = setInterval(function() { sM.showMenu(node); }, 8);
				node.h = 0;
				el.className='on';
			}else{
				node.intervalID = setInterval(function() { sM.hideMenu(node); }, 8);
				node.h = 1;
				el.className='';
			}
         
          break;
        }
      }
    el.className += '';   // Force IE to recompute styles
  },

  mover: function(e, targetElement) {
    var el = window.event ? targetElement : e ? e.currentTarget : null;
    if (!el) return;
    clearTimeout(el.outTimeout);
    if (!el.isIn) {
      for (var i = 0; i < el.childNodes.length; i++) {
        var node = el.childNodes[i];
        if (node.nodeName.toLowerCase() == 'ul') {
          // Stop current animation
          clearInterval(node.intervalID);
          // Assign initial visible area
          node.clippingRectangle = [0, 0, 24, 0];
          // Save full width and height
          node.style.display = 'block';
          node.savedOW = node.offsetWidth;
          node.savedOH = node.offsetHeight;
          node.style.display = 'none';
          // Start animation
				node.intervalID = setInterval(function() { sM.showMenu(node); }, 18);
          break;
        }
      }
    }
    el.isIn = true;
    el.className += '';   // Force IE to recompute styles
  },

  mout: function(e, targetElement) {
    var el = window.event ? targetElement : e ? e.currentTarget : null;
    if (!el) return;
    el.outTimeout = setTimeout(function() { sM.mout2(el); }, 100);
  },

  mout2: function(el) {
    for (var i = 0; i < el.childNodes.length; i++) {
      var node = el.childNodes[i];
      if (node.nodeName.toLowerCase() == 'ul') {
        // Stop current animation
        clearInterval(node.intervalID);
        // Start animation
        node.intervalID = setInterval(function() { sM.hideMenu(node); }, 10);
        break;
      }
    }
    el.isIn = false;
  },
  
  showMenu: function(el) {
    el.clippingRectangle[1] = el.savedOW;
    if (el.clippingRectangle[1] >= el.savedOW) {
      el.clippingRectangle[1] = el.savedOW;
      el.clippingRectangle[2] += 15;
      if (el.clippingRectangle[2] >= el.savedOH) {
        el.clippingRectangle[2] = el.savedOH;
        clearInterval(el.intervalID);
        // reset the clip: browser-specific
        if (document.all && !window.opera) {
          el.style.clip = 'rect(auto)';
        } else {
          el.style.clip = '';
        }
        //return;
      }
    }
    el.style.clip = 'rect(' + el.clippingRectangle.join('px ') + 'px)';
    el.style.display = 'inline';
  },

  hideMenu: function(el) {
    el.clippingRectangle[2] -= 10;
    if (el.clippingRectangle[2] <= 0) {
      el.clippingRectangle[2] = 10;
      if (el.clippingRectangle[1] <= el.savedOW) {
        clearInterval(el.intervalID);
        // reset the clip: browser-specific
        if (document.all && !window.opera) {
          el.style.clip = 'rect(auto)';
        } else {
          el.style.clip = '';
        }
        el.style.display = 'none';
        return;
      }
    }
    el.style.clip = 'rect(' + el.clippingRectangle.join('px ') + 'px)';
  },

  addEvent: function(elm, evType, fn, useCapture) {
    // cross-browser event handling for IE5+, NS6 and Mozilla
    // By Scott Andrew
    if (elm.addEventListener) {
      elm.addEventListener(evType, fn, useCapture);
      return true;
    } else if (elm.attachEvent) {
      var r = elm.attachEvent('on' + evType, fn);
      EventCache.add(elm, evType, fn);
      return r;
    } else {
      elm['on' + evType] = fn;
    }
  }
};

sM.addEvent(window, 'load', sM.init, false);
sM.addEvent(window, 'unload', EventCache.flush, false);

/*
goto1 written by photoman
*/
function goto1(url)
{
	window.location= url;
}

/*
Get file suffix
Written by Len
*/

function getSuffix(filename){
	s = filename.lastIndexOf(".")+1;
	return (filename.substr(s).toUpperCase());
}

/*
replace string 
Written by jesson
*/
function ReplaceMystr(str1){
	//var ra, rd;                  		 // 声明变量。
	//ra = ;          				 // 创建正则表达式模式
	//rd = /=/g;          				 // 创建正则表达式模式
	newstr1 = str1.replace(/\&/g, "_A_");    // 用 "&" 替换 "_a_"
	mystr1=newstr1.replace(/\=/g,"_D_");     // 用 "=" 替换 "_d_"
	return(mystr1);               	    // 返回替换后的字符串
}	