//getElementById() + cache
function getter(){
getter_cache = {};
//Get element by id
this.get = function(id){
if(getter_cache[id]){
return getter_cache[id];
}
getter_cache[id] = document.getElementById( id );
return getter_cache[id];
}
//Clear cache
this.clear_cache = function(){
for(var id in getter_cache)
getter_cache[id] = undefined;
}
}
var _ = new getter();
function toggle_display(id, flag, getter_obj){
var el = getter_obj && getter_obj.get ? getter_obj.get( id ) : document.getElementById( id );
if(!el)
return false;
el.style.display = flag ? '' : 'none';
return true;
}
//Input length tracker
function set_track(el, ml){
if(el.addEventListener){
el.addEventListener('change', get_track_func(el, ml), true);
el.addEventListener('keyup', get_track_func(el, ml), true);
}
else if(el.attachEvent){
el.attachEvent('onchange', get_track_func(el, ml));
el.attachEvent('onkeyup', get_track_func(el, ml));
}
(get_track_func(el, ml))();
}
function get_track_func(el, ml){
return function(){
if(el.value == undefined)
return;
var len = el.value.length;
var track = _.get(el.id + '_track');
track.getElementsByTagName('span')[0].innerHTML = len;
track.getElementsByTagName('div')[0].style.width = (len > ml ? 100 : Math.round(100 * len / ml)) + '%';
if(len > ml)
track.className = 'tracker overflow';
else
track.className = 'tracker';
}
}
//Color table rows if table class="zebra"
function zebra(){
var tables = document.getElementsByTagName('TABLE');
var i = 0, l = tables.length;
var trs, j, l2, cur;
for(; i < l; i++){
if(/\bzebra\b/.test(tables[i].className)){
trs = tables[i].getElementsByTagName('tr');
cur = 0;
for(j = 0, l2 = trs.length; j < l2; j++){
if(/*trs[j].parentNode.tagName == 'THEAD' || */trs[j].parentNode.tagName == 'TFOOT')
continue;
trs[j].className += ' zebra_line' + ((cur % 2) + 1)
cur++;
}
}
}
}
//Make links with class="external" open in new window
function externals(){
var i, l, as = document.getElementsByTagName('A');
for(i = 0, l = as.length; i < l; i++){
if(as[i].className.indexOf('external') != -1)
as[i].onclick = function(){ window.open(this.href); return false; }
}
}
function p_ajax(url, el_id){
if(!_.get(el_id))
return;
url += (url.indexOf('?') == -1 ? '?' : '&') + 'r=' + Math.random();
var span = _.get(el_id).appendChild(document.createElement('SPAN'));
var scrpt = span.appendChild(document.createElement('SCRIPT'));
scrpt.src = url;
}
function popup(src, width, height, title, add_html){
var html = '
' + title + '
' + title + (add_html ? ' ' + add_html : '') + '
';
var x = (screen.width - width) / 2;
var y = (screen.height - height) / 2;
var wnd = window.open('', '', 'toolbar=0,location=1,directories=0,menuBar=0,scrollbars=0,resizable=1,width=' + width + ',height=' + height + ',left=' + x + ',top=' + y + ',screenX=' + x + ',screenY=' + y);
wnd.document.open();
wnd.document.write(html);
wnd.document.close();
}
function NavigateMe(event){
var link;
if(!event && window.event) event = window.event;
if(!event) return;
switch (event.keyCode ? event.keyCode : event.which ? event.which : null){
case 0x25:
link = _.get('PrevLink');
break;
case 0x27:
link = _.get('NextLink');
break;
}
if (link && link.href) document.location = link.href;
}
function addLoadEvent(func) {
var oldonload = window.onload;
if (typeof window.onload != 'function') {
window.onload = func;
}
else {
window.onload = function() {
oldonload();
func();
}
}
}
function align_height(ids, correction){
var max_height = 0, i = 0, l = ids.length, el;
if(!correction)
correction = 0;
//First pass - determine max height
for(; i < l; i++){
if((el = _.get(ids[i])) && (el.offsetHeight > max_height))
max_height = el.offsetHeight;
}
//Second pass - align heights
for(i = 0; i < l; i++){
if((el = _.get(ids[i])))
el.style.height = (max_height + correction) + 'px';
}
}
function move_helper(el, helper_id, e){
if(!e) e = window.event;
if(!e) return;
if(_.get(helper_id)){
_.get(helper_id).style.left = (e.layerX || e.x) + 'px';
_.get(helper_id).style.top = ((e.layerY || e.y) + 25) + 'px';
}
}
function get_flash_movie(movieName){
if(window.document[movieName]){
return window.document[movieName];
}
if(navigator.appName.indexOf("Microsoft Internet")==-1){
if(document.embeds && document.embeds[movieName])
return document.embeds[movieName];
}
else{
return document.getElementById(movieName);
}
}
function validate(form, required, mode){
if(!form)
return false;
if(mode == undefined)
mode = 1;
if(required){
var l = required.length;
var i = 0, el, str = '', err, errcount = 0, regex_err = false, field_name;
for(; i < l; i++){
regex_err = false;
el = form[required[i][0]];
if(!el)
continue;
err = (el.type && (el.type == 'checkbox' || el.type == 'radio') && !el.checked) || ((el.type && (el.type == 'text' || el.type == 'password' || el.type == 'file') || el.tagName == 'TEXTAREA' || el.tagName == 'SELECT' ) && el.value == '');
//See if there is regexp specified
if(!err && required[i][2] && !required[i][2].test(el.value))
err = regex_err = true;
if(err){
field_name = (required[i][1] ? required[i][1] : required[i][0]);
if(mode == 0){
if(regex_err)
alert(field_name + ' (wrong format)');
else
alert(field_name + ' (obligatory field)');
return false;
}
if(mode == 1){
if(regex_err)
str += '- ' + field_name + ' (wrong format)\n';
else
str += '- ' + field_name + ' (obligatory field)\n';
errcount++;
}
}
}
if(str != ''){
str = 'Error' + (errcount != 1 ? 's' : '') + ':\n\n' + str;
alert(str);
return false;
}
}
return true;
}