// ==UserScript==
//
// @name           A killer
// @namespace      null
// @include        http://*
// @include        https://*
// @exclude        http://www.amazon.co.jp/*
// @description    affiliate killer
//
// ==/UserScript==


var amazonId = ""; //「sample-22」のような文字列を入れる

var a8Id ="";//「簡易」「画像」「テキスト」あるらしーけど面倒くさいので非対応

var rakutenId ="";//「xxxxxxx.xxxxxxxx」のような文字列を入れる

/*
var a8easy = "";
var a8image= "";
var a8text = "";
*/

var anchors = document.links

for(var i=0; i< anchors.length;i++){
		
	if(anchors[i].href != null ){
		var link  = anchors[i];
		//http & https
		var amazonpos = link.href.indexOf("://www.amazon.co.jp/") ;
		var a8pos = link.href.indexOf("://px.a8.net/")	;	
		var rakutenpos = link.href.indexOf("://pt.afl.rakuten.co.jp");
		
		if(amazonpos >= 0) {
			link.href = rewriteAmazonUrl(link.href);			
		}else if (a8pos >= 0){			
			link.href = rewriteA8Url(link.href);			
		}else if (rakutenpos >= 0) {
			link.href = rewriteRakutenUrl(link.href);
		}
	}
	
}
function rewriteRakutenUrl(url){

	var params  =  createParamArray(url);
	var redirecturl = params["url"];
	if(rakutenId){
		return "http://pt.afl.rakuten.co.jp/c/" + rakutenId + "/?url="+ redirecturl;
		
	}else{
		return decodeURIComponent(redirecturl);
	}
	throw new Error();

}


function rewriteAmazonUrl(url){
	var newUrl;
	
	//「=sample-22」もしくは「/sample-22」を書き換える
	if(amazonId){

		newUrl=url.replace(/([=\/])\w+-22/i,"$1" + amazonId);
		//RegExp.$1 = "";
	}else{
		newUrl=url.replace(/([=\/])\w+-22/i,"");
		
	}
	
	return newUrl;
}
function rewriteA8Url(url){
	var params  =  createParamArray(url)

	if(a8Id){
		params["a8mat"] = a8Id;
		return (url.substring(0,url.indexOf("?")+1) + params.toString());
	}
	for(var p in params){
		if(p == "a8ejpredirect"){
			return decodeURIComponent(params[p]);
		}
	}
	return url;
	
}


function createParamArray(url){
	var params  = new Array();
	var pos = url.indexOf("?");

	if(pos < 0){
		throw new Error("invalid url :" + url);
		//return params;
	}
	var tmpAry = url.substring(pos+1,url.length).split("&");

	for(var i=0;i<tmpAry.length;i++){
		var str = tmpAry[i];
		var ampersandPos = str.indexOf("=");
		if(ampersandPos < 0){
			params[str] = "";
		}else{
			var key =str.substring(0,ampersandPos);
			var val=str.substring(ampersandPos+1,str.length);
			params[key] = val;
			//alert (key+" :"+val)
		}
	}
	params.toString = function(){
		var thisFunc = this.toString;
		delete this.toString;
		var returnVal = "";
		for(var key in this){
			returnVal =returnVal + key + "=" + this[key] + "&";
		}
		this.toString = thisFunc;
		return returnVal;
	}
	return params;
}

