/* requires neos-utils.js */

var NEOS_NS = "neos"; // Neos namespace

/** Max Leng **/

/*
var MAX_TEXTAREA_LENGTH=255;
function checkMaxInput(textarea) {
	if (textarea.value.length > MAX_TEXTAREA_LENGTH) 
		textarea.value = textarea.value.substring(0, MAX_TEXTAREA_LENGTH);
}

var MAX_COMMENTS_LEN=1000;
function checkMaxInputComments(textarea) {
	maxLen = 1000;
    if (textarea.value.length > MAX_COMMENTS_LEN) 
        textarea.value = textarea.value.substring(0, MAX_COMMENTS_LEN);
}
*/

/** NEO-S rollover images functions. **/


// === Variables ===

// Images cache.
var loadedImages = new Array();

// Suffices array - 1 per an image state. 
// Empty suffix is for 'default' images.
var suffices = new Array(2);
suffices[0] = "";
suffices[1] = "on";

// Preload completion flag.
var loaded = false;

// Defaults.
var defaultPath = "../img/";
var defaultExt = ".png";


// === API ===

/** 
 * Pre-loads image(s) by names.
 *
 * Call example: preLoadByName('test/404.gif', 'delete');
 */
function preLoadByName() {
    if (document.images) {

        // Iterate over arguments.
        var argLen = arguments.length;
        for (var i = 0; i < argLen; i++) {

            // Image name.
            var name = arguments[i];

            // Check for duplicates.
            if (loadedImages[name]) {
                return;
            }
            // Extract path, use default, if none.
            var path = defaultPath;
            var k = name.lastIndexOf('/');
            if (k >= 0) {
                path = name.substring(0, k + 1);
                name = name.substring(k + 1);
            }

            // Extract extension, use default, if none.
            var ext = defaultExt;
            k = name.lastIndexOf('.');
            if (k >= 0) {
                ext = name.substring(k);
                name = name.substring(0, k);
            }

            // Iterate over suffices.
            var sufLen = suffices.length;
            for (j = 0; j < sufLen; j++) {
                var suffix = suffices[j];
                if (suffix != "" && suffix.indexOf('_') != 0) {
                    suffix = '_' + suffix;
                }
                name += suffix;
                loadedImages[name] = new Image();
                loadedImages[name].src = path + name + ext;
            }
        }
        loaded = true;

    }

    // [ONZ] TODO: Debugging code, remove as complete.
    // dumpCache();

}

/** 
 * Pre-loads the given image.
 *
 * @param image The image object.
 */
function preLoadImage(component) {
    if (component) {
        if (component.src) {
            preLoadByName(component.src);
        } else if (component.name) {
            preLoadByName(component.name);
        } else {
            // [ONZ] TODO: Failed - add alert for the developer.
        }
    }
}

/** 
 * Image rollover handler.
 *
 * @param name The image name.
 * @param locale The image locale (optional, use '' for default).
 * @param state The image state, e.g. 'on' (optional).
 */
function rollOver(component, locale, state) {
    var argLen = arguments.length;
    var localeSuffix = "";
    if (argLen >= 2 && locale && locale.length > 0) {
        localeSuffix = '_' + locale;
    }
    var stateSuffix = ((argLen == 3 && state) ? ('_' + state) : "");
    if (document.images && loaded) {
        var loadedImage = loadedImages[name + localeSuffix + stateSuffix];
        if (component && loadedImage) {
            component.src = loadedImage;
        }
        else if (component) {
            showRollover(component, localeSuffix, stateSuffix);
        }
    }
    else if (component) {
        showRollover(component, localeSuffix, stateSuffix);
    }

}

function showRollover(component, localeSuffix, stateSuffix){
   component.src = component.name + localeSuffix + stateSuffix + ".png";
}

function displayRollover(component, imgSrc){
    var loadedImage = loadedImages[imgSrc];    
    if(component&&loadedImage){//already cached
        component.src = loadedImage.src;
    }
    else if(component){ //not cached. LET'S CACHE IT IMMEDIATELY.
        var img = new Image();
        img.src = imgSrc;
        loadedImages[imgSrc] = img;
        component.src = img.src;
    }
}

function displayRolloverStated(component, imgSrc) {
	var attrVal = getElmAttr(component, "disabled", NEOS_NS);
	if (attrVal == null || attrVal == false || attrVal == "false") {
		displayRollover(component, imgSrc);
	}
}

function disableRolloverElem(rolloverElm) {
	var disabledSrc = getElmAttr(rolloverElm, "disabledSrc", NEOS_NS);
	if (rolloverElm && disabledSrc) {
		rolloverElm.src = disabledSrc;
		setElmAttr(rolloverElm, "disabled", true, NEOS_NS);
		setElmAttr(rolloverElm, "disabled", "disabled");
	}
}

function enableRolloverElem(rolloverElm) {
	var defaultSrc = getElmAttr(rolloverElm, "defaultSrc", NEOS_NS);
	if (rolloverElm && defaultSrc) {
		rolloverElm.src = defaultSrc;
		setElmAttr(rolloverElm, "disabled", false, NEOS_NS);	
		remElmAttr(rolloverElm, "disabled");
	}
}

function disableRollover(rolloverId) {
	disableRolloverElem(document.getElementById(rolloverId));
}

function enableRollover(rolloverId) {
	enableRolloverElem(document.getElementById(rolloverId));
}

// === caching images ==

function cacheImages(activeImageURL, inactiveImageURL){
    loadedImages[activeImageURL] = new Image();
    loadedImages[activeImageURL].src = activeImageURL;
    loadedImages[inactiveImageURL] = new Image();
    loadedImages[inactiveImageURL].src = inactiveImageURL;
}

/* Rotate button rollover code */

var doHLAction = true; // state variables to get rid of recursion calls
var doDLAction = true; // state variables to get rid of recursion calls
var overImagesCached = false; 

var ROTATE_LEFT_OVER_SRC  = '../img/button_toolbar_rotate_l_over.gif';
var ROTATE_RIGHT_OVER_SRC = '../img/button_toolbar_rotate_r_over.gif';

// TODO: cache 'over' images

// TODO: needs refactoring	

function rotateButtonHighlight(elm, ev, rLeftElmId, rRightElmId, labelId, callerId) {
	if (doHLAction) {
		doHLAction = false;
		var rotateLeftElm = document.getElementById(rLeftElmId);	
		var rotateRightElm = document.getElementById(rRightElmId);
		var rotateLabel = document.getElementById(labelId);
		if (callerId == labelId) {
			ev = ev || window.event;
			var mouseOffset = getMouseOffset(elm, ev);
			if (mouseOffset.x < (elm.offsetWidth / 2)) {
				if (rotateLeftElm)  { displayRollover(rotateLeftElm,ROTATE_LEFT_OVER_SRC); };
				if (rotateRightElm) { rotateRightElm.onmouseover(); };
			} else {
				if (rotateRightElm) { displayRollover(rotateRightElm,ROTATE_RIGHT_OVER_SRC); };
				if (rotateLeftElm)  { rotateLeftElm.onmouseover(); };
			};
		} else if (callerId == rLeftElmId) {
			if (rotateLabel) rotateLabel.onmouseover();
			if (rotateRightElm) { rotateRightElm.onmouseover(); };
			if (rotateLeftElm)  { displayRollover(rotateLeftElm,ROTATE_LEFT_OVER_SRC); };
		} else if (callerId == rRightElmId) {
			if (rotateLabel) rotateLabel.onmouseover();
			if (rotateLeftElm)  { rotateLeftElm.onmouseover(); };
			if (rotateRightElm) { displayRollover(rotateRightElm,ROTATE_RIGHT_OVER_SRC); };		
		};			
		doHLAction = true;
	}	
}

function rotateButtonDislight(elm, ev, rLeftElmId, rRightElmId, labelId, callerId) {
	if (doDLAction) {
		doDLAction = false;
		var rotateLeftElm = document.getElementById(rLeftElmId);	
		var rotateRightElm = document.getElementById(rRightElmId);
		var rotateLabel = document.getElementById(labelId);
		if (callerId != labelId) { rotateLabel.onmouseout(); };
		if (callerId != rotateRightElm) { rotateRightElm.onmouseout(); };
		if (callerId != rotateLeftElm) { rotateLeftElm.onmouseout(); };
		doDLAction = true;
	}
}

// === Private/debugging functions ===

function dumpCache() {
    var s = "";
    var i = 0;
    for (var k in loadedImages) {
        var d = loadedImages[k];
        s += "\n{" + k + ": " + d;
        s += "\n  src = " + d.src;
        s += "\n}"
        i++;
    }
    s = typeof(loadedImages) + "[" + i + "]" + s;
    alert(s);
}


function changeLanguage(lang){
     var link = document.getElementById("link_"+lang);
     if(link){
//        link.onclick();
         window.location.href = link.href;
     }
}