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 : "Chrome",
				identity : "Chrome"
			}, {
				string : navigator.userAgent,
				subString : "OmniWeb",
				versionSearch : "OmniWeb/",
				identity : "OmniWeb"
			}, {
				string : navigator.vendor,
				subString : "Apple",
				identity : "Safari",
				versionSearch : "Version"
			}, {
				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();

function popupWindow(url, name, iWidth, iHeight) {
	var url;
	var name;
	var iWidth;
	var iHeight;
	var iTop = (window.screen.availHeight - 30 - iHeight) / 2;
	var iLeft = (window.screen.availWidth - 10 - iWidth) / 2;
	var param = 'height='
			+ iHeight
			+ ',,innerHeight='
			+ iHeight
			+ ',width='
			+ iWidth
			+ ',innerWidth='
			+ iWidth
			+ ',top='
			+ iTop
			+ ',left='
			+ iLeft
			+ ',toolbar=no,menubar=no,scrollbars=yes,resizeable=no,location=no,status=no';
	window.open(url, name, param);
}

function popupModalWindowRelative(url, popId, popwin_top, popwin_left, param) {
	var wscrollLeft = $(window).scrollLeft();
	var wscrollTop = $(window).scrollTop();
	popwin_left = popwin_left + wscrollLeft;
	popwin_top = popwin_top + wscrollTop;
	popupModalWindow(url, popId, popwin_top + 'px', popwin_left + 'px', param);
}
function popupModalWindowTrueRelative(url, popId,param,element) {
	var pos=getElementPos(element)
	popupModalWindow(url, popId, pos.y + 'px', pos.x + 'px', param);
}

//get html object position
function getElementPos(element) {
var ua = navigator.userAgent.toLowerCase();
var isOpera = (ua.indexOf('opera') != -1);
var isIE = (ua.indexOf('msie') != -1 && !isOpera); // not opera spoof
var el = element;
if(el.parentNode === null || el.style.display == 'none') {
   return false;
}      
var parent = null;
var pos = [];     
var box;     
if(el.getBoundingClientRect)    //IE
{         
   box = el.getBoundingClientRect();
   var scrollTop = Math.max(document.documentElement.scrollTop, document.body.scrollTop);
   var scrollLeft = Math.max(document.documentElement.scrollLeft, document.body.scrollLeft);
   return {x:box.left + scrollLeft, y:box.top + scrollTop};
}else if(document.getBoxObjectFor)    // gecko    
{
   box = document.getBoxObjectFor(el); 
   var borderLeft = (el.style.borderLeftWidth)?parseInt(el.style.borderLeftWidth):0; 
   var borderTop = (el.style.borderTopWidth)?parseInt(el.style.borderTopWidth):0; 
   pos = [box.x - borderLeft, box.y - borderTop];
} else    // safari & opera    
{
   pos = [el.offsetLeft, el.offsetTop]; 
   parent = el.offsetParent;     
   if (parent != el) { 
    while (parent) { 
   pos[0] += parent.offsetLeft; 
   pos[1] += parent.offsetTop; 
   parent = parent.offsetParent;
    } 
   }   
   if (ua.indexOf('opera') != -1 || ( ua.indexOf('safari') != -1 && el.style.position == 'absolute' )) { 
    pos[0] -= document.body.offsetLeft;
    pos[1] -= document.body.offsetTop;         
   }    
}              
if (el.parentNode) { 
   parent = el.parentNode;
    } else {
   parent = null;
    }
while (parent && parent.tagName != 'BODY' && parent.tagName != 'HTML') { // account for any scrolled ancestors
   pos[0] -= parent.scrollLeft;
   pos[1] -= parent.scrollTop;
   if (parent.parentNode) {
    parent = parent.parentNode;
   } else {
    parent = null;
   }
}
return {x:pos[0], y:pos[1]};
}

function popupModalWindow(url, popId, popwin_top, popwin_left, param) {
	var modalElement = document.getElementById("popup_modal")
	if (modalElement == null) {
		var body = document.getElementsByTagName("body")[0];
		modalElement = document.createElement("div");
		modalElement.id = "popup_modal";
		body.appendChild(modalElement);
	}
	if (BrowserDetect.browser == "Explorer") {
		$("select").each(function() {
					$(this).hide();
				});
	}
	modalElement.style.display = "block";
	modalElement.style.height = $(document).height() + "px";

	var popElement = document.getElementById(popId);
	popElement.style.display = "block";
	popElement.style.top = popwin_top;
	popElement.style.left = popwin_left;

	$("div#" + popId).load(url, param);
}

function popupModalWindowForForm(formId, successURL, popId, popwin_top,
		popwin_left, successCallback) {
	var modalElement = document.getElementById("popup_modal")
	if (modalElement == null) {
		var body = document.getElementsByTagName("body")[0];
		modalElement = document.createElement("div");
		modalElement.id = "popup_modal";
		body.appendChild(modalElement);
	}

	modalElement.style.display = "block";
	modalElement.style.height = $(document).height() + "px";

	if (BrowserDetect.browser == "Explorer") {
		$("select").each(function() {
					$(this).hide();
				});
	}

	var bindParam = {
		type : "POST",
		url : contextPath + "/checkout/includes/checkoutError.jsp",
		data : getDatabyForm(formId),
		success : function(html) {
			successCallback(popId, popwin_top, popwin_left, html)
		},
		error : function(XMLHttpRequest, textStatus, errorThrown) {
			alert("error:" + textStatus);
		}
	};
	$.ajax(bindParam);
}

function closeModalWindow(popId) {
	var modalElement = document.getElementById("popup_modal")
	modalElement.style.height = "auto";	
	modalElement.style.display = "none";
	var popElement = document.getElementById(popId);
	popElement.style.display = "none";
	popElement.innerHTML = "";
	if (BrowserDetect.browser == "Explorer") {
		$("select").each(function() {
					$(this).show();
				});
	}
	onCountryChange();
}

function closePopupWindow() {
	window.opener = 'x';
	window.close();
}

function parseUri(str) {
	var o = parseUri.options, m = o.parser[o.strictMode ? "strict" : "loose"]
			.exec(str), uri = {}, i = 14;

	while (i--)
		uri[o.key[i]] = m[i] || "";

	uri[o.q.name] = {};
	uri[o.key[12]].replace(o.q.parser, function($0, $1, $2) {
				if ($1)
					uri[o.q.name][$1] = $2;
			});

	return uri;
};

function openContentWin(pURL) {
	openWinRequired(
			pURL,
			'contentWin',
			'scrollbars=yes,toolbar=yes,directories=yes,menubar=yes,resizable=yes,status=yes,width=1024,height=450');
}
function openWinRequired(winURL, winName, winParams) {
	var popWindowRequired = open(winURL, winName, winParams);
	if (isNullWindow(popWindowRequired) == true) {
		return;
	} else {
		if (popWindowRequired.opener == null)
			popWindowRequired.opener = self;
		if (window.focus)
			popWindowRequired.focus();
	}
}

function isNullWindow(win) {
	// if(win == null || win.focus == null)
	if (win == null) {
		var text = "This site requires pop-ups to be enabled.\n";
		text += "If you would like to view this content, please disable\n";
		text += "any pop-up blocking software and restart your browser.\n\n";
		alert(text);
		return true;
	}
	return false;
}

parseUri.options = {
	strictMode : false,
	key : ["source", "protocol", "authority", "userInfo", "user", "password",
			"host", "port", "relative", "path", "directory", "file", "query",
			"anchor"],
	q : {
		name : "queryKey",
		parser : /(?:^|&)([^&=]*)=?([^&]*)/g
	},
	parser : {
		strict : /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,
		loose : /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/
	}
};
function isSessionTimeout(location) {
	var result = false;
	var bindParam = {
		async : false,
		type : "POST",
		dataType: "text/html",
		url : contextPath + "/common/isSessionTimeout.jsp",
		success : function(data) {
			var JSONData = eval("(" + $.trim(data) + ")");
			if(JSONData.isTimeout)
			{
				result = true;
				if(location != null)
				{
					window.location.replace(location)
				}
				else
				{
					window.location.reload();
				}
			}
		}
	};
	$.ajax(bindParam);
	return result;
}

