// Browser sniffer
function Is() {
	agent = navigator.userAgent.toLowerCase();
	this.major = parseInt(navigator.appVersion);
	this.minor = parseFloat(navigator.appVersion);
	this.ns = ((agent.indexOf('mozilla') != -1) && ((agent.indexOf('spoofer') == -1) && (agent.indexOf('compatible') == -1)));
	this.ie = (agent.indexOf("msie") != -1);
}
var is = new Is();


// Tooltip Functions

var thumbnailTooltip = new TipObj('thumbnailTooltip');
with (thumbnailTooltip) {
	template = '<div class="thumbnailTooltip">' +
					'<div style="background-color:#fff;border:1px solid #73C7F4;padding:2px;">' +
						'%2%' +
					'</div>' +
			   '</div>';
	tipStick = 0;
}

var shoppingCartPhotoPopupTooltip = new TipObj('shoppingCartPhotoPopupTooltip');
with (shoppingCartPhotoPopupTooltip) {
	template = '<div class="shoppingCartPhotoPopup">' +
					'<div style="border:1px solid #73C7F4;padding:0.3em;">' +
						'<h3>%2%</h3>' +
						'%3%' +
						'<table>' +
							'<tr>' +
								'<th>Size:</th><td>%4%</td>' +
							'</tr>' +
							'<tr class="%8%">' +
								'<th>Finish:</th><td>%5%</td>' +
							'</tr>' +
							'<tr class="%8%">' +
								'<th>Quantity:</th><td>%6%</td>' +
							'</tr>' +
							'<tr>' +
								'<th>Cost:</th><td>%7%</td>' +
							'</tr>' +
						'</table>' +
					'</div>' +
			   '</div>';
	tipStick = 0;
}

var defaultTooltip = new TipObj('defaultTooltip');
with (defaultTooltip) {
	template = '<div class="defaultTooltip" style="width:%2%">%3%</div>';
}



// Validate a Credit Card number
function validateCreditCard(s) {
	var v = "0123456789";
	var w = "";
	for (var i=0; i < s.length; i++) {
		x = s.charAt(i);
		if (v.indexOf(x,0) != -1)
			w += x;
	}
	var j = w.length / 2;
	if (j < 6.5 || j > 8 || j == 7) return false;
	var k = Math.floor(j);
	var m = Math.ceil(j) - k;
	var c = 0;
	for (var i=0; i<k; i++) {
		a = w.charAt(i*2+m) * 2;
		c += a > 9 ? Math.floor(a/10 + a%10) : a;
	}
	for (var i=0; i<k+m; i++) c += w.charAt(i*2+1-m) * 1;
	return (c%10 == 0);
}

// Validate an email address
function isEmail(str) {
	// are regular expressions supported?
	var supported = 0;
	if (window.RegExp) {
		var tempStr = "a";
		var tempReg = new RegExp(tempStr);
		if (tempReg.test(tempStr)) supported = 1;
	}
	if (!supported) 
		return (str.indexOf(".") > 2) && (str.indexOf("@") > 0);
	var r1 = new RegExp("(@.*@)|(\\.\\.)|(@\\.)|(^\\.)");
	var r2 = new RegExp("^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$");
	return (!r1.test(str) && r2.test(str));
}

// Get a Stylesheet value
function getStyleValue(stylesheetIndex, ruleName, property) {
	ruleNumber = -1;
	
	if(is.ie) {
		for (i=0; i < document.styleSheets[stylesheetIndex].rules.length; i++) {
			thisRuleName = document.styleSheets[stylesheetIndex].rules[i].selectorText;
			if (thisRuleName.substring(1, thisRuleName.length) == ruleName) {
				ruleNumber = i;
				break;
			}
		}
		if (ruleNumber != -1) {
			return eval("document.styleSheets[stylesheetIndex].rules(ruleNumber).style." + property);
		}
	} else {
		for (i=0; i < document.styleSheets[stylesheetIndex].cssRules.length; i++) {
			thisRuleName = document.styleSheets[stylesheetIndex].cssRules[i].selectorText;
			if (thisRuleName.substring(1, thisRuleName.length) == ruleName) {
				ruleNumber = i;
				break;
			}
		}
		if (ruleNumber != -1) {
			return eval("document.styleSheets[stylesheetIndex].cssRules[ruleNumber].style." + property);
		}
	}
}

// Change a Stylesheet definition
function changeStyleDefinition(stylesheetIndex, ruleName, property, newValue) {
	ruleNumber = -1;
	
	if (is.ie) {
		for (i=0; i < document.styleSheets[stylesheetIndex].rules.length; i++) {
			thisRuleName = document.styleSheets[stylesheetIndex].rules[i].selectorText;
			if (thisRuleName.substring(1, thisRuleName.length) == ruleName) {
				ruleNumber = i;
				break;
			}
		}
		if (ruleNumber != -1) {
			eval('document.styleSheets[stylesheetIndex].rules[ruleNumber].style.' + property + ' = "' + newValue + '"');
		}
	} else {
		for (i=0; i < document.styleSheets[stylesheetIndex].cssRules.length; i++) {
			thisRuleName = document.styleSheets[stylesheetIndex].cssRules[i].selectorText;
			if (thisRuleName.substring(1, thisRuleName.length) == ruleName) {
				ruleNumber = i;
				break;
			}
		}
		if (ruleNumber != -1) {
			eval('document.styleSheets[stylesheetIndex].cssRules[ruleNumber].style.' + property + ' = "' + newValue + '"');
		}
	}
}


// Check if an element has a class
function hasClass(ele,cls) {
	return ele.className.match(new RegExp('(\\s|^)'+cls+'(\\s|$)'));
}


// Add a class to an element
function addClass(ele,cls) {
	if (!this.hasClass(ele,cls)) ele.className += " "+cls;
}

// Remove a class from an element
function removeClass(ele,cls) {
	if (hasClass(ele,cls)) {
    	var reg = new RegExp('(\\s|^)'+cls+'(\\s|$)');
		ele.className=ele.className.replace(reg,' ');
	}
}


// URL encode a string taking into account the + and / characters
function encodeString(theString) {
	var encodedInputString=escape(theString);
	
  	encodedInputString=encodedInputString.replace("+", "%2B");
  	encodedInputString=encodedInputString.replace("/", "%2F");
  	
  	return encodedInputString;
} 


// hack to fix 'getElementsByName()' not working in IE
function getElementsByName_iefix(tag, name) {
     var elem = document.getElementsByTagName(tag);
     var arr = new Array();
     for(i = 0,iarr = 0; i < elem.length; i++) {
          att = elem[i].getAttribute("name");
          if(att == name) {
               arr[iarr] = elem[i];
               iarr++;
          }
     }
     return arr;
}


// www.quirksmode.org utility functions

var LEFT = 0;
var TOP = 1;

function findPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	return [curleft,curtop];
}


// macromedia functions
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 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];}}
}
