// JavaScript Document
// --------------------------------------------------------------------
// Author  : mashimonator
// Create  : 2009/09/28
// Update  : 2009/09/28
// Description : link add icon
// --------------------------------------------------------------------

var addIcon2Links = {
	conf : {
		// icon image path
		imageDir : '/images/global/',
		
		/*
		extension : [
			[ '.pdf', 'ico_pdf.png', 'addIconPdf' ],
			[ '.xls', 'ico_xls.png', 'addIconXls' ],
			[ '.xlsx', 'ico_xls.png', 'addIconXls' ],
			[ '.doc', 'ico_doc.png', 'addIconDoc' ],
			[ '.docx', 'ico_doc.png', 'addIconDoc' ],
			[ '.ppt', 'ico_ppt.png', 'addIconPpt' ],
			[ '.pptx', 'ico_ppt.png', 'addIconPpt' ],
			[ '.zip', 'ico_zip.png', 'addIconZip' ],
			[ '.lzh', 'ico_zip.png', 'addIconZip' ],
			[ '.cab', 'ico_zip.png', 'addIconZip' ],
			[ '.txt', 'ico_txt.png', 'addIconTxt' ]
		],
		*/
		// icon
		extension : [
			[ '.pdf', 'pdf_icon.gif', 'icon_pdf' ]
		],
		
		// other iconitrue='add icon' or falsej
		externalFlag : [ false, 'ico_external.png', 'addIconExternal' ], 
		mailFlag : [ false, 'ico_mail.png', 'addIconMail' ], 
		httpFlag : [ false, 'ico_http.png', 'addIconHttp' ], 
		httpsFlag : [ false, 'ico_https.png', 'addIconHttps' ], 
		blankFlag : [ false, 'ico_blank.png', 'addIconBlank' ],
		
		httpDomain : location.hostname,
		httpsDomain : location.hostname,
		
		url : location.href
	},
	//-----------------------------------------
	// init
	//-----------------------------------------
	init : function() {
		addIcon2Links.addEvent( window, 'load',  addIcon2Links.setStyle );
		addIcon2Links.addEvent( window, 'load',  addIcon2Links.setIcon );
	},
	
	//-----------------------------------------
	// CSS setting
	//-----------------------------------------
	setStyle : function() {
		var imagePath = '';
		if ( addIcon2Links.conf.imageDir.match(/^http:/) || addIcon2Links.conf.imageDir.match(/^https:/) ) {
			imagePath = addIcon2Links.conf.imageDir;
		} else if ( addIcon2Links.conf.imageDir.match(/^[/]/) ) {
			if ( addIcon2Links.conf.url.match(/^https:/) ) {
				imagePath = 'https://' + addIcon2Links.conf.httpsDomain + addIcon2Links.conf.imageDir;
			} else {
				imagePath = 'http://' + addIcon2Links.conf.httpDomain + addIcon2Links.conf.imageDir;
			}
		} else {
			imagePath = addIcon2Links.conf.imageDir;
		}
		// extension
		var len = addIcon2Links.conf.extension.length;
		for (var i = 0; i < len; i++) {
			addIcon2Links.addCssRule('span.' + addIcon2Links.conf.extension[i][2], 'background:url(' + imagePath + addIcon2Links.conf.extension[i][1] + ') no-repeat right center; padding:0 20px 2px 0;margin-right: 3px;');
		}
		// external
		if ( addIcon2Links.conf.externalFlag[0] ) {
			addIcon2Links.addCssRule('a.' + addIcon2Links.conf.externalFlag[2], 'background:url(' + imagePath + addIcon2Links.conf.externalFlag[1] + ') no-repeat right center; padding-right:20px;');
		}
		// mailto
		if ( addIcon2Links.conf.mailFlag[0] ) {
			addIcon2Links.addCssRule('a.' + addIcon2Links.conf.mailFlag[2], 'background:url(' + imagePath + addIcon2Links.conf.mailFlag[1] + ') no-repeat right center; padding-right:20px;');
		}
		// http
		if ( addIcon2Links.conf.httpFlag[0] ) {
			addIcon2Links.addCssRule('a.' + addIcon2Links.conf.httpFlag[2], 'background:url(' + imagePath + addIcon2Links.conf.httpFlag[1] + ') no-repeat right center; padding-right:20px;');
		}
		// https
		if ( addIcon2Links.conf.httpsFlag[0] ) {
			addIcon2Links.addCssRule('a.' + addIcon2Links.conf.httpsFlag[2], 'background:url(' + imagePath + addIcon2Links.conf.httpsFlag[1] + ') no-repeat right center; padding-right:20px;');
		}
		// blank
		if ( addIcon2Links.conf.blankFlag[0] ) {
			addIcon2Links.addCssRule('a.' + addIcon2Links.conf.blankFlag[2], 'background:url(' + imagePath + addIcon2Links.conf.blankFlag[1] + ') no-repeat right center; padding-right:20px;');
		}
	},

	//-----------------------------------------
	// icon setting for link
	//-----------------------------------------
	setIcon : function() {
		var elements = document.getElementsByTagName('A');
		var len = elements.length;
		var len2 = addIcon2Links.conf.extension.length;
		for (var i = 0; i < len; i++) {
			if ( !addIcon2Links.checkTextLink(elements[i]) ) {
				continue;
			}
			var setFlag = false;
			var href = elements[i].getAttribute('href');
			if ( !href ) {
				continue;
			}
			// extension
			for (var x = 0; x < len2; x++) 
			{
				var reg = new RegExp( addIcon2Links.conf.extension[x][0] + '$', 'i' );
				if ( href.match(reg) ) 
				{
					//elements[i].append("<span class='pdfAfter'>&nbsp;</span>");
					elements[i].innerHTML += "<span class='pdfAfter'>&nbsp;</span>";
					elements[i].className += addIcon2Links.conf.extension[x][2];
					setFlag = true;
					break;
				}
			}
			// mailto
			if ( !setFlag && addIcon2Links.conf.mailFlag[0] ) {
				if ( href.match(/^mailto:/i) ) {
					elements[i].className += ' ' + addIcon2Links.conf.mailFlag[2];
					setFlag = true;
				}
			}
			// external
			if ( !setFlag && addIcon2Links.conf.externalFlag[0] && addIcon2Links.conf.httpDomain && addIcon2Links.conf.httpsDomain ) {
				var reg = new RegExp( addIcon2Links.conf.httpDomain );
				var reg2 = new RegExp( addIcon2Links.conf.httpsDomain );
				if ( href.match(/^(http:|https:)/) && ( !href.match(reg) && !href.match(reg2) ) ) {
					elements[i].className += ' ' + addIcon2Links.conf.externalFlag[2];
					setFlag = true;
				}
			}
			// http
			if ( !setFlag && addIcon2Links.conf.httpFlag[0] && addIcon2Links.conf.url.match(/^https:/) && addIcon2Links.conf.httpDomain ) {
				var reg = new RegExp( addIcon2Links.conf.httpDomain );
				if ( href.match(/^http:/) && href.match(reg) ) {
					elements[i].className += ' ' + addIcon2Links.conf.httpFlag[2];
					setFlag = true;
				}
			}
			// https
			if ( !setFlag && addIcon2Links.conf.httpsFlag[0] && addIcon2Links.conf.url.match(/^http:/) && addIcon2Links.conf.httpsDomain ) {
				var reg = new RegExp( addIcon2Links.conf.httpsDomain );
				if ( href.match(/^https:/) && href.match(reg) ) {
					elements[i].className += ' ' + addIcon2Links.conf.httpsFlag[2];
					setFlag = true;
				}
			}
			// blank
			if ( !setFlag && addIcon2Links.conf.blankFlag[0] ) {
				var target = elements[i].getAttribute('target');
				if ( target && target.match('_blank') ) {
					elements[i].className += ' ' + addIcon2Links.conf.blankFlag[2];
				}
			}
		}
	},
	
	//-----------------------------------------
	// add rule stylesheet
	//-----------------------------------------
	addCssRule : function ( selector, declarations ) {
		var sheets = document.styleSheets;
		if ( sheets ) {
			if ( sheets.length < 1 ) {
				var style = document.createElement('style');
				style.setAttribute('type', 'text/css');
				style.innerHTML += selector + '{' + declarations + '}';
				var head = document.getElementsByTagName('HEAD');
				head[0].appendChild(style);
			} else {
				var tSheet = sheets[sheets.length-1];
				if ( document.all ) {
					tSheet.addRule( selector, declarations );
				} else {
					tSheet.insertRule( selector + '{' + declarations + '}', tSheet.cssRules.length );
				}
			}
		}
	},
	
	

	//-----------------------------------------
	// image link check
	//-----------------------------------------
	checkTextLink : function ( element ) {
		var result = true;
		var children = element.childNodes;
		var len = children.length;
		for (var i = 0; i < len; i++) {
			if ( children[i].nodeType == '1' && children[i].nodeName.match(/IMG/i) ) {
				result = false;
				break;
			}
		}
		return result;
	},
	//-----------------------------------------
	// add event
	//-----------------------------------------
	addEvent : function( target, event, func ) {
		try {
			target.addEventListener(event, func, false);
		} catch (e) {
			target.attachEvent('on' + event, func);
		}
	}
}
addIcon2Links.init();