if (typeof XMLHttpRequest == 'undefined') {
	XMLHttpRequest = function () {
		var msxmls = ['MSXML3', 'MSXML2', 'Microsoft'];
		for (var i=0; i < msxmls.length; i++) {
			try {
				return new ActiveXObject(msxmls[i]+'.XMLHTTP');
			} 
			catch (e){ 
			}
		}
		throw new Error("No XML component installed!")
	}
}
//trim empty char
String.prototype.trim= function() {     
    return this.replace(/(^\s*)|(\s*$)/g, "");  
}
String.prototype.replaceAll  = function(s1,s2){   
	return this.replace(new RegExp(s1,"gm"),s2);   
}
//Check is empty or not
function isEmpty(s){ 
	s = s.trim();
    for (var i=0;i<s.length;i++){
      if (s.charAt(i) != " " ) {
		return false; 
	  }
    } 
    return true;
}
function formatFloat(src, pos){     
	return Math.round(src*Math.pow(10, pos))/Math.pow(10, pos); 
}
function formatUrl(url){
	url = url.replaceAll(" ","-");
	while(url.indexOf("--")>-1){
		url = url.replaceAll("--","-");
	}
	url = url.replaceAll("\/-","/");
	return url; 
}
//Check date format (yyyy-mm-dd)
function isDate(str){
  var re=/^(\d{4})-(\d{1,2})-(\d{1,2})$/  ;
  if(!re.test(str))return   false;   
  var r=str.match(re);   
  var d=new Date(r[1],r[2]-1,r[3]);   
  return d.getFullYear()==r[1]&&d.getMonth()==r[2]-1&&d.getDate()==r[3]; 
}
function isEMSTrackingNo(str){
	var reg = /^E(E|S)([0-9]{9})CN$/i;
	return reg.test(str);
}
function isEmail(emailStr) {
   var emailPat=/^(.+)@(.+)$/;
   var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]";
   var validChars="\[^\\s" + specialChars + "\]";
   var quotedUser="(\"[^\"]*\")";
   var ipDomainPat=/^(\d{1,3})[.](\d{1,3})[.](\d{1,3})[.](\d{1,3})$/;
   var atom=validChars + '+';
   var word="(" + atom + "|" + quotedUser + ")";
   var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
   var domainPat=new RegExp("^" + atom + "(\\." + atom + ")*$");
   var matchArray=emailStr.match(emailPat);
   if (matchArray == null) {
       return false;
   }
   var user=matchArray[1];
   var domain=matchArray[2];
   if (user.match(userPat) == null) {
       return false;
   }
   var IPArray = domain.match(ipDomainPat);
   if (IPArray != null) {
       for (var i = 1; i <= 4; i++) {
          if (IPArray[i] > 255) {
             return false;
          }
       }
       return true;
   }
   var domainArray=domain.match(domainPat);
   if (domainArray == null) {
       return false;
   }
   var atomPat=new RegExp(atom,"g");
   var domArr=domain.match(atomPat);
   var len=domArr.length;
   if ((domArr[domArr.length-1].length < 2) ||
       (domArr[domArr.length-1].length > 3)) {
       return false;
   }
   if (len < 2) {
       return false;
   }
   return true;
}
//Check is number or not
function isNumeric(s)
{
  var r,re;
  re = /\d*/i;    
  r = s.match(re);
  
  return r==s;
}

function isValidDateTime(dt){
	var reg = /^(19[0-9]{2}|[2-9][0-9]{3})-((0(1|3|5|7|8)|10|12)-(0[1-9]|1[0-9]|2[0-9]|3[0-1])|(0(4|6|9)|11)-(0[1-9]|1[0-9]|2[0-9]|30)|(02)-(0[1-9]|1[0-9]|2[0-9]))\x20(0[0-9]|1[0-9]|2[0-3])(:[0-5][0-9]){2}$/g;
	return reg.test(dt);
}
function moveUp(sourceSelect) {
    if (sourceSelect.length > 1) {
        var options = sourceSelect.options;

        // find which ones are selected...
        var selectedIds = new Array ();
        var index = 0;
        for (var i = 1; i < sourceSelect.length; i++) {
            if (options[i].selected) {
                selectedIds[index] = i;
                index++;
            }
        }

        // move each selected option up
        var selId;
        for (var i = 0; i < selectedIds.length; i++) {
            selId = selectedIds[i];
            privateMoveUp (options, selId);
            options[selId].selected = false;
            options[selId-1].selected = true;
        }

        sourceSelect.focus ();

        // invoke if the Slect Element has local function
        if (sourceSelect["onLocalMoveUp"])
            sourceSelect.onLocalMoveUp();
    }
}

function moveDown(sourceSelect) {
    if (sourceSelect.length > 1) {
        var options = sourceSelect.options;

        // find which ones are selected
        var selectedIds = new Array ();
        var index = 0;
        for (var i = sourceSelect.length-2; i >= 0; i--) {
            if (sourceSelect.options[i].selected) {
                selectedIds[index] = i;
                index++;
            }
        }

        // move each selected element down
        var selId;
        for (var i = 0; i < selectedIds.length; i++) {
            selId = selectedIds[i];
            privateMoveDown (options, selId);
            options[selId].selected = false;
            options[selId+1].selected = true;
        }

        sourceSelect.focus ();

        // invoke if the Slect Element has local function
        if (sourceSelect["onLocalMoveDown"])
            sourceSelect.onLocalMoveDown();
    }
}


function moveTop(sourceSelect) {
    var selIndex = sourceSelect.selectedIndex;

    if (sourceSelect.length > 1 && selIndex > 0) {
        var options = sourceSelect.options;

        for (var i = selIndex; i > 0; i--) {
            privateMoveUp (options, i);
        }

        sourceSelect.focus ();
        sourceSelect.selectedIndex = 0;

        // invoke if the Slect Element has local function
        if (sourceSelect["onLocalMoveTop"])
            sourceSelect.onLocalMoveTop();
    }
}

function moveBottom(sourceSelect) {
    var selIndex = sourceSelect.selectedIndex;

    // gots to have at least 2 items and something selected, but not the last one
    if (sourceSelect.length > 1 && selIndex > -1 && selIndex < sourceSelect.length - 1) {
        var options = sourceSelect.options;

        for (var i = selIndex; i < sourceSelect.length - 1; i++) {
            privateMoveDown (options, i);
        }

        sourceSelect.focus ();
        sourceSelect.selectedIndex = sourceSelect.length - 1;

        // invoke if the Slect Element has local function
        if (sourceSelect["onLocalMoveBottom"])
            sourceSelect.onLocalMoveBottom();
    }
}


/*
 * Do not call this function directly.
 * As it does NO bounds checking.
 * Please use the moveUp or moveTop calls.
 */
function privateMoveUp (options, index) {
    var newOption = new Option (options[index-1].text, options[index-1].value);
    options[index-1].text = options[index].text;
    options[index-1].value = options[index].value;
    options[index].text = newOption.text;
    options[index].value = newOption.value;
}

/*
 * Do not call this function directly.
 * As it does NO bounds checking.
 * Please use the moveDown or moveBottom calls.
 */
function privateMoveDown (options, index) {
    var newOption = new Option (options[index+1].text, options[index+1].value);
    options[index+1].text = options[index].text;
    options[index+1].value = options[index].value;
    options[index].text = newOption.text;
    options[index].value = newOption.value;
}

function addToCart(obj,id,retail_price,wholesale_price){
	var addedSign = "Added to Cart";
	if(obj.innerHTML.indexOf(addedSign)==-1){
		var size = "";
		var sltSize = document.getElementById("sz"+id);		
		if(sltSize!=null){
			size = sltSize.value;
			if(size==""){
				alert("Please select size.");
				sltSize.focus();
				return;
			}		
		}

		var xr = new XMLHttpRequest();	
		var url = "/cart/quick-add-to-cart-action.php?product_id=" + id + "&retail_price="+retail_price+ "&wholesale_price="+wholesale_price + "&size="+size;
		xr.open("GET",url,false);		
		xr.setRequestHeader("pragma","no-cache");
		xr.setRequestHeader("Cache-Control","no-cache, must-revalidate");	
		xr.send(null);
		var resText = xr.responseText.trim();
		if(resText.indexOf("Item")>-1){
			obj.innerHTML = "Added to Cart, <a href=\"/cart/my-cart.php\">See My Cart</a>.";
			document.getElementById("cart_summary").innerHTML = resText;
		}
		else{
			alert(resText);
		}
	}
}

function changePaymentMethod(quotation_id,payment_method,discount,objDiv){	
	var xr = new XMLHttpRequest();	
	var url = "/cart/change-payment-method-action.php?quotation_id=" + quotation_id + "&payment_method="+payment_method+"&discount="+discount;
	xr.open("GET",url,false);		
	xr.setRequestHeader("pragma","no-cache");
	xr.setRequestHeader("Cache-Control","no-cache, must-revalidate");		
	xr.send(null);
	var resHtml = xr.responseText.trim();
	//alert(resHtml);
	objDiv.innerHTML = resHtml;
}

function showOrderDetailHTML(quotation_id,hdn,objDiv){	
	var xr = new XMLHttpRequest();	
	var url = "/inc/get-order-detail.php?qid=" + quotation_id + "&hdn="+hdn;
	xr.open("GET",url,false);		
	xr.setRequestHeader("pragma","no-cache");
	xr.setRequestHeader("Cache-Control","no-cache, must-revalidate");		
	xr.send(null);
	var resHtml = xr.responseText.trim();
	objDiv.innerHTML = resHtml;
}

function setcontrolvalue( formindex,controlname,setvalue ){
	document.forms[formindex].elements[controlname].value = setvalue;
}

function getcontrolvalue( formindex,controlname ){
	return document.forms[formindex].elements[controlname].value;
}

function getScrollTop(){
    var scrollTop=0;
    if(document.documentElement&&document.documentElement.scrollTop){
        scrollTop=document.documentElement.scrollTop;
    }
    else if(document.body){
        scrollTop=document.body.scrollTop;
    }
    return scrollTop;
}


function copyToClipboard(txt){
	try{
		if(window.clipboardData) {
			window.clipboardData.setData("Text", txt);
		} else if(window.netscape) {
			netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
			var clip = Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interfaces.nsIClipboard);
			if(!clip) return;
			var trans = Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable);
			if(!trans) return;
			trans.addDataFlavor('text/unicode');
			var str = new Object();
			var len = new Object();
			var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);
			var copytext = txt;
			str.data = copytext;
			trans.setTransferData("text/unicode", str, copytext.length*2);
			var clipid = Components.interfaces.nsIClipboard;
			if (!clip) return false;
			clip.setData(trans, null, clipid.kGlobalClipboard);
		}
	}catch(e){}
}

function clearForm(frm){
	for(var i=0; i<frm.elements.length; i++) {
		var field_type = frm.elements[i].type.toLowerCase();
		switch(field_type) {
			case "hidden":
			case "submit":
			case "button":
			case "reset":
			break;

			case "text":
			case "password":
			case "textarea":
			frm.elements[i].value = "";
			break;

			case "radio":
			case "checkbox":
			if (frm.elements[i].checked) {
				frm.elements[i].checked = false;
			}
			break;
			case "select-one":
			case "select-multi":
			frm.elements[i].selectedIndex = -1;
			break;
			default:
			break;
		}
	}
}

function showDialog(url,title,width,height){
	var iTop=(window.screen.height-height)/2;
	var iLeft=(window.screen.width-width)/2;
	var property = "toolbar=no,scrollbars=yes,status=no,location=no,direction=no,resizeable=no,width="+width+",height="+height+",top="+iTop+",left="+iLeft;
	window.open(url,'win',property);
} 

function changeDomain(url, domain){
	var arr = url.split("/");
	url = url.replace(arr[2],domain);
	return url;
}

function showMoreDetails(){
    var btn = document.getElementById("btnMoreDetails");
	var div = document.getElementById("divMoreDetails");
	if(btn.innerHTML == "More Details..."){
		div.style.display = "block";
		btn.innerHTML = "Close X";
	}
	else{
		div.style.display = "none";
		btn.innerHTML = "More Details...";
	}
}
var shipping_country ="";
function setShippingCountry(slt){
	var country = slt.value;
	var xr = new XMLHttpRequest();	
	var url = "/product/set-shipping-country-action.php?shipping_country="+country;
	xr.open("GET",url,false);	
	xr.setRequestHeader("pragma","no-cache");
	xr.setRequestHeader("Cache-Control","no-cache, must-revalidate");	
	xr.send(null);
	var resText = xr.responseText.trim();
	if(resText==country){
		shipping_country = country;	
		if(document.getElementById("sltShippingCountry").value != shipping_country){
			document.getElementById("sltShippingCountry").value = shipping_country
		}
		if(document.location.href.indexOf("cart/my-cart.php")>-1){
			document.location.reload();
		}
	}
}

var closeBtn;
function alertWin(title, msg, w, h){
	var titleheight = "22px"; // 提示窗口标题高度
	var bordercolor = "#666699"; // 提示窗口的边框颜色
	var titlecolor = "#FFFFFF"; // 提示窗口的标题颜色
	var titlebgcolor = "#666699"; // 提示窗口的标题背景色
	var bgcolor = "#FFFFFF"; // 提示内容的背景色

	var iWidth = document.documentElement.clientWidth;
	var iHeight = document.documentElement.clientHeight;
	var bgObj = document.createElement("div");
	bgObj.style.cssText = "position:absolute;left:0px;top:0px;width:"+iWidth+"px;height:"+Math.max(document.body.clientHeight, iHeight)+"px;filter:Alpha(Opacity=40);opacity:0.40;background-color:#000000;z-index:101;";
	document.body.appendChild(bgObj);
	var msgObj=document.createElement("div");
	var scrollHeight = getScrollTop();
	msgObj.style.cssText = "position:absolute;font:11px 'Arial';top:"+((iHeight-h)/2+scrollHeight)+"px;left:"+(iWidth-w) /2+"px;width:"+w+"px;height:"+h+"px;text-align:center;border:1px solid "+bordercolor+";background-color:"+bgcolor+";padding:1px;line-height:22px;z-index:102;";
	document.body.appendChild(msgObj);

	var table = document.createElement("table");
	msgObj.appendChild(table);
	table.style.cssText = "margin:0px;border:0px;padding:0px;";
	table.cellSpacing = 0;
	var tr = table.insertRow(-1);
	var titleBar = tr.insertCell(-1);
	titleBar.style.cssText = "width:100%;height:"+titleheight+"px;text-align:left;padding:3px;margin:0px;font:bold 13px 'Arial';color:"+titlecolor+";border:1px solid " + bordercolor + ";cursor:move;background-color:" + titlebgcolor;
	titleBar.style.paddingLeft = "10px";
	titleBar.innerHTML = title;
	var moveX = 0;
	var moveY = 0;
	var moveTop = 0;
	var moveLeft = 0;
	var moveable = false;
	var docMouseMoveEvent = document.onmousemove;
	var docMouseUpEvent = document.onmouseup;
	titleBar.onmousedown = function() {
		var evt = getEvent();
		moveable = true;
		moveX = evt.clientX;
		moveY = evt.clientY;
		moveTop = parseInt(msgObj.style.top);
		moveLeft = parseInt(msgObj.style.left);
  
		document.onmousemove = function() {
			if (moveable) {
				var evt = getEvent();
				var x = moveLeft + evt.clientX - moveX;
				var y = moveTop + evt.clientY - moveY;
				if ( x > 0 &&( x + w < iWidth) && y > 0 && (y + h < iHeight) ) {
					msgObj.style.left = x + "px";
					msgObj.style.top = y + "px";
				}
			}
		};
		document.onmouseup = function () {
			if (moveable) {
				document.onmousemove = docMouseMoveEvent;
				document.onmouseup = docMouseUpEvent;
				moveable = false;
				moveX = 0;
				moveY = 0;
				moveTop = 0;
				moveLeft = 0;
			}
		};
	}

	closeBtn = tr.insertCell(-1);
	closeBtn.style.cssText = "cursor:pointer; padding:2px;background-color:" + titlebgcolor;
	closeBtn.innerHTML = "<span style='font-size:15pt; color:"+titlecolor+";'>×&nbsp;</span>";
	closeBtn.onclick = function(){
	   document.body.removeChild(bgObj);
	   document.body.removeChild(msgObj);
	}
	var msgBox = table.insertRow(-1).insertCell(-1);
	msgBox.style.cssText = "font:10pt 'Arial';";
	msgBox.colSpan = 2;
	msgBox.innerHTML = "<iframe frameborder='0' width='"+(w-20)+"' height='"+(h-20)+"' src=\""+msg+"\"></iframe>";

    // 获得事件Event对象，用于兼容IE和FireFox
    function getEvent() {
		return window.event || arguments.callee.caller.arguments[0];
    }
}	

function changeCurrency(slt,url){
	window.location.href="/product/set-currency-action.php?currency="+slt.value+"&referer_url=" + url;
}

function showBigPhoto(url,width,height){
	width = width + 20;
	height = height + 20;	
	var top = (screen.availHeight-height)/2;
	var left = (screen.availWidth-width)/2; 
	var property = "dialog=yes,modal=yes,width="+width+",height="+height+",top="+top+",left="+left+",resizable=no,scrollbars=yes,location=no,status=no";
	window.open(url,"",property); 
}

function addOneMoreInput(tableId,inputType,inputName){
	var otbl = document.getElementById(tableId);
	var sequence = otbl.rows.length;
	var otr = otbl.insertRow(-1);
	var otd0 = document.createElement("td");
	otd0.innerHTML = (sequence+1) + ". <input type=\"" + inputType + "\" name=\"" + inputName + "[]\"/>";
	otr.appendChild(otd0);

	var otd1 = document.createElement("td");
	otd1.innerHTML = "&nbsp;&nbsp;<span onclick=\"deleteInput(this,'"+tableId+"')\" title=\"Remove\"><u>x</u></span>";
	otr.appendChild(otd1); 
}
function deleteInput(obj,id){
	var tbl = document.getElementById(id);
	var row = obj.parentNode.parentNode;
	var rows = tbl.rows;
	for(var i=0;i<rows.length;i++){
		if(rows[i]==row){
			tbl.deleteRow(i);
			return;
		}
	}
}
