// Place your application-specific JavaScript functions and classes here
// This file is automatically included by javascript_include_tag :defaults

function addEventListener(target, type, func) {
		if (target == undefined) {return;}
    if (target.attachEvent) {
        target.attachEvent('on' + type, func);
    } else if (target.addEventListener) {
        target.addEventListener(type, func, true);
    } else {
        target['on' + type] = func;
    }
}
/** Cookie Operator */
function getExpDate(days, hours, minutes) {
	var expDate = new Date();
	if (typeof days == "number" && typeof hours == "number" && typeof minutes == "number") {
		expDate.setDate(expDate.getDate() + parseInt(days));
		expDate.setHours(expDate.getHours() + parseInt(hours));
		expDate.setMinutes(expDate.getMinutes() + parseInt(minutes));		
		return expDate.toGMTString();
	}
}

function getCookieVal(offset) {
	var endstr = document.cookie.indexOf(";", offset);
	if (endstr == -1) {
		endstr = document.cookie.length;
	}
	return unescape(document.cookie.substring(offset, endstr));
}

function getCookie(name) {
	var arg = name + "=";
	var alen = arg.length;
	var clen = document.cookie.length;
	var i = 0;
	while (i < clen) {
		var j = i + alen;
		if (document.cookie.substring(i, j) == arg) {
			return getCookieVal(j);
		}
		i = document.cookie.indexOf(" ", i) + 1
		if (i == 0) break;
	}
	return "";
}

function setCookie(name, value, expires, path, domain, secure) {
	document.cookie = name + "=" + escape(value)
		+ ((expires) ? "; expires=" + expires : "")
		+ ((path) ? "; path=" + path : "")
		+ ((domain) ? "; domain=" + domain : "")
		+ ((secure) ? "; secure" : "");
}

function deleteCookie(name, path, domain) {
	if (getCookie(name)) {
		document.cookie = name + "="
			+ ((path) ? "; path=" + path : "")
			+ ((domain) ? "; domain=" + domain : "")
			+ "; expires=Thu, 01-Jan-70 00:00:01 GMT";
	}
}

/** bookmark edit by ajax */
function suggestTags(tagList){
 	var tagsArray = target.value.replace(/　/g, " ") .split(' ').without('');
  var matchText = tagsArray[tagsArray.length - 1];
  if (matchText == undefined || matchText == '' || matchText == ' ') return;
  var lookupTags = tagList.grep(new RegExp("^" + replaceMeta(matchText), "i")).without(matchText);
  var tagsCode = '';
  lookupTags.each(function(tag) {
      tagsCode += '<a href="#"'
      tagsCode += ' onclick="javascript: replaceLastTag(\'' + replaceEscape(tag) + '\'); suggestTags(tagObjList.getNameList); return false;">' 
      tagsCode +=   tag + '</a>&nbsp;';
  });
  $('lookup_tags').innerHTML = tagsCode;
}

function replaceLastTag(tagValue) {
    var delim = ' ';
    var bookmarkTags = document.getElementById('bookmark_tags');
    var tagsArray = bookmarkTags.value.replace(/　/g, ' ').split(' ');
    var anotherTagValues = "";
		tagsArray = tagsArray.without('')
		tagsArray = tagsArray.slice(0, tagsArray.length-1)
		anotherTagValues = tagsArray.join(delim)
    bookmarkTags.value = (anotherTagValues + delim + tagValue).replace(/\s+/, ' ').replace(/(^\s|\s$)/, '');
}

/** bookmark edit normal */
function cleanTagValue(tagValue){
		var delim = ' ';
		var tagsArray = tagValue.replace(/　/g, ' ').split(' ');
		var res = ""
		tagsArray = tagsArray.without('')
		res = tagsArray.join(delim)
		res = res.replace(/\s+/, ' ').replace(/(^\s|\s$)/, '');
		return res;
}

function insertTag(tag) {
    var delim = ' ';
    var bookmarkTags = $('bookmark_tags');
    var tagValue = bookmarkTags.value;
		var regExp = new RegExp('(^| )' + replaceMeta(tag) + '($| )',"g");
    if (tagValue.match(regExp)) {
        bookmarkTags.value = cleanTagValue(tagValue.replace(regExp , ' '));

    } else {
        bookmarkTags.value = cleanTagValue(tagValue + delim + tag);
    }
}
/** deplicated 
function highlightTag(obj) {
    tag = obj.innerHTML;
    var bookmarkTags = $('bookmark_tags');
    var tagValue = bookmarkTags.value;
    if (tagValue.match(new RegExp(replaceMeta(tag),"g"))) {
        obj.style.backgroundColor = "#000000";
        obj.style.color = "#FFFFFF";
    } else {
        obj.style.backgroundColor = "#FFFFFF";
        obj.style.color = "inherit";
    }
}*/

function highlightTags() {
    var posi = "#0066CC";
    var nega = "#FFFFFF";
    var tagValue = $('bookmark_tags').value;
    var tagArray = [];
    var linkArray = $('my_tags').getElementsByTagName('a');
    if (tagValue != undefined && tagValue != '') {
        tagArray = tagValue.split(' ');
    }
    for (var i = 0; i < linkArray.length; i++) {
        var linkText = linkArray[i].innerHTML;
        linkArray[i].style.backgroundColor = nega;
        linkArray[i].style.color = posi;
        linkArray[i].style.textDecoration = "underline";					
  	    for (var j = 0; j < tagArray.length; j++) {
  	        if (linkText == tagArray[j]) {
  	            linkArray[i].style.backgroundColor = posi;
      	        linkArray[i].style.color = nega;
      	        linkArray[i].style.textDecoration = "none";
  	        }
  	    }
    }
}

function replaceEscape (str) {
	var res = str
	str = str.replace(/\\/g,"\\\\");
	str = str.replace(/\'/g,"\\\'");
	str = str.replace(/\"/g,"\\\"");
	return str;
}

function replaceMeta (str) {
    return str.replace(/(\W)/g, "\\$1");
}

/** bookmark-list */
function setTagObjList(objJson){
    tagObjList = objJson;
    tagObjList.getNameList = new function() { 
      var tagNameList = new Array();
      for (var i = 0; i< tagObjList.length; i++){
          tagNameList[i] = tagObjList[i].Tag.name;
      }
      return tagNameList;
  };
  tagObjList.getCountList = new function() { 
      var tagCountList = new Array();
      for (var i = 0; i< tagObjList.length; i++){
          tagCountList[i] = tagObjList[i].Tag.count;
      }
      return tagCountList;
  };
  tagObjList.getStyleList = new function() { 
      var tagStyleList = new Array();
      for (var i = 0; i< tagObjList.length; i++){
          tagStyleList[i] = tagObjList[i].style;
      }
      return tagStyleList;
  };
}

/** -- for ajp --- tags-list, tags-cloud */
function isForwardMatchTag(taeget, value) {
	var searchValue = value
	searchValue = replaceMeta(searchValue);
	return (!taeget.match(new RegExp("^" + searchValue, "i"))); 	
}

