/**
 * @(#) $RCSfile: 40.css,v $ $Revision: 1.2 $ $Date: 2003/02/06 18:21:15 $
 *
 * JavaScript utilities including Ajax
 *
 * @author      Johan Bakken & Geir Arne Brevik
 * @version     $Revision: 1.2 $ $Date: 2003/02/06 18:21:15 $
 * @since       TRAFO3.0
 */
 
// 
function return_short_date(){
	var today = new Date();
	var month = today.getMonth() + 1;
    if (month < 10) {
		month = '0' + month;
	}
	var day = today.getDate();
    if (day < 10) {
		day = '0' + day;
	}
	var year = today.getFullYear();
	
	return day + '.' + month + '.' + year;
}

function return_long_date(){
	var today = new Date();
	var hours = today.getHours();
    if (hours < 10) {
		hours = '0' + hours;
	}
	var minutes = today.getMinutes();
    if (minutes < 10) {
		minutes = '0' + minutes;
	}
	
	return return_short_date() + ' ' + hours + ':' + minutes;
}

function confirmDelete(title){
	var yes=confirm("Er du sikker på at du vil slette «" + title + "»?\nDette kan ikke gjøres om, og vil fjerne alle kommentarer, favorittmarkeringer og stikkord som henviser til bidraget.");
	if(yes){
        return true;
	}
	else{
        return false;
	}
}

function confirmDeleteBlogpost(title){
	var yes=confirm("Er du sikker på at du vil slette «" + title + "»?\nDette kan ikke gjøres om, og vil fjerne alle kommentarer som henviser til nyheten.");
	if(yes){
        return true;
	}
	else{
        return false;
	}
}

function confirmDeleteWorkshop(title){
	var yes=confirm("Er du sikker på at du vil slette «" + title + "»?\nDette kan ikke gjøres om.");
	if(yes){
        return true;
	}
	else{
        return false;
	}
}

/*
    var preview_visible = false;
    var date_now        = return_long_date();

    var pixels_pr_frame     = 5;    // how many pixels to add in each loop
    var time;
*/
    /**function change_height
     *
     * Animate y-growth of supplied DOM-element
     *
     * @param string element_to_anim ID name of the object to animate 
     *
     */ 
/*
    function change_height(element_to_anim, in_height, out_height)
    {
        var element = document.getElementById(element_to_anim);
        var element_height = element.style.height.substring(0,element.style.height.lastIndexOf("p"));
        if (element_height < out_height) {
            in_height += pixels_pr_frame;  
        } else if (element_height < out_height) {
            in_height -= pixels_pr_frame;  
        }
        element.style.height = in_height + 'px';
        time = setTimeout("change_height('" + element_to_anim + "'," + in_height + "," + out_height + ");",0);
    } // END function change_height
*/    
    
    
    /**function display_preview
     *
     * Display live preview area with headline, date and <div> containers for 
     * other preview functions (see below). 
     *
     */ 
/*
    function display_preview(){
        preview_visible = true;
        
        // call animated expand
        change_height('preview_area', 10, 150);
    
        var headline = '<h3>Forhåndsvisning</h3>';
        var target   = document.getElementById('preview_area');
        
        target.innerHTML  = headline;
        target.innerHTML += '<div id="name_preview"></div>';
        target.innerHTML += '<span class="date">' + date_now + '</span><br />';
        target.innerHTML += '<p id="comment_preview"></p>';
    } // END function display_preview
*/    
    
    /**function preview_name
     *
     * Preview name supplied by user in input field rendered in XHTML
     *
     */ 
/*
    function preview_name()
    {
        if (!preview_visible) {
            display_preview();
        }

        var target = document.getElementById('name_preview');    	
    	var guest_name = document.getElementById('guest_name').value;
    	var username   = document.getElementById('username').value;
    	var uname	   = document.getElementById('uname').value;
    	
    	if (username) {
	        var source = '<a href="/medlem/' + uname + '/" title="">' + username + '</a>';
		} else {
			var source = guest_name;
		}
        if (source) {
            target.innerHTML = '<h3>' + source + ' skrev...</h3>';
        } else {
            target.innerHTML = '';
        }
    } // END function preview_name
*/    
    
    /**function preview_url
     *
     * Preview URL supplied by user in input field rendered in XHTML, combined with the user's name
     *
     */ 
/*
    function preview_url()
    {
        var source = document.getElementById('guest_url');
        var target = document.getElementById('name_preview');
        var name   = document.getElementById('guest_name');
        
        if (name.value && source.value) {
            target.innerHTML = '<h3><a href="' + source.value + '">' + name.value + '</a> skrev...</h3>';
        } else if (name.value && !source.value) {
            target.innerHTML = '<h3>' + name.value + ' skrev...</h3>';
        } else {
            target.innerHTML = '';
        }
    } // END function preview_url
*/

    
    /**function preview_comment
     *
     * Preview the textarea comment field as rendered in XHTML, processed with Textile
     *
     */ 
/*
    function preview_comment()
    {
        if (!preview_visible) {
            display_preview();
        }
            
        var source = document.getElementById('comment');
        var target = document.getElementById('comment_preview');
     
        target.innerHTML = superTextile(source.value);
    } // END function preview_comment
*/    
    
    /**function preview_user_comment
     *
     * Preview the textarea comment field as rendered in XHTML, processed with Textile
     * adds the username of the logged in user
     *
     */ 
/*
    function preview_user_comment()
    {
        if (!preview_visible) {
            display_preview();
        }
		preview_name();
		
        var source = document.getElementById('comment');
        var target = document.getElementById('comment_preview');
     
        target.innerHTML = superTextile(source.value);
    } // END function preview_comment
*/    

    /**function superTextile
     * Support for basic Textile text processing.
     * This function is from Jeff Minard - http://www.creatimation.net/
     * adapted from code by Stuart Langridge at http://www.kryogenix.org/
     *
     * @param string s String with textile formatting to be processed
     * @return string XHTML encoded output.
     */ 
    function superTextile(s) {
        var r = s;
        // quick tags first
        qtags = [['\\*', 'strong'],
                 ['\\?\\?', 'cite'],
                 ['\\+', 'ins'],  //fixed
                 ['~', 'sub'],   
                 ['\\^', 'sup'], // me
                 ['@', 'code']];
        for (var i=0;i<qtags.length;i++) {
            ttag = qtags[i][0]; htag = qtags[i][1];
            re = new RegExp(ttag+'\\b(.+?)\\b'+ttag,'g');
            r = r.replace(re,'<'+htag+'>'+'$1'+'</'+htag+'>');
        }
        // underscores count as part of a word, so do them separately
        re = new RegExp('\\b_(.+?)_\\b','g');
        r = r.replace(re,'<em>$1</em>');
	
    	//jeff: so do dashes
        re = new RegExp('[\s\n]-(.+?)-[\s\n]','g');
        r = r.replace(re,'<del>$1</del>');

        // links
        re = new RegExp('"\\b(.+?)\\(\\b(.+?)\\b\\)":([^\\s]+)','g');
        r = r.replace(re,'<a href="$3" title="$2">$1</a>');
        re = new RegExp('"\\b(.+?)\\b":([^\\s]+)','g');
        r = r.replace(re,'<a href="$2">$1</a>');

        // images
        re = new RegExp('!\\b(.+?)\\(\\b(.+?)\\b\\)!','g');
        r = r.replace(re,'<img src="$1" alt="$2">');
        re = new RegExp('!\\b(.+?)\\b!','g');
        r = r.replace(re,'<img src="$1">');
    
        // block level formatting
	
            // Jeff's hack to show single line breaks as they should.
    		// insert breaks - but you get some....stupid ones
	       re = new RegExp('(.*)\n([^#\*\n].*)','g');
	       r = r.replace(re,'$1<br />$2');
		   // remove the stupid breaks.
	       re = new RegExp('\n<br />','g');
	       r = r.replace(re,'\n');
	
        lines = r.split('\n');
        nr = '';
        for (var i=0;i<lines.length;i++) {
            line = lines[i].replace(/\s*$/,'');
            changed = 0;
            if (line.search(/^\s*bq\.\s+/) != -1) { line = line.replace(/^\s*bq\.\s+/,'\t<blockquote>')+'</blockquote>'; changed = 1; }
		
    		// jeff adds h#.
            if (line.search(/^\s*h[1-6]\.\s+/) != -1) { 
	           	re = new RegExp('h([1-6])\.(.+)','g');
	    	    line = line.replace(re,'<h$1>$2</h$1>');
    			changed = 1; 
    		}
		
    		if (line.search(/^\s*\*\s+/) != -1) { line = line.replace(/^\s*\*\s+/,'\t<liu>') + '</liu>'; changed = 1; } // * for bullet list; make up an liu tag to be fixed later
            if (line.search(/^\s*#\s+/) != -1) { line = line.replace(/^\s*#\s+/,'\t<lio>') + '</lio>'; changed = 1; } // # for numeric list; make up an lio tag to be fixed later
            if (!changed && (line.replace(/\s/g,'').length > 0)) line = '<p>'+line+'</p>';
            lines[i] = line + '\n';
        }
	
        // Second pass to do lists
        inlist = 0; 
    	listtype = '';
        for (var i=0;i<lines.length;i++) {
            line = lines[i];
            if (inlist && listtype == 'ul' && !line.match(/^\t<liu/)) { line = '</ul>\n' + line; inlist = 0; }
            if (inlist && listtype == 'ol' && !line.match(/^\t<lio/)) { line = '</ol>\n' + line; inlist = 0; }
            if (!inlist && line.match(/^\t<liu/)) { line = '<ul>' + line; inlist = 1; listtype = 'ul'; }
            if (!inlist && line.match(/^\t<lio/)) { line = '<ol>' + line; inlist = 1; listtype = 'ol'; }
            lines[i] = line;
        }

        r = lines.join('\n');
    	// jeff added : will correctly replace <li(o|u)> AND </li(o|u)>
        r = r.replace(/li[o|u]>/g,'li>');

        return r;
    }
    
    // titles of the upload tabs
    // var upload_tabs_names = new Array('Bilde / Lyd / Film','Tekst');
    // id's of the tabs. 
    //var upload_tabs      = new Array('upload_tab_file','upload_tab_text');
    // tab to be visible when the page is loaded
    // var default_upload_tab   = 'upload_tab_file';
    

    

    function toggle_upload_tabs(tab) {
        // hook up the selected tab to the DOM
        var tab = document.getElementById(tab);
    
        // loop through all the tabs
        for (i=0; i<upload_tabs.length; i++) {
            // get the status of the tab we're at in the loop
            var current_tab = document.getElementById(upload_tabs[i]);
            var current_tab_status = current_tab.className;

            if (tab == current_tab) {
                // set the selected tab visible
                current_tab.className = 'visible'; 
            } else { 
                // set all other tabs invisible
                current_tab.className = 'invisible'; 
            }
        }
    } // END function toggle_tabs 
    
    function print_upload_tab_menu(){
        // write the XHTML code
        document.write('<div id="upload_tab_menu">');
        document.write('<ul>');
        for (i=0; i<upload_tabs.length; i++) {
            document.write('<li class="upload_tab tab' + i + '"><a href="#" onClick="toggle_upload_tabs(\'' + upload_tabs[i] + '\')">' + upload_tabs_names[i] + '</a></li>');
        }
        document.write('</ul>');
        document.write('</div>');
    }
    
    function print_upload_progress()
    {
        document.write('<div id="uploadprogress"></div><div class="invisible"><img src="/gfx/upload_anim.gif" width="140" height="140" alt="Opplasting pågår" /></div>');
    }
    
    function uploadAnim()
    {
        textcontent = document.getElementById('textcontent');
        file0       = document.getElementById('file0');
    
        if (textcontent.value || file0.value) {
            var set_visible   = document.getElementById('uploadprogress');
            set_visible.className = 'invisible'; 
            set_visible.innerHTML = '<p>Bidraget ditt blir lastet opp. Ikke forlat denne siden før du automatisk er sendt videre. Hvor lang tid det tar kommer an på størrelsen på filen du har valgt og hastigheten på internettoppkoblingen din.</p><p><img src="/gfx/upload_anim.gif" width="140" height="140" alt="Opplasting pågår" /></p>';
            set_visible.className = 'visible';           
            return true;        
        } else {
            alert('Du må velge en fil på datamaskinen din eller skrive/kopiere inn en tekst.');
            return false;
        }
    }
    
    
    /**
     * Pop a variety of windows
     */
    function winPop ( url, width, height, xpos, ypos, toolbar, scrollbar, resizable, name )
    {
        var wspec = "width="  + width  + ",";
        var hspec = "height=" + height + ",";
        var xspec = "screenX=" + xpos + ",left=" + xpos + ",";
        var yspec = "screenY=" + ypos + ",top="  + ypos + ",";

        var toolspec   = (toolbar)   ? "toolbar=yes,"    : "toolbar=no,";
        var scrollspec = (scrollbar) ? "scrollbars=yes," : "scrollbars=no,";
        var resizspec  = (resizable) ? "resizable=yes,"  : "resizable=no,";

        var specs  = wspec + hspec + xspec + yspec;
        specs += toolspec + scrollspec + resizspec;
        specs += "status=no,titlebar=no,directories=no";

        var popper = window.open(url,name,specs);
        if (window.focus) popper.focus();
    }


    
    /**function addLoadEvent
     *
     * Web standards-proof strategy for loading JavaScript actions at page load
     * since the onLoad="" is deprecated.
     * Written by Simon Willison:
     * http://simon.incutio.com/archive/2004/05/26/addLoadEvent
     *
     * @param function func Function to run at page load
     *
     */
    function addLoadEvent(func) {
        var oldonload = window.onload;
        if (typeof window.onload != 'function') {
            window.onload = func;
        } else {
            window.onload = function() {
                oldonload();
                func();
            }
        }
    }


    /**function addLoadEvent
     *
     * Function(s) to be parsed by addLoadEvent()
     * Sets the default tab visible and the other invisible at page load
     *
     */
    //addLoadEvent(function() {
    //    toggle_upload_tabs(default_upload_tab);
    //})  
    
document.getElementsByClassName = function (needle)
{
  var         my_array = document.getElementsByTagName("*");
  var         retvalue = new Array();
  var        i;
  var        j;

  for (i = 0, j = 0; i < my_array.length; i++)
  {
    var c = " " + my_array[i].className + " ";
    if (c.indexOf(" " + needle + " ") != -1)
      retvalue[j++] = my_array[i];
  }
  return retvalue;
}
function addEvent(obj, evType, fn)
{
	if (obj.addEventListener)
	{
		obj.addEventListener(evType, fn, true);
		return true;
	} 
	else if (obj.attachEvent)
	{
		var r = obj.attachEvent("on"+evType, fn);
		return r;
	} 
	else 
	{
		return false;
	}
}