    blockMultipleKeyPress = false;    
    var onlineTimeout = 60 * 1000;

    function checkOnline(onlineAjaxUrl) {
        var ajax = new Ajax.Request(onlineAjaxUrl, {method: 'get', parameters: '', onComplete: ''});
        setTimeout('checkOnline(onlineAjaxUrl);', onlineTimeout);
    }

    function limitText(limitField, limitNum, counterField) {
        if (limitField.value.length > limitNum) {
      		limitField.value = limitField.value.substring(0, limitNum);
      	} else {
      		$(counterField).innerHTML = limitNum - limitField.value.length;
      	}
    }
    
    // blinker options
    var blinkerPause = 1000;        // blinker shown  (time)
    var blinkerSpeed = 500;         // blinker hidden (time)
    var blinkerTimer = new Array(); // blinker timer
    blinkerBlocked = false;  
    
    function textBlinkerUpdater(objectId, blinkerId) {
        
        var funcArgs = new Array();
        var object = $(objectId);
        
        funcArgs = textBlinkerUpdater.arguments;
        
        if ((funcArgs.length > 2) && (funcArgs[2] != '')) {
            // mouse over blinking text, clear timers
            clearInterval(blinkerTimer[blinkerId]);
            object.style.display = 'inline';
            blinkerBlocked = true;
        } else {
            // mouse out or object has content for blinking
            blinkerBlocked = false;
            blinkerTimer[blinkerId] = setInterval('textBlinker(\'' + objectId + '\')', blinkerPause);
        } 
    }
    function textBlinker(objectId) {
        if (!blinkerBlocked) { 
            var object = $(objectId);
            object.style.display = 'inline';
            setTimeout('document.getElementById(\''+objectId + '\').style.display="none"', blinkerSpeed);
        }
    }

    //
    //  getPageSize()
    //
    function getPageSize() {
    
        var xScroll, yScroll;
		
		if (window.innerHeight && window.scrollMaxY) {	
			xScroll = window.innerWidth + window.scrollMaxX;
			yScroll = window.innerHeight + window.scrollMaxY;
		} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
			xScroll = document.body.scrollWidth;
			yScroll = document.body.scrollHeight;
		} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
			xScroll = document.body.offsetWidth;
			yScroll = document.body.offsetHeight;
		}
		
		var windowWidth, windowHeight;
		
		if (self.innerHeight) {	// all except Explorer
			if(document.documentElement.clientWidth){
				windowWidth = document.documentElement.clientWidth; 
			} else {
				windowWidth = self.innerWidth;
			}
			windowHeight = self.innerHeight;
		} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
			windowWidth = document.documentElement.clientWidth;
			windowHeight = document.documentElement.clientHeight;
		} else if (document.body) { // other Explorers
			windowWidth = document.body.clientWidth;
			windowHeight = document.body.clientHeight;
		}	
		
		// for small pages with total height less then height of the viewport
		if(yScroll < windowHeight){
			pageHeight = windowHeight;
		} else { 
			pageHeight = yScroll;
		}
	
		// for small pages with total width less then width of the viewport
		if(xScroll < windowWidth){	
			pageWidth = xScroll;		
		} else {
			pageWidth = windowWidth;
		}

		return [pageWidth,pageHeight];
    }

   /*********************************************************************
    * String Url Encode
    * 
    * used when user's input contains some german letters or similar        
    *     
    *********************************************************************/
    function strUrlEncode(txt) {
    
        var tmp = '';
        txt = txt.toArray();
        
        for (var j=0; j<txt.length; j++) {
            if (txt[j] == "%") {
                tmp += escape(txt[j]);
            } else {
                tmp += txt[j];
            } 
        }
        
        txt = tmp;

        var strForEncode = new Array("#","&","?");
        
        for (var i=0; i<strForEncode.length; i++) {
            while (txt.indexOf(strForEncode[i]) > -1)
                txt = txt.replace(strForEncode[i],escape(strForEncode[i]));
        }

        return txt;
    }

    function showHideFilter() {
        if (($F('search_type_filter') == 2) || ($F('search_type_filter') == 3)) {
            $('prefRelFilter').style.display = 'inline';
        } else {
            $('prefRelFilter').style.display = 'none';
        } 
    }
   
    
    function checkBrowser() {
        var ie55 = (navigator.appName == "Microsoft Internet Explorer" && parseInt(navigator.appVersion) == 4 && navigator.appVersion.indexOf("MSIE 5.5") != -1);
        var ie6 = (navigator.appName == "Microsoft Internet Explorer" && parseInt(navigator.appVersion) == 4 && navigator.appVersion.indexOf("MSIE 6.0") != -1);

        if (ie55 || ie6) {
            return true;
        } else {
            return false;
        }
    }
    
    if (typeof(Prototype) != 'undefined') {
        Prototype.Browser.IE6 = (Prototype.Browser.IE) && (parseInt(navigator.userAgent.substring(navigator.userAgent.indexOf("MSIE")+5)) == 6);
    }

    var win = null;
    function NewWindow (mypage,myname,w,h,scroll) {
        LeftPosition = (screen.width) ? (screen.width-w)/2 : 0;
        TopPosition = (screen.height) ? (screen.height-h)/2 : 0;
        settings = 'height='+h+',width='+w+',top='+TopPosition+',left='+LeftPosition+',scrollbars='+scroll+',resizable';
        win = window.open(mypage,myname,settings);
        if (win.window.focus) { 
            win.window.focus();
        }
    }

    function deleteProfileConfirmation(message) {
        
        var userResponse;
        
        userResponse = confirm(message);
        
        if (userResponse) {
            $('fieldConfirmDelete').value = true;
            return true;
        } else {
            $('fieldConfirmDelete').value = false;
            return false;
        }
    }
    
    newRegistration = true;
    
    function showHideRegistrationForm(showId, hideId) {
        $(showId).style.display = 'inline';
        $(hideId).style.display = 'none';
    }
    
    
    flagCheckWinningCode = true;
    winningCodeStore = new Array();

    contestMinimumAge = '';

   /**
    * Check Winning Code function
    *
    * Slavisa Miljanovic <slavisa.miljanovic@softserbia.com>
    * @param  input field (text), memberId, url - action
    * @return null - call function afterWinningCodeCheck
    */ 
    function checkWinningCode(object, userId, contestId, url, minimumAge, event)
    {
        var counter = 0;
        var data = new Array();

        var winningCode = new RegExp(/(^[0-9]{6})/);
        testWinningCode = winningCode.test(object.value);
        
        contestMinimumAge = minimumAge;

        // if entered winning code is ok try ajax code check
        if (testWinningCode && flagCheckWinningCode) {
            url += '/clients_contest/check_winning_code/memberId/' + userId;

            //$('salutation').value = '';
            //$('firstName').value = '';
            //$('lastName').value = '';

            var paramWinningCode = object.value;

            var params = '';
            params  = 'winningCode=' + paramWinningCode;
            params += '&contestId=' + contestId;
            
            flagCheckWinningCode = false;
            
            winningCodeStore.each(function(winningCode) {
                if (winningCode[0] == paramWinningCode) {
                    data = winningCode;
                    counter++;
                }
            });
            
            if (!counter) {
                counter = 0;
                var ajax = new Ajax.Request(url, {method: 'post', parameters: params, onSuccess: function(transport) { afterWinningCodeCheck(paramWinningCode, transport.responseText); }});
            } else {
                showContestForm(data);
                flagCheckWinningCode = true;
            }
        } else {
            $('divUserHasNoProfile').style.display = 'inline';
            $('divUserHasProfile').style.display = 'none';
        }
    }

   /**
    * After Winning Code Check function
    *
    * Slavisa Miljanovic <slavisa.miljanovic@softserbia.com>
    * @param  winningCode
    * @param  ajax response text - transport.reponseText
    * @return null - stores winning code and its params and calls showContestForm 
    */ 
    function afterWinningCodeCheck (winningCode, ajaxResponse)
    {
        flagCheckWinningCode = true;

        var divId = '';
        var userId = '';
        var email = '';
        var userAge = '';
        var insurance = '';
        var profileType = '';
        var funList = '';
        var carBrandModel = '';
        var wrongWinningCode = '';
        
        if ((ajaxResponse != '0') && (ajaxResponse != '')) {
            // user has number in db
            var regAjaxResponse = new RegExp(/###([0-9]*)###(.*?)###([0-9]*)###([0-9]*)###([0-9]*)###([0-9]*)###(.*?)###/);
            var ajaxResponseDataArray = regAjaxResponse.exec(ajaxResponse);

            divId         = 'divUserHasProfile';
            userId        = ajaxResponseDataArray[1];
            email         = ajaxResponseDataArray[2];
            userAge       = ajaxResponseDataArray[3];
            insurance     = ajaxResponseDataArray[4];
            profileType   = ajaxResponseDataArray[5];
            funList       = ajaxResponseDataArray[6];
            carBrandModel = ajaxResponseDataArray[7];
            
            // winning code is correct
            wrongWinningCode = 'N';
        } else if (ajaxResponse == '') {
            // winning code isn't correct
            wrongWinningCode = 'Y';
            divId = 'divUserHasNoProfile';
        } else {
            // user hasn't number in db
            divId = 'divUserHasNoProfile';
            
            // winning code is correct
            wrongWinningCode = 'N';
        }
        
        winningCodeStore[winningCodeStore.length] = new Array(winningCode, divId, userId, email, userAge, insurance, profileType, funList, carBrandModel, wrongWinningCode);
        
        var arrayId = winningCodeStore.length - 1;

        showContestForm(winningCodeStore[arrayId]);
    }

   /**
    * Show Contest Form function
    *
    * Slavisa Miljanovic <slavisa.miljanovic@softserbia.com>
    * @param  array
    * @return null - it shows/hides appropriate registration form 
    */ 
    function showContestForm(data)
    {
        $('divUserHasNoProfile').style.display = 'none';
        $('divUserHasProfile').style.display = 'none';

        if (data[1] == 'divUserHasProfile') {
            $('hasProfileEmail').innerHTML = '<b>' + data[3] + '</b>';

            var contestantAge = parseInt(data[4]);
            if ((parseInt(contestMinimumAge) > contestantAge) && (!isNaN(contestantAge))) {
                $('hasProfileAgeProtection').style.display = 'inline';
                $('hasProfileNoAgeProtectionSend').style.display = 'none';
            } else {
                $('hasProfileAgeProtection').style.display = 'none';
                $('hasProfileNoAgeProtectionSend').style.display = 'inline';
            }
        }
        
        /******** checks for add-on fields on left side of contest form *******/
        // field health insurance
        if ($('divHealthInsurance')) {
            var healthInsuranceId = parseInt(data[5]);
            if (isNaN(healthInsuranceId) || (healthInsuranceId == 0)) {
                $('divHealthInsurance').style.display = 'inline';
            } else {
                $('divHealthInsurance').style.display = 'none';
            }
        }
        
        // funlist checkbox
        if ($('divFunList')) {
            var funlistCheckboxId = parseInt(data[7]);
            if (isNaN(funlistCheckboxId) || (funlistCheckboxId == 0)) {
                $('divFunList').style.display = 'inline';
            } else {
                $('divFunList').style.display = 'none';
            }
        }

        // field car brand & model
        if ($('divMyCar')) {
            if (data[8] == '1') {
                // user has entered car brand and car model, hide these boxes
                $('divMyCar').style.display = 'none';
            } else {
                // user hasn't entered car brand and car model, or has entered one of these fields
                $('divMyCar').style.display = 'inline';

                if (data[8]) {
                    var myCar = new Array();
                    myCar = data[8].split('xxx');

                    var carBrand = myCar[0];
                    var carModel = myCar[1];
                
                    if (carBrand != 'na') {
                        $('myCarBrand').value = carBrand;
                    }
                
                    if (carModel != 'na') {
                        $('myCarModel').value = carModel;
                    }
                }
            }
        }
        /****************************** end ***********************************/

        $(data[1]).style.display = 'inline';
        
        if (data[9] == 'Y') {
            // if entered winning code isn't correct show balloon helper with error message
            showBalloonHelper('bhWinningCode', messages[7], messages[8], false);
        }
        
    }


   /**
    * Show Hide No Profile Form function
    *
    * Slavisa Miljanovic <slavisa.miljanovic@softserbia.com>
    * @param  showId
    * @param  hideId
    * @return null - it shows/hides appropriate registration form 
    */ 
    function showHideNoProfileForm(showId, hideId)
    {
        $(showId).style.display = 'inline';
        $(hideId).style.display = 'none';
    }


   /**
    * Ajax Apply for Contest function
    *
    * Slavisa Miljanovic <slavisa.miljanovic@softserbia.com>
    * @param  url
    * @return null - apply user for contest or register new user and apply him to contest 
    */ 
    function ajaxApplyForContest(url, memberId, insuranceVisibility, myCarVisibility)
    {
        url += '/clients_contest/tabs_contest/memberId/' + memberId + '/btnSend/true';
        
        var paramFieldContestForm = $F('fieldContestForm');
        var paramActivationPage = $F('activationPage');
        var paramPos = $F('pos');
        
        // var inputs = $$('input');
        var radios = new Array('contestAnswer');
        var frmContest = $('contestForm');
        
        // get radio button value (contest's question - answer)
        for (var i=0; i<radios.length; i++) {
            var radioButton = frmContest[radios[i]];
            if (radioButton) {
                for (var j=0; j<radioButton.length; j++) {
                    if (radioButton[j].checked) {
                        var paramContestAnswer = radioButton[j].value;
                        break;
                    }
                }
            } else {
                var paramContestAnswer = $F('contestAnswer');
                break;
            }
        }

        var paramWinningCode = $F('winningCode');
        
        var winningCodeData = new Array();
        winningCodeStore.each(function(winningCode) {
            if (winningCode[0] == paramWinningCode) {
                // userId from winningCodeData cache
                winningCodeData[winningCodeData.length] = winningCode[2];
                // email from winningCodeData cache
                winningCodeData[winningCodeData.length] = winningCode[3];
            }
        });
        
        // ajax post params
        var params = '';
        
        // contest form data
        params  = 'contestForm=' + strUrlEncode(paramFieldContestForm); 

        // pos form data
        params += '&activationPage=' + paramActivationPage; 
        params += '&pos=' + paramPos;
        
        if (winningCodeData[0] && winningCodeData[1]) {
            // user has a mobile number in db or was a member of other contests 
            params += '&profileExists=true';
            params += '&userId=' + winningCodeData[0];
            params += '&fieldEmail=' + winningCodeData[1];   
        } else {
            // user hasn't a mobile number in db or wasn't a contestant so far or entered wrong winning code
            var radios = new Array('profileExists');
            var frmProfileCheck = $('formProfileExists');
        
            // get radio button value
            for (var i=0; i<radios.length; i++) {
                var radioButton = frmProfileCheck[radios[i]];
                if (radioButton) {
                    for (var j=0; j<radioButton.length; j++) {
                        if (radioButton[j].checked) {
                            var profileCheck = radioButton[j].value;
                            break;
                        }
                    }
                } else {
                    var profileCheck = $F('profileExists');
                    break;
                }
            }

            if (profileCheck == 'no') {
                // new registration
                var paramProfileName = $F('profileName');
                var paramPassword = $F('fieldPassword');
                var paramSalutation = $F('salutation');
                var paramFirstName = $F('firstName');
                var paramLastName = $F('lastName');
                var paramEmail = $F('fieldEmail');
                var paramEmailRepetition = $F('fieldEmailRepetition');
                var paramPlz = $F('postalCode');
                var paramYear = $F('year');
                var paramMonth = $F('month');
                var paramDay = $F('day');

                var shortProfile = $F('short_profile');

                /*
                if ($('agb').checked) {
                    var paramAGB = 'Y';
                } else {
                    var paramAGB = '';
                } 
                */

                params += '&profileName=' + paramProfileName;
                params += '&fieldPassword=' + paramPassword;
                params += '&salutation=' + paramSalutation;
                params += '&firstName=' + paramFirstName;
                params += '&lastName=' + paramLastName;
                params += '&fieldEmail=' + paramEmail;
                params += '&fieldEmailRepetition=' + paramEmailRepetition;
                params += '&postalCode=' + paramPlz;
                params += '&year=' + paramYear;
                params += '&month=' + paramMonth;
                params += '&day=' + paramDay;

                params += '&short_profile=' + shortProfile;

                // params += '&agb=' + paramAGB;
            } else {
                params += '&profileExists=true';
                params += '&onlyFieldEmail=' + $F('onlyFieldEmail');
                params += '&userProfileAlreadyExists=true';
            }
        }
        
        params += '&contestAnswer=' + paramContestAnswer;
        params += '&winningCode=' + paramWinningCode;

        /**********************  health insurance field ***********************/ 
        var paramInsurance = '';
        if ((insuranceVisibility == 'Y') && ($('divHealthInsurance').style.display == 'inline')) {
            var paramInsurance = $F('insurance');
        }
        params += '&insurance=' + paramInsurance;
        /******************************* end **********************************/ 

        /**************************  funlist checkbox *************************/ 
        var funlistOptionVisible = $F('fieldFunlistOption');
        var paramFunlistOption = '';
        
        if (funlistOptionVisible == 'Y') {
            // funlist checkbox is visible, get value of checkbox: checked/unchecked
            paramFunlistOption = 'N';

            var checks = new Array('funlistOption');
            var frmContestForm = $('contestForm');
        
            // get check button value
            for (var i=0; i<checks.length; i++) {
                var checkButton = frmContestForm[checks[i]];
                if (checkButton.checked) {
                    paramFunlistOption = checkButton.value;
                    break;
                }
            }
        } else {
            // checkbox isn't visible, send default value for funlist
            paramFunlistOption = 'Y';
        }
        
        params += '&funlistOption=' + paramFunlistOption;
        /******************************* end **********************************/ 

        /********************  car brand & model fields ***********************/ 
        var paramCarBrand = '';
        var paramCarModel = '';

        if ((myCarVisibility == 'Y') && ($('divMyCar').style.display == 'inline')) {
            var paramCarBrand = $F('myCarBrand');
            var paramCarModel = $F('myCarModel');
        }
        params += '&myCarBrand=' + paramCarBrand;
        params += '&myCarModel=' + paramCarModel;
        /******************************* end **********************************/ 

        var ajax = new Ajax.Request(url, {method: 'post', parameters: params, onSuccess: function(transport) { updateAfterAjaxContestApply(transport.responseText); }});
    }

   /**
    * Update After Ajax Contest Apply function
    *
    * Slavisa Miljanovic <slavisa.miljanovic@softserbia.com>
    * @param  ajax response text - transport.reponseText
    * @return null - update contest tab according to ajax response 
    */ 
    function updateAfterAjaxContestApply(ajaxResponse)
    {
        // ajax submit of contest form - return html from server
        if (ajaxResponse != '') {
            $('div_tabs_content').innerHTML = ajaxResponse;

            var responseMatch = new Array('divUserHasNoProfile', 'divUserHasProfile');
            
            for (var i=0; i<responseMatch.length; i++) {
                if (!(ajaxResponse.match(responseMatch[i]))) {
                    // ajax response doesn't contain elements from responseMatch array, so empty JS cache array
                    winningCodeStore = new Array();
                }
            }
        }
        blockMultipleKeyPress = false;
    }

   /**
    * Check Pressed Key function
    *
    * Slavisa Miljanovic <slavisa.miljanovic@softserbia.com>
    * @param  html input element event
    * @return null - execute ajaxApplyForContest() function
    */ 
    function checkPressedKey(e, siteUrl, userId, insuraceVisibility, myCarVisibility)
    {
        if ((!blockMultipleKeyPress) && (e.keyCode == 13)) {
            blockMultipleKeyPress = true;
            ajaxApplyForContest(siteUrl, userId, insuraceVisibility, myCarVisibility);
        }
    }

    var oldFunctions = new Array();

   /**
    * Expand Key Press Tab Contest function
    *
    * Slavisa Miljanovic <slavisa.miljanovic@softserbia.com>
    * @param  siteUrl
    * @param  userId
    * @param  insuraceVisibility
    * @return null - expand key press event for elements from array
    */ 
    function expandKeyPressTabContest(siteUrl, userId, insuraceVisibility)
    {
        var inputs = $$('input');
        var elements = new Array('winningCode', 'postalCode', 'onlyFieldEmail');
        
        inputs.each(function(element){
            for (var i=0; i<elements.length; i++) {
                if (element.id.indexOf(elements[i]) > -1) {
                    if (!element.onkeypress) {
                        // case when onkeypress event is empty, only add new code
                        element.onkeypress = function(e) {
                            if (!e) {
                                checkPressedKey(event, siteUrl, userId, insuraceVisibility);
                            } else {
                                checkPressedKey(e, siteUrl, userId, insuraceVisibility);
                            }
                        }
                    } else {
                        // case when onkeypress event isn't empty, append new code
                        oldFunctions[element.id] = element.onkeypress; 
                        element.onkeypress = function(e) {
                            var func = oldFunctions[element.id];
                            str = new String(func);
                            str = str.substring(str.indexOf('{') + 1);
                            str = str.substring(0, str.length - 1);
                            eval(str);

                            if (!e) {
                                checkPressedKey(event, siteUrl, userId, insuraceVisibility);
                            } else {
                                checkPressedKey(e, siteUrl, userId, insuraceVisibility);
                            }
                        }
                    }
                }
            }
        });
    }

   /**
    * Ajax Submit on Enter 
    *
    * Slavisa Miljanovic <slavisa.miljanovic@softserbia.com>
    * @param  e         // input element event
    * @param  objectId  // input element button with appropriate submit function
    * @return null - execute ajaxApplyForContest() function
    */ 
    function ajaxSubmitOnEnter(e, objectId)
    {
        if ((!blockMultipleKeyPress) && (e.keyCode == 13)) {
            var object = $(objectId);
            var objectFunction = object.onclick;
            var str = new String(objectFunction);
            str = str.substring(str.indexOf('{') + 1);
            str = str.substring(0, str.length - 1);
            blockMultipleKeyPress = true;
            
            // execute onclick function from object with id: objectId
            eval(str);
        }
    }

    var photoId = new Array();
    var photoDescription = new Array();
    var photoDetailedDescription = new Array();
    var photoTypeWidth = new Array();
    var photoTypeHeight = new Array();
    var photoWidth = '';
    var photoHeight = '';
    var photoCategory = '';
    var photoType = '';

    /**
     * Fill Arrays With Data
     *
     * Slavisa Miljanovic <slavisa.miljanovic@softserbia.com>
     * @param  null
     * @return null
    */ 
    function fillArraysWithData()
    {
        if (photoId.length == 0) { 
            photoId = $F('fieldPhotoId').split('###');
            photoDescription = $F('fieldPhotoDescription').split('###');
            photoDetailedDescription = $F('fieldPhotoDetailedDescription').split('###');
            photoTypeWidth = $F('fieldPhotoTypeWidth').split('###');
            photoTypeHeight = $F('fieldPhotoTypeHeight').split('###');

            photoWidth = $F('fieldPhotoWidth');
            photoHeight = $F('fieldPhotoHeight');
            photoCategory = $F('fieldPhotoCategory');
            photoType = $F('fieldPhotoType');
        }
    }

    /**
     * Previous Photo 
     *
     * Slavisa Miljanovic <slavisa.miljanovic@softserbia.com>
     * @param  array data // input element event
     * @return image
    */ 
    function previousPhoto(url, controller, action, memberId)
    {
        fillArraysWithData();
        
        // current photo
        var photoCounter = $('photoCounter').innerHTML;
        // decrement because first element of an array has 0 as key
        photoCounter--;
        
        if (photoId[photoCounter - 1]) {
            photoCounter--;
        } else {
            photoCounter = photoId.length - 1;
        } 
        showPhoto(url, controller, action, memberId, photoCounter);
    }

    /**
     * Next Photo 
     *
     * Slavisa Miljanovic <slavisa.miljanovic@softserbia.com>
     * @param  array data // input element event
     * @return image
    */ 
    function nextPhoto(url, controller, action, memberId)
    {
        fillArraysWithData();
        
        // current photo
        var photoCounter = $('photoCounter').innerHTML;
        // decrement because first element of an array has 0 as key
        photoCounter--;
        
        if (photoId[photoCounter + 1]) {
            photoCounter++;
        } else {
            photoCounter = 0;
        } 
        showPhoto(url, controller, action, memberId, photoCounter);
    }

    /**
     * Next Photo 
     *
     * Slavisa Miljanovic <slavisa.miljanovic@softserbia.com>
     * @param  array data // input element event
     * @return image
    */ 
    function showPhoto(url, controller, action, memberId, counter)
    {
        url += '/' + controller + '/' + action + '/memberId/' + memberId;
        
        var params = '';
        params  = 'photoId=' + photoId[counter];
        params += '&description=' + strUrlEncode(photoDescription[counter]);
        params += '&detailedDescription=' + strUrlEncode(photoDetailedDescription[counter]);
        params += '&typeWidth=' + photoTypeWidth[counter];
        params += '&typeHeight=' + photoTypeHeight[counter];
        params += '&width=' + photoWidth;  
        params += '&height=' + photoHeight;  
        params += '&category=' + photoCategory;  
        params += '&type=' + photoType;

        ajax_overlay.show();
        var ajax = new Ajax.Updater({success: 'contestPhoto'}, url,{method: 'post', parameters: params, onComplete: function() {updateAfterImageShow(url, controller, action, memberId, counter);}});
    }

    /**
     * Update After Image Show 
     *
     * Slavisa Miljanovic <slavisa.miljanovic@softserbia.com>
     * @param  array data // input element event
     * @return image
    */ 
    function updateAfterImageShow(url, controller, action, memberId, counter)
    {
        $('photoCounter').innerHTML = counter + 1;
        
        var activeTabParams = '';
        activeTabParams = jsonTabs['3']['tabs_contest'];

        var afterLoading = '';
        afterLoading = activeTabParams['afterLoading'];

        if ((typeof(afterLoading) != 'undefined') && (afterLoading.length > 0)) {
            ajaxOverlayShown = true;
            for (var i=0; i<afterLoading.length; i++) {
                if ((i+1) != afterLoading.length) {
                    jsonTabs[afterLoading[i]['tabPanelId']][afterLoading[i]['name']]['ajaxOverlayHide'] = false;
                } else {
                    jsonTabs[afterLoading[i]['tabPanelId']][afterLoading[i]['name']]['ajaxOverlayHide'] = true;
                }
                loadTabContent(afterLoading[i]['tabPanelId'], afterLoading[i]['name'], '/from/' + activeTabParams['name']);
            }
        } else {
            if ((activeTabParams['ajaxOverlayHide']) || (typeof(activeTabParams['ajaxOverlayHide']) == 'undefined')) {
                ajax_overlay.hide();
                resizeAjaxLoader();
                ajaxOverlayShown = false;
            }
            if (typeof(activeTabParams['ajaxOverlayHide']) != 'undefined') {
                delete activeTabParams['ajaxOverlayHide'];
            } 
        }

        $('previousPhoto').disabled = false;
        $('nextPhoto').disabled = false;
    }

    /**
     * Get window screen size (whitout scroll parts of page)
     *
     * Ivana Djordjevic <ivana.djordjevic@softserbia.com>
     * @return [windowWidth, windowHeight]
    */ 
    function windowScreenSize() {
        
        var myWidth = 0, myHeight = 0;
        
        if( typeof( window.innerWidth ) == 'number' ) {
            //Non-IE
            myWidth = window.innerWidth;
            myHeight = window.innerHeight;
        } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
            //IE 6+ in 'standards compliant mode'
            myWidth = document.documentElement.clientWidth;
            myHeight = document.documentElement.clientHeight;
        } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
            //IE 4 compatible
            myWidth = document.body.clientWidth;
            myHeight = document.body.clientHeight;
        }
        return(new Array(myWidth, myHeight));
    }

    /**
     * object: Javascript common library 
     *
     * This object contains functions that can be used on any project
     *
     * notice: prototype javascript framework needed          
     *
     * @author Slavisa Miljanovic <slavisa.miljanovic@softserbia.com>
     * @param  void
     * @return void
    */
    var jsCommonLib = {

        /**
         * function: Get form params
         * 
         * It takes values for all form elements and makes post/get params variable used
         * for ajax request
         * 
         * @author Slavisa Miljanovic <slavisa.miljanovic@softserbia.com>
         * @param  string $formId
         * @return string
        */
        getFormParams: function(formId) {
            var params = '?1=1';

            var elements = $(formId).elements;

            for (var i=0; i<elements.length; i++) {
                switch (elements[i].type) {
                    case 'radio':
                    case 'checkbox':
                        if (elements[i].checked) {
                            params += '&' + elements[i].name + '=' + elements[i].value;
                        }
                        break;

                    case 'select-one':
                        for (var k=0; k<elements[i].options.length; k++) {
                            if (elements[i].options[k].selected) {
                                params += '&' + elements[i].name + '=' + elements[i].options[k].value;
                            }
                        }
                        break;

                    case 'text':
                    case 'hidden':
                        params += '&' + elements[i].name + '=' + this.stringUrlEncode(elements[i].value);
                        break;
                }
            }

            return params;
        },

        /**
         * function: String url encode  
         * 
         * It url encodes text string
         * 
         * @author Slavisa Miljanovic <slavisa.miljanovic@softserbia.com>
         * @param  string $textString
         * @return string
        */
        stringUrlEncode: function(textString) {
            var tmp = '';
            textString = textString.toArray();

            for (var j=0; j<textString.length; j++) {
                if (textString[j] == "%") {
                    tmp += escape(textString[j]);
                } else {
                    tmp += textString[j];
                }
            }

            textString = tmp;

            var strForEncode = new Array("#","&","?");

            for (var i=0; i<strForEncode.length; i++) {
                while (textString.indexOf(strForEncode[i]) > -1)
                    textString = textString.replace(strForEncode[i],escape(strForEncode[i]));
            }

            return textString;
        },


        /**
         * function: Add onload event  
         * 
         * It adds function to body onload event
         * 
         * @author Slavisa Miljanovic <slavisa.miljanovic@softserbia.com>
         * @param  object $func
         * @return null
        */
        addLoadEvent: function(func) {
            var oldOnload = window.onload;
            if (typeof window.onload != 'function') {
                window.onload = func;
            } else {
                window.onload = function() {
                    if (oldOnload) {
                        oldOnload();
                    }
                    func();
                };
            }
        },


        /**
         * function: Search check into an array
         * 
         * Checks if given string is element of an array
         *
         * @author Sasa Simic <sasa.simic@softserbia.com>
         * @param  string  $check
         * @param  array   $arr
         * @return boolean
        */
        inArray: function(check, arr) {
            for(a in arr) {
                if (arr[a] == check) {
                    return true;
                }
            }
            return false;
        }

    }

