

/*  PrototypeWrap, version 1.2
 *  Collection of wrappers for Prototype JavaScript framework, version 1.6.0
 *  (c) 2007 Mac McCahey
 *
 *  Floogy web site: http://floogy.com/
 *  Prototype web site: http://www.prototypejs.org/
 *
/*--------------------------------------------------------------------------*/

/*
Wrapper for Ajax.Request. Triggers handler function) if 
responseText is blank or begins with '>>>' else dies while 
alerting any other output (std or custom errors)
*/
function AjaxRequest (url, params, handle) {
	new Ajax.Request (
		url,
		{
			method: 'post',
			parameters: params,
			evalScripts: true,
			onSuccess: function(r) { __AjaxHandle (r, handle); },
			onFailure: function(r) { alert ('Server-side failure. Please try again.'); },
			onException: function(r, eo) { alert ('Client-side failure. Please try again. '+r+' --- '+eo); },
			on404: function(r) { alert ('Page not found. Report to webmaster.'); }
		}
	);
	return false;
}

/*
Wrapper for Ajax.Request suitable for form submission. Triggers
handler function if responseText is blank or begins with '>>>'
else dies while alerting any other output (std or custom errors)
*/
function AjaxSubmit (frm, handle) {
	frm = $(frm); // http://dev.rubyonrails.org/ticket/8525
	new Ajax.Request (
		frm.action, 
		{
			method: frm.method,
			parameters: frm.serialize(true),
			evalScripts: true,
			onSuccess: function(r) { __AjaxHandle (r, handle); },
			onFailure: function(r) { alert ('Server-side failure. Please try again.'); },
			onException: function(r, eo) { alert ('Client-side failure. Please try again. '+r+' --- '+eo); },
			on404: function(r) { alert ('Page not found. Report to webmaster.'); }
		}
	);
	return false;
}

/*
r is for response
*/
function __AjaxHandle (r, handle) {
	var delimiter = '>>>';
	var delimiterPos = null;
	//alert (r.responseText); // good debug alert
	delimiterPos = r.responseText.indexOf(delimiter);
	if (r.responseText == null || r.responseText.strip().length==0) { // success: blank response (null for Safari, zero length for FireFox)
		eval(handle)('');
	} else if (delimiterPos>=0) { // success: delimiter exists
		eval(handle)(r.responseText.substr((delimiterPos+delimiter.length), r.responseText.length)); // send response after delimiter to handler
	} else {
		alert (r.responseText.stripTags().strip()); // error: non-blank response and delimiter does not exist
	}
}


function initRotator(no) {
	$$('.home-rotator-content').each(function(el){
		el.hide();
	});
	$('home-rotator-'+no).show();
	$$('.home-rotator-no').each(function(el){
		el.removeClassName('active');
	});
	$('home-rotator-no-'+no).addClassName('active');
	return false;
}

/* 
Extras
*/

function redirect(dest) {
	window.location.href = dest;
	return false;
}
/*
Event.observe( window, 'load', function() { 
	$$('#iblixCategoryMenu ul li').each(function(el) {
		el.observe( 'mouseover', function() { 
			el.addClassName('hover');
		});
		el.observe( 'mouseout', function() { 
			el.removeClassName('hover');
		});
	});
});
*/

function onSearchEnterKey(event) {
	if (Event.KEY_RETURN == event.keyCode) {
		runSearch();
	}
	return;
}

Event.observe( window, 'load', function() { 
	Event.observe('searchText', 'keypress', onSearchEnterKey);
	$$('a.msglnk').each(function(el) {
		el.innerHTML = el.innerHTML+'@'+window.location.hostname.replace(/www\./g, '');
		el.href = 'mailto:'+el.innerHTML;
	});
});

function runSearch() {
        // lower-case
        term = $('searchText').value.toLowerCase();
        // normalize space
        term = term.replace(/^\s*|\s(?=\s)|\s*$/g, "");
        // alphanumericise
        term = term.replace(/\W/g, '-');
        // trim
        term = term.replace(/^-+|-+$/, '');
        // todo: run checks here
        window.location.href = '/search'+($('searchCategory').value>=1? '/cat'+$('searchCategory').value: '')+'/'+term;
		return false;
}

function isFormEmpty (f) {
	for (i=0;i<f.elements.length;i++) if (f.elements[i].value.length > 0) return false;
	return true;
}

function urlencode (str) {
    str = (str + '').toString();
    // Tilde should be allowed unescaped in future versions of PHP (as reflected below), but if you want to reflect current
    // PHP behavior, you would need to add ".replace(/~/g, '%7E');" to the following.
    return encodeURIComponent(str).replace(/!/g, '%21').replace(/'/g, '%27').replace(/\(/g, '%28').
    replace(/\)/g, '%29').replace(/\*/g, '%2A').replace(/%20/g, '+');
}

function stripslashes (str) {
    return (str + '').replace(/\\(.?)/g, function (s, n1) {
        switch (n1) {
        case '\\':
            return '\\';
        case '0':
            return '\u0000';
        case '':
            return '';
        default:
            return n1;
        }
    });
}

function sortCategories () {
	new Ajax.Request ('/myadmin/.category-sort.php', {
		method : 'post',
		parameters : Sortable.serialize('categoryMenu'),
		onSuccess : disableSorting,
		onFailure: function (r) { alert ('Server-side failure. Please try again.'); },
		onException: function (r) { alert ('Client-side failure. Please try again.'); },
		on404: function (r) { alert ('Page not found. Report to webmaster.'); }
	});
}

function enableSorting () {
	new Ajax.Updater ('FetchCategoryMenu', '/pop/.categoryMenu.php?sortable=true', {
		onComplete: function() {
			Sortable.create('categoryMenu', { onUpdate: sortCategories });
		}
	});
}

function disableSorting () {
	new Ajax.Updater ('categoryMenu', '/pop/.categoryMenu.php');
}


var maxPix = 166;
var maxScroll = 332;
var scrollByPix = 10;
var time=1;
 
function scrollElementRight(elemID, scrolledBy){
        var elem = document.getElementById(elemID);
        var scroll = true;
        if((elem.scrollLeft + scrollByPix) > maxScroll){
                elem.scrollLeft = maxScroll;
                scroll=false;
        }else{
                elem.scrollLeft += scrollByPix;
        }
        scrolledBy = scrolledBy + scrollByPix;
        if(scroll && scrolledBy <= maxPix){
                timeoutID = setTimeout('scrollElementRight("' + elemID + '",' + scrolledBy + ')',time);
        }
}
 
function scrollElementLeft(elemID, scrolledBy){
        var elem = document.getElementById(elemID);
        var scroll = true;
        if(elem.scrollLeft >= scrollByPix){
                elem.scrollLeft -= scrollByPix;
        }else{
                elem.scrollLeft = 0;
                scroll = false;
        }
        scrolledBy = scrolledBy + scrollByPix;
        if(scroll && scrolledBy <= maxPix){
                        timeoutID = setTimeout('scrollElementLeft("' + elemID + '",' + scrolledBy + ')',time);
        }
}

function setSelectValue(selectID, Value) {
  SelectObject = $(selectID);
  for(index = 0; 
    index < SelectObject.length; 
    index++) {
   if(SelectObject[index].value == Value)
     SelectObject.selectedIndex = index;
   }
}
