﻿// ilk üç parametreden sonrası method parametreleridir
function runModuleMethod(moduleName, moduleId, methodName, params, callback)
{
    new Ajax.Request('RunModuleMethod.ashx?name='+moduleName+'&id='+moduleId+'&methodName='+methodName, {
        method: 'post',
        parameters: params,
        onComplete: function(req) {
            if(req.responseText.startsWith('ERR:')){alert(req.responseText); return;}
            if(callback) callback(moduleId, req, params);
        }
    });
}

// dil olayı
var langRes = {};

function lang(code){
    var str = langRes ? langRes[code] : null;
    if(str==null)
        return '? ' + code;
    return str;
}

// opacity'si düşerekten sayfanın ortasında div gösterme olayı
function showElementWithOverlay(elm, autoHide){
    elm = $(elm);
    elm.hide();
    
    var perde = $('___perde');
    if(!perde){
        //var dim = $(document.body).getDimensions();
        new Insertion.Top(document.body, '<div id="___perde" style="display:none;position: absolute;top: 0;left: 0;z-index: 90;width:3000px;height:3000px;background-color: #000;"'+(autoHide?' onclick="hideOverlay()"':'')+'></div>');
        perde = $('___perde');
    }

    $(document.body).setStyle({overflow:'hidden'});
    new Effect.Appear(perde, { duration: .2, from: 0.0, to: 0.8, afterFinish:function(){
                                                                        elm.setStyle({
                                                                            position:'absolute',
                                                                            zIndex:100
                                                                        });
                                                                        elm.show();
                                                                    } });
}
function hideOverlay(){
    new Effect.Appear('___perde', { duration: .2, from: 0.8, to: 0.0, afterFinish:function(){
            $('___perde').hide();
            $(document.body).setStyle({overflow:'auto'});
        } });
}

// on body click find visible editors and hide if not the click is within
Event.observe(window, 'load', function(){
    Event.observe(document.body,'mousedown', function(event){
        $$('.hideOnOut').each(function(editor){
            if(!Position.within(editor, Event.pointerX(event),Event.pointerY(event))){
                if(editor.id=='smMenu' && editor.visible())
                    popupMenu.onHide();
                editor.hide();
            }
        });
});});

/*
#############################
#    Special for Modules    #
#############################
*/

function navigationPopupInit(id, horizontal){
    Event.observe(window, 'load', function(){
        $$('#'+id+' div').each(function(elm){
            var conId = elm.readAttribute('conId');
            if(!conId || conId<2) return;
            elm.observe('mouseover', function(event){
                var divPopupMenuItems = $(id).down('div.popupMenuItems');
                divPopupMenuItems.hide();
                var div = Event.findElement(event, 'div');
                var pos = div.cumulativeOffset();
                var conId = elm.readAttribute('conId');
                var visibleItemCount = 0;
                $$('#'+id+' div.popupMenuItem').each(function(elm){
                    if(elm.catId==conId){
                        elm.show();
                        visibleItemCount++;
                    }
                    else
                        elm.hide();
                });
                if(horizontal)
                    divPopupMenuItems.setStyle({left:pos.left, top:pos.top+div.getHeight()});
                else
                    divPopupMenuItems.setStyle({left:pos.left+div.getWidth(), top:pos.top});
                if(visibleItemCount)
                    divPopupMenuItems.show();
            });
        });
    });
}

function showTabPage(id, index){
    var i = 0;
    var elm = $('TabPage_'+id+'_'+i);
    while(elm){
        if(elm.id.endsWith(index.toString())) {
            elm.show();
            $('tabButtons'+id).childNodes[index].className = 'tabBtnActive';
        } else {
            elm.hide();
            $('tabButtons'+id).childNodes[i].className = 'tabBtnPassive';
        }
        i++;
        elm = $('TabPage_'+id+'_'+i);
    }
}

function showManset(event, id){
    var elm = Event.element(event);
    if(elm.className=='pic' || elm.tagName=='A')
    {
        var clItem = $(elm).up('.clItem');
        
        var sTitle = clItem.down('.clSTitle');
        var title = clItem.down('.clTitle');
        var desc = clItem.down('.clDesc');
        var auth = clItem.down('.clAuthor');
        var date = clItem.down('.clDate');
        var picUrl = clItem.down('.picUrl');
        
        var sTitlePlace = $('Manset_'+id+'_sTitle');
        var titlePlace = $('Manset_'+id+'_title');
        var descPlace = $('Manset_'+id+'_desc');
        var authPlace = $('Manset_'+id+'_auth');
        var datePlace = $('Manset_'+id+'_date');
        var picPlace = $('Manset_'+id+'_pic');
        
        if(sTitlePlace && sTitle) sTitlePlace.innerHTML = sTitle.innerHTML;
        if(titlePlace && title) titlePlace.innerHTML = title.innerHTML;
        if(descPlace && desc) descPlace.innerHTML = desc.innerHTML;
        if(authPlace && auth) authPlace.innerHTML = auth.innerHTML;
        if(datePlace && date) datePlace.innerHTML = date.innerHTML;
        if(picPlace && picUrl) picPlace.src = picUrl.innerHTML;
    }
}

/*
###################################
#            Utility              #
###################################
*/

function isEmpty(obj){
        return obj==null || obj==undefined || obj=='';
}
var smAjaxCache = {};
function ajax(options){
    // cache..
    if(!options.noCache && smAjaxCache[options.url])
        return smAjaxCache[options.url];

    var res = null;
    new Ajax.Request(options.url, {
        method: 'get',
        asynchronous: false,
        onComplete: function(req) {
            if(req.responseText.startsWith('ERR:')){alert(req.responseText); return;}
            res = options.isJSON ? eval('('+req.responseText+')') : req.responseText;
            if(!options.noCache) smAjaxCache[options.url] = res;
        },
        onException: function(req, ex){throw ex;}
    });
    return res;
}

/*
##########################################
#            EXTENSIONS                  #
##########################################
*/
Object.extend(String.prototype, {
    startsWith: function(str){
        return this.substr(0, str.length) == str;
    },
    endsWith: function(str){
        return this.substr(this.length-str.length) == str;
    },
    htmlEncode: function(){
        var enc = escape(this);
        enc = enc.replace(/\//g,"%2F");
        enc = enc.replace(/\?/g,"%3F");
        enc = enc.replace(/=/g,"%3D");
        enc = enc.replace(/&/g,"%26");
        enc = enc.replace(/@/g,"%40");
        return enc;
    }
});
document.getWidth = function(){ return $(document.body).getDimensions().width; }
document.getHeight = function(){ return $(document.body).getDimensions().height; }

// for scrolling elemnts in overflowed elements, thanks to robmadole, http://dev.rubyonrails.org/ticket/8208
Scroll = Class.create(); 
Scroll = 
{ 
    to: function(element) 
    { 
        element = $(element); 
 
         var elementOverflow = element; 
         var valueT = 0, valueL = 0; 
  
         do 
         { 
             if (!elementOverflow.parentNode) { break; } 
  
             valueT += elementOverflow.cumulativeOffset().top  || 0; 
             valueL += elementOverflow.cumulativeOffset().left || 0; 
  
             if (elementOverflow.parentNode.getHeight() < elementOverflow.parentNode.scrollHeight) 
             { 
                 elementOverflow.parentNode.scrollTop  = valueT; 
                 elementOverflow.parentNode.scrollLeft = valueL; 
  
                 Element.scrollTo(elementOverflow); 
  
                 return; 
             } 
  
             elementOverflow = elementOverflow.parentNode; 
         } while (true); 
  
         var pos = Position.cumulativeOffset(element); 
         window.scrollTo(pos[0], pos[1]); 
         return element; 
     } 
 }; 

////////////////////////////
//
//   cookie get/set/delete
//
////////////////////////////

function setCookie(name, value, expires, path) // expires as days
{
	var today = new Date();
	today.setTime(today.getTime());

	if(expires)
		expires = expires * 1000 * 60 * 60 * 24;
	var expires_date = new Date( today.getTime() + (expires) );

	document.cookie = name + "=" +escape(value) + (expires ? ";expires=" + expires_date.toGMTString() : "") + (path ? ";path=" + path : "");
}
function getCookie(name)
{
	var start = document.cookie.indexOf(name + "=");
	var len = start + name.length + 1;
	if(!start && name != document.cookie.substring(0, name.length))
		return null;

	if (start == -1) return null;
	
	var end = document.cookie.indexOf( ";", len );
	if(end == -1) end = document.cookie.length;
	
	return unescape(document.cookie.substring(len, end));
}
function delCookie(name, path, domain)
{
	if(getCookie(name))
		document.cookie = name + "=" + (path ? ";path=" + path : "") + (domain ? ";domain=" + domain : "") + ";expires=Thu, 01-Jan-1970 00:00:01 GMT";
}


/*
# Insert a tab at the current text position in a textarea
# Jan Dittmer, jdittmer@ppp0.net, 2005-05-28
# Inspired by http://www.forum4designers.com/archive22-2004-9-127735.html
*/
function insertTab(event,obj) {
    var tabKeyCode = 9;
    if (event.which) // mozilla
        var keycode = event.which;
    else // ie
        var keycode = event.keyCode;
    if (keycode == tabKeyCode) {
        if (event.type == "keydown") {
            if (obj.setSelectionRange) {
                // mozilla
                var s = obj.selectionStart;
                var e = obj.selectionEnd;
                obj.value = obj.value.substring(0, s) + 
                    "\t" + obj.value.substr(e);
                obj.setSelectionRange(s + 1, s + 1);
                obj.focus();
            } else if (obj.createTextRange) {
                // ie
                document.selection.createRange().text="\t"
                obj.onblur = function() { this.focus(); this.onblur = null; };
            } else {
                // unsupported browsers
            }
        }
        if (event.returnValue) // ie ?
            event.returnValue = false;
        if (event.preventDefault) // dom
            event.preventDefault();
        return false; // should work in all browsers
    }
    return true;
}