(function () {
function gen_selector() {
var quirksMode = document.compatMode != 'CSS1Compat';
function log(msg) {
if (window.console) {window.console.log('ID Selector: ' + msg);}
}
function readCookie(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0)
return decodeURIComponent(c.substring(nameEQ.length,c.length));
}
return null;
}
var openidCookie = readCookie('__openid_selector_openid');
var opIdCookie = readCookie('__openid_selector_op_id');
var unameCookie = readCookie('__openid_selector_uname');
var s;
var providers = [{longname: "myOpenID", shortname: "myOpenID", url_suffix: ".myopenid.com/", usercalled: "username", icon: "myopenid.ico", id: 8, website: "https://www.myopenid.com/", openid1: true, url_prefix: "http://", openid2: true}, {longname: "Verisign PIP", shortname: "Verisign", url_suffix: ".pip.verisignlabs.com/", usercalled: "username", icon: "verisign.ico", id: 11, website: "http://pip.verisignlabs.com/", openid1: true, url_prefix: "http://", openid2: true}, {longname: "Vidoop", shortname: "Vidoop", url_suffix: ".myvidoop.com/", usercalled: "username", icon: "vidoop.ico", id: 12, website: "http://www.vidoop.com/", openid1: true, url_prefix: "http://", openid2: true}, {longname: "Clickpass", shortname: "Clickpass", url_suffix: "", usercalled: "username", icon: "clickpass.ico", id: 5, website: "http://www.clickpass.com/", openid1: true, url_prefix: "http://clickpass.com/public/", openid2: true}, {longname: "Flickr", shortname: "Flickr", url_suffix: "", usercalled: "username", icon: "flickr.ico", id: 6, website: "http://www.flickr.com/", openid1: false, url_prefix: "http://www.flickr.com/photos/", openid2: true}, {longname: "Yahoo!", shortname: "Yahoo!", url_suffix: "", usercalled: "yahoo id", icon: "yahoo.ico", id: 15, website: "http://yahoo.com/", openid1: false, url_prefix: "http://me.yahoo.com/", openid2: true}, {longname: "claimID", shortname: "claimID", url_suffix: "", usercalled: "username", icon: "claimid.ico", id: 4, website: "http://claimid.com/", openid1: true, url_prefix: "http://claimid.com/", openid2: false}, {longname: "America Online/AIM", shortname: "AOL", url_suffix: "", usercalled: "screenname", icon: "aol.ico", id: 1, website: "http://www.aol.com/", openid1: true, url_prefix: "http://openid.aol.com/", openid2: false}, {longname: "Google Blogger", shortname: "Blogger", url_suffix: ".blogspot.com/", usercalled: "blog name", icon: "blogger.ico", id: 2, website: "http://www.blogger.com/", openid1: true, url_prefix: "http://", openid2: false}, {longname: "Livejournal", shortname: "Livejournal", url_suffix: ".livejournal.com/", usercalled: "username", icon: "lj.ico", id: 7, website: "http://www.livejournal.com/", openid1: true, url_prefix: "http://", openid2: false}, {longname: "Technorati", shortname: "Technorati", url_suffix: "", usercalled: "username", icon: "technorati.ico", id: 10, website: "http://www.technorati.com/", openid1: true, url_prefix: "http://technorati.com/people/technorati/", openid2: false}, {longname: "Vox", shortname: "Vox", url_suffix: ".vox.com/", usercalled: "username", icon: "vox.ico", id: 13, website: "http://www.vox.com/", openid1: true, url_prefix: "http://", openid2: false}];
var oidTbId = window.idselector_input_id ? window.idselector_input_id : "openid_identifier";
var oidTb = document.getElementById(oidTbId);
if (oidTb == null) {
log('couldn\'t find openid input box with id = ' + oidTbId);
for (i = 0; !oidTb && i < document.forms.length; i++) {
oidTb = document.forms[i].openid_identifier;}
for (i = 0; !oidTb && i < document.forms.length; i++) {
oidTb = document.forms[i].openid_url;}
}
if (oidTb == null) {log('couldn\'t find openid input box'); return;}
var orig = oidTb.value;
var btnIcn = document.createElement('img');
s = btnIcn.style; s.width = '16px'; s.height = '16px';
s.verticalAlign = 'middle'; s.padding = '0px'; s.border = '0px';
s.margin = '0px'; s.display = 'inline';
var btnMkr = document.createElement('div');
btnMkr.innerHTML = "";
var arrow = document.createElement('img');
arrow.src = "https://www.idselector.com/images/arrow.gif";
arrow.style.display = 'inline';
var btn = btnMkr.firstChild;
btnMkr.removeChild(btn);
btn.id = '__idselector_button';
btn.style.cursor = "pointer";
btn.appendChild(btnIcn);
btn.appendChild(document.createTextNode(" "));
btn.appendChild(arrow);
var popup = document.createElement('iframe');
popup.frameBorder = 0; popup.scrolling = 'no';
s = popup.style; s.display = 'none'; s.position = 'absolute';
s.width = '400px'; s.height = '0px'; s.margin = '0px'; s.padding = '0px'; s.zIndex = 10000;
s.border = '0px';
var prnt = oidTb.parentNode;
var target = null;
if (window.idselector_target_id) {
target = document.getElementById(window.idselector_target_id);
if (!target) {log("couldn't find element with id " + window.idselector_target_id);}
}
if (target) {
target.insertBefore(btn, target.firstChild);
} else {
prnt.insertBefore(btn, oidTb.nextSibling);
prnt.insertBefore(document.createTextNode(" "), btn);
}
document.body.appendChild(popup);
var pdoc = popup.contentWindow.document;
pdoc.open();
pdoc.write('
ID Selector');
pdoc.close();
var pbody = pdoc.body;
var back = pdoc.createElement('img');
back.style.verticalAlign = "middle"; back.style.cursor = "pointer";
back.src = "https://www.idselector.com/images/arrow_white_back.png";
var forward = pdoc.createElement('img');
forward.style.verticalAlign = "middle"; forward.style.cursor = "pointer";
forward.src = "https://www.idselector.com/images/arrow_white_forward.png";
var headRight = pdoc.createElement('div');
headRight.style[document.all ? 'styleFloat' : 'cssFloat'] = 'right';
headRight.innerHTML = 'Get an OpenID';
var header = pdoc.createElement('div');
s = header.style; s.fontWeight = "bold"; s.color = "#fff";
s.padding = "2px 8px 2px 8px";
header.appendChild(headRight);
header.appendChild(pdoc.createTextNode("Sign in with OpenID using"));
var nameLabel = pdoc.createElement('span');
nameLabel.appendChild(pdoc.createTextNode("xxx:"));
var nameTb = pdoc.createElement('input');
nameTb.type = "text";
nameTb.size = 20;
s = nameTb.style; s.verticalAlign = 'middle'; s.padding = '2px 2px 2px 20px';
s.backgroundRepeat = 'no-repeat'; s.backgroundPosition = '2px 2px';
var footer = pdoc.createElement('div');
s = footer.style;
s.color = "#fff";
s.padding = "2px 8px 2px 8px";
s.textAlign = "right";
s.position = "relative";
footer.appendChild(nameLabel);
footer.appendChild(pdoc.createTextNode(" "))
footer.appendChild(nameTb);
function Cell(grid, idx) {
this.grid = grid;
this.idx = idx;
var td = this.td = pdoc.createElement('td');
s = td.style;
s.fontWeight = "bold";
s.padding = "4px";
s.verticalAlign = "middle";
s.cursor = "pointer";
var _this = this;
td.onmouseover = function () {
_this.onMouseOver();
}
td.onmouseout = function () {
_this.onMouseOut();
}
td.onclick = function () {
_this.onClick();
}
var provider = providers[idx];
var icon = pdoc.createElement("img");
icon.src = provider ? ('https://www.idselector.com/static/opicons/' + provider.icon) :
'https://www.idselector.com/images/openid.ico';
icon.style.width = "16px";
icon.style.height = "16px";
icon.style.verticalAlign = "middle";
td.appendChild(icon);
td.appendChild(pdoc.createTextNode(" "));
td.appendChild(pdoc.createTextNode(provider ? provider.shortname : "Other OpenID"));
this.selected = false;
}
_ = Cell.prototype = {};
_.onMouseOver = function () {
if (!this.selected) {
this.td.style.backgroundColor = "#eee";
}
}
_.onMouseOut = function () {
if (!this.selected) {
this.td.style.backgroundColor = "";
}
}
_.onClick = function () {
this.grid.select(this);
provider = providers[this.idx];
if (this.idx == -1) {
oidTb.value = 'http://';
oidTb.focus();
} else {
if (provider["openid2"] && !provider["openid1"]) {
oidTb.focus();
setTimeout(hidePopup, 1);
} else {
nameTb.focus();
nameTb.select();
}
}
}
_.setSelected = function (selected) {
this.td.style.backgroundColor = selected ? '#c6d9e8' : "";
this.selected = selected;
}
function Grid() {
this.table = pdoc.createElement('table');
this.table.style.backgroundColor = "#FFF";
this.table.style.width = "100%";
this.table.style.border = "1px solid #6e91af";
this.tbody = pdoc.createElement('tbody');
this.table.appendChild(this.tbody);
this.maxOffset = (Math.ceil(providers.length/12) - 1) * 12;
this.cells = [];
for (var i = 0; i < providers.length; i++) {
this.cells[i] = new Cell(this, i);
}
this.rows = [pdoc.createElement('tr'), pdoc.createElement('tr'),
pdoc.createElement('tr'), pdoc.createElement('tr')];
this.otherCell = new Cell(this, -1);
var links = pdoc.createElement('td');
links.style.padding = "4px";
links.style.textAlign = "right";
links.style.verticalAlign = "middle";
links.colSpan = 2;
links.innerHTML = 'Help';
var bottom_row = pdoc.createElement('tr');
bottom_row.style.borderTop = "1px solid #AAA";
bottom_row.appendChild(this.otherCell.td);
bottom_row.appendChild(links);
for (var j = 0; j < 4; j++) {this.tbody.appendChild(this.rows[j]);}
this.tbody.appendChild(bottom_row);
this.offset = 0;
}
_ = Grid.prototype = {};
_.forward = function() {
this.offset = Math.min(this.offset + 12, this.maxOffset)
this.gen();
}
_.back = function() {
this.offset = Math.max(this.offset - 12, 0)
this.gen();
}
_.gen = function() {
for (var i = 0; i < 4; i++) {
var row = this.rows[i];
while (row.firstChild) {row.removeChild(row.firstChild);}
}
for (var i = 0; i < 12; i++) {
var row = this.rows[Math.floor(i/3)];
var cell = this.cells[this.offset + i];
if (cell) {
row.appendChild(cell.td);
} else {
row.appendChild(pdoc.createElement('td'));
}
}
forward.style.visibility = (this.offset == this.maxOffset) ? 'hidden' : '';
back.style.visibility = (this.offset == 0) ? 'hidden' : '';
popup.style.height = (pbody.offsetHeight + 2) + "px";
}
_.select = function (cell) {
if (this.curr) {
this.curr.setSelected(false);
}
this.curr = cell;
cell.setSelected(true);
if (cell.idx > -1) {
var provider = providers[cell.idx];
if (provider["openid2"] && !provider["openid1"]) {
nameLabel.style.visibility = 'hidden';
nameTb.style.visibility = 'hidden';
oidTb.value = provider['website'];
} else {
nameLabel.style.visibility = '';
nameTb.style.visibility = '';
nameLabel.removeChild(nameLabel.firstChild);
var s = pdoc.createTextNode(provider.longname + " " +
provider.usercalled + ":");
nameLabel.appendChild(s);
nameTb.style.backgroundImage = 'url(https://www.idselector.com/static/opicons/' + provider.icon + ')';
oidTb.value = provider.url_prefix + "username" +
provider.url_suffix;
nameTb.value = "username";
}
btnIcn.src = 'https://www.idselector.com/static/opicons/' + provider.icon;
} else {
nameLabel.style.visibility = 'hidden';
nameTb.style.visibility = 'hidden';
btnIcn.src = 'https://www.idselector.com/images/openid.ico';
}
}
_.setName = function (name) {
var p = providers[this.curr.idx];
oidTb.value = p.url_prefix + name + p.url_suffix;
}
var grid = new Grid();
grid.gen();
pbody.appendChild(header);
pbody.appendChild(grid.table);
pbody.appendChild(footer);
function showPopup() {
var scrolled = window.ActiveXObject ? (quirksMode ? document.body.scrollLeft : document.documentElement.scrollLeft) : window.pageXOffset;
var viewportWidth = quirksMode ? document.body.clientWidth : document.documentElement.clientWidth;
var xUpper = viewportWidth + scrolled - 401;
var x = oidTb.offsetLeft;
var y = oidTb.offsetTop;
if (oidTb.clientTop) {
y += oidTb.clientTop;
} else if (document.defaultView &&
document.defaultView.getComputedStyle) {
var cs = document.defaultView.getComputedStyle(oidTb, '');
y += parseInt(cs.getPropertyValue('border-top-width'));
y += parseInt(cs.getPropertyValue('border-bottom-width'));
}
var w = oidTb.offsetParent;
while (w) {
x += w.offsetLeft;
y += w.offsetTop;
if (w.clientLeft) {
x += w.clientLeft;
y += w.clientTop;
} else if (document.defaultView &&
document.defaultView.getComputedStyle) {
var cs = document.defaultView.getComputedStyle(w, '');
y += parseInt(cs.getPropertyValue('border-top-width'));
x += parseInt(cs.getPropertyValue('border-left-width'));
}
w = w.offsetParent;
}
y = y + oidTb.offsetHeight;
x = Math.max(Math.min(x, xUpper), 0);
var s = popup.style; s.left = x + "px"; s.top = y + "px";
s.display = 'block'; s.height = (pbody.offsetHeight + 2) + "px";
var html = document.body.parentNode;
}
function hidePopup() {
popup.style.display = 'none';
}
function cursorEnd(tb) {
if (tb.isTextEdit) {
var rng = tb.createTextRange();
if (rng) {
rng.move("character", tb.value.length);
rng.select();
}
}
}
function oidFocus() {
if (oidTb.value == "Click to Sign In") {
oidTb.value = 'http://';
}
cursorEnd(oidTb);
showPopup();
}
btn.onclick = function(e) {
(popup.style.display == 'none') ? showPopup() : hidePopup();
if (e) {e.cancelBubble = true;} /* safari */
return false;
}
btn.onfocus = function () {
btn.blur();
}
forward.onclick = function() {
grid.forward();
}
back.onclick = function() {
grid.back();
}
oidTb.onkeypress = function(e) {
var key;
if(window.event) {
key = window.event.keyCode;
} else if(e.which) {key = e.which;}
if (key != 13 && key != 9) {
grid.select(grid.otherCell);
}
}
nameTb.onkeydown = function(e) {
var key;
if(popup.contentWindow.event) {
key = popup.contentWindow.event.keyCode;
} else if(e.which) {key = e.which;}
if (key == 13 || key == 9) {
setTimeout(function () {
oidTb.onfocus = oidFocus;
oidTb.focus();
setTimeout(hidePopup, 1);
}, 1);
}
}
nameTb.onkeyup = function() {
var val = this.value;
if (!val) {
val = "username";
this.value = val;
this.select();
}
grid.setName(val);
}
oldOnResize = window.onresize;
window.onresize = function (evt) {
try {
if (popup.style.display == 'block') {
showPopup();
}
} finally {
oldOnResize && oldOnResize(evt);
}
}
oldOnScroll = window.onscroll;
window.onscroll = function (evt) {
try {
if (popup.style.display == 'block') {
showPopup();
}
} finally {
oldOnScroll && oldOnScroll(evt);
}
}
if (opIdCookie) {
var cell = null;
for (var i = 0; i < providers.length; i++) {
if (providers[i].id == opIdCookie) {
cell = grid.cells[i];
}
}
if (cell) {
grid.select(cell);
nameTb.value = unameCookie;
}
}
if (!grid.curr) {
grid.select(grid.otherCell);
}
if (openidCookie) {
oidTb.value = openidCookie;
} else if (orig.length == 0) {
oidTb.value = "Click to Sign In";
}
function createCookie(name,value,days) {
if (days) {
var date = new Date();
date.setTime(date.getTime()+(days*24*60*60*1000));
var expires = "; expires="+date.toGMTString();
}
else var expires = "";
document.cookie = name+"="+encodeURIComponent(value)+expires+"; path=/";
}
oidTb.onfocus = oidFocus;
var form = null;
prnt = oidTb.parentNode;
while (prnt && prnt.nodeType == 1) {
if (prnt.nodeName == 'FORM') {
form = prnt;
break;
}
prnt = prnt.parentNode;
}
if (form) {
var oldOnSubmit = form.onsubmit;
form.onsubmit = function(evt) {
try {
createCookie('__openid_selector_openid', oidTb.value, 365);
if (grid.curr.idx > -1) {
var opId = providers[grid.curr.idx].id;
createCookie('__openid_selector_op_id', opId, 365);
createCookie('__openid_selector_uname', nameTb.value, 365);
} else {
createCookie('__openid_selector_op_id','',-1);
createCookie('__openid_selector_uname','',-1);
}
} finally {
if (oldOnSubmit) {
return oldOnSubmit(evt);
}
}
};
}
if (window.ActiveXObject) {
document.body.parentNode.attachEvent('onclick', function() {
if (window.event.srcElement != oidTb &&
window.event.srcElement != btn) {
hidePopup();
}
});
} else {
document.body.parentNode.addEventListener('click', function(evt) {
if (evt.target != oidTb && evt.target != btn) {hidePopup();}
}, false);
}
}
var oldOnLoad = window.onload;
window.onload = function(evt) {
try {
gen_selector();
} finally {
return oldOnLoad && oldOnLoad(evt);
}
}
})();