/*
HMM
*/
function $V(elem)
{
	return document.getElementById(elem).value;
}


/*
 UPDATERS 
*/
function set_updater(obj_id, url)
{
	set_spinner(obj_id);
	setTimeout('new Ajax.Updater("'+obj_id+'", "'+url+'", {method: "post"})', 250);
}

function set_updater_2(obj_id, url, opt)
{
	if(opt == undefined) opt = 'method: "post"';
	else opt = opt+", method: 'post'";

	set_spinner_2(obj_id);
	setTimeout('new Ajax.Updater("'+obj_id+'", "'+url+'", {'+opt+'})', 250);
}

function set_updater_small(obj_id, url)
{
	set_spinner_small(obj_id);
	setTimeout('new Ajax.Updater("'+obj_id+'", "'+url+'", {method: "post"})', 250);

}

function set_updater_simple(obj_id, url)
{
	setTimeout('new Ajax.Updater("'+obj_id+'", "'+url+'", { method: "post"})', 250);
}

/*
SPINNERS
*/
function set_spinner(obj_id)
{
	if($(obj_id) != null)
	{
		$(obj_id).update('<img src="/_img/ajax-loader.gif" style="margin: 10px 0 0 20px;" />');
	}	
}

function set_spinner_2(obj_id)
{
	$(obj_id).update('<img src="/_img/ajax-loader.gif" />');
}

function set_spinner_small(obj_id)
{
	$(obj_id).update('<img src="/_img/ajax-loader-small.gif" />');
}

function set_spinner_verbose(obj_id, text)
{
	$(obj_id).update('<img src="/_img/ajax-loader-small.gif" />&nbsp;'+text);
}

function set_spinner_prepend(obj_id, prepend)
{
	$(obj_id).update(prepend+'<img src="/_img/ajax-loader.gif" />');
}

/*
DEVELOPERS 
*/
function dev_edit_inplace(id)
{
	if(dev_editing)
	{
		dev_edit_inplace_submit(id);
		return;
	}

	dev_editing = true;

	objn = $("dvn_"+id);
	objs = $("dvs_"+id);
	obje = $("dve_"+id);

	objn.update('<input type="text" id="_iped_n" value="'+dev_valn[id]+'" onkeydown="if(event.keyCode==13) dev_edit_inplace_submit('+id+');" />');
	objs.update('<input type="text" id="_iped_s" value="'+dev_vals[id]+'" onkeydown="if(event.keyCode==13) dev_edit_inplace_submit('+id+');" />');
	obje.update('<input type="text" id="_iped_e" value="'+dev_vale[id]+'" onkeydown="if(event.keyCode==13) dev_edit_inplace_submit('+id+');" />');
}
function dev_edit_inplace_submit(id)
{
	_vn = $("_iped_n").value;
	_vs = $("_iped_s").value;
	_ve = $("_iped_e").value;

	dev_valn[id] = __encode(_vn);
	dev_vals[id] = _vs;
	dev_vale[id] = _ve;

	if((_vn == "") || (_vs == "") || (_ve == "")) return;

	objn = $("dvn_"+id);
	objs = $("dvs_"+id);
	obje = $("dve_"+id);

	objn.update('<b>'+_vn+'</b>');
	objs.update('<a href="'+_vs+'" target="_blank">'+_vs+'</a>');
	obje.update('<a href="mailto:'+_ve+'">'+_ve+'</a>');

	set_updater_small("dev_spinner_"+id, "/index.php?silent=1&module=windows&submodule=Developer&cmd=EditDeveloper&dev_id="+id+"&n="+escape(_vn)+"&s="+escape(_vs)+"&e="+escape(_ve));

	dev_editing = false;
}

/*
OTHER
*/

function poll_submit(obj, url)
{
	elem = obj.elements;
	chosen = -2;

	for(i=0; i<elem.length; i++)
	{
		if(elem[i].nodeName.toLowerCase() != "input") continue;
		if(elem[i].checked) chosen = elem[i].value;
	}

	if(chosen == -2) alert("Please make a choice!");
	else
	{
		set_updater("poll_data_container", url+"&chosen="+chosen);
	}
}

function __encode(str)
{
	var str2 = str.replace(/&/,"&amp;");
	str2 = str2.replace(/\"/,"&quot;");
	str2 = str2.replace(/</,"&lt;");
	str2 = str2.replace(/>/,"&gt;");

	return str2;
}

/**
*
* Javascript sprintf
* http://www.webtoolkit.info/
*
*
**/

sprintfWrapper = {

    init : function () {

        if (typeof arguments == 'undefined') { return null; }
        if (arguments.length < 1) { return null; }
        if (typeof arguments[0] != 'string') { return null; }
        if (typeof RegExp == 'undefined') { return null; }

        var string = arguments[0];
        var exp = new RegExp(/(%([%]|(\-)?(\+|\x20)?(0)?(\d+)?(\.(\d)?)?([bcdfosxX])))/g);
        var matches = new Array();
        var strings = new Array();
        var convCount = 0;
        var stringPosStart = 0;
        var stringPosEnd = 0;
        var matchPosEnd = 0;
        var newString = '';
        var match = null;

        while (match = exp.exec(string)) {
            if (match[9]) { convCount += 1; }

            stringPosStart = matchPosEnd;
            stringPosEnd = exp.lastIndex - match[0].length;
            strings[strings.length] = string.substring(stringPosStart, stringPosEnd);

            matchPosEnd = exp.lastIndex;
            matches[matches.length] = {
                match: match[0],
                left: match[3] ? true : false,
                sign: match[4] || '',
                pad: match[5] || ' ',
                min: match[6] || 0,
                precision: match[8],
                code: match[9] || '%',
                negative: parseInt(arguments[convCount]) < 0 ? true : false,
                argument: String(arguments[convCount])
            };
        }
        strings[strings.length] = string.substring(matchPosEnd);

        if (matches.length == 0) { return string; }
        if ((arguments.length - 1) < convCount) { return null; }

        var code = null;
        var match = null;
        var i = null;

        for (i=0; i<matches.length; i++) {

            if (matches[i].code == '%') { substitution = '%' }
            else if (matches[i].code == 'b') {
                matches[i].argument = String(Math.abs(parseInt(matches[i].argument)).toString(2));
                substitution = sprintfWrapper.convert(matches[i], true);
            }
            else if (matches[i].code == 'c') {
                matches[i].argument = String(String.fromCharCode(parseInt(Math.abs(parseInt(matches[i].argument)))));
                substitution = sprintfWrapper.convert(matches[i], true);
            }
            else if (matches[i].code == 'd') {
                matches[i].argument = String(Math.abs(parseInt(matches[i].argument)));
                substitution = sprintfWrapper.convert(matches[i]);
            }
            else if (matches[i].code == 'f') {
                matches[i].argument = String(Math.abs(parseFloat(matches[i].argument)).toFixed(matches[i].precision ? matches[i].precision : 6));
                substitution = sprintfWrapper.convert(matches[i]);
            }
            else if (matches[i].code == 'o') {
                matches[i].argument = String(Math.abs(parseInt(matches[i].argument)).toString(8));
                substitution = sprintfWrapper.convert(matches[i]);
            }
            else if (matches[i].code == 's') {
                matches[i].argument = matches[i].argument.substring(0, matches[i].precision ? matches[i].precision : matches[i].argument.length)
                substitution = sprintfWrapper.convert(matches[i], true);
            }
            else if (matches[i].code == 'x') {
                matches[i].argument = String(Math.abs(parseInt(matches[i].argument)).toString(16));
                substitution = sprintfWrapper.convert(matches[i]);
            }
            else if (matches[i].code == 'X') {
                matches[i].argument = String(Math.abs(parseInt(matches[i].argument)).toString(16));
                substitution = sprintfWrapper.convert(matches[i]).toUpperCase();
            }
            else {
                substitution = matches[i].match;
            }

            newString += strings[i];
            newString += substitution;

        }
        newString += strings[i];

        return newString;

    },

    convert : function(match, nosign){
        if (nosign) {
            match.sign = '';
        } else {
            match.sign = match.negative ? '-' : match.sign;
        }
        var l = match.min - match.argument.length + 1 - match.sign.length;
        var pad = new Array(l < 0 ? 0 : l).join(match.pad);
        if (!match.left) {
            if (match.pad == '0' || nosign) {
                return match.sign + pad + match.argument;
            } else {
                return pad + match.sign + match.argument;
            }
        } else {
            if (match.pad == '0' || nosign) {
                return match.sign + match.argument + pad.replace(/0/g, ' ');
            } else {
                return match.sign + match.argument + pad;
            }
        }
    }
}

sprintf = sprintfWrapper.init;


/*
[PORTABLE?] COPY TO CLIPBOARD
*/
function copyToClipboard(s)
{
	if( window.clipboardData && clipboardData.setData )
	{
		clipboardData.setData("Text", s);
	}
	else
	{
		// You have to sign the code to enable this or allow the action in about:config by changing
		//user_pref("signed.applets.codebase_principal_support", true);
		netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');

		var clip = Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interfaces.nsIClipboard);
		if (!clip) return;

		// create a transferable
		var trans = Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable);
		if (!trans) return;

		// specify the data we wish to handle. Plaintext in this case.
		trans.addDataFlavor('text/unicode');

		// To get the data from the transferable we need two new objects
		var str = new Object();
		var len = new Object();

		var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);
		str.data=s;

		trans.setTransferData("text/unicode",str,s.length*2);

		var clipid=Components.interfaces.nsIClipboard;

		if (!clip) return false;

		clip.setData(trans,null,clipid.kGlobalClipboard);	   
	}
}

/* TOGGLER */
function news_category_toggle(id)
{
	var trs = $$('tr[rel="tr_news_catlist_'+id+'"]');
	var hidden = readCookie("news_category_collapse_"+id);

	if(hidden == '1')
	{
		$('nav_icon_'+id).src = '/_img/generic/gen_open.png';
		createCookie("news_category_collapse_"+id, 0, 30);
	}
	else
	{
		$('nav_icon_'+id).src = '/_img/generic/gen_closed.png';
		createCookie("news_category_collapse_"+id, 1, 30);
	}

	for(var i=0; i<trs.length; i++) 
	{
		if(hidden == '1') trs[i].className = "visible";
		else trs[i].className = "invisible";
	}
}

function news_category_hide(id)
{
	var trs = $$('tr[rel="tr_news_catlist_'+id+'"]');

	$('nav_icon_'+id).src = '/_img/generic/gen_closed.png';
	for(var i=0; i<trs.length; i++) trs[i].className = "invisible";
}

/* COOKIE WRAPPERS */
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+"="+value+expires+"; path=/";
}

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 c.substring(nameEQ.length,c.length);
	}

	return null;
}

/* VALIDATION FUNCTIONS */
function validate_date(day, month, year, field)
{
	var errors = '';
	if ( day == "dd" || day == "" || month == "mm" || month == "" || year == "yyyy" || year == "" ) errors = errors + ' - ' + field + ' lipseste\n';
	else
	{
		if ( !isNumeric(day) || day < 0 || day > 31 ) errors += ' - ' + field + ': wrong day\n';
		if ( !isNumeric(month) || month < 0 || month > 12 ) errors += ' - ' + field + ': wrong month\n';
		if ( !isNumeric(year) || year < 1900 || year > 2200 ) errors += ' - ' + field + ': wrong year\n';
	}
	return errors;
}

function isNumeric(value)
{
	if (value == null || !value.toString().match(/^\d*$/)) return false;
	return true;
}

/* ADDED BY CATALIN TRANDAFIR 06.08.2008 */
function serialize_elements_by_title(ttl)
{
	ser1 = new Hash();
	ids = new Array();

	$$('input,textarea,select').each(
		function(el)
		{
				if (el.title && el.title == ttl)
				{
					// don't double iterate stuff
					if (el.id)
					{
						if ( !ids[el.id] ) ids[el.id] = 1;
						else throw $break;
					}

					ser1 = ser1.merge($H(Form.serializeElements([el], true)));
				}
		}
	);

	return ser1;
}