 function $ (id)
{
	return (YAHOO.util.Dom.get (id));	
}

function SubStrRight(str, n){
    if (n <= 0)
       return "";
    else if (n > String(str).length)
       return str;
    else {
       var iLen = String(str).length;
       return String(str).substring(iLen, iLen - n);
    }
}

function loadData (url, page_area, post_vars)
{
	function successHandler (obj) 
	{
		//alert (obj.responseText);
		// Use the response, parsing Smart Tags first
		if (obj.responseText.indexOf ("%!-%") != -1 && obj.responseText.indexOf ("%-!%") != -1) // send a JavaScript !alert!
		{
			alert (obj.responseText.substring (obj.responseText.indexOf ("%!-%") + 4, obj.responseText.indexOf ("%-!%")));
		}
		
		if (obj.responseText.indexOf ("%T-%") != -1 && obj.responseText.indexOf ("%-T%") != -1) // Title
		{
			document.title = obj.responseText.substring (obj.responseText.indexOf ("%T-%") + 4, obj.responseText.indexOf ("%-T%"));
		}
		
		if (obj.responseText.indexOf ("%F-%") != -1 && obj.responseText.indexOf ("%-F%") != -1) // Call a function or run a javascript
		{
			/* Examle:
			function show_alert (string)
			{
				alert (string);
			}
			script = "al = prompt ('ALERT');if (confirm ('are you sure')){alert (al);}else{alert ('False');}";
			window.eval(script);
			
			OR
			
			func = "show_alert ('Test is OK')";
			window.eval(func);
			
			*/
			window.eval (obj.responseText.substring (obj.responseText.indexOf ("%F-%") + 4, obj.responseText.indexOf ("%-F%")));
		}
		
		if (obj.responseText.indexOf ("%U-%") != -1 && obj.responseText.indexOf ("%-U%") != -1) // go to a URL
		{
			self.location.replace (obj.responseText.substring (obj.responseText.indexOf ("%U-%") + 4, obj.responseText.indexOf ("%-U%")));			
		}
		else if (page_area && obj.responseText.indexOf ("%P-%") != -1 && obj.responseText.indexOf ("%-P%") != -1) // replace the inner HTML of the page area with the PHP script's response
		{
			if (YAHOO.util.Dom.get (page_area))
			{
				YAHOO.util.Dom.get (page_area).innerHTML = obj.responseText.substring (obj.responseText.indexOf ("%P-%") + 4, obj.responseText.indexOf ("%-P%"));
			}
		}
		else if (obj.responseText.indexOf ("%P-%") == -1 && obj.responseText.indexOf ("%F-%") == -1 && obj.responseText.indexOf ("%T-%") == -1 && obj.responseText.indexOf ("%U-%") == -1 && obj.responseText.indexOf ("%!-%") == -1)
		{
			if (YAHOO.util.Dom.get (page_area))
			{
				YAHOO.util.Dom.get (page_area).innerHTML = obj.responseText;
			}
		}
    }
	
	var oObj = YAHOO.util.Connect.asyncRequest ("POST", url,
		{
			success:successHandler,
			failure:successHandler
		},
		post_vars	);
}

function setStyle (id, name, value)
{
	YAHOO.util.Dom.setStyle (id, name, value);
}

var BrowserDetect = 
{
	init: function () 
	{
		this.browser = this.searchString (this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion (navigator.userAgent) || this.searchVersion (navigator.appVersion) || "an unknown version";
		this.OS = this.searchString (this.dataOS) || "an unknown OS";
	},
	searchString: function (data) 
	{
		for (var i = 0; i < data.length; i++)	
		{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) 
			{
				if (dataString.indexOf(data[i].subString) != -1)
				{
					return data[i].identity;
				}
			}
			else if (dataProp)
			{
				return data[i].identity;
			}
		}
	},
	searchVersion: function (dataString) 
	{
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) 
		{
			return;
		}
		return parseFloat (dataString.substring (index + this.versionSearchString.length + 1));
	},
	dataBrowser: 
	[
		{ 	
			string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : 
	[
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]
};

BrowserDetect.init ();

var browserType = BrowserDetect.browser;
var browserVersion = BrowserDetect.version;
var browserOS = BrowserDetect.OS;

// browser-specific stylesheets
if (browserType == "Safari")
{
	document.writeln ('<link rel="stylesheet" href="css/main_safari.css" type="text/css" media="screen, projector, tv" />');
}
else if (browserType == "Opera")
{
	document.writeln ('<link rel="stylesheet" href="css/main_opera.css" type="text/css" media="screen, projector, tv" />');
}
else if (browserOS == "Windows")
{
	if (browserType == "Explorer")
	{
		document.writeln ('<link rel="stylesheet" href="css/main_ie.css" type="text/css" media="screen, projector, tv" />');
		if (browserVersion == "6")
		{
			document.writeln ('<link rel="stylesheet" href="css/main_ie6.css" type="text/css" media="screen, projector, tv" />');
		}
	}
	else if (browserType == "Firefox")
	{
		document.writeln ('<link rel="stylesheet" href="css/main_ff_windows.css" type="text/css" media="screen, projector, tv" />');
	}
}

function preloadImages () 
 {
  	var d = document; 
	if (d.images)
	{ 
		if	(!d.MM_p) 
		{
			d.MM_p = new Array ();
    		var i, j = d.MM_p.length, a = preloadImages.arguments; 
			for (i = 0; i < a.length; i++)
			{
				if (a[i].indexOf ("#") != 0)
				{ 
					d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];
				}
			}
		}
	}
 }
 
 //================ Validate data ======================
 function validate_data (data, data_type, inChar)
{
	// data : String value which need to validate
	// data_type : String value of data type ie. email, xipCode, int, float, alpha ....
	// inChar : String value (can be blank) of special characters will be allowed. ie. if we want to allow _,-,. in alpha data type then we will use inChar = "_-.", this do not need with data types under "check patern"
	
	
	// Check patern
	if (data_type == "email")   //matches email
	{
		var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
		if (filter.test (data))
		{
			return (true);
		}
		else
		{
			return (false);
		}
	}
	else if (data_type == "zipCode")  // Matches a US zip Code (ie: 12345 or 12345-1234) 
	{
		var filter = /\d{5}(-\d{4})?/;
		if (filter.test (data))
		{
			return (true);
		}
		else
		{
			return (false);
		}
	}
	else if (data_type == "Currency")  // matches $17.23 or $14,281,545.45 or ...
	{
		var filter = /\$\d{1,3}(,\d{3})*\.\d{2}/;
		if (filter.test (data))
		{
			return (true);
		}
		else
		{
			return (false);
		}
	}
	else if (data_type == "Time")  // matches 5:04 or 12:34 but not 75:83
	{
		var filter = /^([1-9]|1[0-2]):[0-5]\d$/;
		if (filter.test (data))
		{
			return (true);
		}
		else
		{
			return (false);
		}
	}
	else if (data_type == "Date")  // Date xx/xx/xxxx
	{
		var filter = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/;
		if (filter.test (data))
		{
			return (true);
		}
		else
		{
			return (false);
		}
	}
	else if (data_type == "phoneNumber")  // matches phone ###-###-####Matches US phone (###-###-#### or (###) ###-####) 
	{
		var filter = /^\(?\d{3}\)?\s|-?\.?\d{3}-?\.?\d{4}$/;
		if (filter.test (data))
		{
			return (true);
		}
		else
		{
			return (false);
		}
	}
	else if (data_type == "phoneNumberInternational")  // International Phone Number
	{
		var filter = /^\d(\d|-){7,20}/;
		if (filter.test (data))
		{
			return (true);
		}
		else
		{
			return (false);
		}
	}
	else if (data_type == "State")   // State Abbreviation
	{
		var filter = /^(AK|AL|AR|AZ|CA|CO|CT|DC|DE|FL|GA|HI|IA|ID|IL|IN|KS|KY|LA|MA|MD|ME|MI|MN|MO|MS|MT|NB|NC|ND|NH|NJ|NM|NV|NY|OH|OK|OR|PA|RI|SC|SD|TN|TX|UT|VA|VT|WA|WI|WV|WY)$/i;
		if (filter.test (data))
		{
			return (true);
		}
		else
		{
			return (false);
		}
	}	
	
	// Check one by one charector	
	for (var i = 0; i < data.length; i++)
	{
		var ch = data.substring(i, i + 1);
		if ((data_type == "int" && (ch < "0" || "9" < ch) && ! InCheck(ch,inChar)) || (data_type == "float" && (ch < "0" || "9" < ch) && ch!="." && ! InCheck(ch,inChar)) || (data_type == "alpha" && (ch < "a" || "z" < ch) && (ch < "A" || "Z" < ch) && ! InCheck(ch,inChar)) || (data_type == "alpha_numeric" && (ch < "a" || "z" < ch) && (ch < "A" || "Z" < ch) && (ch < "0" || "9" < ch) && ! InCheck(ch,inChar)) || (data_type == "name" && (ch < "a" || "z" < ch) && (ch < "A" || "Z" < ch) && ch!=" " && ch!="." && ! InCheck(ch,inChar)))
		{
			return (false);
		}
	}
	return (true);
}

function InCheck (sText, ValidChars)
{
	if (ValidChars != "") 
	{ 
		var validate=true;
		var Char;
		
		for (i = 0; i < sText.length && validate == true; i++) 
		{ 
			Char = sText.charAt (i); 
			if (ValidChars.indexOf (Char) == -1) 
			validate = false;
		}
		return (validate);
	}
	else
	{
		return (false);
	}
}

function message (SITE_URL, code)
{
	loadData (SITE_URL + 'widgets/shoppingcart.wid.php', '', 'code=' + code);
}

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}
function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
} 

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

function add_to_cart (sku, number_bottles)
{
	var add_bottles = true;
	if (sku.indexOf ("WC_") == -1)
	{
		add_bottles = update_mini_cart (number_bottles, sku);
	}
	if (add_bottles)
	{
		var shopping_cart = YAHOO.util.Cookie.get ('ShoppingCart');
		shopping_cart =  (!shopping_cart) ? '' : shopping_cart;
		shopping_cart += ((!shopping_cart) ? '' : '#') + sku + '=' + number_bottles;
		shopping_cart = shopping_cart.replace (/##/, "#");
		YAHOO.util.Cookie.set ('ShoppingCart', shopping_cart, '/');
	}
	else if (sku.indexOf ("WC_") == -1)
	{
		alert ("There is a limit of six bottles per transaction.");
	}
	
	if (sku.indexOf ("WC_") != -1)
	{
		alert ("Vintage Wine Club removed from shopping cart.");
		shopping_cart_items = shopping_cart.split ("#");
		shopping_cart = "";
		for (var i = 0; i < shopping_cart_items.length; i++)
		{	
			var shopping_cart_item = shopping_cart_items[i];
			if (shopping_cart_item.indexOf (sku) == -1)
			{
				shopping_cart += (shopping_cart_item + "#");
			}
		}
		YAHOO.util.Cookie.set ('ShoppingCart', shopping_cart, '/');
	}
	else if (add_bottles)
	{
		if (number_bottles < 0)
		{
			number_bottles = number_bottles * (-1);
			add_remove = " removed from ";
		}
		else
		{
			add_remove = " added to ";	
		}
		
		plural = (number_bottles == 1) ? '' : 's';
		alert (number_bottles + ' bottle' + plural + add_remove + 'shopping cart.');
	}
}

function update_mini_cart (number_bottles, sku)
{
	var total_qty  = YAHOO.util.Cookie.get ('TotalQTY');
	var qty_OVZ2006 = YAHOO.util.Cookie.get ('qty_OVZ2006');
	qty_OVZ2006 =  (!qty_OVZ2006 || qty_OVZ2006 == 'NaN') ? 0 : qty_OVZ2006;
	total_qty =  (!total_qty || total_qty == 'NaN') ? 0 : total_qty;
	total_qty = parseInt (total_qty) + parseFloat (number_bottles);
	if (sku == "OVZ2006")
	{
		qty_OVZ2006 = parseInt (qty_OVZ2006) + parseFloat (number_bottles);
		if (qty_OVZ2006 > 6)
		{
			return false;
		}
		YAHOO.util.Cookie.set ('qty_OVZ2006', qty_OVZ2006, '/');
	}
	YAHOO.util.Cookie.set ('TotalQTY', total_qty, '/');
	items = (total_qty == 1) ? "bottle" : "bottles";
	$('CartText').innerHTML = 'Shopping Cart: ' + total_qty + ' ' + items;
	return true;
}