﻿// JavaScript Document

function gup( name )
{
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec(window.location.href );
  if( results == null )
    return "";
  else
    return results[1];
}


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+$/,"");
}

/*String.prototype.format = function()

{

    var str = this;

    for(var i=0;i<arguments.length;i++)
    {

        var re = new RegExp('\\{' + (i) + '\\}','gm');

        str = str.replace(re, arguments[i]);

    }

    return str;

}*/

if(!String.prototype.format)
	String.prototype.format = function(){
		var param = arguments.length === 1 && typeof(arguments[0]) == "object" ? arguments[0] : arguments;
		var i = 0, result = "";
		for(var s; (s = this.indexOf("{", i)) !== -1;){
			result += this.slice(i, s);
			if(this[s+1] === "{"){
				i = s + 2;
				result += "{";
				continue;
			}
			var i = this.indexOf("}", s + 1);
			if(i === -1)
				throw "incorrect format: {0}".format(this);
			result += param[this.slice(s + 1, i)];
			i++;
		}
		return result + this.slice(i);
	}
	
if(!String.format)
	String.format = function(str){
		return String.prototype.format.apply(str, Array.prototype.slice.call(arguments, 1));
	}
	
/*  EventManager used in conjuncition with jQuery
    Allows you to hook up events and fire those events
*/	
var EV_AJAX_SEND="ajaxSend";
var EV_AJAX_COMPLETE="ajaxComplete";


var eventManager = function( selector )
{
	 this.eventManagerClass = function( selector ){
		 var me = this;
		 this.evid = 1;
		 
		 me.selector = selector;
		 
		 this.fire = function( eventName, data )
		 {
			 if ( typeof data != "undefined" && data != null ) {
				 $( me.selector ).data( eventName, data );
			 }
			 $( me.selector ).trigger( eventName );	 
			 
		 }
		 
		 this.getEventData = function ( eventName ) 
		 {
			 return $( me.selector ).data( eventName );
		 }
		 
		 this.attach = function( eventName, callback )
		 {
			 if ( eventName.length > 0 )
				 $( me.selector ).bind( eventName, callback )	    
		 }	
		 
		 this.getNewEventId = function()
		 {
		    return "ev"+me.evid++;
		 }
	 }
	 
	 return new this.eventManagerClass( selector );
	 
}();	

var HIDE_TIME = 2000;	
var debug = true;
	
function _dbg( msg )
{ 
   if ( debug )
      alert( msg );
}

function showMsg( selector, msg, flag, timeout )
{
   if ( typeof flag == "undefined" || flag == null )
      flag = true;
      
   if ( flag ) {
      $(selector).html( msg ).show();
      if ( typeof timeout != "undefined" )
         $(selector).fadeOut( timeout );
   }
   else
      $(selector).hide();
}

function jsonPost( msg, url, data, callback ) {
     showProcessMsg( msg, true );
     $.post(url, data, callback, "json");
}	

function showProcessMsg( msg, flag )
{
   showMsg( ".processMsg", msg, flag );   
}

function showErrorMsg( msg, flag )
{
   showProcessMsg( "", false );
   showMsg( ".errorMsg", msg, flag, HIDE_TIME );
}

function showSuccessMsg( msg, flag )
{
   showProcessMsg( "", false );
   showMsg( ".successMsg", msg, flag, HIDE_TIME );
}

function myAjaxComplete()
{
   showProcessMsg( null, false );
}

function myAjaxError(XMLHttpRequest, textStatus, errorThrown)
{
   if ( textStatus )
      showErrorMsg( textStatus, true );
   if ( errorThrown )
      showErrorMsg( errorThrown, true );
}

function processErrors( data )
{
    if ( data.errorCode != 0 ){
       showErrorMsg( data.message );
       return true;
    }
    return false;
}

function setupAjax()
{
   var options = 
   {
       error : myAjaxError,
       complete : myAjaxComplete
   }	
   
   jQuery.ajaxSetup( options );   		
   
}

function OnReady() {
	var me = this;
	
	this.callOnReady = [];
	
	this.add = function( f ) {
		me.callOnReady.push( f );
	}
	
	this.ready = function() {
	  var f;
	  for ( f = 0; f < me.callOnReady.length; f++ ) {
		 me.callOnReady[f] && typeof me.callOnReady[f] === "function" && me.callOnReady[f]();
  	  }
	}
}
	
var $onready = function ()
{
   return new OnReady();
}();

/*  Call this function to prevent the viewstate information from being posted when posting a form
*/
$.fn.serializeNoViewState = function()
{
    return this.find("input,textarea,select,hidden")
               .not("[type=hidden][name^=__]")
               .serialize();    
}

$.ID = function( element )
{
	var id;
	if ( typeof element == "string" )
	   id = element;
	else
      id = element.attr("id");
	var pos = id.indexOf( "_" );
	if ( pos == -1 )
	   return element;		
   id = id.substr( pos + 1 );
	return id;
}

$().ready( 
   	
   function() {
	
	    $onready.ready();
		  
        setupAjax();
		  
});  // main function


