if (typeof(MEDIA_URL) != 'string') var MEDIA_URL = '/';

var myApp = { 
    listener :{},
    components :{ 
        roundcorners:{ 
            url:MEDIA_URL + 'scripts/form-field-tool-tip/js/rounded-corners.js', 
            loaded:false,
            iscss:false
        }, 
        fftooltip:{ 
            url:MEDIA_URL + 'scripts/form-field-tool-tip/js/form-field-tooltip.js', 
            loaded:false,
            iscss:false 
        }, 
        fftooltip_css:{ 
            url:MEDIA_URL + 'scripts/form-field-tool-tip/css/form-field-tooltip.css', 
            loaded:false,
            iscss:true
        },
        tinymce:{ 
            url:'/site_media/scripts/tinymce-3.0.8/tiny_mce.js', // MEDIA_URL + 'scripts/tinymce-3.0.8/tiny_mce.js
            loaded:false,
            iscss:false
        },
        fckeditor:{ 
            url:'/site_media/scripts/fckeditor-2.6/fckeditor.js',    // MEDIA_URL + 'scripts/fckeditor-2.6/fckeditor.js
            loaded:false,
            iscss:false
        },
        lightwindow:{ 
            url:MEDIA_URL + 'scripts/lightwindow-2.0/javascript/lightwindow.js', // MEDIA_URL + 'scripts/lightwindow-2.0/javascript/lightwindow.js
            loaded:false,
            iscss:false
        },
        lightwindow_css:{ 
            url:MEDIA_URL + 'scripts/lightwindow-2.0/css/lightwindow.css',   // MEDIA_URL + 'scripts/lightwindow-2.0/css/lightwindow.css
            loaded:false,
            iscss:true
        },
        prototip:{ 
            url:MEDIA_URL + 'scripts/prototip2.0.4/js/prototip.js',
            loaded:false,
            iscss:false
        },
        prototip_css:{ 
            url:MEDIA_URL + 'scripts/prototip2.0.4/css/prototip.css',
            loaded:false,
            iscss:true
        },
        tabmenuscript:{ 
            url:MEDIA_URL + 'scripts/tabmenuscript.js',
            loaded:false,
            iscss:false
        },
        validation:{ // http://tetlaw.id.au/view/javascript/really-easy-field-validation
            url:MEDIA_URL + 'scripts/validation-1.5.4.1.js',
            loaded:false,
            iscss:false
        }
    },
    addComponent:function(component){ 
        var c = this.components[component]; 
        if(c && c.loaded === false){
            if(c.iscss){
                //alert('loading css: '+c.url);
                var l = document.createElement('link'); 
                l.setAttribute('type', 'text/css');
                l.setAttribute('rel', 'stylesheet');
                l.setAttribute('href',c.url);
                l.setAttribute('media',"screen");
                document.getElementsByTagName('head')[0].appendChild(l);
            }else{
                //alert('loading js: '+c.url);
                var s = document.createElement('script'); 
                s.setAttribute('type', 'text/javascript'); 
                s.setAttribute('src',c.url); 
                document.getElementsByTagName('head')[0].appendChild(s);
            }
        } 
    },
    componentAvailable:function(component){ 
        this.components[component].loaded = true;
        if (this.listener[component]) {
            this.listener[component]();
        }
    } 
};

// Usage::  myApp.addComponent('fftooltip');      // Use this to load the myApp file as needed
//         To ensure the component is loaded and ready for use, it is recommended that the following line is added to the end of the file
//         Add this -->    myApp.componentAvailable('fftooltip');
//         Then you can do this:
//             if(!myApp.components.gallery.loaded){ 
//                 myApp.addComponent('fftooltip'); 
//             };
// reference: http://24ways.org/2007/keeping-javascript-dependencies-at-bay

function show_form_error(field_id, err_msg) {
    if ($('error_explanation').innerHTML.length == 0) {
        $('error_explanation').insert('<h2>Problem</h2><p>There were problems with the following fields:</p>');
        $('error_explanation').insert('<ul id="error_explanation_ul"></ul>').show();
    }
    $('error_explanation_ul').insert('<li>'+err_msg+'</li>');
    $(field_id).addClassName('error');
};

function show_page_status(msg,delay_sec) {
    $('page_status').innerHTML = '<div>' + msg + '</div>';
    if (typeof(delay_sec)!='number') delay_sec=4;
    Effect.Appear('page_status', {delay:0, duration: 1.0});
    Effect.Fade('page_status', {delay:delay_sec, duration: 1.0});
};

function jumpMenu(targ,selObj,restore) {
    eval(targ+".location='"+selObj.options[selObj.selectedIndex].value+"'");
    if (restore) selObj.selectedIndex=0;
};

function submit_form(form) {
    $( form ).submit();
}

function cacheBuster(){
        var cacheBuster=parseInt(Math.random()*99999999); // cache buster
        return cacheBuster;
};

function vote_thumb(content, id, updown) {
    show_page_status('<img src="'+MEDIA_URL+'img/icons/indicator.gif"> Updating vote!',1);
    new Ajax.Request(
        '/like/'+content+'/'+id+'/'+updown+'vote/',
        {
            method:'get'
            ,onSuccess: function(transport){
                if (transport.responseText || "none" != 'none')
                    var data = eval('(' + transport.responseText + ')');
                    $( 'vote_score_'+content+'_'+id ).innerHTML = 'Score ' + data.score.score;
                    if (updown == 'up') {
                        $( 'vote_up_'+content+'_'+id ).className = 'votedUp';
                        $( 'vote_down_'+content+'_'+id ).className = 'voteDown';
                    };
                    if (updown == 'down') {
                        $( 'vote_up_'+content+'_'+id ).className = 'voteUp';
                        $( 'vote_down_'+content+'_'+id ).className = 'votedDown';
                    };
            }
            //,onFailure: function(){ alert('Something went wrong...') }
        }
    );
};

function tipUserProfile(user_slug) {
    //var url = '/ajax/user/'+user_slug+'/getProfile/';
    //var pars = '';  // 'foo=bar';
    //var target = 'tip_content';
    //var myAjax = new Ajax.Updater(target, url, {method: 'get', parameters: pars});
    //content = document.getElementById('tip_content').innerHTML
    content = 'Show extended user profile information for <b>' + user_slug + '</b> here<br/><br/>'
    content += '<img class="icon" src="'+MEDIA_URL+'img/icons/user_add.png"> Add as a Friend<br/>'
    content += '<img class="icon" src="'+MEDIA_URL+'img/icons/user_comment.png"> Send Private Msg<br/>'
    return Tip(content,
        ABOVE, true,
        BGCOLOR, '#fff',
        CLOSEBTN, true,
        BORDERCOLOR, '#ccc',
        DELAY, 1000,
        DURATION, -4000,
        FADEIN, 150,
        FADEOUT, 150,
        STICKY, true,
        WIDTH, 200
    )
};

/*********************************************************************
 * No onMouseOut event if the mouse pointer hovers a child element 
 * *** Please do not remove this header. ***
 * This code is working on my IE7, IE6, FireFox, Opera and Safari
 * 
 * Usage: 
 * <div onMouseOut="fixOnMouseOut(this, event, 'JavaScript Code');"> 
 *		So many childs 
 *	</div>
 *
 * @Author Hamid Alipour Codehead @ webmaster-forums.code-head.com		
**/
function is_child_of(parent, child) {
    if( child != null ) {			
        while( child.parentNode ) {
            if( (child = child.parentNode) == parent ) {
                return true;
            }
        }
    }
    return false;
}
function fixOnMouseOut(element, event, JavaScript_code) {
    var current_mouse_target = null;
    if( event.toElement ) {				
        current_mouse_target 			 = event.toElement;
    } else if( event.relatedTarget ) {				
        current_mouse_target 			 = event.relatedTarget;
    }
    if( !is_child_of(element, current_mouse_target) && element != current_mouse_target ) {
        eval(JavaScript_code);
    }
}
/*********************************************************************/

String.prototype.trim = function() {
	return this.replace(/^\s+|\s+$/g,"");
}
String.prototype.ltrim = function() {
	return this.replace(/^\s+/,"");
}
String.prototype.rtrim = function() {
	return this.replace(/\s+$/,"");
}
/* example of using trim, ltrim, and rtrim
var myString = " hello my name is ";
alert("*"+myString.trim()+"*");
alert("*"+myString.ltrim()+"*");
alert("*"+myString.rtrim()+"*");
*/
