var ActionHandlers = {
	
	contentLoaded : function (content) {
		var html = content[0];
		var js = content[1];
		document.getElementById ('content').innerHTML = html;
		eval (js);
	}
	
};

function elementHasClass (element, className) {
    var re = new RegExp ('(?:^|\\s+)' + className + '(?:\\s+|$)');
    return re.test (element.className);
}


var Delegate = function (thisObject, method) {
	if (typeof method == 'function') {
		return function() {
			method.apply (thisObject, arguments);
		}
	} else {
    	return function() {
	        thisObject[method].apply (thisObject, arguments);
    	}	
	}
}

isObjectEmpty = function (object) {
	for (var i in object) return false;
	return true;
}

//todo - get it out of here
var Tabs = {
	open : function (tab, event) {
		tab = event.target || event.srcElement;
		var tabParent = tab.parentNode;
		for (var i = 0; i < tabParent.childNodes.length; i++) {
			var node = tabParent.childNodes[i];
			if (node.nodeType == 1) {
				node.className = node == tab ? 'DialogTabCurrent' : '';
			}
		}
		Tabs.doOpenTab (document.getElementById (tab.id.replace ("_button", "_tab")));
	},
	doOpenTab : function (tabContentElement) {
		var tabContentParent = tabContentElement.parentNode;
		for (var i = 0; i < tabContentParent.childNodes.length; i++) {
			var node = tabContentParent.childNodes[i];
			if (node.nodeType == 1) {
				node.style.display = node == tabContentElement ? 'block' : 'none';
			}
		}
	}
}

String.prototype.trim = function() { return this.replace( /^\s+|\s+$/, "" );}

removeCSSClass = function (elem, className) {
	elem.className = elem.className.replace (className, "").trim();
} 

addCSSClass = function (elem, className) {
	this.removeCSSClass (elem, className);
	elem.className = (elem.className + " " + className).trim();
}

focusFirstInput = function (parent) {
	if (typeof parent == 'string') parent = document.getElementById (parent);
	var inputs = parent.getElementsByTagName ('INPUT');
	for (var i = 0; i < inputs.length; i++) {
		var i = inputs[i];
		if ((!i.disabled) && (i.type == 'text' || i.type == 'password' || i.type == 'radio' || i.type == 'checkbox' || i.type == 'file')) {
			i.focus();
			return;
		}
	}
}

function DarkenPage()
{
    var page_screen = document.getElementById('page_screen');
    page_screen.style.height = document.body.parentNode.scrollHeight + 'px';
    page_screen.style.display = 'block';
}

function LightenPage()
{
    var page_screen = document.getElementById('page_screen');
    page_screen.style.display = 'none';
}

function showIntroScreen() {
    var is = document.getElementById('intro_screen');    
    if (!is) return false;    
    
    w = 400;
    h = 300;
        
    xc = Math.round((document.body.clientWidth/2)-(w/2))
    yc = parseInt(document.body.parentNode.scrollTop + (screen.height /2)) - (h);
    is.style.left = xc + "px";
    is.style.top  = yc + "px";
    
    // get the x and y coordinates to center the intro screen panel
    //xc = Math.round((document.body.clientWidth/2)-(w/2))
    //yc = Math.round((document.body.clientHeight/2)-(h/2))    
    // show the intro screen panel
    //is.style.left = xc + "px";
    //is.style.top  = yc + "px";
    
    DarkenPage(); 
    
    is.style.display = 'block';
}

function hideIntroScreen() {
    LightenPage();

    var is = document.getElementById('intro_screen');    
    if (!is) return false;
    
    is.style.display = 'none';   
}

function readGlobalFontSize(){    
    pa_cfs = ReadCookie("bbfontsize");
    return (pa_cfs) ? pa_cfs : 11;
}

function decFontSize(){
    var globalFontSize;
    if (!globalFontSize) globalFontSize = readGlobalFontSize();
    globalFontSize--;
    setFontSize(globalFontSize);
}

function incFontSize(){
    var globalFontSize;
    if (!globalFontSize) globalFontSize = readGlobalFontSize();
    globalFontSize++;
    setFontSize(globalFontSize);
}

function defFontSize(){    
    setFontSize(11);
    SetCookie("bbfontsize",'', -10000);
}

function setFontSize(size){
    if(typeof $ == 'undefined') return false;
    
    if (size > 16) size = 16;
    if (size < 9) size = 9;
    
    var globalFontSize = size; 
    
    var id = 'resize_box'; //class name
        
    $('.resize_box').css('font-size', size+'px');
    $('.resize_box *').css('font-size', size+'px');
        
    SetCookie("bbfontsize",globalFontSize, true); 
}

function baseDomainString()
{
  e = document.domain.split(/\./);
  
  if ( e.length > 1 ) 
  {
    return( "" + e[e.length-2] + "." +  e[e.length-1]) + ";"  ;
  }
  else
  {
    return("");
  }
}

function SetCookie( name, value, expires ) 
{
    var today = new Date();
    today.setTime( today.getTime() );

    var domain = baseDomainString();
    var path = '/';
    var secure = 0;
    
    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 : "" ) + 
    ( ( domain ) ? ";domain=." + domain : "" ) +
    ( ( secure ) ? ";secure" : "" );
}

function ReadCookie( 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 popupImage(href, href1) {
    w = 900;
    h = 800;
    wleft = (screen.availWidth -50 - w) / 2;
    wtop = (screen.availHeight -100 - h) / 2;    

    /*    
    var in_tab = false;
    if (!e) {
        var e = window.event;
    }
    */
    
    var popup = window.open(href+'&popup=1','','status=1,scrollbars=1,width='+w+',height='+h+',resizable=1,screenX='+wleft+',screenY='+wtop);
    if (popup==null || typeof(popup)=="undefined") {
        window.location = href1;
    }
}

function showSendToFriend() {
    stf = document.getElementById('sendto'); 
    if (!stf) return false;    
    h = parseInt(document.body.parentNode.scrollTop + (screen.height /2)) - 600;
    stf.style.top = h+'px';
    stf.style.display = 'block';
}

function sendToFriendSubmit(){
    form = document.getElementById('sendto_form'); 
    
    if (form.elements['friend_email'].value.length ==0 || form.elements['friend_email'].value.trim().length == 0) {
        alert('Please, enter your friend`s email address.'); 
        return false;
    }
    if (form.elements['email'].value.length ==0 || form.elements['email'].value.trim().length == 0) {
        alert('Please, enter your email address.'); 
        return false;
    }
    /*    
    if (form.elements['name'].value.length ==0 || form.elements['name'].value.trim().length == 0) {
        alert('Please, enter your name.'); 
        return false;
    }
    */
    
    var data = {   uri : location.href, 
            id : form.elements['id'].value, 
            title : form.elements['title'].value, 
            email_content : form.elements['email_content'].value,
            friend_email : form.elements['friend_email'].value,
            /*friend_name : form.elements['friend_name'].value,*/
            email : form.elements['email'].value,
            name : form.elements['name'].value
        };
    
    form.elements['send'].disabled = true;
        
    if (form.elements['m'].value == 1) {
    (new Articles_ActionHandler).sendToFriend( data,
        function(result) {
            form.elements['send'].disabled = false;
            if (result === true) {
                form = document.getElementById('sendto_form');
                form.elements['friend_email'].value = '';
                document.getElementById('sendto').style.display = 'none';
                alert('Email was sent.');
            } else {
                alert(result);
            }  
        }
    );
    } else if (form.elements['m'].value == 2) {
    (new Reviews_ActionHandler).sendToFriend( data,
        function(result) {
            form.elements['send'].disabled = false;
            if (result === true) {
                form = document.getElementById('sendto_form');
                form.elements['friend_email'].value = '';
                document.getElementById('sendto').style.display = 'none';
                alert('Email was sent.');
            } else {
                alert(result);
            }  
        }
    );    
    } else {
    (new Phone_ActionHandler).sendToFriend( data,        
        function(result) {
            form.elements['send'].disabled = false;
            if (result === true) {
                form = document.getElementById('sendto_form');
                form.elements['friend_email'].value = '';
                document.getElementById('sendto').style.display = 'none';
                alert('Email was sent.');
            } else {
                alert(result);
            }  
        }
    );    
    }
}

function showSubscribeForm() {
    stf = document.getElementById('subscribe'); 
    if (!stf) return false;    
    h = parseInt(document.body.parentNode.scrollTop + (screen.height /2)) - 400;
    stf.style.top = h+'px';
    stf.style.display = 'block';
}

function subscribeSubmit(){

    var form = document.getElementById('subscribe_form');    
    var module = form.elements['module'].value;
    
    if (form.elements['email'].value.length ==0 || form.elements['email'].value.trim().length == 0) {
        alert('Please, enter your email address.'); 
        return false;
    }    
    
    var data = $('#subscribe_form').formSerialize();
    
    form.elements['send'].disabled = true;
        
    if (module == 'articles') {
    (new Articles_ActionHandler).subscribe( data,
        function(result) {
            form.elements['send'].disabled = false;
            if (result === true) {
                document.getElementById('subscribe').style.display = 'none';
                alert('Subscription was succesfull. Please, check your email for confirmation instructions.');
            } else if (result === 1) {
                document.getElementById('subscribe').style.display = 'none';
                alert('Subscription was succesfull.');
            } else {
                alert(result);
            }  
        }
    );
    } else if (module == 'reviews') {
    (new Reviews_ActionHandler).subscribe( data,
        function(result) {
            form.elements['send'].disabled = false;
            if (result === true) {
                document.getElementById('subscribe').style.display = 'none';
                alert('Subscription was succesfull. Please, check your email for confirmation instructions.');
            } else if (result === 1) {
                document.getElementById('subscribe').style.display = 'none';
                alert('Subscription was succesfull.');
            } else {
                alert(result);
            }  
        }
    );    
    } else if (module == 'phones'){
    
    (new Phone_ActionHandler).subscribe( data,        
        function(result) {
            form.elements['send'].disabled = false;
            if (result === true) {
                document.getElementById('subscribe').style.display = 'none';
                alert('Subscription was succesfull. Please, check your email for confirmation instructions.');
            } else if (result === 1) {
                document.getElementById('subscribe').style.display = 'none';
                alert('Subscription was succesfull.');
            } else {
                alert(result);
            }
        }
    );    
    } else if (module == 'manufacturers'){    
    (new Manufacturers_ActionHandler).subscribe( data,        
        function(result) {
            form.elements['send'].disabled = false;
            if (result === true) {
                document.getElementById('subscribe').style.display = 'none';
                alert('Subscription was succesfull. Please, check your email for confirmation instructions.');
            } else if (result === 1) {
                document.getElementById('subscribe').style.display = 'none';
                alert('Subscription was succesfull.');
            } else {
                alert(result);
            }
        }
    );    
    } else if (module == 'providers'){
    (new Providers_ActionHandler).subscribe( data,        
        function(result) {
            form.elements['send'].disabled = false;
            if (result === true) {
                document.getElementById('subscribe').style.display = 'none';
                alert('Subscription was succesfull. Please, check your email for confirmation instructions.');
            } else if (result === 1) {
                document.getElementById('subscribe').style.display = 'none';
                alert('Subscription was succesfull.');
            } else {
                alert(result);
            }
        }
    );    
    }
}

var globalFontSize = -1;