function popUp(URL) {
	day = new Date();
	id = day.getTime();
	eval("page" + id + " = window.open(URL, '" + id + "', 'toolbar=0,scrollbars=1,location=0,statusbar=0,menubar=0,resizable=1,width=980,height=800');");
}

function popUpSize(URL, w, h) {
	day = new Date();
	id = day.getTime();
	eval("page" + id + " = window.open(URL, '" + id + "', 'toolbar=0,scrollbars=1,location=0,statusbar=0,menubar=0,resizable=1,width=" + w + ",height=" + h + "');");
}

function refreshPage(vPage){
    if(vPage == ""){
        window.location.href = window.location.href;
    }else{
	    window.location.href = vPage;
    }
}
// Position finder
function findPosX(obj)
  {
    var curleft = 0;
    if(obj.offsetParent)
        while(1) 
        {
          curleft += obj.offsetLeft;
          if(!obj.offsetParent)
            break;
          obj = obj.offsetParent;
        }
    else if(obj.x)
        curleft += obj.x;
    return curleft;
  }

function findPosY(obj)
  {
    var curtop = 0;
    if(obj.offsetParent)
        while(1)
        {
          curtop += obj.offsetTop;
          if(!obj.offsetParent)
            break;
          obj = obj.offsetParent;
        }
    else if(obj.y)
        curtop += obj.y;
    return curtop;
  }
/*
Field Validation
*/
function trim(str){
   return str.replace(/^\s*|\s*$/g,"");
}

function testRegExp(form_name, element_name, re) {
	return new RegExp(re).test(trim(document.forms[form_name].elements[element_name].value));
}

function validateString(form_name, element_name) {
	return (document.forms[form_name].elements[element_name].value.length > 0);
}

function validateSelection(form_name, element_name) {
	return (document.forms[form_name].elements[element_name].value.length > 0);
}

function validateRadioButton(form_name, element_name) {
	element = document.forms[form_name].elements[element_name];
	isSet = false
	for (i=element.length-1; i > -1; i--) {
		if (element[i].checked)
		{
			isSet = true;
		}
	}
	return isSet
	//return (document.forms[form_name].elements[element_name].selectedIndex >= 0);
}

//case insensitive version
function validateCheckbox(form_name, element_name) {
	return validateCheckBox(form_name, element_name);
}

function validateCheckBox(form_name, element_name) {
	return document.forms[form_name].elements[element_name].checked;
}

function validateCleanString(form_name, element_name) {
	return testRegExp(form_name, element_name, '^[A-Za-z0-9_]+$');
}

function validateEmail(form_name, element_name) {
	return testRegExp(form_name, element_name, '^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+@[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$');
}

function validateAbsUrl(form_name, element_name) {
	return testRegExp(form_name, element_name, '^(news|telnet|nttp|file|http|ftp|https)://[-A-Za-z0-9\\.]+$');
}

function validateNumber(form_name, element_name, allow_blank) {
	return (!allow_blank && value == '') ? false : testRegExp(form_name, element_name, '^-?[0-9]*\\.?[0-9]*$');
}

function validatePhoneNumber(form_name, element_name, allow_blank) {
	return (!allow_blank && value == '') ? false : testRegExp(form_name, element_name, '^[(]?[2-9]{1}[0-9]{2}[) -.]{0,2}' + '[0-9]{3}[- .]?' + '[0-9]{4}[ ]?' + '((x|ext)[.]?[ ]?[0-9]{1,5})?$');
}


function validateForm(form_name, validate_list){
	errors = "Errors in Form:";
	
	for(field_item in validate_list){
		//check if its empty
		field_data = validate_list[field_item];
		if (field_data[3].toLowerCase() == "text"){		
			if (! validateString(form_name, field_data[0])){
				errors = errors + "\n" + field_data[2] + " can not be blank";
			}else{
				//check the validation
				switch(field_data[1].toLowerCase()){
					case "email" :
						if (validateEmail(form_name, field_data[0]) == 0)
						{
							errors = errors + "\n" + field_data[2] + " is not a valid email address.";
						}
						break;
					case "number" :
						if (validateNumber(form_name, field_data[0], true) == 0)
						{
							errors = errors + "\n" + field_data[2] + " is not a valid number.";
						}
						break;
					
					case "phone" :
						if (validatePhoneNumber(form_name, field_data[0], true) == 0)
						{
							errors = errors + "\n" + field_data[2] + " is not a valid phone number.";
						}
						break;
					default : 
						//nothing
						break;
				}			
			}
		}else if(field_data[3].toLowerCase() == "option"){			
			if (validateSelection(form_name, field_data[0]) == 0){
				errors = errors + "\n" + field_data[2] + " must have a selection";
			}
		}else if(field_data[3].toLowerCase() == "checkbox"){
			if (validateCheckbox(form_name, field_data[0]) == 0){
				errors = errors + "\n" + field_data[2] + " must have a selection";
			}
		}else if(field_data[3].toLowerCase() == "radio"){
			if (validateRadioButton(form_name, field_data[0]) == 0){
				errors = errors + "\n" + field_data[2] + " must have a selection";
			}
		}
	}

	if (errors != "Errors in Form:")
	{
		alert(errors);
		return false
	}else{
		return true
	}
}


/*
Admin Functions 
*/
function displayAdminList(url){
	e = document.getElementById("tree_list");
	if (e != null && e != undefined)
	{
		e.src = url;
	}
}


function displayAdminPage(url){
	e = document.getElementById("content");
	if (e != null && e != undefined)
	{
		e.src = url
	}
}

function refreshNav(){
	e = document.getElementById("tree_list");
	if (e != null && e != undefined)
	{
		e.src = e.src;
	}
}

/*
Handles shared value fields, etc
*/
//Used to alert the page when something changes
function formValueChanged(vItem){
	//check the item
	iName = vItem.name;

	if(dependancies == null || dependancies == undefined){
		dependancies = Array();
	}
	if(dependancies[iName] != undefined){
		iToEdit = document.getElementById(dependancies[iName]);
		if (iToEdit != undefined)
		{
			//we have it so now we change the values
			iList = eval(dependancies[iName] + '_options');
			if (iList != undefined)
			{
				//get the list
				iValues = iList[vItem.value.toLowerCase()];
				//clear it
				iToEdit.options.length = 0;
				//remove the groups
				groups = iToEdit.getElementsByTagName("optgroup");
				if (groups.length > 0)
				{
					for(i=groups.length - 1;i>-1;i--){
						iToEdit.removeChild(groups[i]);
					}
				}
				//add them all back in
				if (iValues.length>0)
				{
					for (i=0;i<iValues.length;i++)
					{
						iToEdit.options[iToEdit.options.length] = new Option(iValues[i][0], iValues[i][1]);
					}
				}
			}
		}
	}	
}

//Collects all the current options
function collectOptions(iItem){
	iValueList = Object();
	iElement = document.getElementById(iItem);
	if(iElement != null){
		//get the info
		groups = iElement.getElementsByTagName("optgroup");
		if (groups.length == 0)
		{
			//flat list
			iGroup = Array();
			for(i=0;i<iElement.options.length;i++){
				iOption = iElement.options[i];
				iGroup.push(Array(iOption.text, iOption.value));
			}
			iValueList[""] = iGroup;
		}else{
			//each group
			for(i=0;i<groups.length;i++){
				iGroupOptions = Array();
				iGroupName = groups[i].label.toLowerCase();
				iOptions = groups[i].getElementsByTagName("option");
				if (iOptions.length > 0)
				{
					for(j=0;j<iOptions.length;j++){
						iGroupOptions.push(Array(iOptions[j].text, iOptions[j].value));
					}
				}
				iValueList[iGroupName] = iGroupOptions;
			}

		}
	}
	return iValueList;
}

function wakeUpFireFoxFckeditor(eName){
    return;
    //check for the api
    oEditor = "";
    try{
        var oEditor = FCKeditorAPI.GetInstance(eName) ;
    }catch(e){
    //try back
        setTimeout('wakeUpFireFoxFckeditor("' + eName + '");', 2000);
    }
   
    if(oEditor != ""){
        try
            {
            oEditor.MakeEditable();
            }
        catch (e) {
            oEditor.Focus();
        }
    }
}
//Editor toggles
function changeMarkdownEditorMode(vName, vMode){
    if(vMode == "split"){
        Element.setStyle(vName, {'width': '100%'});
         Element.setStyle(vName + '_entry', {'width': '48%'});
        Element.setStyle(vName + '_outputPane', {'width': '48%'});
        Element.setStyle(vName + '_outputPane', {'overflow': 'auto'});
        [vName + "_ref"].each(Element.hide);
        [vName + '_outputPane', vName, vName + '_entry'].each(Element.show);
    }else if(vMode == "markdown"){
        Element.setStyle(vName, {'width': '100%'});
        Element.setStyle(vName + '_entry', {'width': '100%'});
        [vName + '_outputPane', vName + "_ref"].each(Element.hide);
         Element.setStyle(vName + '_outputPane', {'overflow': 'auto'});
        [vName, vName + '_entry'].each(Element.show);
    }else if(vMode == "preview"){
        Element.setStyle(vName+ '_outputPane', {'width': '100%'});
        [vName , vName + "_ref", vName + '_entry'].each(Element.hide);        
        [vName+ '_outputPane'].each(Element.show);    
         Element.setStyle(vName + '_outputPane', {'overflow': 'auto'});    
    }else if(vMode == "reference"){
        [vName + '_outputPane', vName, vName + '_entry'].each(Element.hide);
        [vName + '_ref'].each(Element.show);
    }else if(vMode == "editreference"){
        Element.setStyle(vName, {'width': '100%'});
        Element.setStyle(vName + '_entry', {'width': '48%'});
        Element.setStyle(vName + '_ref', {'width': '48%'});
        
        [vName + "_outputPane"].each(Element.hide);
         Element.setStyle(vName + '_outputPane', {'overflow': 'auto'});
        [vName + '_ref', vName, vName + '_entry'].each(Element.show);
    }
}

var markdownConverter
function updateMarkupPreview(vName){
    if(markdownConverter == undefined){
        markdownConverter = new Showdown.converter();
    }
    $(vName + "_outputPane").innerHTML = markdownConverter.makeHtml($(vName).value);
}

//Dependanceis
var dependancies = Array();

function previewPopWindow(fName){
    features = 'width=1000,height=800,toolbar=no,location=no,directories=no,menubar=no,scrollbars=yes,copyhistory=no,resizable=yes';
    wName = 'preview';
    pop = window.open('',wName,features);
    if(pop.focus){ pop.focus(); }
    //Target the window
    f = $(fName);
    oldTarget = f.readAttribute('target');
    oldMode = $('mode').value;
    oldAction = f.readAttribute('action');
    $('mode').value='preview';
    f.writeAttribute('target', wName);
    f.writeAttribute('action', "page.php");
    f.submit();
    f.writeAttribute('target', oldTarget);
    $('mode').value=oldMode;
     f.writeAttribute('action', oldAction);
     }