/**
* JavaScript basic.js for Webfriend CMS
* 
*/

/* Open new browser windows */
function Fenster_light(URL) {light_fenster=window.open(URL,'Webfriend_Hilfe','scrollbars=1,menubar=0,toolbar=0,status=0,resizable=1,width=900,height=700');}
function Fenster_normal(URL) {light_fenster=window.open(URL,'Webfriend','scrollbars=1,menubar=0,toolbar=1,status=0,resizable=1,width=900,height=700');}
function Fenster_open(URL, width, height) {light_fenster=window.open(URL,'Webfriend','scrollbars=1,menubar=0,toolbar=1,status=0,resizable=1,width='+width+',height='+height);}

function submit_change_lang(lang) {
    var fo = document.wf.name ? document.wf : document.wf[0],
        i = fo.elements.length;
    
    // delete form_id from elements
    while (i--) {
        if (fo.elements[i].name === 'form_id')
            fo.elements[i].parentNode.removeChild(fo.elements[i])
    }
	
	if (fo && fo.elements['change_lang']) {
		fo.elements['change_lang'].value = lang;
		fo.submit();
	}
}

function setShowClearance(clearance) {
	// alert(clearance);
 	if (clearance=='10') {
		removeClassName(document.getElementById('set'), 'clearanceForRelease');
		removeClassName(document.getElementById('set'), 'clearanceRelease');
		document.getElementById('set').className += " clearanceEdit";
		// document.getElementById('set').style.borderLeft = '.6em solid #ff9542';
	}
	else if (clearance=='20') {
		removeClassName(document.getElementById('set'), 'clearanceEdit');
		removeClassName(document.getElementById('set'), 'clearanceRelease');
		document.getElementById('set').className += " clearanceForRelease";
		// document.getElementById('set').style.borderLeft = '.6em solid yellow';
	}

	return true;
}

function removeClassName(el, name) {

  var i, curList, newList;

  if (el.className == null)
    return;

  // Remove the given class name from the element's className property.

  newList = new Array();
  curList = el.className.split(" ");
  for (i = 0; i < curList.length; i++)
    if (curList[i] != name)
      newList.push(curList[i]);
  el.className = newList.join(" ");
}

function addslashes(str) {
    str=str.replace(/\\/g,'\\\\');
    str=str.replace(/\'/g,'\\\'');
    str=str.replace(/\"/g,'\\"');
    str=str.replace(/\0/g,'\\0');
    return str;
}

// Check the lenght of characters in textarea
function checkLength(obj, maxLength) {
	if(obj != null) {
		if(maxLength == null) maxLength = 250;
		
		var str = addslashes(obj.value)
		
		strLength=str.length;
		
		if(strLength==1 && obj.value.substring(0,1)=='') {
			obj.value='';
			strLength=0;
		}
		if(strLength > maxLength) {
			document.getElementById(obj.id + '_charCount').className = "number warning";
		} else {
			document.getElementById(obj.id + '_charCount').className = "number";
		}
		charsLeft=maxLength-strLength;
        
		document.getElementById(obj.id + '_charCount').innerHTML=charsLeft;
		/*document.getElementById(obj.id + '_charCount').value=charsLeft; for input fields*/
	}
}

// back: original: Check the lenght of characters in textarea
function checkLength_bak(obj, maxLength) {
	if(obj != null) {
		if(maxLength == null) maxLength = 250;

		strLength=obj.value.length;
		
		if(strLength==1 && obj.value.substring(0,1)=='') {
			obj.value='';
			strLength=0;
		}
		if(strLength > maxLength) {
			obj.value=obj.value.substring(0,maxLength);
			charsLeft=0;
		} else {
			charsLeft=maxLength-strLength;
		}

		document.getElementById(obj.id + '_charCount').value=charsLeft;
	}
}

// test: Check the lenght of characters in textarea
function checkLength_test2(id, maxLength) {
	if(maxLength == null) maxLength = 108;
	
	//	alert(id);
	var strLength=document.getElementById(id).value.length;
	/*
	if(strLength==1 && obj.value.substring(0,1)=='') {
		//obj.value='';
		strLength=document.getElementById(id).value='';
		strLength=0;
	}
	*/
	if(strLength > maxLength) {
		document.getElementById(id).value=document.getElementById(id).value.substring(0,maxLength);
		// obj.value=obj.value.substring(0,maxLength);
		charsLeft=0;
	} else {
		charsLeft=maxLength-strLength;
	}

	document.getElementById(id + '_charCount').value=charsLeft;
}

// adds an event-handler to object
// it is possible to do an <a onmouseover=""> without writing that in html
// example: addEvent(mails[i], 'click', createMailtoLink), secure_mails.js
addEvent = function (element, type, handler) {
    // assign each event handler a unique ID
    if (!handler.$$guid) handler.$$guid = addEvent.guid++;
    // create a hash table of event types for the element
    if (!element.events) element.events = {};
    // create a hash table of event handlers for each element/event pair
    var handlers = element.events[type];
    if (!handlers) {
        handlers = element.events[type] = {};
        // store the existing event handler (if there is one)
        if (element["on" + type]) {
            handlers[0] = element["on" + type];
        }
    }
    // store the event handler in the hash table
    handlers[handler.$$guid] = handler;
    // assign a global event handler to do all the work
    element["on" + type] = handleEvent;
};
// a counter used to create unique IDs
addEvent.guid = 1;

removeEvent = function (element, type, handler) {
    // delete the event handler from the hash table
    if (element.events && element.events[type]) {
        delete element.events[type][handler.$$guid];
    }
};

handleEvent = function (event) {
    var returnValue = true;
    // grab the event object (IE uses a global event object)
    event = event || fixEvent(window.event);
    // get a reference to the hash table of event handlers
    var handlers = this.events[event.type];
    // execute each event handler
    for (var i in handlers) {
        this.$$handleEvent = handlers[i];
        if (this.$$handleEvent(event) === false) {
            returnValue = false;
        }
    }
    return returnValue;
};

fixEvent = function (event) {
    // add W3C standard event methods
    event.preventDefault = fixEvent.preventDefault;
    event.stopPropagation = fixEvent.stopPropagation;
    return event;
};
fixEvent.preventDefault = function() {
    this.returnValue = false;
};
fixEvent.stopPropagation = function() {
    this.cancelBubble = true;
};


var save_clicked = false;
preventDefault = function (e)
{
    if (!e) e = event;
    e.preventDefault ? e.preventDefault() : e.returnValue = false;
};
deactivateSaveButtons = function (e)
{
    if (save_clicked === true) {
        preventDefault(e);
        return false;
    }
    save_clicked = true;
    
    var save_images = document.getImageElementsByClassName('save_image'),
        i = 0;
    if (save_images) {
        for (i; i < save_images.length; i = i + 1) {
            save_images[i].src = save_images[i].src.replace(/\.(\w{3,4})$/g, "_inactive.$1");
        }
    }
};
addDeactivateSaveButtonsHandler = function()
{
    var save_buttons = document.getAncorElementsByClassName('save_button'),
        i = 0,
        image;
    
    if (save_buttons) {
        for (i; i < save_buttons.length; i = i + 1) {
            addEvent(save_buttons[i], "click", deactivateSaveButtons);
        }
        // preload images, ie won't show up the image when not preloaded
        save_images = document.getImageElementsByClassName('save_image');
        if (save_images && save_images.length > 0) {
            image = document.createElement("img");
            image.setAttribute("src", save_images[0].src.replace(/\.(\w{3,4})$/g, "_inactive.$1"));
            image.style.display = "none";
            document.getElementsByTagName("body")[0].appendChild(image);
        }
    }
};
addEvent(window, 'load', addDeactivateSaveButtonsHandler);


// this function gets executed when a user clicks on a delete button of a file field
function deletePreviewFile(el)
{
    var input = $("#" + el.attr("id")).children("input"),
        name = input[0].id.split('_');
    
    input.remove();
    
    name.splice(3); // get rid of "data" if present
    name.push('delete') // add delete
    
    el.append('<input type="hidden" value="1" name="' + name.join('_') + '"/>')
};

// appends event handlers for file-fields. the two supported events are for the preview and the 
// delete button
function addDeletePreviewFileHandler()
{
    var delete_buttons = $('a.fieldFileDelete'),
        file_info = Object;
    
    delete_buttons.unbind('click').bind('click', function() {
        deletePreviewFile($(this).parents('.field').map(function() {if (this.id !== "") return this;}));
        file_info = $(this).closest(".fieldFileInfo");
        file_info.fadeTo("fast", 0, function(){
            file_info.slideUp("fast", function(){
                //file_info.remove();
            });
        });
        return false;
    });
    // check, detail, edit, edit with lupe
    $('.fieldFileDocument a,a.fieldFilePreview,.fieldFileDocumentEdit a').unbind('click').click(function() {
        Fenster_normal(this.href);
        return false;
    });
    $('.fieldFileActions a.fieldFilePreview').unbind('click').click(function() {
        Fenster_normal($(this).parents('.fieldFileInfo').find('.fieldFileDocumentEdit a').attr('href'));
        return false; 
    });
};
$(addDeletePreviewFileHandler);

// helpers

document.getAncorElementsByClassName = function (className)
{
    var el = document.getElementsByTagName('a'),
        return_el = [],
	    i = 0;
	
	for (i; i < el.length; i = i + 1) {
	    if (hasClass(el[i], className)) {
	        return_el.push(el[i])
	    }
	}
	return return_el;
};
document.getImageElementsByClassName = function (className)
{
    var el = document.getElementsByTagName('img'),
        return_el = [],
	    i = 0;
	
	for (i; i < el.length; i = i + 1) {
	    if (hasClass(el[i], className)) {
	        return_el.push(el[i])
	    }
	}
	return return_el;
};
document.getSpanElementsByClassName = function (className)
{
    var el = document.getElementsByTagName('span'),
        return_el = [],
	    i = 0;
	
	for (i; i < el.length; i = i + 1) {
	    if (hasClass(el[i], className)) {
	        return_el.push(el[i])
	    }
	}
	return return_el;
};

document.getAncestor = function (node, predicate)
{
    var last = false;
    while (node !== null && !(last = predicate(node))) {
        node = node.parentNode;
    }
    return last ? node : null;
};

document.getAncestorByClassName = function (el, className)
{
    return document.getAncestor(el, function (el) {
        return hasClass(el, className);
    });
};

hasClass = function (el, name)
{   
    return el.className.match(new RegExp('(\\s|^)' + name + '(\\s|$)'));
};

if (typeof window.DOMParser == "undefined") {
    var DOMParser = function () {}
    
    DOMParser.prototype.parseFromString = function (str, contentType) {
        if (window.ActiveXObject) {
            var d = new ActiveXObject("MSXML.DomDocument");
            d.async = false;
            d.loadXML(str);
            return d;
        } else if (window.XMLHttpRequest) {
            var req = new XMLHttpRequest;
            req.open("GET", "data:" + (contentType || "application/xml") + ";charset=utf-8," + encodeURIComponent(str), false);
            if (req.overrideMimeType) {
                req.overrideMimeType(contentType);
            }
            req.send(null);
            return req.responseXML;
        }
    }
}



