var isWebKit = /Konqueror|Safari|KHTML/.test(navigator.userAgent);
var isIE = /MSIE/.test(navigator.userAgent);
var isOpera8 = /Opera\s[1-8]/.test(navigator.userAgent);
var isIE8 = /MSIE 8/.test(navigator.userAgent);
var isApple = /Apple/.test(navigator.vendor)


var messageZindex = 1000;


function startProgress() {
    $('headerForm:progressBarContainer').style.display = "";
    $('headerForm:progressBar').component.enabled = true;
    $('headerForm:progressBar').component.setValue(100);
}

function stopProgress() {
    $('headerForm:progressBarContainer').style.display = "none";
    $('headerForm:progressBar').component.disable();
    $('headerForm:progressBar').component.setValue(101);

    drawMapImages();
    showErrorWindowOnLoad();
    addTitleToOptions();

}

function showError(message) {
    if (message.toString().indexOf("\n") > 0) {
        // multiline messages are left-aligned
        message = message.replace("\n", "<br/>", "g");
        message = "<p align='left' style='margin: 0;'>" + message + "</p>";
    }
    $("errorText").innerHTML = message;
    showErrorPopup();
}

function showWarning(message) {
    if (message.toString().indexOf("\n") > 0) {
        // multiline messages are left-aligned
        message = message.replace("\n", "<br/>", "g");
        message = "<p align='left' style='margin: 0;'>" + message + "</p>";
    }
    $("warningText").innerHTML = message;
    showWarningPopup();
}

function showInfo(message) {
    $("headerForm:infoWindowId").innerHTML = message;
    showInfoWindowEffect();
    setTimeout("hideErrorWindowEffect2()", 15000)
}

function showErrorWindowOnLoad() {
    $("headerForm:infoWindowId").style.display = 'none';

    if (currentPopup) {
        currentPopup.hide();
        currentPopup = null;
    }
    /*
     $("errorPopupWindowDiv").style.display = 'none';
     $("warningWindowId").style.display = 'none';
     */

    var messages1 = $("messages1");
    var messages2 = $("messages2");


    var errText1 = messages1 != null && messages1.childNodes[0] != null && messages1.childNodes[0].childNodes[0] != null ? messages1.childNodes[0].childNodes[0].innerHTML : "";
    var errText2 = messages2 != null && messages2.childNodes[0] != null && messages2.childNodes[0].childNodes[0] != null ? messages2.childNodes[0].childNodes[0].innerHTML : "";

    var errText = "";
    var messages = "";

    if (errText1) {
        errText = errText1;
        messages = messages1;
    }

    if (errText2) {
        errText = errText2;
        messages = messages2;
    }


    try {
        messages1.childNodes[0].childNodes[0].innerHTML = '';
    } catch(e) {

    }
    try {
        messages2.childNodes[0].childNodes[0].innerHTML = '';
    } catch(e) {

    }

    if (errText) {
        if (messages.childNodes[0].className == "errorMessageClass") {
            showError(errText)
        } else if (messages.childNodes[0].className == "warnMessageClass") {
            showWarning(errText)
        } else if (messages.childNodes[0].className == "infoMessageClass") {
            showInfo(errText)
        }
    }
}


onload = function() {

    // first we check whether the session is ok
    checkLogin();
    drawMapImages();

    // and now show error window under supported browsers
    showErrorWindowOnLoad();


}


/////////////////////////////////////////////////////////////////////////////
// Aspect ratio

function string_startsWith(string, prefix) {
    return string.match("^" + prefix) == prefix;
}

function string_endsWith(string, postfix) {
    return string.match(postfix + "$") == postfix;
}


var popup;

function isVisible(element) {
    if (typeof(element) == "string") {
        var obj = $(element);
        if (!obj) alert("Object not found: " + element)
    } else {
        obj = element;
    }

    return obj.style.display != 'none';
}


function showCropWindow() {
    document.getElementById('cropPanel_modal').component.show();
    initCrop_modal();
}



function clickButton(evt, parentElement) {
    if (window.event != null) {
        evt = window.event;
    }
    var eventTarget = evt.target ? evt.target : evt.srcElement;
    var links = parentElement.getElementsByTagName("a");

    if (links.length > 0) {
        if (links[0].onclick) {
            if (links[0] != eventTarget) {
        links[0].onclick(evt);
    }
        } else {
            window.location = links[0].href; 
        }
    }
}

function selectAsset(root) {
    var a = root.getElementsByTagName("a");
    for (var i = 0; i < a.length; i++) {
        if (a[i].id.indexOf("assetSelector") > 0) {
            a[i].onclick();
        }
    }
}




////////////////////////////////////////////////////////////////////////////
// Editing presets

function callSuggestion(elem) {
    var id = elem.id;
    id = id.replace(":suggestionButton", "");
    id = id + ":presetTypeSuggestion";
    var control = $(id);
    control.component.callSuggestion(true);
}



function addTitleToOptions(el) {

    if (el == null) {
        el = document;
    }
    var elements = document.getElementsByTagName("option");
    if (elements && elements.length)
        for (var i = 0; i < elements.length; i ++) {
            elements[i].title = elements[i].innerHTML;
        }
}


function showImageMetaPanel() {

    if ($('unableToEditMetadata').value != 'true') {
        $('imageMetaPanel').component.show();
    }
}

function checkLogin() {
    if ($("activeChecker") == null || $("sessionExpiredInfoPanel") == null || $("facesViewId") == null) {
        // If DOM is not ready yet, call ourselves in half a second
        window.setTimeout(checkLogin, 500);
        return;
    }

    if ($("facesViewId").value == "/login.xhtml") {
        // do not show anything on login page
        return;
    }

    if ($("activeChecker").value == "false") {
        $("sessionExpiredInfoPanel").__isVisible = true;
        $("sessionExpiredInfoPanel").component.show();
    } else if ($("sessionExpiredInfoPanel").__isVisible) {
        // reload, even if it's a POST Form
        window.location = window.location.href;
    }
}

function closeMetadataEditorOnSuccessfulSave() {
    if ($('imageMetaEditForm:closeAfterSave')) {
        $('imageMetaEditForm:closeAfterSave').click();
    }
}

function showWarningIfLotBatchAssets(message, count) {
    if (count > 20) {
        showWarning(message);
    }

}

function checkOrderStatus() {

    if ($('orderStatusForm:orderExists').value == 'false') {
        showConfirmPopup();
    }
}


function customExpand(e,input,button) {	
	var inputId = input.id + 'InputDate';
	input = document.getElementById(inputId);
	 if (!this.isRendered) {
		 this.isRendered = true;
		 this.render();		
	 } 
	 
	 if (this.isVisible) {			
			this.doCollapse();
			if (input==this.customInput)
				return true;
		} 
		
		this.skipEventOnCollapse = false;
		if (e && e.type=='click') this.skipEventOnCollapse = true;
		if (!this.params.popup || this.isVisible) return;
		
		var element = $(this.id);
		
				
		if (this.invokeEvent("expand", element, e))
		{
		
			var iframe=null;
			if (Richfaces.browser.isIE6) iframe = $(this.IFRAME_ID);
		
			var base = $(this.POPUP_ID);
			var baseInput = input;
				
			//custom input
			this.customInput = baseInput;
		
			var baseButton = button;
		
			if (baseInput && baseInput.value!=undefined)
			{
				this.selectDate(baseInput.value, false, {event:e, element:element});
			}
		
			//rect calculation
		
			var offsetBase = Position.cumulativeOffset(baseButton);
		
			if (this.params.showInput)
			{
				var offsetBase1 = Position.cumulativeOffset(baseInput);
		
				offsetBase = [offsetBase[0]<offsetBase1[0] ? offsetBase[0] : offsetBase1[0],
					  offsetBase[1]<offsetBase1[1] ? offsetBase[1] : offsetBase1[1]];
				var offsetDimInput = Richfaces.Calendar.getOffsetDimensions(baseInput);
			}
		
			var offsetDimBase = Richfaces.Calendar.getOffsetDimensions(base);
			var offsetDimButton = Richfaces.Calendar.getOffsetDimensions(baseButton);
			var offsetTemp = (window.opera ? [0,0] : Position.realOffset(baseButton));
			var o = {left: offsetBase[0]-offsetTemp[0],
				 top: offsetBase[1]-offsetTemp[1],
				 width: offsetDimBase.width,
				 height: (offsetDimInput && offsetDimInput.height>offsetDimButton.height ? offsetDimInput.height :
				  offsetDimButton.height)};
		
			Richfaces.Calendar.setElementPosition(element, o, this.params.jointPoint,
				  this.params.direction, this.popupOffset);
		
			if (iframe)
			{
				iframe.style.left = element.style.left;
				iframe.style.top = element.style.top;
				var edim = Richfaces.Calendar.getOffsetDimensions(element);
				iframe.style.width = edim.width+'px';
				iframe.style.height = edim.height+'px';
				Element.show(iframe);
			}
			Element.show(element);
		
			this.isVisible = true;
		
			Event.observe(window.document, "click", this.eventOnCollapse, false);
		}
}

function findRealElementId(elementId) {
    if(document.getElementById(elementId)) return elementId;
    for(var  i = 0; i < document.forms.length; i++) {
        if(document.getElementById(document.forms[i].id + ':' + elementId)) {
            return document.forms[i].id + ':' + elementId;
        }
    }
    return null;
}

function notAnimatedShow(elementId) {
	var item = document.getElementById(findRealElementId(elementId)); 	
	if (item) {
		item.style.display = 'block';
	}
}

function notAnimatedHide(elementId) {
	var item = document.getElementById(findRealElementId(elementId)); 	
	if (item) {
		item.style.display = 'none';
	}
}

function metadataApplyButtonClicked() {
	saveProductTab();
	saveVersionHistoryTab();
}

function metadataEditButtonClicked() {
	invalidateProductTab();
	handleMetadataEditMode(true);
}

function metadataRevertButtonClicked() {
	invalidateProductTab();
	handleMetadataEditMode(false);
}

function metadataOkButtonClicked() {
	closeMetadataEditorOnSuccessfulSave();
	saveProductTab();
	saveVersionHistoryTab();
	invalidateProductTab();
	handleMetadataEditMode(false);
}

function metadataCancelButtonClicked() {
	invalidateProductTab();
	handleMetadataEditMode(false);
}

function metadataEditButtonOncomplete(currentTab) {
	if (currentTab == 'imageMetaInPanel_tab9') {
		loadProductTab(true);
	}
	if (currentTab == 'imageMetaInPanel_tab8') {
		loadVersionHistoryTab(true);
	}
}

function metadataResetButtonOncomplete(currentTab) {
	if (currentTab == 'imageMetaInPanel_tab9') {
		loadProductTab(false);
	}
	if (currentTab == 'imageMetaInPanel_tab8') {
		loadVersionHistoryTab(false);
	}
}
