/*
 * javascript functions extentions
 * author : Tomas Jakstas
 */

Array.prototype.inArray = function(value) {
    for ( var i in this ) {
        if ( this[i] == value ){
            return i;
        }
    }
    return false;
}
Array.prototype.removeValue = function(value) {
    for ( var i in this ) {
        if ( this[i] == value ){
            this.splice(i,1);
            return true;
        }
    }
    return false;
}
String.prototype.append = function(value, glue) {
    var str = value;
    if ( this.length > 0 ) {
        str = this.toString()+glue+value;
    }
    return str;
}
String.prototype.strip_html = function strip_tags ( allowed) {

    allowed = (((allowed || "") + "")
        .toLowerCase()
        .match(/<[a-z][a-z0-9]*>/g) || [])
    .join(''); // making sure the allowed arg is a string containing only tags in lowercase (<a><b><c>)
    var tags = /<\/?([a-z][a-z0-9]*)\b[^>]*>/gi,
    commentsAndPhpTags = /<!--[\s\S]*?-->|<\?(?:php)?[\s\S]*?\?>/gi;
    return this.replace(commentsAndPhpTags, '').replace(tags, function($0, $1){
        return allowed.indexOf('<' + $1.toLowerCase() + '>') > -1 ? $0 : '';
    });
}

function basename (path, suffix) {
    var b = path.replace(/^.*[\/\\]/g, '');

    if (typeof(suffix) == 'string' && b.substr(b.length-suffix.length) == suffix) {
        b = b.substr(0, b.length-suffix.length);
    }

    return b;
}

function file_ext ( filename ) {
    var end = filename.length;
    var start = filename.lastIndexOf('.');
    if ( start != -1)
        start+=1;
    else
        return false;
    return filename.substr(start, end);

}

//hadle ajax errors
function ajax_error( msg ){
    alert(msg.strip_html());
}

function dynamic_load(filename){
    var filetype = file_ext(filename);
    if (filetype=="js"){ //if filename is a external JavaScript file
        var fileref=document.createElement('script')
        fileref.setAttribute("type","text/javascript")
        fileref.setAttribute("src", filename)
    }
    else if (filetype=="css"){ //if filename is an external CSS file
        var fileref=document.createElement("link")
        fileref.setAttribute("rel", "stylesheet")
        fileref.setAttribute("type", "text/css")
        fileref.setAttribute("href", filename)
    }
    if (typeof fileref!="undefined")
        document.getElementsByTagName("head")[0].appendChild(fileref)
}


$.fn.extend( {
    load_page : function ( options ) {

        var defaults = {
            replace_elements: '#page',
            reload_files : ['/scripts/main.js'],
            loaded_pages : [],
            limit: 5
        };
        var settings = $.extend(defaults, options);

        $(this).each( function() {

            var page = '';
            $.get( $(this).attr('href'), function( data ) {
                page = '<div>'+data+'</div>';
            } ) ;

            //            settings.loaded_pages[$(this).attr('href')] = 1;

            $(this).click( function() {

                $(settings.replace_elements).each( function() {
                    var id = this.id;
                    $('#'+id).html( $(page).find('#'+id) );
                })

                $('title').text( $(page).find('title').text() );


                $.each( settings.reload_files, function( key, file ) {
                    dynamic_load(file);
                })

                return false;
            })

        })

    }
} );

/**
 * bind submit event on the form
 *
 */

$.fn.extend( {
    ajax_form : function ( options ) {

        var defaults = {
            after_post : {}
        };

        var settings = $.extend(defaults, options);

        $(this).each( function() {
            $(this).unbind('submit').bind('submit', function() {
                var data = $(this).serialize();
                var sub = $(this).find('[type=submit]');
                var form = $(this);
                sub.val('Updating');
                $.post( $(this).attr('action'), data, function ( json ) {
                    sub.val('Saved');
                    
                    for ( var key in json ){
                        if( json[key] ) {
                            var input = $(form).find('[name='+key+']');
                            if( input.length > 0) {
                                input.val(json[key]);
                            }
                        }
                    }

                    if ( typeof settings.after_post == 'function'){
                        settings.after_post( form, json);
                    }

                }, 'json')
                return false;
            })
        });
    }
});


/**
 * bind click event on element to delete record using post method
 */
$.fn.extend( {
    ajax_delete : function ( options ) {

        var defaults = {
            callback : {}
        };

        var settings = $.extend(defaults, options);

        $(this).each( function() {
            
            $(this).unbind('click').bind( 'click', function( e ) {
                var current = this;
                var res = confirm('Delete this item ?');
                if ( res ) {
                    var rel = $(this).attr('rel');
                    var table = get_id(rel, 0);
                    var id = get_id(rel);

                    if ( id ) {
                        $.post(url_del, {
                            table:table,
                            id: id
                        });
                    }

                    if( typeof settings.callback == 'function' ){
                        settings.callback(current);
                    }

                    var element = $(this).parent();
                    //its a table row ?
                    if ( element.is('td') )
                        element = element.parent();
                    element.remove();
                }
                return false;
            });

        });
    }
});

/**
 * open the link in a dialog box
 */
$.fn.extend( {
    ajax_dialog : function ( options ) {

        var defaults = {
            container_id : 'ajax-dialog',
            container_title : '',
            request_end : {}
        };

        var settings = $.extend(defaults, options);

        $(this).each( function() {
            
            $(this).unbind('click').bind( 'click', function( e ) {
                var current = this;
                var cont_id = '#'+settings.container_id;
                var cont_name = settings.container_id;
                //append default container
                if( $(cont_id).length == 0)
                    $('body').append('<div id="'+cont_name+'" class="hidden" title="'+settings.container_title+'"></div>');
                //load image data
                $(cont_id).load($(this).attr('href'), function() {
                    //submit form and close dialog
                    $(cont_id+' form').submit( function(){
                        var form = this;
                        $.post( $(this).attr('action'), $(this).serialize(), function( data ){
                            if( data.hasOwnProperty('error') ) {
                                ajax_error(data.error);
                            }
                            if( typeof settings.request_end == 'function' ){
                                settings.request_end(current, form);
                            }
                        }, 'json');
                        $(cont_id).dialog('close');
                        return false;
                    })
                    init();
                });

                $(cont_id).dialog({
                    autoOpen: false,
                    width: 750
                });
                $(cont_id).dialog('open');

                return false;
            });
        });
    }
});
