/**
 * Copyright 2003 SystemArt Inc. All Rights Reserved.
 */

/**
 * パラメータを A タグに自動付加関数
 */
function autoParameter(parameterName, parameterValue) {

	/* パラメータを Areaタグに自動付加 */
	autoParameterArea(parameterName,parameterValue);

	/* パラメータを Formタグ Actionに自動付加 */
	autoParameterAction(parameterName,parameterValue);


	/* parameterName, parameterValue は Arrayオブジェクトであるかを調べる */
	if (!isArrayClass(parameterName) || !isArrayClass(parameterValue))
		return

	/* パラメータ名とその値の数が一致するか調べる */
	if (parameterName.length != parameterValue.length)
		return;

	/* serverId を取得する */
	var serverId = getParameter("serverId");

	var innerLink = "";

	/* パラメータ付加処理、開始 */
	for (var i = 0; i < document.getElementsByTagName("A").length; i++) {
		var params = "";
		/* JavaScriptならば処理はパスする。 */
		if (isJavaScriptProgram(document.getElementsByTagName("A")[i].href))
			continue;

		/* http:// から始めるＵＲＬについて調べる。*/
		var href = document.getElementsByTagName("a")[i].href;

		/* ページ内リンクかどうか調べる。*/
		if (href.indexOf("#", 0) != -1) {
			innerLink = href.substr(href.indexOf("#", 0),href.length-href.indexOf("#", 0));
			href = href.substr(0,href.indexOf("#", 0));
		}else{
			innerLink = "";
		}
		
		if (href.indexOf("http://", 0) != -1) {
			if (href.indexOf("qvc.jp", 0) == -1)
				continue;
		}
		

		/* A タグのパラメータを取得する */
		var request = getHrefParameters(document.getElementsByTagName("A")[i].href);
		var argsArray = getSeparatorArgs(request);

		/* セットされたパラメータを作成 */
		for (var j = 0; j < parameterName.length; j++) {
			/* 重複していないかを調べる */
			for (var k = 0; k < argsArray.length; k++) {
				if (parameterName[j] == getDiscernmentName(argsArray[k]))
					break;
			}

			/* パラメータを順次追加 */
			if (k == argsArray.length) {
				/* serverId ならば、別処理をする */
				if (serverId != null) {
					if (parameterName[j] == "serverId")
							params = params + "serverId=" + serverId + "&";
					else {
							params = params + parameterName[j]
									+ "=" + parameterValue[j] + "&";
					}
				} else
					params = params + parameterName[j] + "=" + parameterValue[j] + "&";
			}
		}

		if (params.charAt(params.length - 1) == '&')
			params = params.substring(0, params.length - 1);

		/* セットしたパラメータを付加する前に ? を付けるか & 付けるか調べる */
		var join = "";
		if(hasParameter(document.getElementsByTagName("A")[i].href))
				join = "&";
			else
				join = "?";

		if(params.length<1){join=""};
		document.getElementsByTagName("A")[i].href = href + join + params + innerLink;

	}
}

/**
 * パラメータを Area タグに自動付加関数
 */
function autoParameterArea(parameterName, parameterValue) {

	/* parameterName, parameterValue は Arrayオブジェクトであるかを調べる */
	if (!isArrayClass(parameterName) || !isArrayClass(parameterValue))
		return

	/* パラメータ名とその値の数が一致するか調べる */
	if (parameterName.length != parameterValue.length)
		return;

	/* serverId を取得する */
	var serverId = getParameter("serverId");
	
	var innerLink = "";

		/* パラメータ付加処理、開始 */
	for (var i = 0; i < document.getElementsByTagName("area").length; i++) {
		var params = "";
		/* JavaScriptならば処理はパスする。 */
		if (isJavaScriptProgram(document.getElementsByTagName("area")[i].href))
			continue;


		/* http:// から始めるＵＲＬについて調べる。*/
		var href = document.getElementsByTagName("area")[i].href;

		/* ページ内リンクかどうか調べる。*/
		if (href.indexOf("#", 0) != -1) {
			innerLink = href.substr(href.indexOf("#", 0),href.length-href.indexOf("#", 0));
			href = href.substr(0,href.indexOf("#", 0));
		}else{
			innerLink = "";
		}
		
		if (href.indexOf("http://", 0) != -1) {
			if (href.indexOf("qvc.jp", 0) == -1)
				continue;
		}

		/* area タグのパラメータを取得する */
		var request = getHrefParameters(document.getElementsByTagName("area")[i].href);
		var argsArray = getSeparatorArgs(request);

		/* セットされたパラメータを作成 */
		for (var j = 0; j < parameterName.length; j++) {
			/* 重複していないかを調べる */
			for (var k = 0; k < argsArray.length; k++) {
				if (parameterName[j] == getDiscernmentName(argsArray[k]))
					break;
			}

			/* パラメータを順次追加 */
			if (k == argsArray.length) {
				/* serverId ならば、別処理をする */
				if (serverId != null) {
					if (parameterName[j] == "serverId")
							params = params + "serverId=" + serverId + "&";
					else {
							params = params + parameterName[j]
									+ "=" + parameterValue[j] + "&";
					}
				} else
					params = params + parameterName[j] + "=" + parameterValue[j] + "&";
			}
		}

		if (params.charAt(params.length - 1) == '&')
			params = params.substring(0, params.length - 1);

		/* セットしたパラメータを付加する前に ? を付けるか & 付けるか調べる */
		var join = "";
		if(hasParameter(document.getElementsByTagName("area")[i].href))
				join = "&";
			else
				join = "?";
		if(params.length<1){join=""};
		document.getElementsByTagName("area")[i].href = href + join + params + innerLink;

	}

}

/**
 * パラメータを Actionに自動付加関数
 */
function autoParameterAction(parameterName, parameterValue) {

	
	/* parameterName, parameterValue は Arrayオブジェクトであるかを調べる */
	if (!isArrayClass(parameterName) || !isArrayClass(parameterValue))
		return

	/* パラメータ名とその値の数が一致するか調べる */
	if (parameterName.length != parameterValue.length)
		return;

	/* serverId を取得する */
	var serverId = getParameter("serverId");
	
	var innerLink = "";
	

		/* パラメータ付加処理、開始 */
	for (var i = 0; i < document.getElementsByTagName("form").length; i++) {
		var params = "";
		/* JavaScriptならば処理はパスする。 */
		if (isJavaScriptProgram(document.getElementsByTagName("form")[i].action))
			continue;

		
		/* http:// から始めるＵＲＬについて調べる。*/
		var action = document.getElementsByTagName("form")[i].action;
				
		if (action.indexOf("http://", 0) != -1) {
			if (action.indexOf("qvc.jp", 0) == -1)
				continue;
		}

		/* Form タグのパラメータを取得する */
		var request = getHrefParameters(document.getElementsByTagName("form")[i].action);
		var argsArray = getSeparatorArgs(request);

		
		/* セットされたパラメータを作成 */
		for (var j = 0; j < parameterName.length; j++) {
			/* 重複していないかを調べる */
			for (var k = 0; k < argsArray.length; k++) {
				if (parameterName[j] == getDiscernmentName(argsArray[k]))
					break;
			}

		
			/* パラメータを順次追加 */
			if (k == argsArray.length) {
				/* serverId ならば、別処理をする */
				if (serverId != null) {
					if (parameterName[j] == "serverId")
							params = params + "serverId=" + serverId + "&";
					else {
							params = params + parameterName[j]
									+ "=" + parameterValue[j] + "&";
					}
				} else
					params = params + parameterName[j] + "=" + parameterValue[j] + "&";
			}
		}

		
		if (params.charAt(params.length - 1) == '&')
			params = params.substring(0, params.length - 1);

		/* セットしたパラメータを付加する前に ? を付けるか & 付けるか調べる */
		var join = "";
		if(hasParameter(document.getElementsByTagName("form")[i].action))
				join = "&";
			else
				join = "?";
		if(params.length<1){join=""};
		document.getElementsByTagName("form")[i].action = action + join + params + innerLink;

	}

}



/**
 * Array オブジェクトならば true を返す関数
 */
function isArrayClass(object) {
	return (new Array()).constructor == object.constructor;
}

/**
 * 現在のURLからパラメータを取得する関数
 */
function getParameter(parameterName) {
	var argsArray = getSeparatorArgs(location.search);
	if (argsArray.length == 0)
		return null;

	for (var i = 0; i < argsArray.length; i++) {
		var argName = getDiscernmentName(argsArray[i]);
		if (argName == parameterName)
			return getCorrespondsValue(argsArray[i]);
	}

	return null;
}

/**
 * パラメータと値を一対にし、Array オブジェクトを返す関数
 */
function getSeparatorArgs(parameters) {
	var request = unescape(parameters);
	var argsArray = new Array();

	/* パラメータが無かった場合 */
	if (request.length == 0)
		return argsArray;

	var i = 1;
	for (var j = 1; j < request.length; j++) {
		if (request.charAt(j) == '&' || j == request.length - 1) {
			var k;
			if (j == request.length - 1)
				k = j + 1;
			else
				k = j;
			var arg = request.substring(i, k);
			argsArray.push(arg);
			i = j + 1;
			continue;
		}
	}
	return argsArray;
}

/**
 * "name=value" という文字列の name の部分を取り出す関数
 */
function getDiscernmentName(name) {
	if (name == null)
		return null;
	else if (name.length == 0)
		return null;

	for(var i = 0; i < name.length; i++) {
		if (name.charAt(i) == '=')
			return name.substring(0, i);
	}
	return null;
}

/**
 * "name=value" という文字列の value の部分を取り出す関数
 */
function getCorrespondsValue(name) {
	if (name == null)
		return null;
	else if (name.length == 0)
		return null;

	for(var i = 0; i < name.length; i++) {
		if(name.charAt(i) == '=')
			return name.substring(i + 1, name.length + 1);
	}
	return null;
}

/**
 * JavaScript ならば true を返す関数
 */
function isJavaScriptProgram(url) {
	var lower = new String(url);
	lower = lower.toLowerCase();
	return (lower.indexOf("javascript:", 0) != -1);
}

/**
 * A　タグのパラメータ部分の文字列を返却する
 */
function getHrefParameters(url) {
	var index = url.length;
	for (var i = url.length - 1; i > 1; i--) {
		if (url.charAt(i) == '?') {
			index = i;
			break;
		}
	}

	request = new String(url.substring(index, url.length));
	if (request.length < 1)
		return null;
	return request;
}

/**
 * パラメータを持っていれば true を返す
 */
function hasParameter(url) {
	for (var i = url.length; i > 1; i--) {
		if (url.charAt(i) == '?')
			return true;
	}
	return false;
}
