/* Functions for inserting ht_ml in textareas */ 
//javascript

//old code
//function textCounter(field, countfield, maxlimit) {
//		countfield.value = maxlimit - field.value.length;
//}

//new code
var maxLimit = 3900;

var imgBasePath = 'images/Conference/';

var imgStates = {
	"imgBold":			{ imgSrc: imgBasePath+'FM_02.gif', imgOver: imgBasePath+'FM_02-over.gif' },
	"imgItalic":		{ imgSrc: imgBasePath+'FM_03.gif', imgOver: imgBasePath+'FM_03-over.gif' },
	"imgUnderline":		{ imgSrc: imgBasePath+'FM_04.gif', imgOver: imgBasePath+'FM_04-over.gif' },
	"imgQ":				{ imgSrc: imgBasePath+'FM_05.gif', imgOver: imgBasePath+'FM_05-over.gif' },
	"imgQuote":			{ imgSrc: imgBasePath+'FM_06.gif', imgOver: imgBasePath+'FM_06-over.gif' },
	"imgHR":			{ imgSrc: imgBasePath+'FM_07.gif', imgOver: imgBasePath+'FM_07-over.gif' },
	"imgCharacterID":	{ imgSrc: imgBasePath+'FM_09.gif', imgOver: imgBasePath+'FM_09-over.gif' },
	"imgArtistID":		{ imgSrc: imgBasePath+'FM_10.gif', imgOver: imgBasePath+'FM_10-over.gif' },
	"imgSongID":		{ imgSrc: imgBasePath+'FM_11.gif', imgOver: imgBasePath+'FM_11-over.gif' },
	"imgRecordID":		{ imgSrc: imgBasePath+'FM_12.gif', imgOver: imgBasePath+'FM_12-over.gif' },
	"imgMessageID":		{ imgSrc: imgBasePath+'FM_15.gif', imgOver: imgBasePath+'FM_15-over.gif' },
	"imgLocaleID":		{ imgSrc: imgBasePath+'FM_13.gif', imgOver: imgBasePath+'FM_13-over.gif' },
	"imgLink":			{ imgSrc: imgBasePath+'FM_14.gif', imgOver: imgBasePath+'FM_14-over.gif' }
};

var imgClickResults = {
	"imgBold":			{ openingTag: '[b]',		closingTag: '[/b] ',		counter: 0 },
	"imgItalic":		{ openingTag: '[i]',		closingTag: '[/i] ',		counter: 0 },
	"imgUnderline":		{ openingTag: '[u]',		closingTag: '[/u] ',		counter: 0 },
	"imgQ":				{ openingTag: '[q]',		closingTag: '[/q] ', 		counter: 0 },
	"imgQuote":			{ openingTag: '[quote]',	closingTag: '[/quote]' },
	"imgHR":			{ openingTag: '[hr]' },
	"imgCharacterID":	{ openingTag: '[charid=xxx name=yyy] ',			replaceText: 'yyy' },
	"imgArtistID":		{ openingTag: '[artistid=xxx name=yyy] ',		replaceText: 'yyy' },
	"imgSongID":		{ openingTag: '[songid=xxx name=yyy] ',			replaceText: 'yyy' },
	"imgRecordID":		{ openingTag: '[recordid=xxx name=yyy] ',		replaceText: 'yyy' },
	"imgMessageID":		{ openingTag: '[message=xxx.yy] ',				replaceText: 'xxx.yy' },
	"imgLocaleID":		{ openingTag: '[localeid=xxx name=yyy] ',		replaceText: 'yyy' },
	"imgLink":			{ openingTag: '[link=http://xxx text=yyy] ',	replaceText: 'yyy' }
}


function addEvent(obj, evType, fn){
	if (obj.addEventListener) {
		obj.addEventListener(evType, fn, false);
		return true;
	}
	else if (obj.attachEvent) {
		var r = obj.attachEvent("on"+evType, fn);
		return r;
	}
}


function attachEverything() {
	for (img in imgStates) {
		var timg = document.getElementById(img);
		if (timg) {
			addEvent(timg, 'mouseover', function(e) {
											var i = (e.target) ? e.target : window.event.srcElement;
											i.src = imgStates[i.id].imgOver;
											i=null;
										}, false);
										
			addEvent(timg, 'mouseout', function(e) {
											var i = (e.target) ? e.target : window.event.srcElement;
											i.src = imgStates[i.id].imgSrc;
											i=null;
										}, false);
			
			addEvent(timg, 'click', function(e) {
										var i = (e.target) ? e.target:window.event.srcElement; 
										if (getSelection().selectionLength == 0) imgClickResults[i.id].counter++; // prevent selections from counting for opened/closed tag toggle
										imgClickHandler(imgClickResults[i.id].openingTag,
														imgClickResults[i.id].closingTag,
														imgClickResults[i.id].replaceText,
														imgClickResults[i.id].counter);
										i=null;
									}, false);
			timg = null;
		}

		img = null;
	}

	
	var ta = document.getElementById('replyText');
	var tr = document.getElementById('remLen');
	if ((ta) && (tr)) {
		addEvent(ta, 'keydown', function(e) {
									var i = (e.target) ? e.target : window.event.srcElement;
									var breaks = 0;
									var lines = i.value.split('\n');
									breaks = lines.length;
									if(navigator.userAgent.indexOf("Firefox")!=-1){
									document.getElementById('remLen').value = maxLimit - i.value.length - breaks;
									}else{
									document.getElementById('remLen').value = maxLimit - i.value.length;
									}
									i=null;
								}, false);
								
		addEvent(ta, 'keyup', function(e) {
									var i = (e.target) ? e.target : window.event.srcElement;					
									var breaks = 0;
									var lines = i.value.split('\n');
									breaks = lines.length;
									if(navigator.userAgent.indexOf("Firefox")!=-1){
									document.getElementById('remLen').value = maxLimit - i.value.length - breaks;
									}else{
									document.getElementById('remLen').value = maxLimit - i.value.length;
									}
									i=null;
								}, false);

		tr = null;
		ta = null;
	}
}



function imgClickHandler(openingTag, closingTag, replaceText, counter) {
	var ta = document.getElementById('replyText');
	if(ta) {

		// CharacterID, ArtistID, SongID, RecordID, MessageID, LocaleID, Link
		if (replaceText) {
			var s = getSelection();
			var newText = (s.selectionLength > 0)
						? openingTag.replace(replaceText, s.selectedText)
						: openingTag;
						
			
			// Opera, Mozilla
			if (ta.selectionStart || ta.selectionStart == '0') {
				ta.value = s.textBeforeSelection + newText + s.textAfterSelection;

				if ((openingTag.indexOf(' ') > 0) && (openingTag.indexOf(' ') < openingTag.length-1)) {
					ta.selectionStart = s.selectionStart + openingTag.indexOf('=') + 1;
					ta.selectionEnd = ta.selectionStart + openingTag.indexOf(' ') - openingTag.indexOf('=') - 1;
				}

				// MessageID
				else {
					if (s.selectionLength == 0) {
						ta.selectionStart = s.selectionStart + openingTag.indexOf('=') + 1;
						ta.selectionEnd = ta.selectionStart + openingTag.indexOf(']') - openingTag.indexOf('=') - 1;
					}
					else {
						ta.selectionStart = s.selectionStart + newText.length;
						ta.selectionEnd = ta.selectionStart;
					}
				}

			}
			
			// IE
			else if (document.selection) {
				var IESel = document.selection.createRange();
				IESel.text = newText;
				
				if ((openingTag.indexOf(' ') > 0) && (openingTag.indexOf(' ') < openingTag.length-1)) {
					IESel.moveStart('character', openingTag.indexOf('=') + 1 - newText.length);
					IESel.moveEnd('character', openingTag.indexOf(' ') - newText.length);
				}
				
				// MessageID
				else {
					if (s.selectionLength == 0) {
						IESel.moveStart('character', openingTag.indexOf('=') + 1 - newText.length);
						IESel.moveEnd('character', openingTag.indexOf(']') - newText.length);
					}
				}
				
				IESel.select();
			}
			
			// Others
			else {
				ta.value += newText;
			}
		}
		
		
		// B, I, U, Q
		else if ((closingTag) && (counter >= 0)) {
			var s = getSelection();
			var newText = (s.selectionLength > 0)
						? openingTag + s.selectedText + closingTag
						: (counter % 2 == 1)
							? openingTag
							: closingTag;
			
			// Opera, Mozilla
			if (ta.selectionStart || ta.selectionStart == '0') {
				ta.value = s.textBeforeSelection + newText + s.textAfterSelection;
				ta.selectionStart = s.selectionStart + newText.length;
				ta.selectionEnd = ta.selectionStart;
			}
			
			// IE
			else if (document.selection) {
				var IESel = document.selection.createRange();
				IESel.text = newText;
				IESel.select();
			}
			
			// Others
			else {
				ta.value += newText;
			}
		}
		
		
		// Quote
		else if ((closingTag) && !(counter)) {
			ta.value = quoteText + '\n' + ta.value;
		}
		
		
		// HR
		else {
			var s = getSelection();
			
			// Opera, Mozilla
			if (ta.selectionStart || ta.selectionStart == '0') {
				ta.value = s.textBeforeSelection + s.selectedText + openingTag + s.textAfterSelection;

				ta.selectionStart = s.selectionEnd + openingTag.length;
				ta.selectionEnd = ta.selectionStart;
			}
			
			// IE
			else if (document.selection) {
				var IESel = document.selection.createRange();
				IESel.text = s.selectedText + openingTag;
				IESel.select();
			}
			
			// Others
			else {
				ta.value += newText;
			}
		}
	}
}


function getSelection() {
	var ta = document.getElementById('replyText');
	if(ta) {
		ta.focus();
		
		var textAreaContents = {
			completeText:			'',
			selectionStart:			0,
			selectionEnd:			0,
			selectionLength:		0,
			textBeforeSelection:	'',
			selectedText:			'',
			textAfterSelection:		''
		};
		
		
		if (ta.selectionStart || ta.selectionStart == '0') {
			textAreaContents.completeText = ta.value;
			textAreaContents.selectionStart = ta.selectionStart;
			
			// include spaces after selection; Opera selects just the word on dblclick, others include the space following it
			// so we work around that by adding trailing spaces to closing tags and including all trailing whitespace in selection
			while ((ta.value.charAt(ta.selectionEnd) == ' ') && (ta.selectionEnd < ta.value.length)) ta.selectionEnd++;
			
			textAreaContents.selectionEnd = ta.selectionEnd;
			textAreaContents.selectionLength = ta.selectionEnd - ta.selectionStart;
			textAreaContents.textBeforeSelection = ta.value.substring(0, ta.selectionStart);
			
			// trim end of string
			var st = ta.value.substring(ta.selectionStart, ta.selectionEnd);
			while (st.charAt(st.length-1) == ' ') st = st.substring(0, st.length-1);
			
			textAreaContents.selectedText = st;
			textAreaContents.textAfterSelection = ta.value.substring(ta.selectionEnd, ta.value.length);
			return textAreaContents;
		}
		
		else if (document.selection) {
			var tr = document.selection.createRange();
			textAreaContents.completeText = ta.value;
			textAreaContents.selectionStart = 0;
			textAreaContents.selectionEnd = 0;
			textAreaContents.selectionLength = tr.text.length;
			textAreaContents.textBeforeSelection = '';
			
			// trim end of string
			var st = tr.text;
			while (st.charAt(st.length-1) == ' ') st = st.substring(0, st.length-1);
			
			textAreaContents.selectedText = st;
			textAreaContents.textAfterSelection = '';
			return textAreaContents;
		}
	}
}


/* End of textarea manipulation tags */ 

/* generic toggling function */
	function CheckUncheck(ObjectName){
				var ax = document.getElementsByName(ObjectName)
				if(!ax[0].checked){
				for(var i=0;i<ax.length;i++)
   					ax[i].checked=true;
				}else{
				for(var i=0;i<ax.length;i++)
   					ax[i].checked=false;
				}
	}


/**
	 * Numbers < 10 should be presented with a zero in front
	 */
	function fixNumber(number){
		return (number < 10) ? '0' + number : number;
	}

/** Fixed look for month */
	function fixMonth(number){
		number = number + 1
		return (number < 10) ? '0' + number : number;
	}
	
/** Show clock */
	function runClock(timeDiff){
		var now = new Date();
		var newTime;	
		newTime = now.getTime() - timeDiff;
		now.setTime(newTime);
		//var localDate = getLocalDate(now.getFullYear(), fixMonth(now.getMonth()), fixNumber(now.getDate()));
		try{	
		GetElement('time').innerHTML = fixNumber(now.getHours()) + ':' + fixNumber(now.getMinutes()) + ':' + fixNumber(now.getSeconds());
		setTimeout('runClock(timeDiff)',1000);
		} catch(e){
			//do nothing
		}
	}	


/**
* Get element name or id in document
*/
function GetElement(name)
	{
		var ctrl = document.getElementById(name);
		if(null == ctrl){
			ctrl = document.getElementsByName(name)[0];
		}
		return ctrl;
	}

function textCounter(field, countfield, maxlimit) {
	countfield.value = maxlimit - field.value.length;
}


function checkTextarea(theTextArea, lengthLimit) {
       if (theTextArea.value.length > lengthLimit) {
		if (confirm("You have written " + theTextArea.value.length + " characters and only the first " + lengthLimit + " will be accepted. Do you still want to submit this text?")) {
			return true
           } else {
           		theTextArea.focus()
            	return false
           }
       } else {
		return true
       }
}


function changecolor(id,farg) {
	id.style.background=farg;
}

function changeclass(id,tempclass) {
	id.classname=tempclass;
}

function changeValue(theField, newValue) {
	getElement(theField).value = newValue;
}


function changeText(theField, newText) {
	document.getElementByID(theField).text = newText;
}

function meny(objId)
  { 
    var o1 = (document.all) ? document.all[objId] : document.getElementById(objId);
    var image = document.images[objId+'_img'];
    
    if( o1.style.display == 'block' )
    {
      o1.style.display = 'none';
    }
    else if( o1.style.display == 'none' )
    {
      o1.style.display = 'block';
    }
  }
  
  function showHide(objId)
  { 
    var o1 = (document.all) ? document.all[objId] : document.getElementById(objId);
    
    if( o1.style.display == 'block' )
    {
      o1.style.display = 'none';
    }
    else if( o1.style.display == 'none' )
    {
      o1.style.display = 'block';
    }
  }

function openWin(theURL,winName,features) {
  	window.open(theURL,winName,features);
	
}

function sortSelectList(selectID){
var $dd = $(selectID);
if ($dd.length > 0) { // make sure we found the select we were looking for 
    // save the selected value
    var selectedVal = $dd.val();

    // get the options and loop through them
    var $options = $('option', $dd);
    var arrVals = [];
    $options.each(function(){
        // push each option value and text into an array
        arrVals.push({
            val: $(this).val(),
            text: $(this).text()
        });
    });
 
    // sort the array by the value (change val to text to sort by text instead)
	arrVals.sort(function(a, b){
    if(a.text > b.text){
        return 1;
    }
    else if (a.text==b.text){
        return 0;
    }
    else {
        return -1;
    }
	});
 
    // loop through the sorted array and set the text/values to the options
    for (var i = 0, l = arrVals.length; i < l; i++) {
        $($options[i]).val(arrVals[i].val).text(arrVals[i].text);
    }
 
    // set the selected value back
    $dd.val(selectedVal);
	}
}
