
var locals = {
tagout: false
};
function load() {
if(globals.mypage)
init_tags();
}
function init_tags() {
var tags = $('moveable_tags');
if(tags) {
var f = tags.getElementsByTagName('span');
for(var i = 0; i < f.length; i++) {
f[i].onmousedown = taglist_mousedown;
if(f[i].innerText)
f[i].id = 't_' + f[i].innerText;
else
f[i].id = 't_' + f[i].textContent;
}
}
for(var i = 0; i < globals.webcams.length; i++) {
tags = $('wt_' + globals.webcams[i]);
f = tags.getElementsByTagName('span');
for(var j = 0; j < f.length; j++) {
f[j].setAttribute('webcamid', globals.webcams[i]);
f[j].onmousedown = webcamtaglist_mousedown;
}
}
$('moveable_tag').onkeydown = function(e) {
if(!e)
e = window.event;
var key = null;
if(e.which)
key = e.which;
else
key = e.keyCode;
if(key == 10 || key == 13)
add_tag();
return;
}
document.body.onmouseup = function() {
dnd_remove_webcam_tag();
}
}
function taglist_mousedown(e) {
e = enhanceEvent(e);
var pos = e.getAbsoluteXY();
var tag = getText(this);
dragTag(pos, 'dndtag', tag, 'taglist');
return false;
}
function webcamtaglist_mousedown(e) {
e = enhanceEvent(e);
var pos = e.getAbsoluteXY();
var webcamid = this.getAttribute('webcamid');
var tag = getText(this);
locals.tagout = false;
var n = $('w_' + webcamid);
n.onmouseout = function() { locals.tagout = true; };
n.onmouseover = function() { locals.tagout = false; };
dragTag(pos, 'dndtag', tag, 'webcam_' + webcamid);
return false;
}
function add_tag() {
var n = $('moveable_tag');
var tag = n.value;
if(tag.length == 0)
return;
tag = tag.replace('/', '-', 'g');
tag = tag.replace(/"+/g, '"');
tag = tag.replace(/\s+/g, ' ');
var tags = tag.split(' ');
var combined_tag = '';
for(var i = 0; i < tags.length; i++) {
if(combined_tag.length == 0) {
if(tags[i].charAt(0) == '"') {
if(tags[i].charAt(tags[i].length - 1) != '"')
combined_tag = tags[i].substr(1);
else
add_single_tag(tags[i].substr(1, tags[i].length - 2));
}
else
add_single_tag(tags[i]);
}
else {
combined_tag = combined_tag + ' ' + tags[i];
if(tags[i].charAt(tags[i].length - 1) == '"') {
add_single_tag(combined_tag.substr(0, combined_tag.length - 1));
combined_tag = '';
}
}
}
n.value = '';
return;
}
function add_single_tag(tag) {
if(tag.length == 0 || tag.length == 1)
return;
var tags = $('moveable_tags');
var f = tags.getElementsByTagName('span');
for(var i = 0; i < f.length; i++) {
if(f[i].id == 't_' + tag)
return;
}
var span = $Span();
span.id = 't_' + tag;
span.onmousedown = taglist_mousedown;
span.appendChild($Text(tag));
if(f.length != 0)
tags.appendChild($Text(', '));
tags.appendChild(span);
var taglist = $('moveable_taglist');
webcamid = taglist.getAttribute('webcamid');
if(webcamid) {
update_webcam_taglist('add', webcamid, tag);
save_webcam_tag('add', webcamid, tag);
}
tags = $('tags');
var link = $Link('/tags/' + tag, tag);
li = $Element('li');
li.appendChild(link);
tags.appendChild(li);
return;
}
function dnd_add_webcam_tag(webcam) {
if(_dnd == null)
return;
var source = _dnd.getAttribute('source');
var tag = _dnd.getAttribute('name');
dragEnd();
if(source != 'taglist' && !source.match(/^webcam_(.*)/))
return;
if(tag.length == 0)
return;
var webcamid = webcam.id.substr(2);
update_webcam_taglist('add', webcamid, tag);
save_webcam_tag('add', webcamid, tag);
return;
}
function dnd_remove_webcam_tag() {
if(_dnd == null)
return;
var source = _dnd.getAttribute('source');
var tag = _dnd.getAttribute('name');
dragEnd();
if(locals.tagout == false)
return;
var m = source.match(/^webcam_(.*)/);
if(m == null)
return;
var webcamid = m[1];
var n = $('w_' + webcamid);
n.onmouseout = function() {};
n.onmouseover = function() {};
if(tag.length == 0)
return;
update_webcam_taglist('remove', webcamid, tag);
save_webcam_tag('remove', webcamid, tag);
return;
}
function update_webcam_taglist(mode, webcamid, tag) {
var n = $('wt_' + webcamid);
var tags = globals.tags['w_' + webcamid];
if(mode == 'add') {
for(var i = 0; i < tags.length; i++) {
if(tags[i] == tag)
return;
}
tags.push(tag);
}
else if(mode == 'remove') {
pos = -1;
for(var i = 0; i < tags.length; i++) {
if(tags[i] == tag) {
pos = i;
break;
}
}
if(pos == -1)
return;
tags.splice(pos, 1)
}
clear(n);
var span = null;
for(var i = 0; i < tags.length - 1; i++) {
span = $Span();
span.appendChild($Text(tags[i]));
span.setAttribute('tag', tags[i]);
span.setAttribute('webcamid', webcamid);
span.onmousedown = webcamtaglist_mousedown;
n.appendChild(span);
n.appendChild($Text(', '));
}
if(tags.length > 0) {
span = $Span();
span.appendChild($Text(tags[tags.length - 1]));
span.setAttribute('tag', tags[tags.length - 1]);
span.setAttribute('webcamid', webcamid);
span.onmousedown = webcamtaglist_mousedown;
n.appendChild(span);
}
}
function save_webcam_tag(mode, webcamid, tag) {
var a = new AJAX('/ajax/tag.php', function(response, data) {
if(response == null)
return;
if(response.status != 200)
return;
}, null, false);
a.setParameter('a', mode);
a.setParameter('tag', tag);
a.setParameter('webcamid', webcamid);
a.send();
return;
}
function show_moveable_tags(webcamid) {
var mt = $('mt_' + webcamid);
if(!mt)
return;
hide_moveable_tags();
var tags = $('moveable_taglist');
tags.setAttribute('webcamid', webcamid);
tags.parentNode.removeChild(tags);
mt.appendChild(tags);
$('addlink_' + webcamid).style.visibility = 'hidden';
display(tags, '');
return;
}
function hide_moveable_tags() {
var tags = $('moveable_taglist');
var b = document.getElementsByTagName('body')[0];
webcamid = tags.getAttribute('webcamid');
if(webcamid)
$('addlink_' + webcamid).style.visibility = 'visible';
display(tags, 'none');
tags.removeAttribute('webcamid');
tags.parentNode.removeChild(tags);
b.appendChild(tags);
return;
}

